#!/usr/bin/env python3 """ Simple DDNS Dashboard for Home Server Elegant web interface showing DDNS status """ import json import subprocess from flask import Flask, jsonify, render_template_string from datetime import datetime app = Flask(__name__) # Simple HTML template DASHBOARD_HTML = """ DDNS Status - SamCloud
📡
wg.samcloud.ca
Loading...
Public IP
—
DNS IP
—
ddclient
—
Status
DDNS Monitor
—
Auto-refreshes every 30 seconds
""" def get_ddns_status(): """Get DDNS status from monitor script""" try: result = subprocess.run([ 'python3', '/Volumes/SamMgmt/CF DDClient/ddns_monitor.py', '--json' ], capture_output=True, text=True, timeout=15) if result.returncode == 0: return json.loads(result.stdout) else: return { "status": "error", "message": "Monitor script failed", "timestamp": datetime.now().isoformat() } except Exception as e: return { "status": "error", "message": f"Error: {str(e)}", "timestamp": datetime.now().isoformat() } @app.route('/') def dashboard(): """Main dashboard page""" return render_template_string(DASHBOARD_HTML) @app.route('/api/status') def api_status(): """API endpoint for status data""" return jsonify(get_ddns_status()) @app.route('/health') def health(): """Health check for monitoring""" return {'status': 'ok', 'service': 'ddns-dashboard'} if __name__ == '__main__': print("🌐 Starting DDNS Dashboard on http://localhost:54821") print(" Perfect for your home server dashboard!") app.run(host='0.0.0.0', port=54821, debug=False)