# Monitoring — Sprawdzanie URL

> Wiedz, że Twoje serwisy działają — zanim klienci zauważą problem

Monitoruj dostępność URL z konfigurowalnymi interwałami. Śledź uptime w perspektywie 24h, 7 dni i 30 dni, mierz czasy odpowiedzi i przeglądaj pełną historię checków.

## Funkcje

- **Konfigurowalny interwał**: Sprawdzaj co minuty, godziny lub dni. Elastyczne jednostki z przechowywaniem surowych wartości w bazie.
- **Uptime 24h / 7d / 30d**: Procent dostępności obliczany z SQL CASE statement. Widzisz trend na pierwszy rzut oka.
- **Pomiar czasu odpowiedzi**: Czas w milisekundach dla każdego checka. Średni czas z ostatnich 24h wyświetlany na stronie szczegółów.
- **Historia checków z paginacją**: 25 checków na stronę. Każdy ze statusem (sukces/błąd), czasem odpowiedzi i timestampem.
- **Włącz/wyłącz bez usuwania**: Toggle pozwala wstrzymać monitoring bez utraty historii i konfiguracji.
- **Ochrona przed SSRF**: Blokuje localhost, prywatne IP i adresy link-local. Rozwiązuje DNS i sprawdza IP przed wykonaniem requestu.

## Jak to działa

1. **Dodaj monitor**: Podaj URL i interwał sprawdzania (np. co 5 minut). Maksymalnie 20 monitorów na projekt.
2. **Worker sprawdza periodycznie**: Oddzielny worker wykonuje requesty HTTP w tle z asyncio.gather() dla równoległych sprawdzeń.
3. **Wyniki zapisywane w historii**: Każdy check to rekord w bazie: timestamp, czas odpowiedzi (ms), sukces/porażka.
4. **Analizuj w dashboardzie**: Strona szczegółów pokazuje trend uptime, średni czas odpowiedzi i pełną historię.

## AI i MCP

Agent AI może tworzyć, edytować i usuwać monitory, śledzić status i metryki — 5 narzędzi MCP.

- `list_monitors`: Wszystkie monitory z ostatnim statusem checka
- `get_monitor`: Pełna historia z paginacją, metryki uptime, średni czas odpowiedzi
- `create_monitor`: Utwórz nowy monitor URL z interwałem i oczekiwanym statusem
- `update_monitor`: Edytuj nazwę, URL, interwał lub oczekiwany status monitora
- `delete_monitor`: Usuń monitor wraz z historią checków

## Szczegóły techniczne

- **Worker**: Osobny proces (python -m monolynx.worker). Advisory lock w bazie zapewnia, że tylko jeden worker działa jednocześnie.
- **Równoległe sprawdzanie**: asyncio.gather() uruchamia wszystkie check'i jednocześnie. ThreadPoolExecutor dla samych requestów HTTP.
- **SSRF**: Walidacja: DNS resolution → ipaddress module → blokada prywatnych/loopback/link-local. Zabezpiecza przed atakami na sieć wewnętrzną.
- **Limit**: 20 monitorów na projekt. Chroni przed nadmiernym obciążeniem workera.
