docs(ocr): annotate metrics binding + /metrics exposure + pin client
Three small drops that pay back later: - Note that main.metrics is import-time bound and tests must monkeypatch `main.metrics`, not the registry. - Flag the /metrics endpoint as unauthenticated and cross-link the Caddy-block snippet in docs/OBSERVABILITY.md. - Pin prometheus-client to the exact 0.25.0 patch version already resolved by prometheus-fastapi-instrumentator 7.0.0, so an upstream bump cannot silently slip in. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -43,6 +43,10 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
_models_ready = False
|
_models_ready = False
|
||||||
|
|
||||||
|
# One-shot import-time binding to the default REGISTRY. Tests that need a
|
||||||
|
# clean counter state must monkeypatch `main.metrics` with a container built
|
||||||
|
# from a fresh CollectorRegistry — rebinding through the registry directly
|
||||||
|
# will not retarget the references stored in the OcrMetrics dataclass.
|
||||||
metrics: OcrMetrics = build_metrics(REGISTRY)
|
metrics: OcrMetrics = build_metrics(REGISTRY)
|
||||||
|
|
||||||
ALLOWED_PDF_HOSTS = set(
|
ALLOWED_PDF_HOSTS = set(
|
||||||
@@ -117,6 +121,9 @@ async def lifespan(app: FastAPI):
|
|||||||
|
|
||||||
app = FastAPI(title="Familienarchiv OCR Service", lifespan=lifespan)
|
app = FastAPI(title="Familienarchiv OCR Service", lifespan=lifespan)
|
||||||
|
|
||||||
|
# /metrics is unauthenticated — relies on Docker-internal-network exposure
|
||||||
|
# only (CWE-200 risk if `ports:` ever maps 8000 to host). See
|
||||||
|
# docs/OBSERVABILITY.md §Internal-only endpoints for the Caddy block snippet.
|
||||||
Instrumentator(excluded_handlers=["/health", "/metrics"]).instrument(app).expose(app)
|
Instrumentator(excluded_handlers=["/health", "/metrics"]).instrument(app).expose(app)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,3 +11,4 @@ httpx==0.28.1
|
|||||||
pyspellchecker==0.9.0
|
pyspellchecker==0.9.0
|
||||||
opencv-python-headless==4.11.0.86
|
opencv-python-headless==4.11.0.86
|
||||||
prometheus-fastapi-instrumentator==7.0.0
|
prometheus-fastapi-instrumentator==7.0.0
|
||||||
|
prometheus-client==0.25.0
|
||||||
|
|||||||
Reference in New Issue
Block a user