Wendy-Fly commited on
Commit
9485a22
·
verified ·
1 Parent(s): 9f4df6f

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +33 -19
index.html CHANGED
@@ -309,28 +309,33 @@ function renderServer(data) {
309
  const gpus = hw.gpus || [];
310
  const tasks = data.tasks || [];
311
  const offline = isOffline(data.timestamp);
312
- const maxPct = Math.max(hw.cpu_percent || 0, hw.memory_percent || 0, hw.disk_percent || 0);
 
313
  const cardClass = offline ? 'danger' : maxPct >= 90 ? 'danger' : maxPct >= 70 ? 'warn' : '';
314
 
315
  let gpuHtml = '';
316
  if (gpus.length) {
317
- gpuHtml = `<div class="gpu-section"><div class="gpu-title">GPUs</div>`;
318
  for (const g of gpus) {
319
- const vramPct = g.memory_total_mb > 0 ? Math.round(g.memory_used_mb / g.memory_total_mb * 100) : 0;
320
- const tc = tempColor(g.temp_c);
 
 
 
 
321
  gpuHtml += `
322
- <div class="gpu-card ${g.temp_c >= 85 ? 'hot' : ''}">
323
  <div class="gpu-head">
324
  <span class="gpu-name">#${g.id} ${g.name}</span>
325
- <span class="gpu-temp c-${tc}">${g.temp_c}°C</span>
326
  </div>
327
  <div class="gpu-meters">
328
  <div>
329
- <div class="gpu-meter-label"><span>UTIL</span><span>${g.util_percent}%</span></div>
330
- <div class="gpu-meter-bar"><div class="gpu-meter-fill bg-${pctColor(g.util_percent)}" style="width:${g.util_percent}%"></div></div>
331
  </div>
332
  <div>
333
- <div class="gpu-meter-label"><span>VRAM</span><span>${vramPct}%</span></div>
334
  <div class="gpu-meter-bar"><div class="gpu-meter-fill bg-${pctColor(vramPct)}" style="width:${vramPct}%"></div></div>
335
  </div>
336
  </div>
@@ -353,6 +358,15 @@ function renderServer(data) {
353
  tasksHtml += `</div>`;
354
  }
355
 
 
 
 
 
 
 
 
 
 
356
  return `
357
  <div class="server-card ${cardClass}">
358
  <div class="card-head">
@@ -365,20 +379,20 @@ function renderServer(data) {
365
  <div class="stats">
366
  <div class="stat">
367
  <div class="stat-label">CPU</div>
368
- <div class="stat-value c-${pctColor(hw.cpu_percent || 0)}">${hw.cpu_percent || 0}<small>%</small></div>
369
- <div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(hw.cpu_percent || 0)}" style="width:${hw.cpu_percent || 0}%"></div></div>
370
  </div>
371
  <div class="stat">
372
- <div class="stat-label">MEM</div>
373
- <div class="stat-value c-${pctColor(hw.memory_percent || 0)}">${hw.memory_percent || 0}<small>%</small></div>
374
- <div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(hw.memory_percent || 0)}" style="width:${hw.memory_percent || 0}%"></div></div>
375
- <div class="stat-sub">${hw.memory_used_gb || 0}/${hw.memory_total_gb || 0}G</div>
376
  </div>
377
  <div class="stat">
378
- <div class="stat-label">DISK</div>
379
- <div class="stat-value c-${pctColor(hw.disk_percent || 0)}">${hw.disk_percent || 0}<small>%</small></div>
380
- <div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(hw.disk_percent || 0)}" style="width:${hw.disk_percent || 0}%"></div></div>
381
- <div class="stat-sub">${hw.disk_used_gb || 0}/${hw.disk_total_gb || 0}G</div>
382
  </div>
383
  </div>
384
  ${gpuHtml}
 
309
  const gpus = hw.gpus || [];
310
  const tasks = data.tasks || [];
311
  const offline = isOffline(data.timestamp);
312
+ const gpuMaxVram = gpus.length > 0 ? Math.max(...gpus.map(g => g.memory_percent != null ? g.memory_percent : (g.memory_total_mb > 0 ? g.memory_used_mb / g.memory_total_mb * 100 : 0))) : 0;
313
+ const maxPct = Math.max(hw.cpu_percent || 0, hw.memory_percent || 0, hw.disk_percent || 0, gpuMaxVram);
314
  const cardClass = offline ? 'danger' : maxPct >= 90 ? 'danger' : maxPct >= 70 ? 'warn' : '';
315
 
316
  let gpuHtml = '';
317
  if (gpus.length) {
318
+ gpuHtml = `<div class="gpu-section"><div class="gpu-title">GPUs (${gpus.length})</div>`;
319
  for (const g of gpus) {
320
+ const vramPct = g.memory_percent != null ? Math.round(g.memory_percent) :
321
+ (g.memory_total_mb > 0 ? Math.round(g.memory_used_mb / g.memory_total_mb * 100) : 0);
322
+ const utilPct = g.util_percent != null ? g.util_percent : vramPct;
323
+ const temp = g.temp_c != null ? g.temp_c : null;
324
+ const tc = temp != null ? tempColor(temp) : 'green';
325
+ const tempStr = temp != null ? `${temp}°C` : '';
326
  gpuHtml += `
327
+ <div class="gpu-card ${temp >= 85 ? 'hot' : ''}">
328
  <div class="gpu-head">
329
  <span class="gpu-name">#${g.id} ${g.name}</span>
330
+ <span class="gpu-temp c-${tc}">${tempStr}</span>
331
  </div>
332
  <div class="gpu-meters">
333
  <div>
334
+ <div class="gpu-meter-label"><span>VRAM</span><span>${vramPct}%</span></div>
335
+ <div class="gpu-meter-bar"><div class="gpu-meter-fill bg-${pctColor(vramPct)}" style="width:${vramPct}%"></div></div>
336
  </div>
337
  <div>
338
+ <div class="gpu-meter-label"><span>MEM</span><span>${g.memory_used_mb}/${g.memory_total_mb}MB</span></div>
339
  <div class="gpu-meter-bar"><div class="gpu-meter-fill bg-${pctColor(vramPct)}" style="width:${vramPct}%"></div></div>
340
  </div>
341
  </div>
 
358
  tasksHtml += `</div>`;
359
  }
360
 
361
+ // Compute summary stats - handle missing fields gracefully
362
+ const cpuPct = hw.cpu_percent || 0;
363
+ const memPct = hw.memory_percent || 0;
364
+ const diskPct = hw.disk_percent || 0;
365
+ // GPU average VRAM usage
366
+ const gpuAvgVram = gpus.length > 0
367
+ ? Math.round(gpus.reduce((s, g) => s + (g.memory_percent != null ? g.memory_percent : (g.memory_total_mb > 0 ? g.memory_used_mb / g.memory_total_mb * 100 : 0)), 0) / gpus.length)
368
+ : 0;
369
+
370
  return `
371
  <div class="server-card ${cardClass}">
372
  <div class="card-head">
 
379
  <div class="stats">
380
  <div class="stat">
381
  <div class="stat-label">CPU</div>
382
+ <div class="stat-value c-${pctColor(cpuPct)}">${cpuPct}<small>%</small></div>
383
+ <div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(cpuPct)}" style="width:${cpuPct}%"></div></div>
384
  </div>
385
  <div class="stat">
386
+ <div class="stat-label">GPU AVG</div>
387
+ <div class="stat-value c-${pctColor(gpuAvgVram)}">${gpuAvgVram}<small>%</small></div>
388
+ <div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(gpuAvgVram)}" style="width:${gpuAvgVram}%"></div></div>
389
+ <div class="stat-sub">${gpus.length}x GPU</div>
390
  </div>
391
  <div class="stat">
392
+ <div class="stat-label">${diskPct ? 'DISK' : 'MEM'}</div>
393
+ <div class="stat-value c-${pctColor(diskPct || memPct)}">${diskPct || memPct || '--'}<small>${(diskPct || memPct) ? '%' : ''}</small></div>
394
+ <div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(diskPct || memPct)}" style="width:${diskPct || memPct || 0}%"></div></div>
395
+ <div class="stat-sub">${hw.memory_used_gb ? hw.memory_used_gb + '/' + hw.memory_total_gb + 'G' : ''}</div>
396
  </div>
397
  </div>
398
  ${gpuHtml}