Небольшой пет-проект, распределенная система для мониторинга доступности сайтов, состоящая из 2 сервисов: API для управления списком сайтов и Worker для фонового мониторинга
- Golang, GORM, Gorilla Mux, Zap
- PostgreSQL, Docker/Docker Compose
cmd/api- API для управления списком сайтовcmd/worker- сервис, который проверяет доступность сайтовinternal/models- ORM моделиinternal/storage- логика подключения к БД и миграции
- Запустите базу данных:
docker-compose up -d
- Запустите API (в отдельном терминале):
cd cmd/api go run main.go - Запустите Worker (в отдельном терминале):
cd cmd/worker go run main.go
POST /sites— Добавить новый URL в системуGET /sites— Получить список всех сайтовDELETE /sites/{id}— Удалить сайт и всю его историю из базыPATCH /sites/{id}/status— Поставить мониторинг на паузу или возобновить ({"is_active": false})
GET /sites/{id}/stats— Получить последние 50 результатов проверок конкретного сайтаGET /sites/{id}/analytics— Сводная аналитика: % Uptime и среднее время ответа
- API принимает запросы от пользователя и сохраняет URL в таблицу
websitesБД - Worker раз в 30 секунд считывает список всех сайтов из базы
- Для каждого сайта Worker параллельно (через горутины) выполняет HTTP GET запрос
- Результат (статус-код и время ответа) сохраняется в таблицу
ping_results - При остановке
Ctrl+Cсервисы используют Context и SIGTERM для безопасного завершения работы без потери данных Ура!! Работает с кайфом