diff --git a/services/logging/Jenkinsfile.data-prepper b/services/logging/Jenkinsfile.data-prepper index 2b42f0b0..283ce70b 100644 --- a/services/logging/Jenkinsfile.data-prepper +++ b/services/logging/Jenkinsfile.data-prepper @@ -214,16 +214,34 @@ EOF mkdir -p build failures=0 cases="" + case_metrics="" + + label_value() { + printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' + } + + suite="${SUITE_NAME:-data_prepper}" + metric_branch_raw="${BRANCH_NAME:-${GIT_BRANCH:-unknown}}" + metric_branch_raw="${metric_branch_raw#origin/}" + metric_suite="$(label_value "${suite}")" + metric_branch="$(label_value "${metric_branch_raw}")" + metric_build_number="$(label_value "${BUILD_NUMBER:-unknown}")" + metric_jenkins_job="$(label_value "${JOB_NAME:-data-prepper}")" add_case() { name="$1" message="$2" + status="passed" if [ -n "${message}" ]; then + status="failed" failures=$((failures + 1)) cases="${cases}" else cases="${cases}" fi + test_name="$(label_value "data_prepper.packaging::${name}")" + case_metrics="${case_metrics}platform_quality_gate_test_case_result{suite=\"${metric_suite}\",branch=\"${metric_branch}\",build_number=\"${metric_build_number}\",jenkins_job=\"${metric_jenkins_job}\",test=\"${test_name}\",status=\"${status}\"} 1 +" } if [ -s dockerfiles/Dockerfile.data-prepper ]; then @@ -249,6 +267,14 @@ EOF ${cases} EOF + passed=$((3 - failures)) + cat > build/test-counts.env < build/testcase-metrics.prom if [ "${failures}" -ne 0 ]; then exit 1 fi @@ -364,7 +390,7 @@ EOF container('git') { sh ''' set -euo pipefail - apk add --no-cache curl jq python3 >/dev/null 2>&1 || true + apk add --no-cache curl jq >/dev/null 2>&1 || true suite="${SUITE_NAME}" gateway="${PUSHGATEWAY_URL}" status="${QUALITY_OUTCOME:-failed}" @@ -428,73 +454,17 @@ EOF export METRIC_BRANCH_RAW="${metric_branch_raw}" export METRIC_BUILD_NUMBER_RAW="${BUILD_NUMBER:-unknown}" export METRIC_JENKINS_JOB_RAW="${JOB_NAME:-data-prepper}" - python3 - <<'PY' -import glob -import os -import xml.etree.ElementTree as ET -from pathlib import Path - - -def label_value(value: str) -> str: - slash = chr(92) - return value.replace(slash, slash * 2).replace(chr(10), slash + "n").replace(chr(34), slash + chr(34)) - - -totals = {"passed": 0, "failed": 0, "error": 0, "skipped": 0} -case_lines = [] -suite = os.environ["METRIC_SUITE"] -branch = os.environ["METRIC_BRANCH_RAW"] -build_number = os.environ["METRIC_BUILD_NUMBER_RAW"] -jenkins_job = os.environ["METRIC_JENKINS_JOB_RAW"] - -for path in glob.glob("build/junit-*.xml"): - try: - root = ET.parse(path).getroot() - except ET.ParseError: - totals["error"] += 1 - continue - for case in root.findall(".//testcase"): - name = case.get("name") or "unnamed" - classname = case.get("classname") or Path(path).stem - test_name = f"{classname}::{name}" if classname else name - status = "passed" - if case.find("error") is not None: - status = "error" - elif case.find("failure") is not None: - status = "failed" - elif case.find("skipped") is not None: - status = "skipped" - totals[status] += 1 - labels = { - "suite": suite, - "branch": branch, - "build_number": build_number, - "jenkins_job": jenkins_job, - "test": test_name, - "status": status, - } - label_blob = ",".join(f'{key}="{label_value(value)}"' for key, value in labels.items()) - case_lines.append(f"platform_quality_gate_test_case_result{{{label_blob}}} 1") - -if not case_lines: - totals["skipped"] += 1 - labels = { - "suite": suite, - "branch": branch, - "build_number": build_number, - "jenkins_job": jenkins_job, - "test": "__no_test_cases__", - "status": "skipped", - } - label_blob = ",".join(f'{key}="{label_value(value)}"' for key, value in labels.items()) - case_lines.append(f"platform_quality_gate_test_case_result{{{label_blob}}} 1") - -Path("build/test-counts.env").write_text( - chr(10).join(f"test_{key}_count={value}" for key, value in totals.items()) + chr(10), - encoding="utf-8", -) -Path("build/testcase-metrics.prom").write_text(chr(10).join(case_lines) + chr(10), encoding="utf-8") -PY + if [ ! -s build/test-counts.env ] || [ ! -s build/testcase-metrics.prom ]; then + cat > build/test-counts.env < build/testcase-metrics.prom <