Docker images / prepare-release (push) Successful in 13s
Docker images / backend-test (push) Successful in 2m13s
Docker images / frontend-image (push) Successful in 4m31s
Docker images / updater-image (push) Successful in 48s
Docker images / backend-image (push) Successful in 3m1s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 15s
Lookup страны/ASN при ingest теперь идёт сначала по локальным mmdb MaxMind GeoLite2 (Country + ASN, зеркало P3TERX, без ключей), с мгновенным синхронным ответом для IPv4/IPv6; RIPEstat остаётся fallback до первой загрузки баз и при промахе. - backend/src/services/traffic-flow-geoip.ts: ридеры maxmind, фасад resolveFlowIp (geoip-first → RIPE-кэш), статус ридеров - geoip-update-collector.ts: conditional GET по ETag, валидация пробоем 8.8.8.8 (US / AS15169), атомарная подмена с .prev-откатом - джоба планировщика geoip_update (по умолчанию раз в 7 дней), настройки geoip_settings + миграция 0004, API /api/geoip (GET/PUT/update), контракты @mmapp/contracts/geoip - engine/analytics/map-hops переведены на resolveFlowIp - секция «GeoIP-базы» в настройках NetFlow, метки джобы на странице сбора данных, тесты test:geoip
99 lines
4.2 KiB
TypeScript
99 lines
4.2 KiB
TypeScript
/** Типы и подписи для UI планировщика / страницы «Сбор данных» (совпадают с ответами API). */
|
||
|
||
/** Последний ключ — движок оповещений (читает БД после коллекторов; см. описание `alert_engine`). */
|
||
export const SCHEDULER_JOB_KEYS = [
|
||
"traffic",
|
||
"servers_rest_ping",
|
||
"uptime_resources",
|
||
"uptime_ping",
|
||
"uptime_speed",
|
||
"internet_path",
|
||
"gre_bgp",
|
||
"certificates_renew",
|
||
"backups",
|
||
"geoip_update",
|
||
"alert_engine",
|
||
] as const
|
||
export type SchedulerJobKey = (typeof SCHEDULER_JOB_KEYS)[number]
|
||
|
||
export const SCHEDULER_JOB_LABELS: Record<string, string> = {
|
||
traffic: "Трафик",
|
||
servers_rest_ping: "Серверы: REST API",
|
||
uptime_resources: "Uptime: ресурсы",
|
||
uptime_ping: "Uptime: ping",
|
||
uptime_speed: "Uptime: speed",
|
||
internet_path: "Internet Path",
|
||
gre_bgp: "GRE + BGP",
|
||
certificates_renew: "Сертификаты: автообновление",
|
||
backups: "Бэкапы",
|
||
geoip_update: "GeoIP: базы GeoLite2",
|
||
alert_engine: "Оповещения",
|
||
}
|
||
|
||
/** Кратко — для раскрытой карточки прогона и подсказок. */
|
||
export const SCHEDULER_JOB_DESCRIPTIONS: Record<string, string> = {
|
||
traffic: "Опрос интерфейсов RouterOS, запись сэмплов трафика в PostgreSQL.",
|
||
servers_rest_ping:
|
||
"Проверка доступности каталога серверов: GET /system/identity (RouterOS REST), замер задержки без полного опроса.",
|
||
uptime_resources: "CPU, память, температура и др. метрики с устройств.",
|
||
uptime_ping: "ICMP-пинг по настроенным пробам мониторинга.",
|
||
uptime_speed: "Фоновые btest / speed-пробы между узлами (при включённых пробах).",
|
||
internet_path: "Снимок данных для карты интернет-маршрута на dashboard (WAN/JH/EN, route+runtime, speed-пробы).",
|
||
gre_bgp:
|
||
"Опрос GRE-туннелей и BGP-сессий на включённых серверах, запись сэмплов в PostgreSQL для движка оповещений.",
|
||
certificates_renew:
|
||
"Автообновление сертификатов, выпущенных через UI (ACME DNS-01 / Cloudflare). Отключается на странице «Сертификаты», если ACME ведёт RouterOS.",
|
||
backups:
|
||
"Плановые бэкапы RouterOS по расписанию со страницы «Бэкапы»; тик планировщика раз в минуту.",
|
||
geoip_update:
|
||
"Проверка и доставка GeoLite2 Country/ASN с зеркала P3TERX в backend/storage/geoip (ETag, атомарная подмена). Управление — в настройках NetFlow.",
|
||
alert_engine:
|
||
"Оценка правил по данным из PostgreSQL (сэмплы пишут джобы сбора, в т.ч. «GRE + BGP» и «Серверы: REST API»).",
|
||
}
|
||
|
||
export interface CollectorSettingsDto {
|
||
enabled: boolean
|
||
intervalSec: number
|
||
probeIntervalSec?: number
|
||
speedIntervalSec?: number
|
||
retentionDays: number
|
||
lastCollectedAt: string | null
|
||
lastDurationMs: number | null
|
||
lastError: string | null
|
||
collectorRunning?: boolean
|
||
}
|
||
|
||
export interface SchedulerJobStatusDto {
|
||
jobKey: string
|
||
enabled: boolean
|
||
intervalSec: number
|
||
running: boolean
|
||
lastFinishedAt: string | null
|
||
lastStatus: string | null
|
||
lastDurationMs: number | null
|
||
lastError: string | null
|
||
}
|
||
|
||
export interface SchedulerStatusDto {
|
||
jobs: SchedulerJobStatusDto[]
|
||
}
|
||
|
||
export interface UptimeSettingsDto extends CollectorSettingsDto {
|
||
resourcesEnabled?: boolean
|
||
pingEnabled?: boolean
|
||
speedEnabled?: boolean
|
||
scheduler?: SchedulerStatusDto
|
||
}
|
||
|
||
export interface SchedulerRunRowDto {
|
||
id: string
|
||
jobKey: string
|
||
startedAt: string
|
||
finishedAt: string
|
||
status: string
|
||
error: string | null
|
||
durationMs: number
|
||
/** JSON снимка результатов прогона (серверы, пробы, speed и т.д.) */
|
||
resultJson?: string | null
|
||
}
|