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
20 lines
664 B
SQL
20 lines
664 B
SQL
-- GeoLite2 mmdb (страна/ASN для netflow): настройки автообновления зеркала P3TERX
|
|
|
|
CREATE TABLE IF NOT EXISTS geoip_settings (
|
|
id BIGINT PRIMARY KEY CHECK (id = 1),
|
|
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
update_interval_sec INTEGER NOT NULL DEFAULT 604800,
|
|
last_check_at TIMESTAMPTZ,
|
|
last_success_at TIMESTAMPTZ,
|
|
last_error TEXT,
|
|
country_build_at TIMESTAMPTZ,
|
|
asn_build_at TIMESTAMPTZ,
|
|
etags_json JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
|
|
INSERT INTO geoip_settings (id)
|
|
VALUES (1)
|
|
ON CONFLICT (id) DO NOTHING;
|