v1
This commit is contained in:
33
server/routes/monitoring.py
Normal file
33
server/routes/monitoring.py
Normal file
@@ -0,0 +1,33 @@
|
||||
"""Operational monitoring routes."""
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
|
||||
from flask import Blueprint, jsonify
|
||||
|
||||
from ..database import db_cursor
|
||||
from ..metrics import export_metrics
|
||||
|
||||
bp = Blueprint("monitoring", __name__)
|
||||
|
||||
|
||||
@bp.route("/health", methods=["GET"])
|
||||
def health():
|
||||
"""Simple health endpoint used by orchestrators and Docker HEALTHCHECK."""
|
||||
try:
|
||||
with db_cursor(read_only=True) as (_, cur):
|
||||
cur.execute("SELECT 1")
|
||||
cur.fetchone()
|
||||
except Exception as exc: # pragma: no cover - logged for operators
|
||||
logging.exception("Health check DB failure: %s", exc)
|
||||
return jsonify({"status": "unhealthy"}), 500
|
||||
|
||||
return jsonify({"status": "ok"}), 200
|
||||
|
||||
|
||||
@bp.route("/metrics", methods=["GET"])
|
||||
def metrics():
|
||||
payload, status, headers = export_metrics()
|
||||
if isinstance(payload, dict):
|
||||
return jsonify(payload), status
|
||||
return payload, status, headers
|
||||
Reference in New Issue
Block a user