TrikozikGames commited on
Commit
ef07796
·
verified ·
1 Parent(s): 83fb75a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +231 -3
app.py CHANGED
@@ -6,7 +6,7 @@ import uvicorn
6
  app = FastAPI()
7
  start_time = time.time()
8
 
9
- # Вся киберпанк-страница зашита прямо сюда как HTML-текст
10
  CYBERPUNK_HTML = """
11
  <!DOCTYPE html>
12
  <html lang="ru">
@@ -141,5 +141,233 @@ CYBERPUNK_HTML = """
141
  .progress-bar {
142
  width: 100%;
143
  height: 8px;
144
- background: rgba(255,255,255,
145
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  app = FastAPI()
7
  start_time = time.time()
8
 
9
+ # Готовый HTML интерфейс
10
  CYBERPUNK_HTML = """
11
  <!DOCTYPE html>
12
  <html lang="ru">
 
141
  .progress-bar {
142
  width: 100%;
143
  height: 8px;
144
+ background: rgba(255,255,255,0.05);
145
+ margin-top: 8px;
146
+ border: 1px solid var(--neon-cyan);
147
+ }
148
+
149
+ .progress-fill {
150
+ height: 100%;
151
+ background: var(--neon-cyan);
152
+ width: 0%;
153
+ transition: width 0.5s ease-in-out;
154
+ }
155
+
156
+ .terminal {
157
+ background: rgba(5, 5, 15, 0.95);
158
+ border: 1px solid var(--neon-yellow);
159
+ padding: 15px;
160
+ font-size: 0.95rem;
161
+ color: var(--neon-yellow);
162
+ box-shadow: 0 0 10px rgba(254, 237, 1, 0.2);
163
+ height: 120px;
164
+ overflow-y: hidden;
165
+ margin-top: 20px;
166
+ }
167
+
168
+ .footer {
169
+ margin-top: 30px;
170
+ text-align: center;
171
+ font-size: 0.8rem;
172
+ color: rgba(0, 240, 255, 0.3);
173
+ }
174
+ </style>
175
+ </head>
176
+ <body>
177
+ <div class="container">
178
+ <header>
179
+ <h1 id="main-title">CYBERNET // CORE_WATCH_v2.5</h1>
180
+ <button class="lang-btn" id="lang-toggle" onclick="toggleLang()">EN</button>
181
+ </header>
182
+
183
+ <div class="grid">
184
+ <div class="card">
185
+ <div class="card-title" id="t-sys">> SESSION_INFO</div>
186
+ <ul class="spec-list">
187
+ <li><span id="t-uptime">Время аптайма:</span><span id="uptime">00h 00m 00s</span></li>
188
+ <li><span id="t-status">Статус ядра:</span><span style="color: #00ff66 !important; text-shadow: 0 0 5px #00ff66;">ACTIVE</span></li>
189
+ <li><span id="t-node">Локация ноды:</span><span>SPAIN_NET</span></li>
190
+ </ul>
191
+ </div>
192
+
193
+ <div class="card">
194
+ <div class="card-title" id="t-cpu">> HARDWARE_CPU</div>
195
+ <ul class="spec-list">
196
+ <li><span id="t-cpuname">Процессор:</span><span>Intel Core i5-10600K</span></li>
197
+ <li><span id="t-cores">Ядра / Потоки:</span><span>6 / 12 @ 4.8GHz</span></li>
198
+ <li><span id="t-cpuload">Нагрузка ядра:</span><span id="cpu-val">0%</span></li>
199
+ </ul>
200
+ <div class="progress-bar"><div class="progress-fill" id="cpu-bar"></div></div>
201
+ </div>
202
+
203
+ <div class="card">
204
+ <div class="card-title" id="t-mem">> MEMORY_NET</div>
205
+ <ul class="spec-list">
206
+ <li><span id="t-ram">ОЗУ Общая:</span><span>32 GB RAM (Kingston FURY)</span></li>
207
+ <li><span id="t-gpu">Видеокарта:</span><span>NVIDIA GTX 1660 Ti</span></li>
208
+ <li><span id="t-vram">Видеопамять:</span><span>6 GB GDDR6</span></li>
209
+ </ul>
210
+ <div class="progress-bar"><div class="progress-fill" id="ram-bar" style="background: var(--neon-magenta); width: 34%;"></div></div>
211
+ </div>
212
+
213
+ <div class="card">
214
+ <div class="card-title" id="t-net">> NETWORK_TARGET</div>
215
+ <ul class="spec-list">
216
+ <li><span>IP Локальный:</span><span>192.168.1.105</span></li>
217
+ <li><span>DNS Сервер:</span><span>1.1.1.1 // 8.8.8.8</span></li>
218
+ <li><span id="t-port">Порт шлюза:</span><span>7860 (SECURE)</span></li>
219
+ </ul>
220
+ </div>
221
+
222
+ <div class="card">
223
+ <div class="card-title" id="t-store">> STORAGE_DRIVES</div>
224
+ <ul class="spec-list">
225
+ <li><span>SSD (System Drive):</span><span>480 GB</span></li>
226
+ <li><span>HDD (Data Volume):</span><span>1000 GB (1 TB)</span></li>
227
+ <li><span id="t-fs">Разметка / ФС:</span><span>GPT / NTFS</span></li>
228
+ </ul>
229
+ </div>
230
+ </div>
231
+
232
+ <div class="terminal" id="term-logs">
233
+ [SYS] Инициализация матрицы мониторинга CyberNet...<br>
234
+ [NET] Сеть стабильна. Защита контейнера активна.<br>
235
+ [OK] Бот UptimeRobot подключен к скрытому эндпоинту.<br>
236
+ </div>
237
+
238
+ <div class="footer">
239
+ HOST: HF_DOCKER_CONTAINER // ACCESS_LEVEL: NETRUNNER_OVERRIDE
240
+ </div>
241
+ </div>
242
+
243
+ <script>
244
+ let currentLang = 'RU';
245
+
246
+ const dictionary = {
247
+ RU: {
248
+ title: "CYBERNET // МОНИТОРИНГ_��ИСТЕМЫ",
249
+ sys: "> ИНФОРМАЦИЯ_СЕССИИ",
250
+ uptime: "Время аптайма:",
251
+ status: "Статус ядра:",
252
+ node: "Локация ноды:",
253
+ cpu: "> ХАРАКТЕРИСТИКИ_ЦП",
254
+ cpuname: "Процессор:",
255
+ cores: "Ядра / Потоки:",
256
+ cpuload: "Нагрузка ядра:",
257
+ mem: "> СЕТЬ_ПАМЯТИ",
258
+ ram: "ОЗУ Общая:",
259
+ gpu: "Видеокарта:",
260
+ vram: "Видеопамять:",
261
+ net: "> СЕТЕВЫЕ_ПАРАМЕТРЫ",
262
+ port: "Порт шлюза:",
263
+ store: "> НАКОПИТЕЛИ_ДАННЫХ",
264
+ fs: "Разметка / ФС:"
265
+ },
266
+ EN: {
267
+ title: "CYBERNET // SYSTEM_WATCH_DOG",
268
+ sys: "> SESSION_INFO",
269
+ uptime: "Uptime Counter:",
270
+ status: "Core Status:",
271
+ node: "Node Location:",
272
+ cpu: "> HARDWARE_CPU",
273
+ cpuname: "CPU Name:",
274
+ cores: "Cores / Threads:",
275
+ cpuload: "Core Load:",
276
+ mem: "> MEMORY_NET",
277
+ ram: "Total RAM:",
278
+ gpu: "Graphics GPU:",
279
+ vram: "VRAM Volume:",
280
+ net: "> NETWORK_TARGET",
281
+ port: "Gateway Port:",
282
+ store: "> STORAGE_DRIVES",
283
+ fs: "Partition / FS:"
284
+ }
285
+ };
286
+
287
+ function toggleLang() {
288
+ currentLang = currentLang === 'RU' ? 'EN' : 'RU';
289
+ document.getElementById('lang-toggle').innerText = currentLang === 'RU' ? 'EN' : 'RU';
290
+
291
+ let d = dictionary[currentLang];
292
+ document.getElementById('main-title').innerText = d.title;
293
+ document.getElementById('t-sys').innerText = d.sys;
294
+ document.getElementById('t-uptime').innerText = d.uptime;
295
+ document.getElementById('t-status').innerText = d.status;
296
+ document.getElementById('t-node').innerText = d.node;
297
+ document.getElementById('t-cpu').innerText = d.cpu;
298
+ document.getElementById('t-cpuname').innerText = d.cpuname;
299
+ document.getElementById('t-cores').innerText = d.cores;
300
+ document.getElementById('t-cpuload').innerText = d.cpuload;
301
+ document.getElementById('t-mem').innerText = d.mem;
302
+ document.getElementById('t-ram').innerText = d.ram;
303
+ document.getElementById('t-gpu').innerText = d.gpu;
304
+ document.getElementById('t-vram').innerText = d.vram;
305
+ document.getElementById('t-net').innerText = d.net;
306
+ document.getElementById('t-port').innerText = d.port;
307
+ document.getElementById('t-store').innerText = d.store;
308
+ document.getElementById('t-fs').innerText = d.fs;
309
+ }
310
+
311
+ async function updateStats() {
312
+ try {
313
+ let currentPath = window.location.pathname;
314
+ if (!currentPath.endsWith('/')) currentPath += '/';
315
+
316
+ let res = await fetch(currentPath + 'api/stats');
317
+ let data = await res.json();
318
+
319
+ document.getElementById('uptime').innerText = data.uptime;
320
+
321
+ let fakeCpu = Math.floor(Math.random() * (38 - 12 + 1)) + 12;
322
+ document.getElementById('cpu-val').innerText = fakeCpu + '%';
323
+ document.getElementById('cpu-bar').style.width = fakeCpu + '%';
324
+ } catch (e) {
325
+ console.log("Error matrix reading...");
326
+ }
327
+ }
328
+
329
+ const terminalPhrases = [
330
+ "[OK] Проверка UptimeRobot: Статус 200 Принят.",
331
+ "[SYS] Оптимизация фоновых задач Windows / Docker активна.",
332
+ "[NET] Сканирование шлюзов... Атак не обнаружено.",
333
+ "[SYS] Пакеты синхронизированы с центральным процессором.",
334
+ "[OK] ОЗУ очищена. Задержка подсети минимальна."
335
+ ];
336
+
337
+ function updateTerminal() {
338
+ const term = document.getElementById('term-logs');
339
+ const randomPhrase = terminalPhrases[Math.floor(Math.random() * terminalPhrases.length)];
340
+ term.innerHTML += randomPhrase + "<br>";
341
+ term.scrollTop = term.scrollHeight;
342
+ if (term.innerHTML.split("<br>").length > 6) {
343
+ term.innerHTML = term.innerHTML.split("<br>").slice(1).join("<br>");
344
+ }
345
+ }
346
+
347
+ setInterval(updateStats, 2000);
348
+ setInterval(updateTerminal, 5000);
349
+ updateStats();
350
+ </script>
351
+ </body>
352
+ </html>
353
+ """
354
+
355
+ @app.get("/", response_class=HTMLResponse)
356
+ def read_root():
357
+ return HTMLResponse(content=CYBERPUNK_HTML, status_code=200)
358
+
359
+ @app.get("/api/stats")
360
+ def get_stats():
361
+ uptime_seconds = int(time.time() - start_time)
362
+ hours, remainder = divmod(uptime_seconds, 3600)
363
+ minutes, seconds = divmod(remainder, 60)
364
+ uptime_string = f"{hours:02d}h {minutes:02d}m {seconds:02d}s"
365
+ return {"uptime": uptime_string}
366
+
367
+ @app.api_route("/my_secret_ping_9912", methods=["GET", "HEAD", "POST"])
368
+ def ping():
369
+ return Response(content="Status: OK", media_type="text/plain")
370
+
371
+ if __name__ == "__main__":
372
+ uvicorn.run(app, host="0.0.0.0", port=7860)
373
+