fix(netflow): сохранить неизвестные координаты RIPE без ложных нулей

This commit is contained in:
Denozordec committed 2026-10-11 16:28:54 +07:00
1 parent af66faaae4
commit c718654bc7
10 files changed
+330 -18

No files matched your search

@@ -0,0 +1,137 @@
{
"date": "2026-10-11",
"block": "12.5.143",
"runtime": {
"backend": "ux-geo143",
"frontend": "ux-traffic141",
"backendHealthy": true
},
"checks": {
"coordinateCasesPassed": 16,
"completeRipeProfilePassedLocallyAndInCandidate": true,
"changedFilesEslintPassed": true,
"backendBuildPassed": true,
"compiledOutputsMatched": 984,
"isolatedSqlModulesPassed": 3,
"ownTemporaryDatabaseRemoved": true
},
"sql": {
"date": "2026-10-11",
"name": "mm_accept_143_1791710809060",
"tests": [
{
"module": "traffic-flow-analytics",
"passed": true,
"output": "traffic-flow-analytics.test.ts: ok\nISOLATED_SQL_TEST_COMPLETE\n"
},
{
"module": "traffic-flow-map-hops",
"passed": true,
"output": "traffic-flow-map-hops.test.ts: pickMapServices ok\ntraffic-flow-map-hops.test.ts: hops ok\ntraffic-flow-map-hops.test.ts: ok\nISOLATED_SQL_TEST_COMPLETE\n"
},
{
"module": "traffic-flow-facts-rebuild",
"passed": true,
"output": "traffic-flow-facts-rebuild.test.ts: ok\nISOLATED_SQL_TEST_COMPLETE\n"
}
],
"databaseRemoved": true
},
"liveRipe": {
"date": "2026-10-11",
"runtime": "ux-ipv6143",
"requests": [
{
"path": "/data/network-info/data.json",
"resource": "2606:4700:4700::1111",
"status": 200
},
{
"path": "/data/network-info/data.json",
"resource": "2001:4860:4860::8888",
"status": 200
},
{
"path": "/data/maxmind-geo-lite/data.json",
"resource": "2606:4700:4700::/48",
"status": 200
},
{
"path": "/data/as-overview/data.json",
"resource": "AS13335",
"status": 200
},
{
"path": "/data/maxmind-geo-lite/data.json",
"resource": "2001:4860::/32",
"status": 200
},
{
"path": "/data/as-overview/data.json",
"resource": "AS15169",
"status": 200
}
],
"cases": [
{
"ip": "2001:4860:4860::8888",
"prefix": "2001:4860::/32",
"asn": 15169,
"country": "US",
"lat": 37.09024,
"lng": -95.712891,
"holder": "GOOGLE - Google LLC",
"ok": true,
"fetchedAt": 1791710819190
},
{
"ip": "2606:4700:4700::1111",
"prefix": "2606:4700:4700::/48",
"asn": 13335,
"country": "US",
"lat": null,
"lng": null,
"holder": "CLOUDFLARENET - Cloudflare, Inc.",
"ok": true,
"fetchedAt": 1791710819069
}
],
"geolocationSources": [
{
"resource": "2606:4700:4700::/48",
"location": {
"country": "?",
"city": "",
"latitude": 0,
"longitude": 0,
"covered_percentage": 100,
"resourceCount": 1
}
},
{
"resource": "2001:4860::/32",
"location": {
"country": "US",
"city": "",
"latitude": 37.09024,
"longitude": -95.712891,
"covered_percentage": 100,
"resourceCount": 155
}
}
],
"cacheHitsAndSpecialNoFetch": true,
"unknownCoordinatesPreserved": true,
"success": true
},
"bounds": [
"Unknown country plus numeric0/0 observed directly from RIPE and treated conservatively as unknown location; this policy is based on live evidence, not a documented guarantee for all providers",
"Coordinates accept finite numeric latitude[-90,90]/longitude[-180,180]; missing/partial/empty/string/boolean/out-of-range values give null pair",
"Independent legitimate zero latitude/longitude and explicit known-country0/0 retained; ASN/country fallback does not establish coordinates",
"Existing persisted entries whose raw geolocation provenance was already lost are not rewritten; fresh lookups corrected, old cache follows existing TTL",
"No schema/UI/theme/device/password changes; working database fixtures untouched; no real GeoLite2 licensed file acceptance or physical location accuracy guarantee"
],
"references": [
"https://stat.ripe.net/docs/data-api/api-endpoints/maxmind-geo-lite"
]
}
@@ -0,0 +1,84 @@
{
"date": "2026-10-11",
"block": "12.5.143",
"runtime": {
"backend": "ux-geo143",
"frontend": "ux-traffic141"
},
"checks": {
"readOnlyFrontendUnchanged": true,
"backendHealthy": true,
"backendProductionBuildPassed": true
},
"cases": [
{
"width": 1440,
"httpStatus": 200,
"api": [
{
"path": "/api/traffic/bound-interfaces",
"status": 200
},
{
"path": "/api/traffic/users",
"status": 200
},
{
"path": "/api/traffic/servers",
"status": 200
},
{
"path": "/api/traffic/servers/1/live",
"status": 200
},
{
"path": "/api/traffic/servers/1/interfaces",
"status": 200
},
{
"path": "/api/traffic/servers/1",
"status": 200
}
],
"pageErrors": [],
"noOverflow": true
},
{
"width": 320,
"httpStatus": 200,
"api": [
{
"path": "/api/traffic/bound-interfaces",
"status": 200
},
{
"path": "/api/traffic/users",
"status": 200
},
{
"path": "/api/traffic/servers",
"status": 200
},
{
"path": "/api/traffic/servers/1/live",
"status": 200
},
{
"path": "/api/traffic/servers/1",
"status": 200
},
{
"path": "/api/traffic/servers/1/interfaces",
"status": 200
}
],
"pageErrors": [],
"noOverflow": true
}
],
"bounds": [
"Read-only initial loading with real current lab catalog; no full NetFlow ingestion or throughput claim",
"Catalog failure and pending loading checked by controlled E2E; numeric live server details/interfaces/SSE enabled only after confirmed catalog ownership",
"Interface filter remains selected on range changes; backend source switch invalidates prior catalog ownership"
]
}