<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>GPU Stats</title>
  <style>
    body {
      background-color: #121212;
      color: #ffffff;
      font-family: Arial, sans-serif;
      padding: 20px;
      line-height: 1.6;
    }
    .container {
      max-width: 800px;
      margin: 0 auto;
      padding: 20px;
      border: 1px solid #333;
      border-radius: 10px;
      background-color: #1e1e1e;
    }
    .title {
      font-size: 2em;
      margin-bottom: 20px;
      text-align: center;
    }
    .stat-group {
      margin-bottom: 20px;
    }
    .stat-group h2 {
      font-size: 1.5em;
      margin-bottom: 10px;
      border-bottom: 1px solid #444;
      padding-bottom: 5px;
    }
    .stat {
      margin-bottom: 10px;
    }
    .stat span {
      font-weight: bold;
    }
    pre {
      white-space: pre-wrap;
      word-wrap: break-word;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="title">GPU Statistics</div>
    <div id="gpu-stats"></div>
  </div>

  <script>
    async function fetchGpuStats() {
      try {
        const response = await fetch('https://smi.x64.world/nvidia-smi');
        const data = await response.json();
        displayStats(data);
      } catch (error) {
        console.error('Error fetching GPU stats:', error);
      }
    }

    function displayStats(data) {
      const gpuStatsDiv = document.getElementById('gpu-stats');
      const gpu = data.nvidia_smi_log.gpu;

      gpuStatsDiv.innerHTML = `
        <div class="stat-group">
          <h2>Processes</h2>
          ${Array.isArray(gpu.processes.process_info) ? gpu.processes.process_info.map(process => `
            <div class="stat"><span>Process ID:</span> ${process.pid}, <span>Name:</span> ${process.process_name}, <span>Memory Used:</span> ${process.used_memory}</div>
          `).join('') : `<div class="stat"><span>Process ID:</span> ${gpu.processes.process_info.pid}, <span>Name:</span> ${gpu.processes.process_info.process_name}, <span>Memory Used:</span> ${gpu.processes.process_info.used_memory}</div>`}
        </div>
        <div class="stat-group">
          <h2>Utilization</h2>
          <div class="stat"><span>GPU Utilization:</span> ${gpu.utilization.gpu_util}</div>
          <div class="stat"><span>Memory Utilization:</span> ${gpu.utilization.memory_util}</div>
        </div>
        <div class="stat-group">
          <h2>Clocks</h2>
          <div class="stat"><span>Graphics Clock:</span> ${gpu.clocks.graphics_clock}</div>
          <div class="stat"><span>SM Clock:</span> ${gpu.clocks.sm_clock}</div>
          <div class="stat"><span>Memory Clock:</span> ${gpu.clocks.mem_clock}</div>
          <div class="stat"><span>Video Clock:</span> ${gpu.clocks.video_clock}</div>
        </div>
        <div class="stat-group">
          <h2>Memory Usage</h2>
          <div class="stat"><span>Total FB Memory:</span> ${gpu.fb_memory_usage.total}</div>
          <div class="stat"><span>Used FB Memory:</span> ${gpu.fb_memory_usage.used}</div>
          <div class="stat"><span>Free FB Memory:</span> ${gpu.fb_memory_usage.free}</div>
        </div>
        <div class="stat-group">
          <h2>Performance</h2>
          <div class="stat"><span>Performance State:</span> ${gpu.performance_state}</div>
          <div class="stat"><span>Fan Speed:</span> ${gpu.fan_speed}</div>
          <div class="stat"><span>Power Draw:</span> ${gpu.gpu_power_readings.power_draw}</div>
        </div>
        <div class="stat-group">
          <h2>General Information</h2>
          <div class="stat"><span>Product Name:</span> ${gpu.product_name}</div>
          <div class="stat"><span>Product Brand:</span> ${gpu.product_brand}</div>
          <div class="stat"><span>Architecture:</span> ${gpu.product_architecture}</div>
          <div class="stat"><span>UUID:</span> ${gpu.uuid}</div>
          <div class="stat"><span>VBIOS Version:</span> ${gpu.vbios_version}</div>
        </div>
      `;
    }

    window.onload = () => {
      fetchGpuStats();
      setInterval(fetchGpuStats, 2000);
    };
  </script>
</body>
</html>