Uptime Checker — это высокопроизводительный backend-сервис для автоматического мониторинга доступности веб-ресурсов (URL) с интегрированным информированием в Telegram. Проект создан для демонстрации навыков проектирования отказоустойчивых распределенных систем, работы с современным сетевым стеком Java и реализации принципов Clean Architecture.
Данный сервис решает важную инфраструктурную задачу: асинхронно опрашивает целевые ресурсы по индивидуальным расписаниям, изолирует сетевые сбои и мгновенно оповещает о падении или восстановлении узлов.
- Core: Java 21, Spring Boot 4.0.6 (Spring Data JPA, Web-MVC, Validation)
- HTTP Client: Spring RestClient (с конфигурацией
SimpleClientHttpRequestFactory) - Database: PostgreSQL 15, HikariCP
- Infrastructure: Docker, Docker Compose
- Tools: Maven, Lombok, Slf4j
- Изоляция сбоев (Fault Tolerance) & Таймауты: По умолчанию HTTP-клиенты склонны к бесконечному ожиданию ответа. В проекте реализованы жесткие ограничения (
ConnectTimeoutиReadTimeout), благодаря чему «зависшие» или мертвые целевые сайты не вызывают деградацию сервиса и не приводят к нехватке потоков (Thread Starvation). - Динамический шедулинг без блокировок: Встроенный планировщик задач (
@Scheduled) опрашивает общую очередь каждую секунду, но выполняет сетевой запрос только для тех ресурсов, чей индивидуальный интервал (checkIntervalSeconds) из базы данных был исчерпан. - Безопасная обработка сторонних API: Интеграция с Telegram Bot API полностью изолирована. Сбои на стороне серверов Telegram или проблемы со связью перехватываются внутри
TelegramService, логируются и не нарушают основной цикл мониторинга ресурсов. - Контейнеризация «Из коробки»: Полностью настроенная среда в
docker-compose.ymlсвязывает контейнер приложения и базу данных PostgreSQL в изолированную внутреннюю сеть Docker network, используя безопасный проброс секретов через переменные окружения.
- Установленный Docker и Docker Compose
- Установленный Maven и JDK 21 (для локального запуска без Docker)
-
Клонируйте репозиторий:
git clone https://github.com/NoxiousDream/uptime_checker.git cd uptime_checker -
Настройте переменные окружения: Создайте файл
.envв корневой папке проекта:TELEGRAM_BOT_TOKEN=ваш_токен_от_BotFather TELEGRAM_CHAT_ID=ваш_chat_id_или_канала -
Разверните проект в Docker:
docker-compose up -d --buildПриложение автоматически соберется и запустится на порту 8080, а база данных развернет таблицы благодаря автомиграциям Hibernate.
| Метод | Эндпоинт | Описание | Валидация |
|---|---|---|---|
POST |
/api/v1/targets |
Добавить новый URL на мониторинг | @Valid (Валидный URL, Not Blank) |
GET |
/api/v1/targets |
Получить список всех ресурсов и их статусов | — |
PATCH |
/api/v1/targets/{id}/interval |
Изменить интервал проверки ресурса (?seconds=X) |
Проверка на положительное число |
DELETE |
/api/v1/targets/{id} |
Удалить ресурс из системы | Проверка существования ID |
Пример запроса на добавление сайта (POST /api/v1/targets):
{
"name": "Google",
"url": "https://google.com",
"checkIntervalSeconds": 5
}
Для проверки состояния базы данных в реальном времени можно подключиться напрямую к PostgreSQL внутри Docker:
docker exec -it uptime_db psql -U user -d uptime_db