fix(runner): ignore stale waiting pressure logs
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 1s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / build-and-deploy (push) Has been cancelled
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / tests (push) Has been cancelled
AWOOOI Harbor 110 Local Repair / workflow-shape (push) Successful in 0s
AWOOOI Harbor 110 Local Repair / harbor-110-local-repair (push) Has been cancelled

This commit is contained in:
Your Name
2026-07-01 08:48:16 +08:00
parent abc512a7b3
commit 0207ccde25
2 changed files with 75 additions and 17 deletions

View File

@@ -363,8 +363,22 @@ def build_readback(
)
build_log_classifier = classify_cd_build_log(latest_cd_build_log_text)
tests_log_classifier = classify_cd_tests_log(latest_cd_tests_log_text)
latest_cd_visible_blocked = latest_cd_run.get("status", "") == "Blocked"
latest_cd_waiting = latest_cd_run.get("status", "") == "Waiting"
latest_cd_status = latest_cd_run.get("status", "")
latest_cd_visible_blocked = latest_cd_status == "Blocked"
latest_cd_waiting = latest_cd_status == "Waiting"
host_pressure_waiting_from_stale_jobs = (
cd_jobs_stale_or_mismatched
and latest_cd_status in {"Blocked", "Canceled", "Failure"}
and tests_log_classifier["host_pressure_waiting"]
and not tests_log_classifier["host_pressure_refused"]
)
effective_tests_log_classifier = dict(tests_log_classifier)
if host_pressure_waiting_from_stale_jobs:
effective_tests_log_classifier["host_pressure_classifier"] = (
"host_web_build_pressure_waiting_from_stale_jobs_payload"
)
effective_tests_log_classifier["host_pressure_waiting"] = False
effective_tests_log_classifier["host_pressure_blocked_or_waiting"] = False
latest_cd_no_matching_runner_label = (
latest_cd_run.get("no_matching_runner_label", "")
or workflow_no_matching_labels.get("cd.yaml", "")
@@ -481,7 +495,7 @@ def build_readback(
),
"workflow_no_matching_runner_labels": workflow_no_matching_labels,
"latest_visible_cd_run_id": latest_cd_run.get("run_id", ""),
"latest_visible_cd_run_status": latest_cd_run.get("status", ""),
"latest_visible_cd_run_status": latest_cd_status,
"latest_visible_cd_run_waiting": latest_cd_waiting,
"latest_visible_cd_run_blocked": latest_cd_visible_blocked,
"latest_visible_cd_run_kind": latest_cd_run.get("kind", ""),
@@ -596,27 +610,30 @@ def build_readback(
"harbor_110_repair_visible_waiting_stale": (
harbor_110_repair_visible_waiting_stale
),
"latest_visible_cd_host_pressure_classifier": tests_log_classifier[
"latest_visible_cd_host_pressure_classifier": effective_tests_log_classifier[
"host_pressure_classifier"
],
"latest_visible_cd_host_pressure_attempt_count": tests_log_classifier[
"latest_visible_cd_host_pressure_attempt_count": effective_tests_log_classifier[
"host_pressure_attempt_count"
],
"latest_visible_cd_host_pressure_attempt_limit": tests_log_classifier[
"latest_visible_cd_host_pressure_attempt_limit": effective_tests_log_classifier[
"host_pressure_attempt_limit"
],
"latest_visible_cd_host_pressure_latest_load5_per_core": tests_log_classifier[
"latest_load5_per_core"
],
"latest_visible_cd_host_pressure_load5_threshold": tests_log_classifier[
"latest_visible_cd_host_pressure_latest_load5_per_core": (
effective_tests_log_classifier["latest_load5_per_core"]
),
"latest_visible_cd_host_pressure_load5_threshold": effective_tests_log_classifier[
"load5_per_core_threshold"
],
"latest_visible_cd_host_pressure_waiting": tests_log_classifier[
"latest_visible_cd_host_pressure_waiting": effective_tests_log_classifier[
"host_pressure_waiting"
],
"latest_visible_cd_host_pressure_refused": tests_log_classifier[
"latest_visible_cd_host_pressure_refused": effective_tests_log_classifier[
"host_pressure_refused"
],
"latest_visible_cd_host_pressure_log_stale_or_mismatched": (
host_pressure_waiting_from_stale_jobs
),
"no_matching_online_runner_visible": bool(no_matching)
or bool(workflow_no_matching_labels),
"top_visible_runs": combined_visible_runs[:10],
@@ -655,7 +672,7 @@ def build_readback(
else "blocked_harbor_public_route_unavailable_pending_retry"
if build_log_classifier["harbor_public_route_retrying_unavailable"]
else "blocked_host_web_build_pressure"
if tests_log_classifier["host_pressure_blocked_or_waiting"]
if effective_tests_log_classifier["host_pressure_blocked_or_waiting"]
else "blocked_harbor_110_repair_no_matching_runner"
if harbor_110_repair_no_matching_runner_label
else "blocked_no_matching_online_runner"
@@ -684,7 +701,7 @@ def build_readback(
"cd_run_jobs_stale_or_mismatched": cd_jobs_stale_or_mismatched,
"cd_run_jobs_payload_classifier": cd_jobs_payload_classifier,
"current_main_cd_run_visible": bool(latest_cd_run),
"current_main_cd_run_status": latest_cd_run.get("status", ""),
"current_main_cd_run_status": latest_cd_status,
"current_main_cd_run_waiting": latest_cd_waiting,
"current_main_cd_run_blocked": latest_cd_visible_blocked,
"current_main_cd_no_matching_runner_label": (
@@ -726,15 +743,18 @@ def build_readback(
"current_main_cd_harbor_repair_lane_classifier": (
cd_harbor_repair_lane_classifier
),
"current_main_cd_host_pressure_classifier": tests_log_classifier[
"current_main_cd_host_pressure_classifier": effective_tests_log_classifier[
"host_pressure_classifier"
],
"current_main_cd_host_pressure_waiting": tests_log_classifier[
"current_main_cd_host_pressure_waiting": effective_tests_log_classifier[
"host_pressure_waiting"
],
"current_main_cd_host_pressure_refused": tests_log_classifier[
"current_main_cd_host_pressure_refused": effective_tests_log_classifier[
"host_pressure_refused"
],
"current_main_cd_host_pressure_log_stale_or_mismatched": (
host_pressure_waiting_from_stale_jobs
),
"no_matching_online_runner_visible": bool(no_matching)
or bool(workflow_no_matching_labels),
"harbor_110_repair_run_visible": bool(latest_harbor_110_repair_run),

View File

@@ -858,6 +858,44 @@ def test_host_pressure_refusal_takes_status_precedence_over_stale_jobs() -> None
assert payload["readback"]["cd_run_jobs_stale_or_mismatched"] is True
def test_stale_waiting_host_pressure_log_does_not_hide_failed_cd_jobs_payload() -> None:
module = _load_module()
payload = module.build_readback(
actions_html=_actions_html_failed_cd_run(),
actions_list_http_status=401,
actions_list_payload={"message": "token is required"},
cd_jobs_http_status=200,
cd_jobs_payload={
"jobs": [
{
"run_id": 4043,
"head_sha": "df89bdf00b9413b4db61b7f2d9bbca57e9fc9923",
"conclusion": "success",
}
],
"total_count": 1,
},
latest_cd_tests_log_http_status=200,
latest_cd_tests_log_text=_host_pressure_waiting_log(),
)
assert payload["status"] == "cd_jobs_stale_or_mismatched"
assert payload["readback"]["latest_visible_cd_run_status"] == "Failure"
assert payload["readback"]["cd_run_jobs_stale_or_mismatched"] is True
assert payload["readback"]["latest_visible_cd_host_pressure_classifier"] == (
"host_web_build_pressure_waiting_from_stale_jobs_payload"
)
assert payload["readback"]["latest_visible_cd_host_pressure_waiting"] is False
assert (
payload["readback"]["latest_visible_cd_host_pressure_log_stale_or_mismatched"]
is True
)
assert payload["rollups"]["current_main_cd_host_pressure_waiting"] is False
assert (
payload["rollups"]["current_main_cd_host_pressure_log_stale_or_mismatched"]
is True
)
def test_build_readback_flags_stale_cd_jobs_api_payload() -> None:
module = _load_module()
payload = module.build_readback(