Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
from flask import Flask, render_template, Response
|
| 2 |
import requests
|
| 3 |
import json
|
| 4 |
from threading import Lock, Thread
|
|
@@ -349,29 +349,35 @@ def connect_and_listen(instance):
|
|
| 349 |
url = f"https://api.hf.space/v1/{username}/{space_id}/live-metrics/sse"
|
| 350 |
print(f"Connecting to SSE for space: {space_id}")
|
| 351 |
|
| 352 |
-
while True:
|
| 353 |
try:
|
| 354 |
-
|
| 355 |
-
|
|
|
|
|
|
|
| 356 |
event_sources[space_id] = response
|
| 357 |
|
| 358 |
-
|
| 359 |
-
|
| 360 |
-
|
| 361 |
-
|
| 362 |
-
|
| 363 |
-
|
| 364 |
-
if
|
| 365 |
-
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
|
| 369 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 370 |
|
| 371 |
except requests.exceptions.RequestException as e:
|
| 372 |
print(f"Connection error for {space_id}: {e}, retrying in 5 seconds...")
|
| 373 |
-
time.sleep(5)
|
| 374 |
-
except Exception as e:
|
| 375 |
print(f"Unexpected error for {space_id}: {e}, retrying in 5 seconds...")
|
| 376 |
time.sleep(5)
|
| 377 |
|
|
@@ -430,7 +436,7 @@ def home():
|
|
| 430 |
// 1. 移除不再存在的卡片
|
| 431 |
let currentCards = currentServers.querySelectorAll('.server-card');
|
| 432 |
currentCards.forEach(card => {{
|
| 433 |
-
if (!newServers.querySelector(`#${card.id}`)) {{
|
| 434 |
card.remove();
|
| 435 |
}}
|
| 436 |
}});
|
|
@@ -438,7 +444,7 @@ def home():
|
|
| 438 |
// 2. 添加/更新卡片
|
| 439 |
let newCards = newServers.querySelectorAll('.server-card');
|
| 440 |
newCards.forEach(newCard => {{
|
| 441 |
-
let currentCard = currentServers.querySelector(`#${newCard.id}`);
|
| 442 |
if (currentCard) {{
|
| 443 |
// 更新现有卡片
|
| 444 |
currentCard.innerHTML = newCard.innerHTML;
|
|
@@ -485,4 +491,4 @@ if __name__ == "__main__":
|
|
| 485 |
# 启动后台任务
|
| 486 |
thread = Thread(target=background_task, daemon=True)
|
| 487 |
thread.start()
|
| 488 |
-
app.run(debug=True, host="0.0.0.0", port=7860)
|
|
|
|
| 1 |
+
from flask import Flask, render_template, Response, render_template_string
|
| 2 |
import requests
|
| 3 |
import json
|
| 4 |
from threading import Lock, Thread
|
|
|
|
| 349 |
url = f"https://api.hf.space/v1/{username}/{space_id}/live-metrics/sse"
|
| 350 |
print(f"Connecting to SSE for space: {space_id}")
|
| 351 |
|
| 352 |
+
while True: # 持续重连循环
|
| 353 |
try:
|
| 354 |
+
# Add the Accept header for SSE
|
| 355 |
+
headers = {'Accept': 'text/event-stream'}
|
| 356 |
+
response = requests.get(url, stream=True, headers=headers)
|
| 357 |
+
response.raise_for_status() # 检查请求是否成功, 4xx or 5xx errors
|
| 358 |
event_sources[space_id] = response
|
| 359 |
|
| 360 |
+
# Check if the response is valid before accessing .raw
|
| 361 |
+
if response and hasattr(response, 'raw'):
|
| 362 |
+
for line in response.iter_lines():
|
| 363 |
+
if line:
|
| 364 |
+
line = line.decode("utf-8").strip()
|
| 365 |
+
# print(f"Received line from SSE ({space_id}): {line}") # 调试
|
| 366 |
+
if line.startswith("event: metric"):
|
| 367 |
+
data_line = next(response.iter_lines()).decode("utf-8").strip()
|
| 368 |
+
if data_line.startswith("data: "):
|
| 369 |
+
try:
|
| 370 |
+
data = json.loads(data_line[6:])
|
| 371 |
+
update_server_data(data, space_id, username)
|
| 372 |
+
except json.JSONDecodeError:
|
| 373 |
+
print(f"Error decoding JSON for {space_id}: {data_line}")
|
| 374 |
+
else:
|
| 375 |
+
print(f"Invalid response from SSE for {space_id}")
|
| 376 |
|
| 377 |
except requests.exceptions.RequestException as e:
|
| 378 |
print(f"Connection error for {space_id}: {e}, retrying in 5 seconds...")
|
| 379 |
+
time.sleep(5) # 重连间隔
|
| 380 |
+
except Exception as e: # Catch other potential errors
|
| 381 |
print(f"Unexpected error for {space_id}: {e}, retrying in 5 seconds...")
|
| 382 |
time.sleep(5)
|
| 383 |
|
|
|
|
| 436 |
// 1. 移除不再存在的卡片
|
| 437 |
let currentCards = currentServers.querySelectorAll('.server-card');
|
| 438 |
currentCards.forEach(card => {{
|
| 439 |
+
if (!newServers.querySelector(`#${{card.id}}`)) {{ // Corrected string interpolation
|
| 440 |
card.remove();
|
| 441 |
}}
|
| 442 |
}});
|
|
|
|
| 444 |
// 2. 添加/更新卡片
|
| 445 |
let newCards = newServers.querySelectorAll('.server-card');
|
| 446 |
newCards.forEach(newCard => {{
|
| 447 |
+
let currentCard = currentServers.querySelector(`#${{newCard.id}}`);
|
| 448 |
if (currentCard) {{
|
| 449 |
// 更新现有卡片
|
| 450 |
currentCard.innerHTML = newCard.innerHTML;
|
|
|
|
| 491 |
# 启动后台任务
|
| 492 |
thread = Thread(target=background_task, daemon=True)
|
| 493 |
thread.start()
|
| 494 |
+
app.run(debug=True, host="0.0.0.0", port=7860)
|