Spaces:
Running
Running
Z User commited on
Commit ·
21d566d
1
Parent(s): 02c6295
fix: unbuffered logging + ThreadingHTTPServer for real-time SSE
Browse files
entry.py
CHANGED
|
@@ -16,11 +16,17 @@ import logging
|
|
| 16 |
import psutil
|
| 17 |
from datetime import datetime, timezone
|
| 18 |
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
|
|
| 19 |
from pathlib import Path
|
| 20 |
from urllib.parse import urlparse, parse_qs
|
| 21 |
from queue import Queue, Empty
|
| 22 |
from io import BytesIO
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
# ---------------------------------------------------------------------------
|
| 25 |
# Paths
|
| 26 |
# ---------------------------------------------------------------------------
|
|
@@ -421,10 +427,11 @@ class DashboardHandler(BaseHTTPRequestHandler):
|
|
| 421 |
env = os.environ.copy()
|
| 422 |
env["HERMES_ACCEPT_HOOKS"] = "1"
|
| 423 |
env["MEMPALACE_PALACE_PATH"] = os.path.join(DATA_DIR, "palace")
|
|
|
|
| 424 |
|
| 425 |
_gateway_process = subprocess.Popen(
|
| 426 |
-
[sys.executable, "-m", "hermes_cli.main", "gateway", "run", "-v"],
|
| 427 |
-
stdout=open(LOG_FILE, "a"),
|
| 428 |
stderr=subprocess.STDOUT,
|
| 429 |
env=env,
|
| 430 |
cwd="/app/hermes-agent",
|
|
@@ -488,12 +495,13 @@ def main():
|
|
| 488 |
env = os.environ.copy()
|
| 489 |
env["HERMES_ACCEPT_HOOKS"] = "1"
|
| 490 |
env["MEMPALACE_PALACE_PATH"] = os.path.join(DATA_DIR, "palace")
|
|
|
|
| 491 |
|
| 492 |
os.makedirs(LOG_DIR, exist_ok=True)
|
| 493 |
-
log_fh = open(LOG_FILE, "a")
|
| 494 |
|
| 495 |
_gateway_process = subprocess.Popen(
|
| 496 |
-
[sys.executable, "-m", "hermes_cli.main", "gateway", "run", "-v"],
|
| 497 |
stdout=log_fh,
|
| 498 |
stderr=subprocess.STDOUT,
|
| 499 |
env=env,
|
|
@@ -502,7 +510,7 @@ def main():
|
|
| 502 |
logger.info("Gateway started (PID: %d)", _gateway_process.pid)
|
| 503 |
|
| 504 |
# Start dashboard HTTP server
|
| 505 |
-
server =
|
| 506 |
logger.info("Dashboard listening on :7860")
|
| 507 |
server.serve_forever()
|
| 508 |
|
|
|
|
| 16 |
import psutil
|
| 17 |
from datetime import datetime, timezone
|
| 18 |
from http.server import HTTPServer, BaseHTTPRequestHandler
|
| 19 |
+
from socketserver import ThreadingMixIn
|
| 20 |
from pathlib import Path
|
| 21 |
from urllib.parse import urlparse, parse_qs
|
| 22 |
from queue import Queue, Empty
|
| 23 |
from io import BytesIO
|
| 24 |
|
| 25 |
+
|
| 26 |
+
class ThreadingHTTPServer(ThreadingMixIn, HTTPServer):
|
| 27 |
+
daemon_threads = True
|
| 28 |
+
allow_reuse_address = True
|
| 29 |
+
|
| 30 |
# ---------------------------------------------------------------------------
|
| 31 |
# Paths
|
| 32 |
# ---------------------------------------------------------------------------
|
|
|
|
| 427 |
env = os.environ.copy()
|
| 428 |
env["HERMES_ACCEPT_HOOKS"] = "1"
|
| 429 |
env["MEMPALACE_PALACE_PATH"] = os.path.join(DATA_DIR, "palace")
|
| 430 |
+
env["PYTHONUNBUFFERED"] = "1"
|
| 431 |
|
| 432 |
_gateway_process = subprocess.Popen(
|
| 433 |
+
[sys.executable, "-u", "-m", "hermes_cli.main", "gateway", "run", "-v"],
|
| 434 |
+
stdout=open(LOG_FILE, "a", buffering=1),
|
| 435 |
stderr=subprocess.STDOUT,
|
| 436 |
env=env,
|
| 437 |
cwd="/app/hermes-agent",
|
|
|
|
| 495 |
env = os.environ.copy()
|
| 496 |
env["HERMES_ACCEPT_HOOKS"] = "1"
|
| 497 |
env["MEMPALACE_PALACE_PATH"] = os.path.join(DATA_DIR, "palace")
|
| 498 |
+
env["PYTHONUNBUFFERED"] = "1" # 关键:禁用输出缓冲,日志实时写入文件
|
| 499 |
|
| 500 |
os.makedirs(LOG_DIR, exist_ok=True)
|
| 501 |
+
log_fh = open(LOG_FILE, "a", buffering=1) # 行缓冲
|
| 502 |
|
| 503 |
_gateway_process = subprocess.Popen(
|
| 504 |
+
[sys.executable, "-u", "-m", "hermes_cli.main", "gateway", "run", "-v"],
|
| 505 |
stdout=log_fh,
|
| 506 |
stderr=subprocess.STDOUT,
|
| 507 |
env=env,
|
|
|
|
| 510 |
logger.info("Gateway started (PID: %d)", _gateway_process.pid)
|
| 511 |
|
| 512 |
# Start dashboard HTTP server
|
| 513 |
+
server = ThreadingHTTPServer(("0.0.0.0", 7860), DashboardHandler)
|
| 514 |
logger.info("Dashboard listening on :7860")
|
| 515 |
server.serve_forever()
|
| 516 |
|