Karan6124 commited on
Commit
c281923
·
1 Parent(s): 3deefdf

fix: enforce PROMETHEUS_MULTIPROC_DIR at metrics layer top of file to fix multiprocess isolation

Browse files
app/main.py CHANGED
@@ -1,10 +1,16 @@
1
  import os
2
 
3
- # 1. Setup multi-process metrics directory env before importing prometheus
4
- os.environ["prometheus_multiproc_dir"] = os.path.join(os.path.dirname(__file__), "..", "prometheus_multiproc_dir")
 
5
 
6
- from fastapi import FastAPI, Response # type: ignore
7
- from fastapi.middleware.cors import CORSMiddleware # type: ignore
 
 
 
 
 
8
  from prometheus_client import CollectorRegistry, multiprocess, generate_latest, CONTENT_TYPE_LATEST
9
  from app.api.routes import router as cases_router
10
 
@@ -28,8 +34,15 @@ app.include_router(cases_router)
28
  # 2. Expose aggregate multi-process metrics endpoint
29
  @app.get("/metrics/")
30
  def metrics():
 
 
 
 
 
31
  registry = CollectorRegistry()
32
- multiprocess.MultiProcessCollector(registry)
 
 
33
  data = generate_latest(registry)
34
  return Response(content=data, media_type=CONTENT_TYPE_LATEST)
35
 
 
1
  import os
2
 
3
+ # 1. Setup absolute path for multi-process metrics
4
+ metrics_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "prometheus_multiproc_dir"))
5
+ os.environ["PROMETHEUS_MULTIPROC_DIR"] = metrics_path
6
 
7
+ print("--- DIAGNOSTICS STARTUP ---")
8
+ print("PROMETHEUS_MULTIPROC_DIR set to:", os.environ.get("PROMETHEUS_MULTIPROC_DIR"))
9
+ print("Does directory exist?:", os.path.isdir(metrics_path))
10
+ print("----------------------------")
11
+
12
+ from fastapi import FastAPI, Response # type: ignore
13
+ from fastapi.middleware.cors import CORSMiddleware # type: ignore
14
  from prometheus_client import CollectorRegistry, multiprocess, generate_latest, CONTENT_TYPE_LATEST
15
  from app.api.routes import router as cases_router
16
 
 
34
  # 2. Expose aggregate multi-process metrics endpoint
35
  @app.get("/metrics/")
36
  def metrics():
37
+ print("--- DIAGNOSTICS REQUEST ---")
38
+ print("PROMETHEUS_MULTIPROC_DIR in metrics request:", os.environ.get("PROMETHEUS_MULTIPROC_DIR"))
39
+ print("Is it a directory?:", os.path.isdir(os.environ.get("PROMETHEUS_MULTIPROC_DIR", "")))
40
+ print("----------------------------")
41
+
42
  registry = CollectorRegistry()
43
+ # Explicitly pass the path parameter to bypass the default env lookup
44
+ multiprocess.MultiProcessCollector(registry, path=metrics_path)
45
+
46
  data = generate_latest(registry)
47
  return Response(content=data, media_type=CONTENT_TYPE_LATEST)
48
 
app/observability/metrics.py CHANGED
@@ -1,3 +1,6 @@
 
 
 
1
  from prometheus_client import Counter, Histogram, Gauge
2
 
3
  # 1. Track Agent Latency (Histogram)
 
1
+ import os
2
+
3
+ os.environ["PROMETHEUS_MULTIPROC_DIR"]= os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "prometheus_multiproc_dir"))
4
  from prometheus_client import Counter, Histogram, Gauge
5
 
6
  # 1. Track Agent Latency (Histogram)
app/workers/celery_worker.py CHANGED
@@ -12,7 +12,7 @@ from app.observability.metrics import AGENT_LATENCY, AGENT_FAILURES
12
 
13
  load_dotenv()
14
 
15
- os.environ["prometheus_multiproc_dir"] = os.path.join(os.path.dirname(__file__), "..", "prometheus_multiproc_dir")
16
 
17
  # Configure Celery Logging
18
  logging.basicConfig(level=logging.INFO)
 
12
 
13
  load_dotenv()
14
 
15
+ os.environ["PROMETHEUS_MULTIPROC_DIR"] = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "prometheus_multiproc_dir"))
16
 
17
  # Configure Celery Logging
18
  logging.basicConfig(level=logging.INFO)