SPB Git

spb/findata

Public
2.2 KB · 36 lines python
1from __future__ import annotations23from fastapi import APIRouter, Depends, Request, Response45from findata_api import auth as A6from findata_api.errors import ApiError7from findata_api.health import evaluate8from findata_api.metrics import render9from findata_core.db import connection1011router = APIRouter(tags=["health"])121314@router.get("/health")15def health(p: A.Principal = Depends(A.get_principal)):16    """Public liveness (no details) — authenticated callers get the full report."""17    h = evaluate()18    if p.kind == "anonymous":19        return {"status": h["status"], "service": "findata-os"}20    return h212223@router.get("/health/summary")24def summary(p: A.Principal = Depends(A.require("read:market"))):25    with connection() as conn:26        ds = conn.execute("SELECT count(*) FILTER (WHERE status='active') active, count(*) FILTER (WHERE status='planned') planned, "27                          "count(*) FILTER (WHERE status='unsupported') unsupported, count(*) FILTER (WHERE status='pending_configuration') pending FROM datasets").fetchone()28        inst = conn.execute("SELECT count(*) n, count(*) FILTER (WHERE status='active') active FROM instruments").fetchone()29        cov = conn.execute("SELECT count(DISTINCT symbol) symbols, count(DISTINCT session_date) sessions, sum(bar_count) bars, max(session_date) last FROM coverage WHERE dataset_id='market_bars.stock.1m.raw'").fetchone()30        jobs = conn.execute("SELECT status, count(*) n FROM ingest_jobs GROUP BY status").fetchall()31        recent = conn.execute("SELECT id, kind, dataset_id, status, started_at, finished_at, left(last_error,120) last_error, result FROM ingest_jobs ORDER BY created_at DESC LIMIT 8").fetchall()32        fund = conn.execute("SELECT count(DISTINCT entity_id) entities, count(*) facts FROM fundamentals_facts WHERE superseded_at IS NULL").fetchone()33        an = conn.execute("SELECT severity, count(*) n FROM quality_anomalies WHERE created_at > now() - interval '7 days' GROUP BY 1").fetchall()34    return {"datasets": ds, "instruments": inst, "bars_1m": cov, "jobs": {r["status"]: r["n"] for r in jobs}, "recent_jobs": recent,35            "fundamentals": fund, "anomalies_7d": {r["severity"]: r["n"] for r in an}, "health": evaluate()}36
Files · d6d35c99819515b0fe452508c04019b74b1f802d
Menu

Theme