Skip to content

Commit b59b3c5

Browse files
authored
Merge pull request #129 from amazeeio/dev
Add Prometheus API key support and enhance metrics authorization handling
2 parents 6f9bb4b + eaf4338 commit b59b3c5

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

app/core/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Settings(BaseSettings):
3333
STRIPE_PUBLISHABLE_KEY: str = os.getenv("STRIPE_PUBLISHABLE_KEY", "pk_test_string")
3434
WEBHOOK_SIG: str = os.getenv("WEBHOOK_SIG", "whsec_test_1234567890")
3535
ENABLE_METRICS: bool = os.getenv("ENABLE_METRICS", "false") == "true"
36+
PROMETHEUS_API_KEY: str = os.getenv("PROMETHEUS_API_KEY", "")
3637

3738
model_config = ConfigDict(env_file=".env")
3839
main_route: str = os.getenv("LAGOON_ROUTE", "http://localhost:8800")

app/middleware/auth.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from fastapi import Request
2+
from fastapi.responses import JSONResponse
23
from starlette.middleware.base import BaseHTTPMiddleware
34
from app.core.security import get_current_user_from_auth
45
from app.db.database import get_db
@@ -13,6 +14,25 @@ async def dispatch(self, request: Request, call_next):
1314
if request.url.path in settings.PUBLIC_PATHS:
1415
return await call_next(request)
1516

17+
# Check Bearer token for /metrics endpoint
18+
if request.url.path == "/metrics":
19+
auth_header = request.headers.get("authorization")
20+
if auth_header and auth_header.startswith("Bearer "):
21+
bearer_token = auth_header.split(" ")[1]
22+
23+
if settings.PROMETHEUS_API_KEY and bearer_token == settings.PROMETHEUS_API_KEY:
24+
return await call_next(request)
25+
else:
26+
logger.info("Metrics Bearer token validation failed")
27+
else:
28+
logger.info("No valid Metrics Bearer token found in authorization header")
29+
30+
# If no valid Bearer token, return 404
31+
return JSONResponse(
32+
status_code=404,
33+
content={"detail": "Not Found"}
34+
)
35+
1636
# Initialize user as None
1737
request.state.user = None
1838

prometheus/prometheus.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@ scrape_configs:
77
static_configs:
88
- targets: ['backend:8800']
99
metrics_path: '/metrics'
10-
scheme: 'http'
10+
scheme: 'http'
11+
authorization:
12+
type: 'Bearer'
13+
credentials: 'test-key'

0 commit comments

Comments
 (0)