Skip to content

Commit

Permalink
feat(tree-details): add filters field
Browse files Browse the repository at this point in the history
- Added `process_filter` function to helpers/treeDetails.py, the
  function responsible to get the value of all possible filters in the
  tree details response
- Added 'common' and 'filters' fields to tree details summary response
- Added 'common' and 'filters' fields to tree details response

Part of #792
  • Loading branch information
murilx committed Jan 21, 2025
1 parent 61e92d7 commit df02317
Show file tree
Hide file tree
Showing 7 changed files with 138 additions and 10 deletions.
31 changes: 31 additions & 0 deletions backend/kernelCI_app/helpers/treeDetails.py
Original file line number Diff line number Diff line change
Expand Up @@ -478,3 +478,34 @@ def process_boots_summary(instance, row_data):
] += 1
else:
instance.bootEnvironmentMisc[test_platform][test_status] += 1


def process_filters(instance, row_data) -> None:
if row_data["build_id"] is not None:
instance.globalConfigs.add(row_data["build_config_name"])
instance.globalArchitectures.add(row_data["build_architecture"])
instance.globalCompilers.add(row_data["build_config_name"])

issue_id = row_data["issue_id"]
incident_test_id = row_data["incident_test_id"]
build_valid = row_data["build_valid"]

issue_id, is_build_issue = should_increment_build_issue(
issue_id=issue_id,
incident_test_id=incident_test_id,
build_valid=build_valid,
)

if issue_id is not None and is_build_issue:
instance.unfilteredBuildIssues.add(issue_id)

issue_id, is_test_issue = should_increment_test_issue(
issue_id=issue_id,
incident_test_id=incident_test_id,
)

if issue_id is not None and is_test_issue:
if is_boot(row_data["test_path"]):
instance.unfilteredBootIssues.add(issue_id)
else:
instance.unfilteredTestIssues.add(issue_id)
23 changes: 21 additions & 2 deletions backend/kernelCI_app/typeModels/treeDetails.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,33 @@ class TestSummary(BaseModel):
failed_platforms: List[str]


class TreeSummary(Summary):
class TreeCommon(BaseModel):
hardware: Optional[List[str]]
tree_url: Optional[str]
git_commit_tags: Optional[List[str]]


class TreeGlobalFilters(BaseModel):
configs: List[str]
architectures: List[str]
compilers: List[str]


class TreeLocalFilters(BaseModel):
issues: List[str]


class TreeFilters(BaseModel):
all: TreeGlobalFilters
builds: TreeLocalFilters
boots: TreeLocalFilters
tests: TreeLocalFilters


class SummaryResponse(BaseModel):
summary: TreeSummary
common: TreeCommon
summary: Summary
filters: TreeFilters


class BootResponse(BaseModel):
Expand Down
35 changes: 31 additions & 4 deletions backend/kernelCI_app/views/treeDetailsSummaryView.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
process_builds_issue,
process_test_summary,
process_tests_issue,
process_filters,
)
from kernelCI_app.typeModels.treeDetails import SummaryResponse
from kernelCI_app.utils import (
Expand Down Expand Up @@ -65,6 +66,13 @@ def __init__(self):
self.tree_url = ""
self.git_commit_tags = []

self.globalConfigs = set()
self.globalArchitectures = set()
self.globalCompilers = set()
self.unfilteredTestIssues = set()
self.unfilteredBootIssues = set()
self.unfilteredBuildIssues = set()

def _process_boots_test(self, row_data):
test_id = row_data["test_id"]

Expand Down Expand Up @@ -118,6 +126,7 @@ def _sanitize_rows(self, rows):
call_based_on_compatible_and_misc_platform(row_data, self.hardwareUsed.add)

process_tree_url(self, row_data)
process_filters(self, row_data)

is_record_filter_out = decide_if_is_full_row_filtered_out(self, row_data)

Expand Down Expand Up @@ -151,6 +160,11 @@ def get(self, request, commit_hash: str | None):
self._sanitize_rows(rows)

response = {
"common": {
"tree_url": self.tree_url,
"hardware": list(self.hardwareUsed),
"git_commit_tags": self.git_commit_tags,
},
"summary": {
"builds": {
"status": self.build_summary["builds"],
Expand Down Expand Up @@ -181,10 +195,23 @@ def get(self, request, commit_hash: str | None):
"fail_reasons": self.testFailReasons,
"failed_platforms": list(self.testPlatformsWithErrors),
},
"hardware": list(self.hardwareUsed),
"tree_url": self.tree_url,
"git_commit_tags": self.git_commit_tags,
}
},
"filters": {
"all": {
"configs": list(self.globalConfigs),
"architectures": list(self.globalArchitectures),
"compilers": list(self.globalCompilers),
},
"builds": {
"issues": list(self.unfilteredBuildIssues),
},
"boots": {
"issues": list(self.unfilteredBootIssues),
},
"tests": {
"issues": list(self.unfilteredTestIssues),
},
},
}

try:
Expand Down
27 changes: 27 additions & 0 deletions backend/kernelCI_app/views/treeDetailsView.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
process_builds_issue,
process_test_summary,
process_tests_issue,
process_filters,
)
from kernelCI_app.utils import (
Issue,
Expand Down Expand Up @@ -72,6 +73,13 @@ def __init__(self):
self.tree_url = ""
self.git_commit_tags = []

self.globalConfigs = set()
self.globalArchitectures = set()
self.globalCompilers = set()
self.unfilteredTestIssues = set()
self.unfilteredBootIssues = set()
self.unfilteredBuildIssues = set()

def _process_boots_test(self, row_data):
test_id = row_data["test_id"]
history_item = row_data["history_item"]
Expand Down Expand Up @@ -129,6 +137,7 @@ def _sanitize_rows(self, rows):
call_based_on_compatible_and_misc_platform(row_data, self.hardwareUsed.add)

process_tree_url(self, row_data)
process_filters(self, row_data)

is_record_filter_out = decide_if_is_full_row_filtered_out(self, row_data)

Expand Down Expand Up @@ -198,10 +207,28 @@ def get(self, request, commit_hash: str | None):
"fail_reasons": self.testFailReasons,
"failed_platforms": list(self.testPlatformsWithErrors),
},
},
"common": {
"hardware": list(self.hardwareUsed),
"tree_url": self.tree_url,
"git_commit_tags": self.git_commit_tags,
},
"filters": {
"all": {
"configs": list(self.globalConfigs),
"architectures": list(self.globalArchitectures),
"compilers": list(self.globalCompilers),
},
"builds": {
"issues": list(self.unfilteredBuildIssues),
},
"boots": {
"issues": list(self.unfilteredBootIssues),
},
"tests": {
"issues": list(self.unfilteredTestIssues),
},
},
},
safe=False,
)
6 changes: 3 additions & 3 deletions dashboard/src/pages/TreeDetails/TreeDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -262,13 +262,13 @@ function TreeDetails(): JSX.Element {
gitUrl={treeInfo?.gitUrl}
commitHash={treeId}
commitName={treeInfo?.commitName}
commitTags={data?.summary.git_commit_tags}
commitTags={data?.common.git_commit_tags}
/>
</div>
<div className="mt-5">
<MemoizedHardwareUsed
title={<FormattedMessage id="treeDetails.hardwareUsed" />}
hardwareUsed={data?.summary.hardware}
hardwareUsed={data?.common.hardware}
diffFilter={diffFilter}
/>
</div>
Expand All @@ -278,7 +278,7 @@ function TreeDetails(): JSX.Element {
{data && isAllReady && !isAnyLoading && (
<TreeDetailsFilter
paramFilter={diffFilter}
treeUrl={data.summary.tree_url}
treeUrl={data.common.tree_url}
/>
)}
{!isAllReady && isAnyLoading && (
Expand Down
2 changes: 1 addition & 1 deletion dashboard/src/pages/TreeDetails/TreeDetailsFilter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export const createFilter = (data: TTreeTestsFullData | undefined): TFilter => {
compilers[b.compiler ?? 'Unknown'] = false;
});

data.summary.hardware.forEach(h => (hardware[h] = false));
data.common.hardware.forEach(h => (hardware[h] = false));

data.summary.builds.issues.forEach(i => (buildIssue[i.id] = false));
data.summary.boots.issues.forEach(i => (bootIssue[i.id] = false));
Expand Down
24 changes: 24 additions & 0 deletions dashboard/src/types/tree/TreeDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,20 +88,44 @@ type TreeSummary = {
boots: TestSummary;
builds: BuildSummary;
tests: TestSummary;
};

type TreeCommon = {
hardware: string[];
tree_url: string;
git_commit_tags: string[];
};

type TreeGlobalFilters = {
configs: string[];
architectures: string[];
compilers: string[];
};

type TreeLocalFilters = {
issues: string[];
};

type TreeFilters = {
all: TreeGlobalFilters;
builds: TreeLocalFilters;
boots: TreeLocalFilters;
tests: TreeLocalFilters;
};

export type TTreeTestsFullData = {
builds: BuildsTabBuild[];
boots: TestHistory[];
tests: TestHistory[];
summary: TreeSummary;
common: TreeCommon;
filters: TreeFilters;
};

export type TreeDetailsSummary = {
summary: TreeSummary;
common: TreeCommon;
filters: TreeFilters;
};

export type TreeDetailsBuilds = {
Expand Down

0 comments on commit df02317

Please sign in to comment.