Skip to content

Fix: issuesList counting #880

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 13, 2025
Merged
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
2 changes: 2 additions & 0 deletions backend/kernelCI_app/constants/general.py
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
DEFAULT_ORIGIN = 'maestro'

UNKNOWN_STRING = 'Unknown'
2 changes: 1 addition & 1 deletion backend/kernelCI_app/helpers/commonDetails.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from kernelCI_app.helpers.filters import UNKNOWN_STRING
from kernelCI_app.constants.general import UNKNOWN_STRING
from typing import Set


Expand Down
128 changes: 85 additions & 43 deletions backend/kernelCI_app/helpers/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import re
from kernelCI_app.typeModels.databases import PASS_STATUS, failure_status_list
from kernelCI_app.utils import getErrorResponseBody
from kernelCI_app.constants.general import UNKNOWN_STRING

UNKNOWN_STRING = "Unknown"
NULL_STRINGS = set(["null", UNKNOWN_STRING, "NULL"])


Expand All @@ -16,33 +16,62 @@ def is_test_failure(test_status: str) -> bool:
return test_status in failure_status_list


def is_known_issue(issue_id: Optional[str]) -> bool:
return issue_id is not None and issue_id is not UNKNOWN_STRING
def is_known_issue(issue_id: Optional[str], issue_version: Optional[int]) -> bool:
return (
issue_id is not None
and issue_version is not None
and issue_id is not UNKNOWN_STRING
)


def is_exclusively_build_issue(issue_id: Optional[str], incident_test_id: Optional[str]) -> bool:
is_known_issue_result = is_known_issue(issue_id)
is_exclusively_build_issue_result = is_known_issue_result and incident_test_id is None
def is_exclusively_build_issue(
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> bool:
is_known_issue_result = is_known_issue(issue_id, issue_version)
is_exclusively_build_issue_result = (
is_known_issue_result and incident_test_id is None
)
return is_exclusively_build_issue_result


def is_exclusively_test_issue(
*, issue_id: Optional[str], incident_test_id: Optional[str]
*,
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> bool:
is_known_issue_result = is_known_issue(issue_id)
is_exclusively_test_issue_result = is_known_issue_result and incident_test_id is not None
is_known_issue_result = is_known_issue(issue_id, issue_version)
is_exclusively_test_issue_result = (
is_known_issue_result and incident_test_id is not None
)
return is_exclusively_test_issue_result


def is_issue_from_test(*, incident_test_id: Optional[str], issue_id: Optional[str]) -> bool:
is_known_issue_result = is_known_issue(issue_id=issue_id)
def is_issue_from_test(
*,
incident_test_id: Optional[str],
issue_id: Optional[str],
issue_version: Optional[int],
) -> bool:
is_known_issue_result = is_known_issue(
issue_id=issue_id, issue_version=issue_version
)
is_possible_test_issue = incident_test_id is not None or not is_known_issue_result

return is_possible_test_issue


def is_issue_from_build(*, issue_id: Optional[str], incident_test_id: Optional[str]) -> bool:
is_known_issue_result = is_known_issue(issue_id=issue_id)
def is_issue_from_build(
*,
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> bool:
is_known_issue_result = is_known_issue(
issue_id=issue_id, issue_version=issue_version
)
is_possible_build_issue = incident_test_id is None or not is_known_issue_result

return is_possible_build_issue
Expand All @@ -51,7 +80,7 @@ def is_issue_from_build(*, issue_id: Optional[str], incident_test_id: Optional[s
def verify_issue_in_filter(
issue_filter_data: Union[Dict, str],
issue_id: Optional[str],
issue_version: Optional[int]
issue_version: Optional[int],
) -> bool:
is_unknown_issue = False
if issue_filter_data == UNKNOWN_STRING:
Expand All @@ -68,12 +97,14 @@ def verify_issue_in_filter(


def is_issue_filtered_out(
*,
issue_id: Optional[str],
issue_filters: set,
issue_version: Optional[int]
*, issue_id: Optional[str], issue_filters: set, issue_version: Optional[int]
) -> bool:
in_filter = any(verify_issue_in_filter(issue, issue_id, issue_version) for issue in issue_filters)
in_filter = any(
verify_issue_in_filter(
issue_filter_data=issue, issue_id=issue_id, issue_version=issue_version
)
for issue in issue_filters
)
return not in_filter


Expand All @@ -83,7 +114,7 @@ def should_filter_test_issue(
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
test_status: Optional[str]
test_status: Optional[str],
) -> bool:
has_issue_filter = len(issue_filters) > 0
if not has_issue_filter:
Expand All @@ -95,7 +126,9 @@ def should_filter_test_issue(
has_unknown_filter = UNKNOWN_STRING in issue_filters

is_exclusively_build_issue_result = is_exclusively_build_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

if is_exclusively_build_issue_result and has_unknown_filter:
Expand All @@ -104,9 +137,7 @@ def should_filter_test_issue(
issue_id = UNKNOWN_STRING

is_issue_filtered_out_result = is_issue_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
issue_filters=issue_filters
issue_id=issue_id, issue_version=issue_version, issue_filters=issue_filters
)

return is_issue_filtered_out_result
Expand All @@ -118,7 +149,7 @@ def should_filter_build_issue(
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
build_valid: Optional[bool]
build_valid: Optional[bool],
) -> bool:
has_issue_filter = len(issue_filters) > 0
if not has_issue_filter:
Expand All @@ -130,7 +161,9 @@ def should_filter_build_issue(
has_unknown_filter = UNKNOWN_STRING in issue_filters

is_exclusively_test_issue_result = is_exclusively_test_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

if is_exclusively_test_issue_result and has_unknown_filter:
Expand All @@ -139,49 +172,58 @@ def should_filter_build_issue(
issue_id = UNKNOWN_STRING

is_issue_filtered_out_result = is_issue_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
issue_filters=issue_filters
issue_id=issue_id, issue_version=issue_version, issue_filters=issue_filters
)

return is_issue_filtered_out_result


def should_increment_test_issue(
issue_id: Optional[str], incident_test_id: Optional[str]
) -> Tuple[str, bool]:
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
) -> Tuple[str, int, bool]:
is_exclusively_build_issue_result = is_exclusively_build_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)
if is_exclusively_build_issue_result:
return (UNKNOWN_STRING, False)
return (UNKNOWN_STRING, None, False)

is_issue_from_test_result = is_issue_from_test(
incident_test_id=incident_test_id, issue_id=issue_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

return (issue_id, is_issue_from_test_result)
return (issue_id, issue_version, is_issue_from_test_result)


def should_increment_build_issue(
*,
issue_id: Optional[str],
issue_version: Optional[int],
incident_test_id: Optional[str],
build_valid: Optional[bool],
) -> Tuple[str, bool]:
) -> Tuple[str, int, bool]:
is_exclusively_test_issue_result = is_exclusively_test_issue(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)
if is_exclusively_test_issue_result:
return (UNKNOWN_STRING, False)
return (UNKNOWN_STRING, None, False)

is_issue_from_build_result = is_issue_from_build(
issue_id=issue_id, incident_test_id=incident_test_id
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
)

result = is_issue_from_build_result and is_build_invalid(build_valid)

return (issue_id, result)
return (issue_id, issue_version, result)


def toIntOrDefault(value, default):
Expand Down Expand Up @@ -485,7 +527,7 @@ def is_build_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
build_valid=valid
build_valid=valid,
)
)
)
Expand Down Expand Up @@ -570,7 +612,7 @@ def is_boot_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
test_status=status
test_status=status,
)
or (
len(self.filterPlatforms["boot"]) > 0
Expand Down Expand Up @@ -617,7 +659,7 @@ def is_test_filtered_out(
issue_id=issue_id,
issue_version=issue_version,
incident_test_id=incident_test_id,
test_status=status
test_status=status,
)
or (
len(self.filterPlatforms["test"]) > 0
Expand Down
Loading