UNI12345 commited on
Commit
b0a61a2
·
1 Parent(s): 30294af

diagnose: add debug-worker endpoint to track background worker thread status

Browse files
Files changed (1) hide show
  1. app/main.py +16 -1
app/main.py CHANGED
@@ -56,6 +56,8 @@ app.include_router(settings_router.router, prefix="/api")
56
  app.include_router(legal.router, prefix="/api")
57
  app.include_router(projects.router, prefix="/api")
58
 
 
 
59
  @app.on_event("startup")
60
  async def startup_event():
61
  logger.info("Initializing database schemas...")
@@ -70,6 +72,7 @@ async def startup_event():
70
  import redis
71
  from rq import Queue, SimpleWorker as Worker
72
  try:
 
73
  conn = redis.Redis.from_url(settings.REDIS_URL)
74
  worker = Worker([Queue("default", connection=conn)], connection=conn)
75
  # Patch signal handler installation to prevent thread errors
@@ -84,13 +87,25 @@ async def startup_event():
84
  worker.death_penalty_class = ThreadSafeDeathPenalty
85
 
86
  logger.info("Starting RQ background worker...")
 
87
  worker.work(with_scheduler=True)
88
  except Exception as e:
 
 
89
  logger.error(f"Failed to start RQ background worker: {e}")
90
 
91
- threading.Thread(target=start_worker, daemon=True).start()
92
  logger.info("Background worker thread started. Ready for requests.")
93
 
94
  @app.get("/")
95
  def read_root():
96
  return {"status": "online", "app": settings.APP_NAME, "version": settings.API_VERSION}
 
 
 
 
 
 
 
 
 
 
56
  app.include_router(legal.router, prefix="/api")
57
  app.include_router(projects.router, prefix="/api")
58
 
59
+ worker_status = {"status": "not_started", "error": None}
60
+
61
  @app.on_event("startup")
62
  async def startup_event():
63
  logger.info("Initializing database schemas...")
 
72
  import redis
73
  from rq import Queue, SimpleWorker as Worker
74
  try:
75
+ worker_status["status"] = "starting"
76
  conn = redis.Redis.from_url(settings.REDIS_URL)
77
  worker = Worker([Queue("default", connection=conn)], connection=conn)
78
  # Patch signal handler installation to prevent thread errors
 
87
  worker.death_penalty_class = ThreadSafeDeathPenalty
88
 
89
  logger.info("Starting RQ background worker...")
90
+ worker_status["status"] = "running"
91
  worker.work(with_scheduler=True)
92
  except Exception as e:
93
+ worker_status["status"] = "failed"
94
+ worker_status["error"] = str(e)
95
  logger.error(f"Failed to start RQ background worker: {e}")
96
 
97
+ threading.Thread(target=start_worker, name="RQ-Worker-Thread", daemon=True).start()
98
  logger.info("Background worker thread started. Ready for requests.")
99
 
100
  @app.get("/")
101
  def read_root():
102
  return {"status": "online", "app": settings.APP_NAME, "version": settings.API_VERSION}
103
+
104
+ @app.get("/api/debug-worker")
105
+ def debug_worker():
106
+ import threading
107
+ active_threads = [t.name for t in threading.enumerate()]
108
+ return {
109
+ "worker_status": worker_status,
110
+ "active_threads": active_threads
111
+ }