Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions backend/kernelCI_app/helpers/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,10 @@ def __init__(self, data: Dict, process_body=False) -> None:
self.filter_boot_origin: set[str] = set()
self.filter_test_origin: set[str] = set()

self.filter_build_lab: set[str] = set()
self.filter_boot_lab: set[str] = set()
self.filter_test_lab: set[str] = set()

self.filter_handlers: FilterHandlers = {
"boot.status": self._handle_boot_status,
"boot.duration": self._handle_boot_duration,
Expand All @@ -378,6 +382,9 @@ def __init__(self, data: Dict, process_body=False) -> None:
"build.origin": self._handle_build_origin,
"boot.origin": self._handle_boot_origin,
"test.origin": self._handle_test_origin,
"build.lab": self._handle_build_lab,
"boot.lab": self._handle_boot_lab,
"test.lab": self._handle_test_lab,
}

self.filters: List[FilterParams.ParsedFilter] = []
Expand Down Expand Up @@ -486,6 +493,15 @@ def _handle_boot_origin(self, current_filter: ParsedFilter) -> None:
def _handle_test_origin(self, current_filter: ParsedFilter) -> None:
self.filter_test_origin.add(current_filter["value"])

def _handle_build_lab(self, current_filter: ParsedFilter) -> None:
self.filter_build_lab.add(current_filter["value"])

def _handle_boot_lab(self, current_filter: ParsedFilter) -> None:
self.filter_boot_lab.add(current_filter["value"])

def _handle_test_lab(self, current_filter: ParsedFilter) -> None:
self.filter_test_lab.add(current_filter["value"])

def _process_filters(self):
try:
for current_filter in self.filters:
Expand Down Expand Up @@ -603,6 +619,7 @@ def is_build_filtered_out(
issue_version: Optional[int],
incident_test_id: Optional[str],
build_origin: Optional[str] = None,
build_lab: Optional[str] = None,
) -> bool:
return (
(
Expand Down Expand Up @@ -637,6 +654,10 @@ def is_build_filtered_out(
build_status=build_status,
)
)
or (
len(self.filter_build_lab) > 0
and (build_lab not in self.filter_build_lab)
)
)

def is_record_filtered_out(
Expand Down Expand Up @@ -694,6 +715,7 @@ def is_boot_filtered_out(
incident_test_id: Optional[str] = "incident_test_id",
platform: Optional[str] = None,
origin: Optional[str] = None,
lab: Optional[str] = None,
) -> bool:
if (
(self.filterBootPath != "" and (self.filterBootPath not in path))
Expand Down Expand Up @@ -729,6 +751,7 @@ def is_boot_filtered_out(
len(self.filter_boot_origin) > 0
and (origin not in self.filter_boot_origin)
)
or (len(self.filter_boot_lab) > 0 and (lab not in self.filter_boot_lab))
):
return True

Expand All @@ -745,6 +768,7 @@ def is_test_filtered_out(
incident_test_id: Optional[str] = "incident_test_id",
platform: Optional[str] = None,
origin: Optional[str] = None,
lab: Optional[str] = None,
) -> bool:
if (
(self.filterTestPath != "" and (self.filterTestPath not in path))
Expand Down Expand Up @@ -780,6 +804,7 @@ def is_test_filtered_out(
len(self.filter_test_origin) > 0
and (origin not in self.filter_test_origin)
)
or (len(self.filter_test_lab) > 0 and (lab not in self.filter_test_lab))
):
return True

Expand Down
8 changes: 7 additions & 1 deletion backend/kernelCI_app/helpers/hardwareDetails.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ def generate_build_summary_typed() -> BuildSummary:
configs={},
issues=[],
unknown_issues=0,
labs={},
)


Expand All @@ -239,6 +240,7 @@ def generate_test_summary_typed() -> TestSummary:
unknown_issues=0,
fail_reasons={},
failed_platforms=set(),
labs={},
)


Expand Down Expand Up @@ -298,7 +300,11 @@ def handle_test_history(
environment_misc=EnvironmentMisc(platform=record["test_platform"]),
tree_name=record["build__checkout__tree_name"],
git_repository_branch=record["build__checkout__git_repository_branch"],
lab=record_misc.get("runtime") if record_misc else None,
lab=(
record_misc.get("runtime", UNKNOWN_STRING)
if record_misc
else UNKNOWN_STRING
),
)

task.append(test_history_item)
Expand Down
37 changes: 33 additions & 4 deletions backend/kernelCI_app/helpers/treeDetails.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,9 @@ def get_current_row_data(current_row: dict) -> dict:
)
current_row_data["test_platform"] = environment_misc.get("platform")
test_misc = sanitize_dict(current_row_data["test_misc"])
test_runtime_lab = test_misc.get("runtime") if test_misc is not None else None
test_runtime_lab = UNKNOWN_STRING
if test_misc is not None:
test_runtime_lab = test_misc.get("runtime", UNKNOWN_STRING)

if current_row_data["test_status"] is None:
current_row_data["test_status"] = NULL_STATUS
Expand Down Expand Up @@ -286,6 +288,9 @@ def decide_if_is_build_filtered_out(instance, row_data):
build_duration = row_data["build_duration"]
incident_test_id = row_data["incident_test_id"]
build_origin = row_data["build_origin"]
build_lab = UNKNOWN_STRING
if row_data.get("build_misc") is not None:
build_lab = row_data["build_misc"].get("lab", UNKNOWN_STRING)

is_build_filtered_out = instance.filters.is_build_filtered_out(
build_status=build_status,
Expand All @@ -294,6 +299,7 @@ def decide_if_is_build_filtered_out(instance, row_data):
issue_version=issue_version,
incident_test_id=incident_test_id,
build_origin=build_origin,
build_lab=build_lab,
)
return is_build_filtered_out

Expand All @@ -306,6 +312,7 @@ def decide_if_is_boot_filtered_out(instance, row_data):
test_path = row_data["test_path"]
incident_test_id = row_data["incident_test_id"]
origin = row_data["test_origin"]
lab = row_data["history_item"].get("lab", UNKNOWN_STRING)

return instance.filters.is_boot_filtered_out(
duration=test_duration,
Expand All @@ -315,6 +322,7 @@ def decide_if_is_boot_filtered_out(instance, row_data):
status=test_status,
incident_test_id=incident_test_id,
origin=origin,
lab=lab,
)


Expand All @@ -337,6 +345,7 @@ def decide_if_is_test_filtered_out(instance, row_data):
test_path = row_data["test_path"]
incident_test_id = row_data["incident_test_id"]
origin = row_data["test_origin"]
lab = row_data["history_item"].get("lab", UNKNOWN_STRING)

return instance.filters.is_test_filtered_out(
duration=test_duration,
Expand All @@ -346,6 +355,7 @@ def decide_if_is_test_filtered_out(instance, row_data):
status=test_status,
incident_test_id=incident_test_id,
origin=origin,
lab=lab,
)


Expand All @@ -371,6 +381,8 @@ def process_test_summary(instance, row_data):
test_platform = row_data["test_platform"]
test_error = row_data["test_error"]
test_environment_compatible = row_data["test_environment_compatible"]
test_origin = row_data["test_origin"]
test_lab = row_data["history_item"].get("lab", UNKNOWN_STRING)

instance.testStatusSummary[test_status] = (
instance.testStatusSummary.get(test_status, 0) + 1
Expand Down Expand Up @@ -402,20 +414,27 @@ def process_test_summary(instance, row_data):
instance.testEnvironmentMisc[test_platform][test_status] += 1

increment_test_origin_summary(
test_origin=row_data["test_origin"],
test_origin=test_origin,
test_status=test_status,
origin_summary=instance.test_summary["origins"],
)

if instance.test_summary_typed.labs.get(test_lab) is None:
instance.test_summary_typed.labs[test_lab] = StatusCount()
instance.test_summary_typed.labs[test_lab].increment(test_status)

def process_boots_summary(instance, row_data):

# TODO: use types instead of all dicts, receive specific fields instead of entire row_data
def process_boots_summary(instance, row_data: dict[str, Any]) -> None:
test_status = row_data["test_status"]
build_config = row_data["build_config_name"]
build_arch = row_data["build_architecture"]
build_compiler = row_data["build_compiler"]
test_platform = row_data["test_platform"]
test_error = row_data["test_error"]
test_environment_compatible = row_data["test_environment_compatible"]
test_origin = row_data["test_origin"]
test_lab = row_data["history_item"].get("lab", UNKNOWN_STRING)

instance.bootStatusSummary[test_status] = (
instance.bootStatusSummary.get(test_status, 0) + 1
Expand Down Expand Up @@ -447,11 +466,15 @@ def process_boots_summary(instance, row_data):
instance.bootEnvironmentMisc[test_platform][test_status] += 1

increment_test_origin_summary(
test_origin=row_data["test_origin"],
test_origin=test_origin,
test_status=test_status,
origin_summary=instance.boot_summary["origins"],
)

if instance.boot_summary_typed.labs.get(test_lab) is None:
instance.boot_summary_typed.labs[test_lab] = StatusCount()
instance.boot_summary_typed.labs[test_lab].increment(test_status)


def process_filters(instance, row_data: dict) -> None:
issue_id = row_data["issue_id"]
Expand All @@ -464,6 +487,8 @@ def process_filters(instance, row_data: dict) -> None:
instance.global_architectures.add(row_data["build_architecture"])
instance.global_compilers.add(row_data["build_compiler"])
instance.unfiltered_origins["build"].add(row_data["build_origin"])
if (build_misc := row_data["build_misc"]) is not None:
instance.unfiltered_labs["build"].add(build_misc.get("lab", UNKNOWN_STRING))

build_issue_id, build_issue_version, is_build_issue = (
should_increment_build_issue(
Expand Down Expand Up @@ -495,10 +520,12 @@ def process_filters(instance, row_data: dict) -> None:
if is_boot(row_data["test_path"]):
issue_set = instance.unfiltered_boot_issues
origin_set = instance.unfiltered_origins["boot"]
lab_set = instance.unfiltered_labs["boot"]
flag_tab: PossibleTabs = "boot"
else:
issue_set = instance.unfiltered_test_issues
origin_set = instance.unfiltered_origins["test"]
lab_set = instance.unfiltered_labs["test"]
flag_tab: PossibleTabs = "test"

is_failed_test = row_data["test_status"] == FAIL_STATUS
Expand All @@ -513,3 +540,5 @@ def process_filters(instance, row_data: dict) -> None:
)

origin_set.add(row_data["test_origin"])
if (history_item := row_data.get("history_item")) is not None:
lab_set.add(history_item.get("lab", UNKNOWN_STRING))
1 change: 1 addition & 0 deletions backend/kernelCI_app/queries/tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,7 @@ def get_tree_commit_history(
t.environment_compatible,
t.environment_misc,
t.origin,
t.misc->>'runtime' AS test_lab,
b.id AS build_id,
b.misc AS build_misc,
t.id AS test_id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@ def test_invalid_filters(invalid_filters_input):
"DONE": 0,
},
"unknown_issues": 0,
"labs": {},
}

empty_build = {
Expand All @@ -448,6 +449,7 @@ def test_invalid_filters(invalid_filters_input):
"DONE": 0,
},
"unknown_issues": 0,
"labs": {},
}

empty_summary = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ def test_invalid_filters(invalid_filters_input):
"DONE": 0,
},
"unknown_issues": 0,
"labs": {},
}

empty_build = {
Expand All @@ -421,6 +422,7 @@ def test_invalid_filters(invalid_filters_input):
"DONE": 0,
},
"unknown_issues": 0,
"labs": {},
}

empty_summary = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ def create_test_summary(**overrides):
failed_platforms={"x86_64", "arm64"},
environment_compatible={"hardware1": StatusCount()},
environment_misc={"x86_64": StatusCount()},
labs={},
)

for key, value in overrides.items():
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ def create_summary_row_data(**overrides):
"test_error": "Test error",
"test_environment_compatible": "hardware1",
"test_origin": "test",
"history_item": {
"lab": "test_runtime_lab",
},
}
base_data.update(overrides)
return base_data
Expand All @@ -102,6 +105,10 @@ def create_filter_row_data(**overrides):
"build_compiler": "gcc",
"build_origin": "build_origin",
"test_origin": "test_origin",
"build_misc": {"lab": "lab1"},
"history_item": {
"lab": "test_runtime_lab",
},
}
base_data.update(overrides)
return base_data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -617,6 +617,7 @@ def test_handle_test_summary(
unknown_issues=0,
fail_reasons={},
failed_platforms=set(),
labs={},
)

issue_dict = {}
Expand Down Expand Up @@ -1317,6 +1318,7 @@ def test_format_issue_summary_for_response(self, mock_convert):
unknown_issues=0,
fail_reasons={},
failed_platforms=set(),
labs={},
)
tests_summary = TestSummary(
status=StatusCount(),
Expand All @@ -1327,6 +1329,7 @@ def test_format_issue_summary_for_response(self, mock_convert):
unknown_issues=0,
fail_reasons={},
failed_platforms=set(),
labs={},
)

issue_dicts = {
Expand Down
Loading