ci: publish lesavka gate metrics with stable status labels
This commit is contained in:
parent
de122b86e8
commit
5cd4ec05dd
2
Jenkinsfile
vendored
2
Jenkinsfile
vendored
@ -8,7 +8,7 @@ pipeline {
|
|||||||
|
|
||||||
parameters {
|
parameters {
|
||||||
booleanParam(name: 'PUSH_IMAGES', defaultValue: true, description: 'Push images to registry')
|
booleanParam(name: 'PUSH_IMAGES', defaultValue: true, description: 'Push images to registry')
|
||||||
string(name: 'QUALITY_GATE_PUSHGATEWAY_URL', defaultValue: '', description: 'Optional Pushgateway base URL for quality gate metrics')
|
string(name: 'QUALITY_GATE_PUSHGATEWAY_URL', defaultValue: 'http://platform-quality-gateway.monitoring.svc.cluster.local:9091', description: 'Pushgateway base URL for quality gate metrics')
|
||||||
string(name: 'REGISTRY_CREDENTIALS_ID', defaultValue: 'registry-bstein-dev', description: 'Jenkins credentials id for registry.bstein.dev')
|
string(name: 'REGISTRY_CREDENTIALS_ID', defaultValue: 'registry-bstein-dev', description: 'Jenkins credentials id for registry.bstein.dev')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -14,9 +14,61 @@ mkdir -p "${REPORT_DIR}"
|
|||||||
cat >"${METRICS_FILE}" <<'METRICS'
|
cat >"${METRICS_FILE}" <<'METRICS'
|
||||||
# HELP platform_quality_gate_runs_total Number of quality gate runs by result.
|
# HELP platform_quality_gate_runs_total Number of quality gate runs by result.
|
||||||
# TYPE platform_quality_gate_runs_total counter
|
# TYPE platform_quality_gate_runs_total counter
|
||||||
platform_quality_gate_runs_total{suite="lesavka",status="fail"} 1
|
platform_quality_gate_runs_total{suite="lesavka",status="ok"} 0
|
||||||
|
platform_quality_gate_runs_total{suite="lesavka",status="failed"} 1
|
||||||
METRICS
|
METRICS
|
||||||
|
|
||||||
|
fetch_remote_counter() {
|
||||||
|
local status="$1"
|
||||||
|
if [[ -z "${PUSHGATEWAY_URL}" ]]; then
|
||||||
|
echo 0
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
curl --silent --show-error --fail "${PUSHGATEWAY_URL%/}/metrics" 2>/dev/null | awk -v suite="lesavka" -v status="${status}" '
|
||||||
|
/^platform_quality_gate_runs_total\{/ {
|
||||||
|
if (index($0, "job=\"platform-quality-ci\"") == 0) next
|
||||||
|
if (index($0, "suite=\"" suite "\"") == 0) next
|
||||||
|
if (index($0, "status=\"" status "\"") == 0) next
|
||||||
|
print int($2)
|
||||||
|
found = 1
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
if (!found) print 0
|
||||||
|
}'
|
||||||
|
}
|
||||||
|
|
||||||
|
refresh_counter_metrics() {
|
||||||
|
local outcome status_line ok_count failed_count tmp_file
|
||||||
|
status_line="$(awk '/^platform_quality_gate_runs_total\{suite="lesavka"/ {print; exit}' "${METRICS_FILE}" 2>/dev/null || true)"
|
||||||
|
outcome="$(printf '%s' "${status_line}" | sed -n 's/.*status="\([^"]*\)".*/\1/p')"
|
||||||
|
[[ -n "${outcome}" ]] || outcome="failed"
|
||||||
|
|
||||||
|
ok_count="$(fetch_remote_counter ok)"
|
||||||
|
failed_count="$(fetch_remote_counter failed)"
|
||||||
|
if [[ "${outcome}" == "ok" ]]; then
|
||||||
|
ok_count=$((ok_count + 1))
|
||||||
|
else
|
||||||
|
failed_count=$((failed_count + 1))
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmp_file="$(mktemp "${REPORT_DIR}/metrics.prom.XXXXXX")"
|
||||||
|
{
|
||||||
|
echo '# HELP platform_quality_gate_runs_total Number of quality gate runs by result.'
|
||||||
|
echo '# TYPE platform_quality_gate_runs_total counter'
|
||||||
|
echo "platform_quality_gate_runs_total{suite=\"lesavka\",status=\"ok\"} ${ok_count}"
|
||||||
|
echo "platform_quality_gate_runs_total{suite=\"lesavka\",status=\"failed\"} ${failed_count}"
|
||||||
|
awk '
|
||||||
|
/^# HELP platform_quality_gate_runs_total / {next}
|
||||||
|
/^# TYPE platform_quality_gate_runs_total / {next}
|
||||||
|
/^platform_quality_gate_runs_total\{suite="lesavka"/ {next}
|
||||||
|
{print}
|
||||||
|
' "${METRICS_FILE}"
|
||||||
|
} >"${tmp_file}"
|
||||||
|
mv "${tmp_file}" "${METRICS_FILE}"
|
||||||
|
}
|
||||||
|
|
||||||
publish_metrics() {
|
publish_metrics() {
|
||||||
if [[ -z "${PUSHGATEWAY_URL}" ]]; then
|
if [[ -z "${PUSHGATEWAY_URL}" ]]; then
|
||||||
echo "Skipping Pushgateway publish: QUALITY_GATE_PUSHGATEWAY_URL is not set"
|
echo "Skipping Pushgateway publish: QUALITY_GATE_PUSHGATEWAY_URL is not set"
|
||||||
@ -25,7 +77,7 @@ publish_metrics() {
|
|||||||
|
|
||||||
curl --fail --silent --show-error \
|
curl --fail --silent --show-error \
|
||||||
--data-binary @"${METRICS_FILE}" \
|
--data-binary @"${METRICS_FILE}" \
|
||||||
"${PUSHGATEWAY_URL%/}/metrics/job/platform_quality_gate/suite/lesavka"
|
"${PUSHGATEWAY_URL%/}/metrics/job/platform-quality-ci/suite/lesavka"
|
||||||
}
|
}
|
||||||
|
|
||||||
status=0
|
status=0
|
||||||
@ -94,7 +146,7 @@ over_500 = sum(1 for item in files if item['loc'] > 500)
|
|||||||
metrics = []
|
metrics = []
|
||||||
metrics.append('# HELP platform_quality_gate_runs_total Number of quality gate runs by result.')
|
metrics.append('# HELP platform_quality_gate_runs_total Number of quality gate runs by result.')
|
||||||
metrics.append('# TYPE platform_quality_gate_runs_total counter')
|
metrics.append('# TYPE platform_quality_gate_runs_total counter')
|
||||||
status_label = 'pass' if not regressions and not missing_from_baseline else 'fail'
|
status_label = 'ok' if not regressions and not missing_from_baseline else 'failed'
|
||||||
metrics.append(f'platform_quality_gate_runs_total{{suite="lesavka",status="{status_label}"}} 1')
|
metrics.append(f'platform_quality_gate_runs_total{{suite="lesavka",status="{status_label}"}} 1')
|
||||||
metrics.append('# HELP platform_quality_gate_workspace_line_coverage_percent Workspace line coverage percent.')
|
metrics.append('# HELP platform_quality_gate_workspace_line_coverage_percent Workspace line coverage percent.')
|
||||||
metrics.append('# TYPE platform_quality_gate_workspace_line_coverage_percent gauge')
|
metrics.append('# TYPE platform_quality_gate_workspace_line_coverage_percent gauge')
|
||||||
@ -178,6 +230,7 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
publish_status=0
|
publish_status=0
|
||||||
|
refresh_counter_metrics
|
||||||
if publish_metrics; then
|
if publish_metrics; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user