Spaces:
Sleeping
Sleeping
fix: enforce PROMETHEUS_MULTIPROC_DIR at metrics layer top of file to fix multiprocess isolation
Browse files- app/main.py +18 -5
- app/observability/metrics.py +3 -0
- app/workers/celery_worker.py +1 -1
app/main.py
CHANGED
|
@@ -1,10 +1,16 @@
|
|
| 1 |
import os
|
| 2 |
|
| 3 |
-
# 1. Setup multi-process metrics
|
| 4 |
-
|
|
|
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
| 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["
|
| 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)
|