#!/usr/bin/env python3 """ Fleet Health Check Runner This script is executed by the DaemonControl scheduler every 5 minutes. It runs all fleet monitoring checks and logs the results. """ import sys import json from pathlib import Path # Add project root to path project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root)) from modules.fleet import FleetStatus def main(): """Run fleet health check and print results""" print("=" * 60) print("FLEET HEALTH CHECK") print("=" * 60) fleet = FleetStatus() status = fleet.get_status() # Print overall status overall = status['overall'] if overall == 'healthy': print("Overall Status: 🟢 HEALTHY") elif overall == 'warning': print("Overall Status: 🟡 WARNING") else: print("Overall Status: 🔴 CRITICAL") print() # Docker status docker = status['docker'] print(f"🐳 Docker: {docker.get('message', 'Unknown')}") if 'containers_running' in docker: print(f" Running: {docker['containers_running']}/{docker.get('containers_total', 0)}") if docker.get('containers_down'): print(f" Down: {', '.join(docker['containers_down'])}") print() # Tunnel status tunnel = status['tunnel'] print(f"🔒 Tunnel: {tunnel.get('message', 'Unknown')}") if tunnel.get('connected'): print(f" Latency: {tunnel.get('latency_ms', 0):.1f}ms") print(f" Packet Loss: {tunnel.get('packet_loss', 0)}%") print() # Backup status backup = status['backup'] print(f"💾 Backup: {backup.get('message', 'Unknown')}") if 'last_snapshot_age_hours' in backup: print(f" Age: {backup['last_snapshot_age_hours']}h ago") if 'snapshot_count' in backup: print(f" Total Snapshots: {backup['snapshot_count']}") print() # Disk status disk = status['disk'] print(f"📊 Disk: {disk.get('message', 'Unknown')}") if 'disks' in disk: for d in disk['disks']: print(f" {d['name']}: {d['used_percent']}% ({d['free_gb']}GB free)") print() print("=" * 60) # Store as JSON for potential parsing print() print("JSON Output:") print(json.dumps(status, indent=2)) # Exit with appropriate code if overall == 'critical': sys.exit(1) elif overall == 'warning': sys.exit(0) # Don't fail on warnings else: sys.exit(0) if __name__ == '__main__': main()