#!/usr/bin/env bash # diagnostics.sh - Deployment failure diagnostics collect_diagnostics() { local host=$1 local service=$2 log "INFO" "Stage: DIAGNOSE ($host - ${service:-all})" if [[ -n "$service" ]]; then emit_event "remediation_started" "warning" "diagnostics.sh" "$service" "${TIMESTAMP}" "{\"reason\": \"failure_detected\"}" fi local diag_file="${LOG_DIR}/diagnostics_${TIMESTAMP}.txt" { echo "--- DIAGNOSTICS FOR ${service:-all} (Host: $host, Time: $(date)) ---" echo "Uptime: $(uptime)" echo "Memory: $(free -h)" echo "Disk: $(df -h /)" echo "--- Docker Status ---" docker ps --filter "name=${service:-}" if [[ -n "$service" ]]; then local svc_dir="${REPO_PATH}/services/$service" if [[ -d "$svc_dir" ]]; then echo "--- $service Logs ---" cd "$svc_dir" && docker compose logs --tail=50 fi fi echo "--- END DIAGNOSTICS ---" } > "$diag_file" 2>&1 # Also output to console for immediate visibility cat "$diag_file" log "INFO" "Diagnostics stored in $diag_file" } print_summary() { local host=$1 local status=$2 local last_stage=$(get_stage) local last_service=$(get_last_service) echo "" echo "==========================================" echo " DEPLOYMENT SUMMARY" echo "==========================================" echo "Host: $host" echo "Status: $status" echo "Last Stage: $last_stage" [[ -n "$last_service" ]] && echo "Last Service: $last_service" echo "Log File: $LOG_FILE" echo "==========================================" echo "" } export -f collect_diagnostics export -f print_summary