""" Fleet Monitor Job - Docker & Tunnel Checks Runs every 5 minutes to check: - Docker containers status - WireGuard tunnel connectivity Saves results to database for GUI consumption. """ def run(context): """Execute fleet monitoring checks.""" from modules.fleet.docker_monitor import DockerMonitor from modules.fleet.tunnel_monitor import TunnelMonitor from core.database import DatabaseManager import json from datetime import datetime db = DatabaseManager() docker_monitor = DockerMonitor() tunnel_monitor = TunnelMonitor() # Check Docker only docker = docker_monitor.check() db.save_fleet_status( check_type='docker', status=docker.get('status', 'unknown'), data=json.dumps(docker.get('details', [])), message=docker.get('message', 'No data') ) # Check Tunnel only tunnel = tunnel_monitor.check() db.save_fleet_status( check_type='tunnel', status=tunnel.get('status', 'unknown'), data=json.dumps({ 'connected': tunnel.get('connected', False), 'latency_ms': tunnel.get('latency_ms', 0), 'packet_loss': tunnel.get('packet_loss', 0) }), message=tunnel.get('message', 'No data') ) # Calculate overall status (only from docker + tunnel) statuses = [docker.get('status'), tunnel.get('status')] if 'critical' in statuses: overall = 'critical' elif 'warning' in statuses: overall = 'warning' else: overall = 'healthy' db.save_fleet_status( check_type='overall', status=overall, data=json.dumps({'timestamp': datetime.now().isoformat()}), message=f"Overall fleet status: {overall}" ) return { "status": "success", "docker": docker.get('status'), "tunnel": tunnel.get('status'), "overall": overall } if __name__ == '__main__': # Execute when run as a module import json result = run({}) print(json.dumps(result, indent=2))