#!/bin/bash echo "=== AITBC Miner Dashboard - Host Deployment ===" echo "" # Check if running on host with GPU if ! command -v nvidia-smi &> /dev/null; then echo "❌ nvidia-smi not found. Please install NVIDIA drivers." exit 1 fi # Create directory mkdir -p ~/miner-dashboard cd ~/miner-dashboard echo "✅ GPU detected: $(nvidia-smi --query-gpu=name --format=csv,noheader)" # Create dashboard HTML cat > index.html << 'EOF' AITBC GPU Miner Dashboard

AITBC Miner Dashboard

Host GPU Mining Operations

GPU Connected

Loading...

Real-time GPU Status

0%
GPU Utilization

Temperature

--°C

Power Usage

--W

Memory Used

--GB

Performance

--

Mining Status

Miner Idle

Ready to accept mining jobs

GPU Services Available

GPU Computing

CUDA cores ready

Available

Hash Generation

Proof-of-work capable

Available

AI Model Training

ML operations ready

Available

System Information

Host System

Loading...

GPU Driver

Loading...

CUDA Version

Loading...

EOF # Create Python server with API cat > server.py << 'EOF' import json import subprocess import socket from http.server import HTTPServer, BaseHTTPRequestHandler from urllib.parse import urlparse class MinerHandler(BaseHTTPRequestHandler): def do_GET(self): if self.path == '/api/gpu': self.send_json(self.get_gpu_info()) elif self.path == '/' or self.path == '/index.html': self.serve_file('index.html') else: self.send_error(404) def get_gpu_info(self): try: # Get GPU info result = subprocess.run(['nvidia-smi', '--query-gpu=name,utilization.gpu,temperature.gpu,power.draw,memory.used,memory.total,driver_version,cuda_version', '--format=csv,noheader,nounits'], capture_output=True, text=True) if result.returncode == 0: values = result.stdout.strip().split(', ') return { 'name': values[0], 'utilization': int(values[1]), 'temperature': int(values[2]), 'power': float(values[3]), 'memory_used': float(values[4]) / 1024, 'memory_total': float(values[5]) / 1024, 'driver_version': values[6], 'cuda_version': values[7], 'hostname': socket.gethostname(), 'performance_state': 'P8' # Would need additional query } except Exception as e: return {'error': str(e)} def send_json(self, data): self.send_response(200) self.send_header('Content-Type', 'application/json') self.end_headers() self.wfile.write(json.dumps(data).encode()) def serve_file(self, filename): try: with open(filename, 'r') as f: self.send_response(200) self.send_header('Content-Type', 'text/html') self.end_headers() self.wfile.write(f.read().encode()) except FileNotFoundError: self.send_error(404) if __name__ == '__main__': server = HTTPServer(('0.0.0.0', 8080), MinerHandler) print(''' ╔═══════════════════════════════════════╗ ║ AITBC Miner Dashboard ║ ║ Running on HOST with GPU access ║ ╠═══════════════════════════════════════╣ ║ Dashboard: http://localhost:8080 ║ ║ Host: $(hostname) ║ ║ GPU: $(nvidia-smi --query-gpu=name --format=csv,noheader) ║ ╚═══════════════════════════════════════╝ ''') server.serve_forever() EOF # Make server executable chmod +x server.py echo "" echo "✅ Dashboard created!" echo "" echo "To start the dashboard:" echo " cd ~/miner-dashboard" echo " python3 server.py" echo "" echo "Then access at: http://localhost:8080" echo "" echo "To auto-start on boot, add to crontab:" echo " @reboot cd ~/miner-dashboard && python3 server.py &"