Z User commited on
Commit
21d566d
·
1 Parent(s): 02c6295

fix: unbuffered logging + ThreadingHTTPServer for real-time SSE

Browse files
Files changed (1) hide show
  1. entry.py +13 -5
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 = HTTPServer(("0.0.0.0", 7860), DashboardHandler)
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