Spaces:
Paused
Paused
Update static/index.html
#1
by Nvrrrh - opened
- static/index.html +58 -9
static/index.html
CHANGED
|
@@ -28,6 +28,18 @@ body{background:#0d0d0d;font-family:"Courier New",monospace;color:#c8a84b}
|
|
| 28 |
.model-dot{width:6px;height:6px;background:#44aa99;border-radius:50%;flex-shrink:0}
|
| 29 |
.model-dot.glm{background:#c8a84b}
|
| 30 |
.model-name{font-size:11px;color:#c8a84b}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
.tank-section{background:#1a1200;border:1px solid #3a2a00;padding:1.5rem;margin-bottom:2rem}
|
| 32 |
.tank-title{font-size:14px;color:#cc0000;letter-spacing:3px;margin-bottom:1rem;font-weight:bold}
|
| 33 |
.tank-row{display:flex;gap:1rem;margin-bottom:8px;align-items:center}
|
|
@@ -57,7 +69,7 @@ body{background:#0d0d0d;font-family:"Courier New",monospace;color:#c8a84b}
|
|
| 57 |
<div class="status-row">
|
| 58 |
<div class="status-card"><div class="val online">● ONLINE</div><div class="lbl">PROXY STATUS</div></div>
|
| 59 |
<div class="status-card"><div class="val">24</div><div class="lbl">MODELOS ACTIVOS</div></div>
|
| 60 |
-
<div class="status-card"><div class="val">
|
| 61 |
</div>
|
| 62 |
<div class="section-label">// PUNTO DE ACCESO</div>
|
| 63 |
<div class="url-box">
|
|
@@ -76,6 +88,19 @@ body{background:#0d0d0d;font-family:"Courier New",monospace;color:#c8a84b}
|
|
| 76 |
<div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-5</div></div>
|
| 77 |
<div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-5-thinking</div></div>
|
| 78 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 79 |
<div class="section-label">// RAMA SOVIETICA — GUERRA FRIA</div>
|
| 80 |
<div class="tank-section">
|
| 81 |
<div class="tank-title">★ BLINDADOS SOVIETICOS 1960-1985</div>
|
|
@@ -89,25 +114,49 @@ body{background:#0d0d0d;font-family:"Courier New",monospace;color:#c8a84b}
|
|
| 89 |
</div>
|
| 90 |
<div class="footer"><span class="classified">★ CLASIFICADO ★</span> — ROW-PROXY v1.0 — CCCP AI GATEWAY — <span class="classified">★ CLASIFICADO ★</span></div>
|
| 91 |
<script>
|
|
|
|
|
|
|
| 92 |
function loadStats() {
|
| 93 |
fetch('/stats')
|
| 94 |
-
.then(r
|
| 95 |
-
.then(data
|
|
|
|
|
|
|
|
|
|
| 96 |
var keys = Object.values(data.keys || {});
|
| 97 |
-
keys.sort(function(a,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
var grid = document.getElementById('users-grid');
|
|
|
|
|
|
|
| 99 |
if (keys.length === 0) {
|
| 100 |
grid.innerHTML = '<div class="commander-card"><div class="cmd-name">Sin usuarios aun</div><div class="cmd-trait">SE EL PRIMERO EN USAR LA PROXY</div></div>';
|
| 101 |
return;
|
| 102 |
}
|
| 103 |
-
|
| 104 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
}).join('');
|
| 106 |
-
var freeEl = document.getElementById('free-count');
|
| 107 |
-
if (freeEl) freeEl.textContent = (data.free_reqs || 0) + '/340';
|
| 108 |
})
|
| 109 |
-
.catch(function(){
|
|
|
|
|
|
|
| 110 |
}
|
|
|
|
| 111 |
loadStats();
|
| 112 |
setInterval(loadStats, 30000);
|
| 113 |
</script>
|
|
|
|
| 28 |
.model-dot{width:6px;height:6px;background:#44aa99;border-radius:50%;flex-shrink:0}
|
| 29 |
.model-dot.glm{background:#c8a84b}
|
| 30 |
.model-name{font-size:11px;color:#c8a84b}
|
| 31 |
+
|
| 32 |
+
/* TOP USUARIOS */
|
| 33 |
+
.top-section{background:#1a1200;border:1px solid #3a2a00;padding:1.5rem;margin-bottom:2rem}
|
| 34 |
+
.top-title{font-size:14px;color:#c8a84b;letter-spacing:3px;margin-bottom:1rem;font-weight:bold}
|
| 35 |
+
.users-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
|
| 36 |
+
.commander-card{background:#0d0d0d;border:1px solid #2a1e00;border-left:3px solid #cc0000;padding:10px 14px}
|
| 37 |
+
.cmd-rank{font-size:10px;color:#cc0000;letter-spacing:2px;margin-bottom:4px}
|
| 38 |
+
.cmd-name{font-size:13px;color:#e8c86b;font-weight:bold;margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
| 39 |
+
.cmd-trait{font-size:10px;color:#7a6228;letter-spacing:1px}
|
| 40 |
+
.cmd-bar-wrap{margin-top:6px;background:#0a0a0a;height:4px;border:1px solid #2a1e00}
|
| 41 |
+
.cmd-bar{height:100%;background:#cc0000;transition:width 0.5s}
|
| 42 |
+
|
| 43 |
.tank-section{background:#1a1200;border:1px solid #3a2a00;padding:1.5rem;margin-bottom:2rem}
|
| 44 |
.tank-title{font-size:14px;color:#cc0000;letter-spacing:3px;margin-bottom:1rem;font-weight:bold}
|
| 45 |
.tank-row{display:flex;gap:1rem;margin-bottom:8px;align-items:center}
|
|
|
|
| 69 |
<div class="status-row">
|
| 70 |
<div class="status-card"><div class="val online">● ONLINE</div><div class="lbl">PROXY STATUS</div></div>
|
| 71 |
<div class="status-card"><div class="val">24</div><div class="lbl">MODELOS ACTIVOS</div></div>
|
| 72 |
+
<div class="status-card"><div class="val"><span id="free-count">0/340</span></div><div class="lbl">FREE REQUESTS</div></div>
|
| 73 |
</div>
|
| 74 |
<div class="section-label">// PUNTO DE ACCESO</div>
|
| 75 |
<div class="url-box">
|
|
|
|
| 88 |
<div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-5</div></div>
|
| 89 |
<div class="model-item"><div class="model-dot glm"></div><div class="model-name">glm-5-thinking</div></div>
|
| 90 |
</div>
|
| 91 |
+
|
| 92 |
+
<!-- SECCION TOP USUARIOS — ANTES FALTABA COMPLETAMENTE -->
|
| 93 |
+
<div class="section-label">// TOP COMANDANTES — RANKING DE CONSUMO</div>
|
| 94 |
+
<div class="top-section">
|
| 95 |
+
<div class="top-title">★ OPERADORES MAS ACTIVOS</div>
|
| 96 |
+
<div class="users-grid" id="users-grid">
|
| 97 |
+
<div class="commander-card">
|
| 98 |
+
<div class="cmd-name" style="color:#7a6228">Cargando datos...</div>
|
| 99 |
+
<div class="cmd-trait">CONSULTANDO SERVIDOR</div>
|
| 100 |
+
</div>
|
| 101 |
+
</div>
|
| 102 |
+
</div>
|
| 103 |
+
|
| 104 |
<div class="section-label">// RAMA SOVIETICA — GUERRA FRIA</div>
|
| 105 |
<div class="tank-section">
|
| 106 |
<div class="tank-title">★ BLINDADOS SOVIETICOS 1960-1985</div>
|
|
|
|
| 114 |
</div>
|
| 115 |
<div class="footer"><span class="classified">★ CLASIFICADO ★</span> — ROW-PROXY v1.0 — CCCP AI GATEWAY — <span class="classified">★ CLASIFICADO ★</span></div>
|
| 116 |
<script>
|
| 117 |
+
var RANKS = ['★★★','★★','★','⋅'];
|
| 118 |
+
|
| 119 |
function loadStats() {
|
| 120 |
fetch('/stats')
|
| 121 |
+
.then(function(r){ return r.json(); })
|
| 122 |
+
.then(function(data) {
|
| 123 |
+
var freeEl = document.getElementById('free-count');
|
| 124 |
+
if (freeEl) freeEl.textContent = (data.free_reqs || 0) + '/340';
|
| 125 |
+
|
| 126 |
var keys = Object.values(data.keys || {});
|
| 127 |
+
keys.sort(function(a, b){
|
| 128 |
+
var tokDiff = (b.tokens || 0) - (a.tokens || 0);
|
| 129 |
+
if (tokDiff !== 0) return tokDiff;
|
| 130 |
+
return (b.requests || 0) - (a.requests || 0);
|
| 131 |
+
});
|
| 132 |
+
|
| 133 |
var grid = document.getElementById('users-grid');
|
| 134 |
+
if (!grid) return;
|
| 135 |
+
|
| 136 |
if (keys.length === 0) {
|
| 137 |
grid.innerHTML = '<div class="commander-card"><div class="cmd-name">Sin usuarios aun</div><div class="cmd-trait">SE EL PRIMERO EN USAR LA PROXY</div></div>';
|
| 138 |
return;
|
| 139 |
}
|
| 140 |
+
|
| 141 |
+
var maxTokens = keys[0].tokens || keys[0].requests || 1;
|
| 142 |
+
|
| 143 |
+
grid.innerHTML = keys.slice(0, 4).map(function(k, i){
|
| 144 |
+
var pct = Math.round(((k.tokens || k.requests || 0) / maxTokens) * 100);
|
| 145 |
+
var tokens = (k.tokens || 0).toLocaleString();
|
| 146 |
+
var reqs = (k.requests || 0);
|
| 147 |
+
return '<div class="commander-card">'
|
| 148 |
+
+ '<div class="cmd-rank">' + (RANKS[i] || '⋅') + ' RANGO ' + (i+1) + '</div>'
|
| 149 |
+
+ '<div class="cmd-name">' + (k.name || k.key || 'Agente') + '</div>'
|
| 150 |
+
+ '<div class="cmd-trait">REQS: ' + reqs + ' // TOKENS: ' + tokens + '</div>'
|
| 151 |
+
+ '<div class="cmd-bar-wrap"><div class="cmd-bar" style="width:' + pct + '%"></div></div>'
|
| 152 |
+
+ '</div>';
|
| 153 |
}).join('');
|
|
|
|
|
|
|
| 154 |
})
|
| 155 |
+
.catch(function(err){
|
| 156 |
+
console.warn('Stats no disponibles:', err);
|
| 157 |
+
});
|
| 158 |
}
|
| 159 |
+
|
| 160 |
loadStats();
|
| 161 |
setInterval(loadStats, 30000);
|
| 162 |
</script>
|