ci(bstein-home): label test metrics with build artifacts

This commit is contained in:
codex 2026-04-21 11:39:13 -03:00
parent 1356efa02c
commit 2207a2f814
2 changed files with 18 additions and 3 deletions

View File

@ -25,6 +25,7 @@ def _build_parser() -> argparse.ArgumentParser:
branch_default = branch_default[len("origin/") :] branch_default = branch_default[len("origin/") :]
parser.add_argument("--branch", default=branch_default, help="SCM branch") 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("--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 return parser
@ -111,6 +112,7 @@ def main(argv: list[str] | None = None) -> int:
source_lines_over_500=source_lines_over_500, source_lines_over_500=source_lines_over_500,
branch=args.branch, branch=args.branch,
build_number=args.build_number, build_number=args.build_number,
jenkins_job=args.jenkins_job,
checks=checks, checks=checks,
test_cases=test_cases, test_cases=test_cases,
) )

View File

@ -110,10 +110,18 @@ def render_payload(
source_lines_over_500: int = 0, source_lines_over_500: int = 0,
branch: str = "", branch: str = "",
build_number: str = "", build_number: str = "",
jenkins_job: str = "",
checks: dict[str, str] | None = None, checks: dict[str, str] | None = None,
test_cases: list[tuple[str, str]] | None = None, test_cases: list[tuple[str, str]] | None = None,
) -> str: ) -> str:
"""Render the Pushgateway payload for the quality-gate counters.""" """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 = ( payload = (
"# TYPE platform_quality_gate_runs_total counter\n" "# TYPE platform_quality_gate_runs_total counter\n"
f'platform_quality_gate_runs_total{{suite="{suite}",status="ok"}} {ok}\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" "# 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' 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" "# 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: if checks:
payload += "# TYPE bstein_home_quality_gate_checks_total gauge\n" 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" payload += "# TYPE platform_quality_gate_test_case_result gauge\n"
if test_cases: if test_cases:
payload += "".join( 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 for test_name, test_status in test_cases
) )
else: 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 return payload
@ -158,6 +169,7 @@ def publish_quality_metrics(
source_lines_over_500: int = 0, source_lines_over_500: int = 0,
branch: str = "", branch: str = "",
build_number: str = "", build_number: str = "",
jenkins_job: str = "",
checks: dict[str, str] | None = None, checks: dict[str, str] | None = None,
test_cases: list[tuple[str, str]] | None = None, test_cases: list[tuple[str, str]] | None = None,
) -> None: ) -> None:
@ -180,6 +192,7 @@ def publish_quality_metrics(
source_lines_over_500=source_lines_over_500, source_lines_over_500=source_lines_over_500,
branch=branch, branch=branch,
build_number=build_number, build_number=build_number,
jenkins_job=jenkins_job or suite,
checks=checks, checks=checks,
test_cases=test_cases, test_cases=test_cases,
) )