#!/bin/bash # Generate HTML Dashboard from test results # # Usage: ./generate-dashboard.sh SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RESULTS_DIR="${SCRIPT_DIR}/results" DASHBOARD_DIR="${SCRIPT_DIR}/dashboard" DASHBOARD_FILE="${DASHBOARD_DIR}/index.html" mkdir -p "$DASHBOARD_DIR" # Read latest results STAGING_RESULTS="${RESULTS_DIR}/results-staging.json" PROD_RESULTS="${RESULTS_DIR}/results-production.json" # Helper function to get status color get_status_class() { case "$1" in "healthy"|"pass") echo "status-healthy" ;; "degraded"|"warn") echo "status-degraded" ;; "fail"|"down") echo "status-down" ;; *) echo "status-unknown" ;; esac } # Helper function to get status icon get_status_icon() { case "$1" in "healthy"|"pass") echo "✅" ;; "degraded"|"warn") echo "⚠️" ;; "fail"|"down") echo "❌" ;; *) echo "❓" ;; esac } # Read results or use defaults if [ -f "$STAGING_RESULTS" ]; then STAGING_STATUS=$(jq -r '.status // "unknown"' "$STAGING_RESULTS") STAGING_TIME=$(jq -r '.timestamp // "N/A"' "$STAGING_RESULTS") STAGING_HEALTH=$(jq -r '.tests.health.status // "unknown"' "$STAGING_RESULTS") STAGING_JWKS=$(jq -r '.tests.jwks.status // "unknown"' "$STAGING_RESULTS") STAGING_HEADERS=$(jq -r '.tests.security_headers.status // "unknown"' "$STAGING_RESULTS") STAGING_RESPONSE=$(jq -r '.tests.response_time.time_ms // "N/A"' "$STAGING_RESULTS") else STAGING_STATUS="unknown" STAGING_TIME="Never tested" STAGING_HEALTH="unknown" STAGING_JWKS="unknown" STAGING_HEADERS="unknown" STAGING_RESPONSE="N/A" fi if [ -f "$PROD_RESULTS" ]; then PROD_STATUS=$(jq -r '.status // "unknown"' "$PROD_RESULTS") PROD_TIME=$(jq -r '.timestamp // "N/A"' "$PROD_RESULTS") PROD_HEALTH=$(jq -r '.tests.health.status // "unknown"' "$PROD_RESULTS") PROD_JWKS=$(jq -r '.tests.jwks.status // "unknown"' "$PROD_RESULTS") PROD_HEADERS=$(jq -r '.tests.security_headers.status // "unknown"' "$PROD_RESULTS") PROD_RESPONSE=$(jq -r '.tests.response_time.time_ms // "N/A"' "$PROD_RESULTS") else PROD_STATUS="unknown" PROD_TIME="Never tested" PROD_HEALTH="unknown" PROD_JWKS="unknown" PROD_HEADERS="unknown" PROD_RESPONSE="N/A" fi GENERATED_AT=$(date -u +"%Y-%m-%d %H:%M:%S UTC") cat > "$DASHBOARD_FILE" << 'HTMLEOF'
Service Health Dashboard