Monitoring & uptime
Trzy publiczne endpointy pod różne potrzeby monitorowania - od prostego pingu po per-komponentowy snapshot.
Po co
Każdy poważny integrator chce wiedzieć „czy NaprawKSeF żyje” zanim odpali własny cron przeciw naszemu API. Udostępniamy trzy warstwy monitoringu - od najtańszego (jeden ping co 60s) do najbogatszego (snapshot wszystkich komponentów + aktywne incydenty).
Wszystkie endpointy są publiczne (bez autentykacji), nie liczą się do limitu rate-limit per-API-key, i mają cache 30s na edge. Możesz pollować spokojnie z dowolnej częstotliwości - my odpowiadamy z cache.
Endpoint 1 - /healthz (jednostronicowy ping)
Najtańsze rozwiązanie: zwraca 200 OK z plain-text body „ok”. Nie dotyka bazy, nie loguje, działa nawet jeśli Supabase ma awarię.
curl -i https://naprawksef.pl/healthz
# HTTP/2 200
# content-type: text/plain; charset=utf-8
# cache-control: no-store
#
# okWspiera HEAD dla monitorów, które unikają body (oszczędność transferu w wolumenie). Użyj jako liveness probe w Kubernetes/Coolify, albo jako URL w UptimeRobot „Free plan”.
Endpoint 2 - /api/v1/health (JSON ze środowiskiem)
Identyczna semantyka co /healthz, ale zwraca JSON z numerem wersji API, środowiskiem i timestampem. Przydatne, gdy chcesz w jednym requeście wiedzieć „jaka wersja działa na produkcji”.
curl -s https://naprawksef.pl/api/v1/health | jq
{
"status": "ok",
"api_version": "1.0.0",
"timestamp": "2026-05-25T08:14:21.123Z",
"environment": "production"
}Endpoint 3 - /api/v1/status (per-komponentowy snapshot)
Bogaty snapshot wszystkich komponentów platformy (api, baza, email, webhooks), z 30- i 90-dniowym uptime, percentylami p50/p99, listą aktywnych incydentów. Backuje stronę /status.
curl -s https://naprawksef.pl/api/v1/status | jq '.overall, .components[].component'
"ok"
"api"
"database"
"email"
"webhooks"Alias dostępny pod kanoniczną nazwą: /api/v1/platform-status (identyczne body i nagłówki).
Tryb strict - HTTP 503 przy degradacji
Free-tiery większości monitorów (UptimeRobot, Better Stack) nie parsują JSON - alarmują wyłącznie na podstawie kodu HTTP. Dodaj ?strict=1:
# Wszystko OK:
curl -i 'https://naprawksef.pl/api/v1/status?strict=1' | head -1
# HTTP/2 200
# Komponent degraded/down → HTTP 503:
curl -i 'https://naprawksef.pl/api/v1/status?strict=1' | head -1
# HTTP/2 503Body pozostaje takie samo (pełen snapshot) - tylko status code się zmienia. Twój monitor zaalarmuje, a Ty masz pełną treść do podejrzenia w dashboardzie monitora.
?strict=1 - będą działać normalnie nawet podczas częściowej degradacji.Konfiguracja w popularnych monitorach
UptimeRobot
- Monitor type: HTTP(s)
- URL:
https://naprawksef.pl/api/v1/status?strict=1 - Monitoring interval: 5 min (free plan) lub 1 min (paid)
- Alert when: not 200 - alarm zadziała przy 503 (degraded).
Better Stack (Uptime)
- Monitor type: HTTP(s)
- URL:
https://naprawksef.pl/api/v1/status?strict=1 - Check frequency: 30s
- Optional: dodaj drugi monitor na
/healthzjako 1-second ping (cheaper).
Grafana / własny dashboard
# scrape co minutę, zapisz overall do TSDB
*/1 * * * * curl -s https://naprawksef.pl/api/v1/status | \
jq -r '"naprawksef_overall \(.overall) \(now)"' >> /var/log/naprawksef.metricsNasz /status page sam ciągnie z tego endpointu - możesz też po prostu zembedować iframe.
SLA i kredyty automatyczne
Płacisz za plan API? Mamy SLA 99.9% z automatyczną kompensatą:
- Uptime jest liczony z tych samych próbek, które widzisz w
/api/v1/status- żadnej osobnej infrastruktury, którą Ty musisz weryfikować. - Raz w miesiącu (1. dnia, 01:00 UTC) cron oblicza miesięczny uptime, generuje raport SLA i - jeśli zszedł poniżej 99.9% - wystawia kredyt:
- ≥ 99.0% → 10%
- ≥ 95.0% → 25%
- ≥ 90.0% → 50%
- < 90.0% → 100%
- Kredyt trafia jako customer balance w Stripe (auto-applied do następnej faktury). Idempotency key:
sla_credit:<report_id>- nie zdublujemy. - Klient widzi swoją historię SLA w /dashboard/sla (live projekcja na bieżący miesiąc + historia).