feat: enrich earth bgp event visualization
This commit is contained in:
@@ -282,6 +282,18 @@ def convert_bgp_anomalies_to_geojson(records: List[BGPAnomaly]) -> Dict[str, Any
|
||||
for record in records:
|
||||
evidence = record.evidence or {}
|
||||
collectors = evidence.get("collectors") or record.peer_scope or []
|
||||
if not collectors:
|
||||
nested = evidence.get("events") or []
|
||||
collectors = [
|
||||
str((item or {}).get("collector") or "").strip()
|
||||
for item in nested
|
||||
if (item or {}).get("collector")
|
||||
]
|
||||
|
||||
collectors = [collector for collector in collectors if collector]
|
||||
if not collectors:
|
||||
collectors = []
|
||||
|
||||
collector = collectors[0] if collectors else None
|
||||
location = None
|
||||
if collector:
|
||||
@@ -299,6 +311,40 @@ def convert_bgp_anomalies_to_geojson(records: List[BGPAnomaly]) -> Dict[str, Any
|
||||
if location is None:
|
||||
continue
|
||||
|
||||
as_path = []
|
||||
if isinstance(evidence.get("as_path"), list):
|
||||
as_path = evidence.get("as_path") or []
|
||||
if not as_path:
|
||||
nested = evidence.get("events") or []
|
||||
for item in nested:
|
||||
candidate_path = (item or {}).get("as_path")
|
||||
if isinstance(candidate_path, list) and candidate_path:
|
||||
as_path = candidate_path
|
||||
break
|
||||
|
||||
impacted_regions = []
|
||||
seen_regions = set()
|
||||
for collector_name in collectors:
|
||||
collector_location = RIPE_RIS_COLLECTOR_COORDS.get(str(collector_name))
|
||||
if not collector_location:
|
||||
continue
|
||||
region_key = (
|
||||
collector_location.get("country"),
|
||||
collector_location.get("city"),
|
||||
)
|
||||
if region_key in seen_regions:
|
||||
continue
|
||||
seen_regions.add(region_key)
|
||||
impacted_regions.append(
|
||||
{
|
||||
"collector": collector_name,
|
||||
"country": collector_location.get("country"),
|
||||
"city": collector_location.get("city"),
|
||||
"latitude": collector_location.get("latitude"),
|
||||
"longitude": collector_location.get("longitude"),
|
||||
}
|
||||
)
|
||||
|
||||
features.append(
|
||||
{
|
||||
"type": "Feature",
|
||||
@@ -318,6 +364,10 @@ def convert_bgp_anomalies_to_geojson(records: List[BGPAnomaly]) -> Dict[str, Any
|
||||
"prefix": record.prefix,
|
||||
"origin_asn": record.origin_asn,
|
||||
"new_origin_asn": record.new_origin_asn,
|
||||
"collectors": collectors,
|
||||
"collector_count": len(collectors) or 1,
|
||||
"as_path": as_path,
|
||||
"impacted_regions": impacted_regions,
|
||||
"confidence": record.confidence,
|
||||
"summary": record.summary,
|
||||
"created_at": to_iso8601_utc(record.created_at),
|
||||
|
||||
Reference in New Issue
Block a user