Skip to content

Commit 1f4b51f

Browse files
authored
ELE-3961: Support test_ids filtering (#1787)
* support test_ids filtering * . * adjust * ut * lint * types * . * wip * fix type * mypy * . * mypy again * mypy * mypy * mypy * defaults
1 parent cbdd9a9 commit 1f4b51f

File tree

2 files changed

+40
-18
lines changed

2 files changed

+40
-18
lines changed

elementary/monitor/api/alerts/alert_filters.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from typing import List, Optional
22

33
from elementary.monitor.data_monitoring.schema import (
4+
FilterFields,
45
FiltersSchema,
56
ResourceType,
67
Status,
@@ -51,6 +52,10 @@ def apply_filters_schema_on_alert(
5152
owners = alert.data.unified_owners or []
5253
status = Status(alert.data.status)
5354
resource_type = ResourceType(alert.data.resource_type)
55+
if hasattr(alert.data, "test_unique_id"):
56+
test_ids = [alert.data.test_unique_id] if alert.data.test_unique_id else []
57+
else:
58+
test_ids = []
5459

5560
alert_node_name = _get_alert_node_name(alert)
5661
node_names = (
@@ -60,12 +65,15 @@ def apply_filters_schema_on_alert(
6065
)
6166

6267
return filters_schema.apply(
63-
tags=tags,
64-
models=models,
65-
owners=owners,
66-
statuses=[status],
67-
resource_types=[resource_type],
68-
node_names=node_names,
68+
FilterFields(
69+
tags=tags,
70+
models=models,
71+
owners=owners,
72+
statuses=[status],
73+
resource_types=[resource_type],
74+
node_names=node_names,
75+
test_ids=test_ids,
76+
)
6977
)
7078

7179

elementary/monitor/data_monitoring/schema.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ class FilterType(str, Enum):
3434
CONTAINS = "contains"
3535

3636

37+
class FilterFields(BaseModel):
38+
tags: List[str] = []
39+
models: List[str] = []
40+
owners: List[str] = []
41+
statuses: List[str] = []
42+
resource_types: List[ResourceType] = []
43+
node_names: List[str] = []
44+
test_ids: List[str] = []
45+
46+
@property
47+
def normalized_status(self) -> List[Status]:
48+
return [Status(status) for status in self.statuses if status in list(Status)]
49+
50+
3751
def apply_filter(filter_type: FilterType, value: Any, filter_value: Any) -> bool:
3852
if filter_type == FilterType.IS:
3953
return value == filter_value
@@ -113,6 +127,7 @@ class FiltersSchema(BaseModel):
113127
models: List[FilterSchema] = Field(default_factory=list)
114128
statuses: List[StatusFilterSchema] = Field(default=_get_default_statuses_filter())
115129
resource_types: List[ResourceTypeFilterSchema] = Field(default_factory=list)
130+
test_ids: List[FilterSchema[str]] = Field(default_factory=list)
116131

117132
@validator("invocation_time", pre=True)
118133
def format_invocation_time(cls, invocation_time) -> Optional[str]:
@@ -249,41 +264,40 @@ def to_selector_filter_schema(self) -> "SelectorFilterSchema":
249264

250265
def apply(
251266
self,
252-
tags: List[str],
253-
models: List[str],
254-
owners: List[str],
255-
statuses: List[Status],
256-
resource_types: List[ResourceType],
257-
node_names: List[str],
267+
filter_fields: FilterFields,
258268
) -> bool:
259269
return (
260270
all(
261-
filter_schema.apply_filter_on_values(tags)
271+
filter_schema.apply_filter_on_values(filter_fields.tags)
262272
for filter_schema in self.tags
263273
)
264274
and all(
265-
filter_schema.apply_filter_on_values(models)
275+
filter_schema.apply_filter_on_values(filter_fields.models)
266276
for filter_schema in self.models
267277
)
268278
and all(
269-
filter_schema.apply_filter_on_values(owners)
279+
filter_schema.apply_filter_on_values(filter_fields.owners)
270280
for filter_schema in self.owners
271281
)
272282
and all(
273-
filter_schema.apply_filter_on_values(statuses)
283+
filter_schema.apply_filter_on_values(filter_fields.normalized_status)
274284
for filter_schema in self.statuses
275285
)
276286
and all(
277-
filter_schema.apply_filter_on_values(resource_types)
287+
filter_schema.apply_filter_on_values(filter_fields.resource_types)
278288
for filter_schema in self.resource_types
279289
)
280290
and (
281291
FilterSchema(
282292
values=self.node_names, type=FilterType.IS
283-
).apply_filter_on_values(node_names)
293+
).apply_filter_on_values(filter_fields.node_names)
284294
if self.node_names
285295
else True
286296
)
297+
and all(
298+
filter_schema.apply_filter_on_values(filter_fields.test_ids)
299+
for filter_schema in self.test_ids
300+
)
287301
)
288302

289303

0 commit comments

Comments
 (0)