Кейс · Go-бэкенд
Пульс: монитор доступности
Монитор доступности: HTTP и TCP проверки по расписанию, аптайм, p50/p95, детектор инцидентов, живой дашборд на SSE и публичная статус-страница. Go + SQLite без CGO.
- Go
- SQLite
- SSE
- REST API
- Docker
01 · Как выглядит
Скриншоты


02 · О проекте
Что это и зачем
Монитор доступности «Пульс»: по расписанию проверяет HTTP-адреса и TCP-порты, хранит историю в SQLite, считает аптайм и задержки p50/p95 и открывает инцидент после серии падений подряд.
Результаты видны в живом дашборде (обновления по SSE) и на публичной статус-странице, которая не раскрывает адреса и тексты ошибок. Go без внешних зависимостей кроме SQLite без CGO, фронтенд на ванильном JS встроен в бинарник.
Ограничения
История в демо-режиме сгенерирована для наглядности графиков, всё появившееся после запуска измерено по-настоящему.
Одна нода и один токен, уведомлений нет, проверки идут только с машины сервиса. Аптайм считается по числу проверок, тело ответа HTTP не анализируется.
Что внутри
- Отдельная горутина-воркер на каждую проверку: свой интервал и таймаут, запуски одного адреса не накладываются
- HTTP GET (ожидаемый код, до 5 редиректов) и TCP connect
- Аптайм за 24 ч, 7 и 30 дней, p50/p95 задержки за 24 ч
- Детектор инцидентов: открытие после N падений подряд, закрытие первой успешной проверкой, переживает перезапуск
- REST API под Bearer-токеном, SSE-поток событий, graceful shutdown, логи slog
- Тесты (планировщик, детектор, статистика, API, SSE) и Docker
03 · Как запустить
Запуск одной командой
git clone <репозиторий по запросу> uptime-monitor
cd uptime-monitor
SEED_DEMO=1 go run ./cmd/server # http://localhost:8084, токен demo04 · Код
Репозиторий приватный
Исходники лежат в приватном репозитории. Открою доступ по запросу: напишите, и пришлю приглашение.
Запросить код