Skip to content

Commit 3a35e46

Browse files
fixup! feat: implement rollup data processing and querying
1 parent e9afdba commit 3a35e46

3 files changed

Lines changed: 41 additions & 25 deletions

File tree

backend/kernelCI_app/helpers/treeDetailsRollup.py

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,33 @@ def process_rollup_summary(instance, *, row_dict: dict, is_boot_row: bool) -> No
261261
platforms_failing.add(test_platform)
262262

263263

264+
def _ensure_issue_in_table(
265+
*,
266+
instance,
267+
issue_id: str,
268+
issue_version: int,
269+
issue_comment: str | None,
270+
issue_report_url: str | None,
271+
is_boot_row: bool,
272+
) -> Issue:
273+
if is_boot_row:
274+
table: IssueDict = instance.boot_issues_dict
275+
else:
276+
table: IssueDict = instance.test_issues_dict
277+
278+
issue: Issue | None = table.get((issue_id, issue_version))
279+
if issue is None:
280+
issue = create_issue_typed(
281+
issue_id=issue_id,
282+
issue_version=issue_version,
283+
issue_comment=issue_comment,
284+
issue_report_url=issue_report_url,
285+
starting_count_status=None,
286+
)
287+
table[(issue_id, issue_version)] = issue
288+
return issue
289+
290+
264291
def process_rollup_issues(instance, *, row_dict: dict, is_boot_row: bool) -> None:
265292
"""Accumulate issue information from a rollup row."""
266293
issue_id = row_dict.get("issue_id")
@@ -282,30 +309,17 @@ def process_rollup_issues(instance, *, row_dict: dict, is_boot_row: bool) -> Non
282309
]
283310

284311
if test_issue_id and test_issue_version is not None and can_insert_issue:
285-
table: IssueDict = (
286-
instance.boot_issues_dict if is_boot_row else instance.test_issues_dict
312+
current_issue = _ensure_issue_in_table(
313+
instance=instance,
314+
issue_id=test_issue_id,
315+
issue_version=test_issue_version,
316+
issue_comment=issue_comment,
317+
issue_report_url=issue_report_url,
318+
is_boot_row=is_boot_row,
287319
)
288-
current_issue: Issue | None = table.get((test_issue_id, test_issue_version))
289-
if current_issue:
290-
for status, count in failure_counts:
291-
for _ in range(count):
292-
current_issue.incidents_info.increment(status)
293-
else:
294-
first_status = next((s for s, c in failure_counts if c > 0), None)
295-
table[(test_issue_id, test_issue_version)] = create_issue_typed(
296-
issue_id=test_issue_id,
297-
issue_version=test_issue_version,
298-
issue_comment=issue_comment,
299-
issue_report_url=issue_report_url,
300-
starting_count_status=first_status,
301-
)
302-
for status, count in failure_counts:
303-
remaining = count - 1 if status == first_status else count
304-
for _ in range(max(0, remaining)):
305-
table[(test_issue_id, test_issue_version)].incidents_info.increment(
306-
status
307-
)
308320

321+
for status, count in failure_counts:
322+
current_issue.incidents_info.increment(status, count)
309323
elif row_dict.get("issue_uncategorized", False):
310324
status_filter = _get_rollup_status_filter(instance, is_boot_row=is_boot_row)
311325
if not status_filter or "FAIL" in status_filter:

backend/kernelCI_app/typeModels/common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ class StatusCount(BaseModel):
1414
DONE: Optional[int] = 0
1515
NULL: Optional[int] = 0
1616

17-
def increment(self, status: Optional[str]) -> None:
17+
def increment(self, status: Optional[str], count: int = 1) -> None:
1818
if status is None:
1919
status = "NULL"
2020

2121
try:
22-
setattr(self, status.upper(), getattr(self, status.upper()) + 1)
22+
setattr(self, status.upper(), getattr(self, status.upper()) + count)
2323
except AttributeError:
2424
log_message(f"Unknown status: {status}")
2525

backend/kernelCI_app/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ def create_issue_typed(
2323
issue_comment: Optional[str],
2424
issue_report_url: Optional[str],
2525
starting_count_status: Optional[DatabaseStatusValues],
26+
autoincrement: bool = True,
2627
) -> Issue:
2728
incident_count = StatusCount()
28-
incident_count.increment(starting_count_status)
29+
if autoincrement:
30+
incident_count.increment(starting_count_status)
2931
return Issue(
3032
id=issue_id,
3133
version=issue_version,

0 commit comments

Comments
 (0)