diff --git a/testing/ci/publish_metrics.py b/testing/ci/publish_metrics.py index c600dec..d85d478 100644 --- a/testing/ci/publish_metrics.py +++ b/testing/ci/publish_metrics.py @@ -25,6 +25,7 @@ def _build_parser() -> argparse.ArgumentParser: branch_default = branch_default[len("origin/") :] parser.add_argument("--branch", default=branch_default, help="SCM branch") parser.add_argument("--build-number", default=os.getenv("BUILD_NUMBER", ""), help="Jenkins build number") + parser.add_argument("--jenkins-job", default=os.getenv("JOB_NAME", "bstein-dev-home"), help="Jenkins job name") return parser @@ -111,6 +112,7 @@ def main(argv: list[str] | None = None) -> int: source_lines_over_500=source_lines_over_500, branch=args.branch, build_number=args.build_number, + jenkins_job=args.jenkins_job, checks=checks, test_cases=test_cases, ) diff --git a/testing/ci/summary.py b/testing/ci/summary.py index 5e4eb14..b146663 100644 --- a/testing/ci/summary.py +++ b/testing/ci/summary.py @@ -110,10 +110,18 @@ def render_payload( source_lines_over_500: int = 0, branch: str = "", build_number: str = "", + jenkins_job: str = "", checks: dict[str, str] | None = None, test_cases: list[tuple[str, str]] | None = None, ) -> str: """Render the Pushgateway payload for the quality-gate counters.""" + build_labels = { + "suite": suite, + "branch": branch or "unknown", + "build_number": build_number or "unknown", + "jenkins_job": jenkins_job or suite, + } + test_case_base_labels = dict(build_labels) payload = ( "# TYPE platform_quality_gate_runs_total counter\n" f'platform_quality_gate_runs_total{{suite="{suite}",status="ok"}} {ok}\n' @@ -128,7 +136,7 @@ def render_payload( "# TYPE platform_quality_gate_source_lines_over_500_total gauge\n" f'platform_quality_gate_source_lines_over_500_total{{suite="{suite}"}} {int(source_lines_over_500)}\n' "# TYPE platform_quality_gate_build_info gauge\n" - f'platform_quality_gate_build_info{_label_str({"suite": suite, "branch": branch, "build_number": build_number})} 1\n' + f"platform_quality_gate_build_info{_label_str(build_labels)} 1\n" ) if checks: payload += "# TYPE bstein_home_quality_gate_checks_total gauge\n" @@ -139,11 +147,14 @@ def render_payload( payload += "# TYPE platform_quality_gate_test_case_result gauge\n" if test_cases: payload += "".join( - f'platform_quality_gate_test_case_result{{suite="{suite}",test="{_escape_label(test_name)}",status="{_escape_label(test_status)}"}} 1\n' + f"platform_quality_gate_test_case_result{_label_str({**test_case_base_labels, 'test': test_name, 'status': test_status})} 1\n" for test_name, test_status in test_cases ) else: - payload += f'platform_quality_gate_test_case_result{{suite="{suite}",test="__no_test_cases__",status="skipped"}} 1\n' + payload += ( + f"platform_quality_gate_test_case_result" + f"{_label_str({**test_case_base_labels, 'test': '__no_test_cases__', 'status': 'skipped'})} 1\n" + ) return payload @@ -158,6 +169,7 @@ def publish_quality_metrics( source_lines_over_500: int = 0, branch: str = "", build_number: str = "", + jenkins_job: str = "", checks: dict[str, str] | None = None, test_cases: list[tuple[str, str]] | None = None, ) -> None: @@ -180,6 +192,7 @@ def publish_quality_metrics( source_lines_over_500=source_lines_over_500, branch=branch, build_number=build_number, + jenkins_job=jenkins_job or suite, checks=checks, test_cases=test_cases, )