Spaces:
Running
Running
Upload folder using huggingface_hub
Browse files- 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
|
|
|
|
| 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.
|
| 320 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 321 |
gpuHtml += `
|
| 322 |
-
<div class="gpu-card ${
|
| 323 |
<div class="gpu-head">
|
| 324 |
<span class="gpu-name">#${g.id} ${g.name}</span>
|
| 325 |
-
<span class="gpu-temp c-${tc}">${
|
| 326 |
</div>
|
| 327 |
<div class="gpu-meters">
|
| 328 |
<div>
|
| 329 |
-
<div class="gpu-meter-label"><span>
|
| 330 |
-
<div class="gpu-meter-bar"><div class="gpu-meter-fill bg-${pctColor(
|
| 331 |
</div>
|
| 332 |
<div>
|
| 333 |
-
<div class="gpu-meter-label"><span>
|
| 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(
|
| 369 |
-
<div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(
|
| 370 |
</div>
|
| 371 |
<div class="stat">
|
| 372 |
-
<div class="stat-label">
|
| 373 |
-
<div class="stat-value c-${pctColor(
|
| 374 |
-
<div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(
|
| 375 |
-
<div class="stat-sub">${
|
| 376 |
</div>
|
| 377 |
<div class="stat">
|
| 378 |
-
<div class="stat-label">DISK</div>
|
| 379 |
-
<div class="stat-value c-${pctColor(
|
| 380 |
-
<div class="stat-bar"><div class="stat-bar-fill bg-${pctColor(
|
| 381 |
-
<div class="stat-sub">${hw.
|
| 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}
|