FastAPI

Страница статуса и мониторинг uptime для приложений FastAPI

Мониторинг эндпоинтов FastAPI и async-воркеров. JSON-path ассершны естественны для health-схем FastAPI. Хостед или headless.

Три способа запустить страницу статуса для FastAPI

Выберите нужный уровень контроля — zero-code, low-code или полный headless.

Хостед

Добавьте FastAPI-эндпоинт, направьте CNAME на status.yourdomain.com — готово. 5 минут.

Headless

Через публичный API собрать свою UI прямо в FastAPI-приложении. Полный контроль дизайна и брендинга.

Смотреть API

Встраиваемые бейджи

SVG-бейджи uptime и статуса в README или лендинг. Обновляются каждые 5 минут.

Вставьте этот health endpoint в своё FastAPI-приложение

Скопируйте, вставьте, направьте PulseAPI на URL. 200 — здоров, 503 — деградация.

app/health.py
from fastapi import APIRouter, Response
from sqlalchemy import text
from .db import engine
from .redis import redis

router = APIRouter()


@router.get("/health")
async def health(response: Response) -> dict:
    checks: dict[str, str] = {}
    try:
        async with engine.connect() as conn:
            await conn.execute(text("SELECT 1"))
        checks["database"] = "ok"
    except Exception:
        checks["database"] = "fail"
    try:
        pong = await redis.ping()
        checks["cache"] = "ok" if pong else "fail"
    except Exception:
        checks["cache"] = "fail"
    healthy = all(v == "ok" for v in checks.values())
    response.status_code = 200 if healthy else 503
    return {"status": "healthy" if healthy else "degraded", **checks}

Монтируйте router в main app. 503 при частичном сбое — "деградация". JSON-path нативно на возвращаемой схеме.

Что ломается в FastAPI-приложениях и как это поймать

Async-дедлоки

Забытый `await` или sync-вызов в async блокирует event loop. Всплеск response time ловит моментально.

Баги миграции Pydantic v1→v2

Изменения валидации моделей тихо ломают эндпоинты. Body-ассершны на JSON ловят регрессии.

Падения upstream

Зависимости падают, эндпоинты отдают 502. PulseAPI ловит это до жалоб пользователей.

Headless-угол

Не нравится наша страница статуса? Соберите свою на FastAPI.

Наш API отдаёт те же данные, что потребляет наша хостед-UI. Полная OpenAPI-спека на api.pulseapi.tech/docs.

Эндпоинт FastAPI, проксирующий данные статуса в ваш собственный /status.
import httpx
from fastapi import APIRouter

router = APIRouter()


@router.get("/status")
async def status():
    async with httpx.AsyncClient(timeout=5) as client:
        r = await client.get("https://api.pulseapi.tech/status/acme")
        r.raise_for_status()
        return r.json()

Мониторинг FastAPI — FAQ

Работает с FastAPI, Starlette и Quart?

Да. Все трое отдают стандартный HTTP и мониторятся одинаково.

Можно мониторить воркеров (Dramatiq, Arq, Celery)?

Да. Сделайте health, пропускающий задачу через воркер. 503 при неудаче/таймауте.

Как работать с ответами Pydantic v1 vs v2?

PulseAPI ассертит по итоговому JSON. Схема может меняться, пока нужные поля есть.

Можно рендерить страницу статуса внутри FastAPI?

Да. Заберите API и рендерьте через Jinja2, или отдавайте JSON фронтенду. Структура в OpenAPI.

Запустите мониторинг FastAPI-приложения за 5 минут

Бесплатный тариф, без карты. Добавьте эндпоинт, получайте алерты о падениях.