Проект для мониторинга IP-адресов.
Проект представляет собой веб-приложение для мониторинга IP-адресов. Он использует:
- Ruby 3.2.2
- Sinatra
- Sequel для работы с PostgreSQL
- Sidekiq для фоновых задач
- Redis для очередей
- RSpec (пока не реализовано)
erDiagram
IPS {
int id PK
inet ip_address
boolean enabled
timestamp created_at
timestamp updated_at
}
IP_CHECKS {
int id PK
int ip_id FK
float rtt
timestamp created_at
}
IP_STATUS_CHANGES {
int id PK
int ip_id FK
boolean status
timestamp created_at
}
IPS ||--o{ IP_CHECKS : "has many"
IPS ||--o{ IP_STATUS_CHANGES : "has many"
-
Клонируем репозиторий:
git clone git@github.com:supronva-github/ip_monitor.git
-
Запускаем контейнеры:
cd ip_monitor docker-compose up -d
Все запросы к API требуют базовой авторизации.
По умолчанию:
Username: admin
Password: admin
Пример использования с curl:
curl -u admin:admin http://localhost:9292/ipsПолучить список всех IP-адресов.
Пример запроса:
curl -u admin:admin http://localhost:9292/ipsПример ответа:
[
{
"id": 1,
"ip": "8.8.8.8",
"enabled": true
}
]Получить статистику по IP-адресу за указанный период.
Параметры:
time_from(опционально): datetime в формате ISO8601 (например, 2025-04-15T10:00:00)time_to(опционально): datetime в формате ISO8601 (например, 2025-04-15T11:00:00)
Если параметры не переданы, возвращается статистика за последний час.
Пример запроса:
curl -u admin:admin "http://localhost:9292/ips/1/stats?time_from=2025-04-15T10:00:00&time_to=2025-04-15T11:00:00"Пример ответа:
{
"avg_rtt": 10.5,
"min_rtt": 5.0,
"max_rtt": 15.0,
"median_rtt": 10.0,
"stddev_rtt": 2.5,
"packet_loss": 0.0
}Включить сбор статистики для IP.
Пример запроса:
curl -u admin:admin -X POST http://localhost:9292/ips/1/enableВыключить сбор статистики для IP.
Пример запроса:
curl -u admin:admin -X POST http://localhost:9292/ips/1/disableДобавить новый IP-адрес.
Пример запроса:
curl -u admin:admin -X POST -H "Content-Type: application/json" -d '{"ip": "8.8.8.8", "enabled": true}' http://localhost:9292/ipsУдалить IP-адрес по ID.
Пример запроса:
curl -u admin:admin -X DELETE http://localhost:9292/ips/1Доступ к веб-интерфейсу Sidekiq для мониторинга фоновых задач.
Пример запроса:
curl -u admin:admin http://localhost:9292/sidekiqЗапрещены следующие диапазоны IP-адресов:
0.0.0.0/8127.0.0.0/8169.254.0.0/16224.0.0.0/4255.255.255.255
DB_HOST: хост базы данных (по умолчанию: localhost)DB_PORT: порт базы данных (по умолчанию: 5432)DB_USER: пользователь базы данныхDB_PASSWORD: пароль базы данныхDB_NAME: имя базы данныхREDIS_URL: URL Redis (по умолчанию: redis://localhost:6379/0)FORBIDDEN_IP_RANGES: список запрещенных диапазонов IP-адресов
Проект использует RSpec для тестирования. Запустить тесты:
bundle exec rspec-
Точность измерения ICMP: использовать
CLOCK_MONOTONICвместоTime.nowдля более точных измерений. Подробнее: Elapsed Time with Ruby the Right Way -
Кеширование для статистики: добавить кеширование результатов статистики для улучшения производительности.
-
Поддержка IPv6: доработать поддержку IPv6 для мониторинга.
-
Доменные имена: добавить возможность мониторинга доменных имен.
-
Добавить дашборд с Grafana: интегрировать Grafana для визуализации метрик и создания интерактивных дашбордов. Это позволит:
- Отслеживать RTT в реальном времени
- Создавать кастомные графики и алерты
- Настраивать уведомления о проблемах