Files
HomeAudit/monitor_audit.sh
2025-08-24 11:13:39 -04:00

171 lines
4.7 KiB
Bash
Executable File

#!/bin/bash
# ===============================================================================
# HomeAudit Monitoring Script
# Shows real-time progress of audit deployment
# ===============================================================================
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
print_status() {
echo -e "${BLUE}[MONITOR]${NC} $1"
}
print_success() {
echo -e "${GREEN}[COMPLETE]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Get expected hosts from inventory
get_expected_hosts() {
grep -E '^[a-zA-Z]' inventory.ini | grep -v '^#' | grep -v '^\[.*\]' | awk '{print $1}' | grep -v 'ansible_' | sort
}
# Get completed hosts
get_completed_hosts() {
if [ -d "audit_results" ]; then
ls audit_results/ 2>/dev/null | grep -v '\.md$' | grep -v '\.json$' | sort
else
echo ""
fi
}
# Check if Ansible is still running
is_ansible_running() {
ps aux | grep ansible | grep -v grep | grep -v monitor_audit >/dev/null 2>&1
}
# Show progress
show_progress() {
local expected_hosts=($(get_expected_hosts))
local completed_hosts=($(get_completed_hosts))
local total_expected=${#expected_hosts[@]}
local total_completed=${#completed_hosts[@]}
echo "========================================"
echo "HomeAudit Deployment Progress Monitor"
echo "========================================"
echo "Total Expected Hosts: $total_expected"
echo "Completed Hosts: $total_completed"
echo "Progress: $total_completed/$total_expected ($(($total_completed * 100 / $total_expected))%)"
echo ""
if [ $total_completed -gt 0 ]; then
echo "✅ Completed:"
for host in "${completed_hosts[@]}"; do
print_success "$host"
done
echo ""
fi
if [ $total_completed -lt $total_expected ]; then
echo "⏳ Pending:"
for host in "${expected_hosts[@]}"; do
if [[ ! " ${completed_hosts[@]} " =~ " ${host} " ]]; then
print_warning "$host"
fi
done
echo ""
fi
# Check for final reports
if [ -f "audit_results/consolidated_report.md" ]; then
print_success "Final consolidated report generated!"
echo "📊 Report: audit_results/consolidated_report.md"
fi
if [ -f "audit_results/dashboard.html" ]; then
print_success "HTML dashboard generated!"
echo "🌐 Dashboard: audit_results/dashboard.html"
fi
}
# Monitor mode
monitor_mode() {
print_status "Starting real-time monitoring..."
print_status "Press Ctrl+C to stop monitoring"
echo ""
while true; do
clear
show_progress
if ! is_ansible_running; then
if [ $(get_completed_hosts | wc -l) -eq $(get_expected_hosts | wc -l) ]; then
print_success "🎉 AUDIT DEPLOYMENT COMPLETE!"
echo ""
echo "Final Results:"
echo "📁 Results Directory: audit_results/"
echo "📊 Summary: audit_results/consolidated_report.md"
echo "🌐 Dashboard: audit_results/dashboard.html"
break
else
print_warning "Ansible finished but some hosts may have failed"
echo "Check the logs above for details"
break
fi
fi
print_status "Ansible still running... checking again in 10 seconds"
sleep 10
done
}
# Single status check
status_check() {
show_progress
if is_ansible_running; then
print_status "Ansible is currently running"
else
if [ $(get_completed_hosts | wc -l) -eq $(get_expected_hosts | wc -l) ]; then
print_success "Audit deployment is complete!"
else
print_warning "Ansible finished but deployment may be incomplete"
fi
fi
}
# Main function
main() {
case "${1:-status}" in
"monitor"|"-m")
monitor_mode
;;
"status"|"-s")
status_check
;;
"help"|"-h"|"--help")
echo "Usage: $0 [option]"
echo ""
echo "Options:"
echo " monitor, -m Real-time monitoring mode"
echo " status, -s Single status check (default)"
echo " help, -h Show this help"
echo ""
echo "Examples:"
echo " $0 # Quick status check"
echo " $0 monitor # Real-time monitoring"
echo " $0 status # Single status check"
;;
*)
status_check
;;
esac
}
# Run main function
main "$@"