Skip to content

MimoJanra/DomainPulse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DomainPulse

Легковесный инструмент для мониторинга доступности и производительности доменов и эндпоинтов.
Собирает время отклика и HTTP статус-коды, визуализирует тренды доступности и предоставляет обновления в реальном времени.

Go Status


🚀 Обзор

DomainPulse выполняет периодические или проверки в реальном времени для HTTP эндпоинтов, TCP/UDP портов и ICMP ping.
Он записывает время отклика, классифицирует результаты (таймауты, 2xx, 4xx, 5xx, успешные соединения),
и визуализирует их на интерактивных графиках через веб-интерфейс.

Основные возможности

  • Множественные типы проверок:
    • HTTP (GET/POST/PUT) с кастомными путями и payload
    • TCP — проверка доступности порта
    • UDP — проверка UDP соединения с опциональным payload
    • ICMP — ping проверка (требует привилегий на Windows)
  • Гибкие интервалы проверок: от 1 секунды до 1 дня
  • Режим реального времени: новый запрос запускается сразу после завершения предыдущего
  • Цветовая индикация результатов:
    • 🟢 2xx / success — OK
    • 🟡 4xx — Ошибка клиента
    • 🔴 5xx — Ошибка сервера
    • Timeout / error — Таймаут или ошибка
  • SQLite хранилище (простое и портативное)
  • REST API с Swagger документацией
  • Веб-интерфейс с интерактивными графиками (Chart.js)
  • Статистика и аналитика:
    • Процент доступности (uptime %)
    • Статистика задержек (min, max, avg, median, p95, p99)
    • Агрегация по временным интервалам (1m, 5m, 1h)
    • Распределение статусов
  • Rate limiting: глобальный и на уровне проверки
  • Worker pool: параллельная обработка проверок
  • Автоматическое планирование: проверки запускаются автоматически

Веб-интерфейс

Dashboard

  • Отображает мониторируемые домены и их текущий статус
  • Кнопка "➕" — добавить новый домен для проверки
  • Колонки: домен, тип проверки, частота, последний ответ
  • График мониторинга за последние 10 минут

Просмотр домена

  • Сводные метрики: процент доступности, p50/p95 задержка
  • Компактный график временной шкалы с цветовой индикацией точек
  • Клик для расширения в полноэкранный вид графика

Настройки проверки

  • Редактирование параметров: частота, таймаут, метод, путь, порт
  • Включение/отключение проверок
  • Удаление проверок
  • Настройка rate limiting

🔌 API Endpoints

Домены

Method Path Описание
GET /domains Получить список всех доменов
POST /domains Создать новый домен
DELETE /domains/{id} Удалить домен и все связанные проверки

Проверки

Method Path Описание
GET /checks Получить список всех проверок
GET /domains/{id}/checks Получить проверки для домена
POST /domains/{id}/checks Создать проверку для домена
POST /checks Создать проверку напрямую
PUT /checks/{id} Обновить параметры проверки
DELETE /checks/{id} Удалить проверку
POST /checks/{id}/enable Включить проверку
POST /checks/{id}/disable Отключить проверку
POST /run-check Запустить проверку вручную

Результаты и статистика

Method Path Описание
GET /results Получить результаты (с фильтрами)
GET /checks/{id}/results Получить результаты проверки
GET /checks/{id}/stats Получить статистику проверки
GET /checks/{id}/intervals Получить агрегированные данные по интервалам
GET /dashboard/recent Получить данные для dashboard

Документация

Method Path Описание
GET /swagger/* Swagger UI документация

⚙️ Конфигурация

Параметры проверки

Параметр Описание Пример
type Тип проверки: http, tcp, udp, icmp "http"
interval_seconds Интервал между проверками (в секундах) 60
realtime_mode Запускать следующую проверку сразу после завершения предыдущей true
rate_limit_per_minute Максимальное количество проверок в минуту (для realtime) 60
enabled Включена ли проверка true
params.path Путь для HTTP или путь к файлу "/health"
params.port Порт для TCP/UDP 80
params.payload Тело запроса для POST/PUT или payload для UDP "ping"
params.timeout_ms Таймаут для каждого запроса (мс) 5000

🛡️ Надежность и производительность

Архитектура

  • Scheduler: автоматически планирует и запускает проверки
  • Worker Pool: пул воркеров для параллельной обработки проверок (по умолчанию 5)
  • Rate Limiting:
    • Глобальный rate limiter (1000 запросов/сек по умолчанию)
    • Индивидуальный rate limiter для каждой проверки в realtime режиме
  • Graceful shutdown: корректное завершение всех проверок при остановке сервера
  • Автоматическое обновление: scheduler проверяет изменения каждые 30 секунд

Защита от перегрузки

  • Строгие таймауты HTTP клиента
  • Защита от избыточного опроса (anti-DoS поведение)
  • Очередь заданий с ограничением размера (100 заданий)
  • Обработка переполнения очереди

База данных

  • SQLite — легковесная, портативная база данных
  • Автоматическое создание таблиц при запуске
  • Каскадное удаление связанных записей
  • Индексы для оптимизации запросов

🚦 Запуск

Требования

  • Go 1.24+
  • SQLite3 (встроен через драйвер)

Установка и запуск

# Клонировать репозиторий
git clone https://github.com/MimoJanra/DomainPulse.git
cd DomainPulse

# Установить зависимости
go mod download

# Запустить сервер
go run cmd/server/main.go

Сервер запустится на http://localhost:8080

Веб-интерфейс

Откройте браузер и перейдите на http://localhost:8080

Swagger документация

Доступна по адресу: http://localhost:8080/swagger/index.html


Статистика и аналитика

Метрики доступности

  • Total Results — общее количество проверок
  • Status Distribution — распределение по статусам (success/failure/timeout/error)
  • Uptime % — процент успешных проверок

Метрики задержки

  • Min — минимальная задержка
  • Max — максимальная задержка
  • Avg — средняя задержка
  • Median — медианная задержка
  • P95 — 95-й перцентиль
  • P99 — 99-й перцентиль

Агрегация по интервалам

Поддерживаемые интервалы:

  • 1m — 1 минута
  • 5m — 5 минут
  • 1h — 1 час

Для каждого интервала возвращается:

  • Количество проверок
  • Количество успешных/неуспешных
  • Средняя/минимальная/максимальная задержка
  • Распределение статусов

Технические детали

Используемые технологии

Компонент Технология
HTTP клиент и таймауты net/http
Context и отмена context
Планирование time.Ticker
Слой базы данных database/sql
SQLite драйвер mattn/go-sqlite3
Rate limiting golang.org/x/time/rate
ICMP ping prometheus-community/pro-bing
HTTP роутер go-chi/chi/v5
Swagger swaggo/swag
Графики Chart.js

Структура проекта

DomainPulse/
├── cmd/
│   └── server/
│       └── main.go          # Точка входа приложения
├── internal/
│   ├── api/
│   │   ├── handlers.go      # HTTP обработчики
│   │   └── router.go        # Настройка роутинга
│   ├── checker/
│   │   ├── scheduler.go     # Планировщик проверок
│   │   ├── worker.go        # Worker pool
│   │   ├── http_check.go    # HTTP проверки
│   │   ├── tcp_check.go     # TCP проверки
│   │   ├── udp_check.go     # UDP проверки
│   │   ├── icmp_check.go    # ICMP проверки
│   │   └── rate_limiter.go  # Rate limiting
│   ├── models/
│   │   └── models.go        # Модели данных
│   └── storage/
│       ├── db.go            # Инициализация БД
│       ├── domain_repo.go  # Репозиторий доменов
│       ├── check_repo.go   # Репозиторий проверок
│       └── result_repo.go  # Репозиторий результатов
├── web/
│   ├── index.html          # Веб-интерфейс
│   └── static/
│       ├── app.js          # JavaScript логика
│       └── style.css       # Стили
├── docs/                   # Swagger документация
├── go.mod                  # Зависимости
└── README.md              # Документация

Примеры использования

Создание домена

curl -X POST http://localhost:8080/domains \
  -H "Content-Type: application/json" \
  -d '{"name": "example.com"}'

Создание HTTP проверки

curl -X POST http://localhost:8080/domains/1/checks \
  -H "Content-Type: application/json" \
  -d '{
    "type": "http",
    "interval_seconds": 60,
    "params": {
      "path": "/health",
      "timeout_ms": 5000
    }
  }'

Получение статистики

curl "http://localhost:8080/checks/1/stats?from=2024-01-01T00:00:00Z&to=2024-01-31T23:59:59Z"

Получение агрегированных данных

curl "http://localhost:8080/checks/1/intervals?interval=1m&page=1&page_size=100"

Особенности безопасности

  • Валидация доменных имен через регулярные выражения
  • Защита от SQL инъекций через параметризованные запросы
  • Rate limiting для предотвращения злоупотреблений
  • Таймауты для всех сетевых операций
  • Graceful shutdown для корректного завершения работы

Вклад

Приветствуются pull requests и issues!


Контакты

Для вопросов и предложений создавайте issues в репозитории.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors