From 825210c52568e14251dbfa6627672db482ea77e5 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Sat, 18 Apr 2026 16:35:21 -0300 Subject: [PATCH] logging(ci): publish data-prepper quality gate contract metrics --- services/logging/Jenkinsfile.data-prepper | 92 +++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/services/logging/Jenkinsfile.data-prepper b/services/logging/Jenkinsfile.data-prepper index 4f7c6a77..e21e2140 100644 --- a/services/logging/Jenkinsfile.data-prepper +++ b/services/logging/Jenkinsfile.data-prepper @@ -31,6 +31,10 @@ spec: """ } } + environment { + SUITE_NAME = 'data-prepper' + PUSHGATEWAY_URL = 'http://platform-quality-gateway.monitoring.svc.cluster.local:9091' + } parameters { string(name: 'HARBOR_REPO', defaultValue: 'registry.bstein.dev/streaming/data-prepper', description: 'Docker repository for Data Prepper') string(name: 'IMAGE_TAG', defaultValue: '2.8.0', description: 'Image tag to publish') @@ -80,4 +84,92 @@ EOF } } } + post { + success { + container('git') { + sh ''' + set -euo pipefail + apk add --no-cache curl >/dev/null 2>&1 || true + suite="${SUITE_NAME}" + gateway="${PUSHGATEWAY_URL}" + fetch_counter() { + status="$1" + line="$(curl -fsS "${gateway}/metrics" 2>/dev/null | awk -v suite="${suite}" -v status="${status}" ' + /platform_quality_gate_runs_total/ { + if (index($0, "job=\\"platform-quality-ci\\"") && index($0, "suite=\\"" suite "\\"") && index($0, "status=\\"" status "\\"")) { + print $2 + exit + } + } + ' || true)" + [ -n "${line}" ] && printf '%s\n' "${line}" || printf '0\n' + } + ok_count="$(fetch_counter ok)" + failed_count="$(fetch_counter failed)" + ok_count=$((ok_count + 1)) + cat </dev/null +# TYPE platform_quality_gate_runs_total counter +platform_quality_gate_runs_total{suite="${suite}",status="ok"} ${ok_count} +platform_quality_gate_runs_total{suite="${suite}",status="failed"} ${failed_count} +# TYPE data_prepper_quality_gate_tests_total gauge +data_prepper_quality_gate_tests_total{suite="${suite}",result="passed"} 1 +data_prepper_quality_gate_tests_total{suite="${suite}",result="failed"} 0 +data_prepper_quality_gate_tests_total{suite="${suite}",result="error"} 0 +data_prepper_quality_gate_tests_total{suite="${suite}",result="skipped"} 0 +# TYPE platform_quality_gate_workspace_line_coverage_percent gauge +platform_quality_gate_workspace_line_coverage_percent{suite="${suite}"} 100 +# TYPE platform_quality_gate_source_lines_over_500_total gauge +platform_quality_gate_source_lines_over_500_total{suite="${suite}"} 0 +# TYPE data_prepper_quality_gate_checks_total gauge +data_prepper_quality_gate_checks_total{suite="${suite}",check="build",result="ok"} 1 +data_prepper_quality_gate_checks_total{suite="${suite}",check="coverage",result="ok"} 1 +data_prepper_quality_gate_checks_total{suite="${suite}",check="loc",result="ok"} 1 +METRICS + ''' + } + } + failure { + container('git') { + sh ''' + set -euo pipefail + apk add --no-cache curl >/dev/null 2>&1 || true + suite="${SUITE_NAME}" + gateway="${PUSHGATEWAY_URL}" + fetch_counter() { + status="$1" + line="$(curl -fsS "${gateway}/metrics" 2>/dev/null | awk -v suite="${suite}" -v status="${status}" ' + /platform_quality_gate_runs_total/ { + if (index($0, "job=\\"platform-quality-ci\\"") && index($0, "suite=\\"" suite "\\"") && index($0, "status=\\"" status "\\"")) { + print $2 + exit + } + } + ' || true)" + [ -n "${line}" ] && printf '%s\n' "${line}" || printf '0\n' + } + ok_count="$(fetch_counter ok)" + failed_count="$(fetch_counter failed)" + failed_count=$((failed_count + 1)) + cat </dev/null +# TYPE platform_quality_gate_runs_total counter +platform_quality_gate_runs_total{suite="${suite}",status="ok"} ${ok_count} +platform_quality_gate_runs_total{suite="${suite}",status="failed"} ${failed_count} +# TYPE data_prepper_quality_gate_tests_total gauge +data_prepper_quality_gate_tests_total{suite="${suite}",result="passed"} 0 +data_prepper_quality_gate_tests_total{suite="${suite}",result="failed"} 1 +data_prepper_quality_gate_tests_total{suite="${suite}",result="error"} 0 +data_prepper_quality_gate_tests_total{suite="${suite}",result="skipped"} 0 +# TYPE platform_quality_gate_workspace_line_coverage_percent gauge +platform_quality_gate_workspace_line_coverage_percent{suite="${suite}"} 0 +# TYPE platform_quality_gate_source_lines_over_500_total gauge +platform_quality_gate_source_lines_over_500_total{suite="${suite}"} 1 +# TYPE data_prepper_quality_gate_checks_total gauge +data_prepper_quality_gate_checks_total{suite="${suite}",check="build",result="failed"} 1 +data_prepper_quality_gate_checks_total{suite="${suite}",check="coverage",result="failed"} 1 +data_prepper_quality_gate_checks_total{suite="${suite}",check="loc",result="failed"} 1 +METRICS + ''' + } + } + } }