#!/usr/bin/env bash set -euo pipefail REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" QUALITY_METRICS_ENABLED="${ANANKE_QUALITY_METRICS_ENABLED:-1}" QUALITY_METRICS_FILE="${ANANKE_QUALITY_METRICS_FILE:-/var/lib/ananke/quality-gate.prom}" QUALITY_STATE_FILE="${ANANKE_QUALITY_STATE_FILE:-/var/lib/ananke/quality-gate.state}" read_quality_counter() { local key="$1" if [[ ! -f "${QUALITY_STATE_FILE}" ]]; then echo 0 return 0 fi local value value="$(awk -F= -v key="${key}" '$1==key {print $2}' "${QUALITY_STATE_FILE}" | tail -n1)" if [[ ! "${value}" =~ ^[0-9]+$ ]]; then echo 0 return 0 fi echo "${value}" } write_quality_metrics() { local exit_code="$1" if [[ "${QUALITY_METRICS_ENABLED}" != "1" ]]; then return 0 fi local metrics_dir state_dir metrics_dir="$(dirname "${QUALITY_METRICS_FILE}")" state_dir="$(dirname "${QUALITY_STATE_FILE}")" mkdir -p "${metrics_dir}" "${state_dir}" >/dev/null 2>&1 || return 0 local ok failed total last_success now success_percent ok="$(read_quality_counter ok)" failed="$(read_quality_counter failed)" last_success=0 if [[ "${exit_code}" -eq 0 ]]; then ok=$((ok + 1)) last_success=1 else failed=$((failed + 1)) fi total=$((ok + failed)) now="$(date +%s)" success_percent="$(awk -v ok="${ok}" -v total="${total}" 'BEGIN { if (total <= 0) { print "0.00" } else { printf "%.2f", (ok * 100.0) / total } }')" local tmp_metrics tmp_state tmp_metrics="$(mktemp "${metrics_dir}/quality-gate.prom.XXXXXX")" tmp_state="$(mktemp "${state_dir}/quality-gate.state.XXXXXX")" cat > "${tmp_metrics}" < "${tmp_state}" <