#!/usr/bin/env python3 """Serve NVIDIA GPU stats as JSON for Homepage customapi widget.""" import subprocess, json from http.server import HTTPServer, BaseHTTPRequestHandler class GPUHandler(BaseHTTPRequestHandler): def do_GET(self): try: r = subprocess.run( ['nvidia-smi', '--query-gpu=utilization.gpu,memory.used,memory.total,temperature.gpu,fan.speed', '--format=csv,noheader,nounits'], capture_output=True, text=True, timeout=5 ) parts = [p.strip() for p in r.stdout.strip().split(',')] data = { 'gpu_util': parts[0] + '%', 'mem_used': parts[1], 'mem_total': parts[2], 'mem': f'{parts[1]} / {parts[2]} MiB', 'temp': parts[3] + '°C', 'fan': parts[4] + '%', } except Exception as e: data = {'error': str(e)} self.send_response(200) self.send_header('Content-Type', 'application/json') self.send_header('Access-Control-Allow-Origin', '*') self.end_headers() self.wfile.write(json.dumps(data).encode()) def log_message(self, format, *args): pass # suppress logs HTTPServer(('0.0.0.0', 9999), GPUHandler).serve_forever()