Rene Fichtmueller e2846dd8e8 fix: stop /api/health gating overall status on the vestigial local_db import pipeline
Traced local_db (bgp_routes/rpki_roas) 2026-07-17: two systemd import
timers on Erik have run "successfully" daily since creation (2026-04-28)
while doing zero real work -- bgp-importer's Route Views source URL is
invalid (parses 0 routes every run, the 36 rows are a one-time manual
seed), rpki-importer's feed URLs are both dead and it silently falls
back to 5 hardcoded fake ROAs re-upserted daily. The watchdog meant to
catch this has itself failed every run since creation (Postgres auth
error), so nothing ever alerted.

No user-facing endpoint reads from local_db -- only this health check
and the unused /api/bgp route do. Gating overall `status` on
bgp_routes/rpki_roas row counts meant /api/health reported "degraded"
permanently for a dependency nothing actually needs, which could mask
a real future degradation behind the noise. Still reports the raw
local_db stats (including its own `healthy` sub-field) for diagnostic
visibility; only removed it from the top-level status gate.

Verified live on Erik: status now reports "ok" when RPKI/ASPA freshness
is fine, instead of permanently "degraded".
2026-07-17 09:14:24 +02:00

855 lines
20 KiB
JSON

{
"root": {
"status": 500,
"body": {
"__non_json__": true,
"status": 500,
"bodyLength": 20
}
},
"search": {
"status": 200,
"body": {
"q": "cloudflare",
"results": [
{
"asn": "13335",
"label": "CLOUDFLARENET - Cloudflare, Inc.",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "14789",
"label": "CLOUDFLARENET - Cloudflare, Inc.",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "132892",
"label": "CLOUDFLARE - Cloudflare, Inc.",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "133877",
"label": "CLOUDFLARE - Cloudflare, Inc.",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "202623",
"label": "CLOUDFLARENET-CORE Cloudflare Inc",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "203898",
"label": "CLOUDFLARENET-UK Cloudflare Inc",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "209242",
"label": "CLOUDFLARESPECTRUM Cloudflare London, LLC",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "394536",
"label": "CLOUDFLARENET-SFO - Cloudflare, Inc.",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "395747",
"label": "CLOUDFLARENET-SFO05 - Cloudflare, Inc.",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "400095",
"label": "CLOUDFLARENET - Cloudflare, Inc.",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "402542",
"label": "CLOUDFLARENET - Cloudflare,",
"description": "",
"source": "RIPE Stat"
},
{
"asn": "4436",
"label": "GTT Communications (AS4436)",
"description": "NSP",
"source": "PeeringDB"
}
]
}
},
"visitors": {
"status": 200,
"body": {
"visitors": 1
}
},
"health": {
"status": 200,
"body": {
"status": "ok",
"service": "PeerCortex",
"version": "0.6.9",
"bgproutes_configured": false,
"caches": {
"aspa_map": {},
"pdb_net": {
"entries": 0,
"hit_rate_pct": 0
},
"pdb_netixlan": {
"entries": 0
},
"pdb_netfac": {
"entries": 0
},
"ripe_stat": {
"entries": 0
},
"response_cache": {
"entries": 0
}
},
"local_db": null,
"aspa_adoption": {}
}
},
"aspa-verify": {
"status": 200,
"body": {
"meta": {
"query": "AS13335",
"paths_analyzed": 0,
"total_paths_seen": 0
},
"asn": 13335,
"readiness_score": {
"total": 0,
"breakdown": {
"roa_coverage": {
"score": 0,
"max": 25,
"value": 0
},
"aspa_object": {
"score": 0,
"max": 25,
"value": false
},
"provider_completeness": {
"score": 0,
"max": 25,
"value": 0
},
"path_validation": {
"score": 0,
"max": 25,
"value": 0
}
}
},
"aspa_object_exists": false,
"aspa_feed_healthy": true,
"detected_providers": [],
"provider_audit": {
"declared_count": 0,
"detected_count": 0,
"completeness_pct": 0,
"missing_from_aspa": [],
"extra_in_aspa": []
},
"path_verification": {
"total": 0,
"valid": 0,
"invalid": 0,
"unknown": 0,
"as_set_flagged": 0,
"valley_detected": 0,
"valid_pct": 0,
"not_invalid_pct": 0,
"results": []
},
"rpki_coverage": 0
}
},
"aspa-legacy": {
"status": 200,
"body": {
"meta": {
"query": "AS13335"
},
"asn": 13335,
"detected_providers": [],
"provider_count": 0,
"aspa_object_exists": false,
"aspa_feed_healthy": true,
"aspa_declared_providers": [],
"aspa_declared_count": 0,
"recommended_aspa": "aut-num: AS13335\n# Recommended ASPA object:\n# customer: AS13335\n# provider-set: \n# AFI: ipv4, ipv6\n#\n# Detected providers from BGP path analysis:\n",
"path_analysis": {
"total_paths_seen": 0,
"sample_paths": []
}
}
},
"bgp": {
"status": 200,
"body": {
"meta": {
"source": "local_bgp_db"
},
"bgp_status": {
"asn": "13335",
"announced": false,
"announced_count": 0,
"message": "No prefixes found for this ASN in local BGP table",
"source": "local_bgp"
},
"threat_intel": null
}
},
"validate": {
"status": 200,
"body": {
"meta": {
"query": "AS13335",
"total_prefixes": 0,
"prefixes_sampled": 0
},
"asn": 13335,
"name": "Unknown",
"validations": {
"irr": {
"status": "info",
"message": "timed out"
},
"rpki_completeness": {
"status": "fail",
"coverage_pct": 0,
"total_checked": 0,
"db_unavailable_count": 0,
"with_roa": 0,
"over_specific": [],
"details": []
},
"abuse_contact": {
"status": "pass",
"contacts": [
"abuse@cloudflare.com"
],
"has_valid_email": true
},
"blocklist": {
"status": "pass",
"checked": 0,
"unavailable": 0,
"listed_prefixes": []
},
"manrs": {
"status": "info",
"participant": "unknown",
"message": "MANRS data not yet loaded",
"note": "https://www.manrs.org/netops/participants/"
},
"rdns": {
"status": "fail",
"coverage_pct": 0,
"checked": 0,
"unavailable": 0,
"results": [],
"failed_prefixes": []
},
"communities": {
"status": "pass",
"total_updates": 0,
"unique_communities": 0,
"top_communities": [],
"well_known_detected": []
},
"geolocation": {
"status": "warning",
"geo_countries": [],
"sample_prefix": null,
"located_resources": 0,
"pdb_facility_countries": [],
"country_mismatches": []
},
"rpsl": {
"status": "info",
"message": "timed out"
},
"ix_route_server": {
"status": "warning",
"total_ix_connections": 0,
"rs_peer_count": 0,
"rs_peer_pct": 0,
"note": "Only 0 IX connection(s) and no route server usage"
},
"resource_cert": {
"status": "fail",
"has_roas": false,
"checked": 0
},
"bogon": {
"status": "pass",
"bogon_prefixes": [],
"bogon_asns_in_paths": [],
"total_prefixes_checked": 0,
"prefixes_source_unavailable": false,
"neighbours_source_unavailable": true
}
},
"relationships": {
"counts": {
"upstreams": 0,
"downstreams": 0,
"peers": 0,
"uncertain": 0
},
"upstreams": [],
"downstreams": [],
"top_peers": [],
"source": "RIPE Stat asn-neighbours",
"note": "left=upstream providers, right=downstream customers, uncertain=peers. Sorted by power score."
}
}
},
"lookup": {
"status": 200,
"body": {
"meta": {
"service": "PeerCortex",
"version": "0.6.9",
"query": "AS13335",
"sources": [
"PeeringDB",
"RIPE Stat",
"bgp.he.net",
"Cloudflare RPKI",
"RIPE RPKI Validator",
"Route Views"
],
"rpki_prefixes_checked": 0,
"total_prefixes": 0,
"degraded_sources": [
"RIPE Stat Neighbours",
"RIPE Stat Overview",
"RIPE Stat Visibility",
"RIPE Stat PrefixSize"
]
},
"network": {
"asn": 13335,
"name": "Unknown",
"aka": "",
"org_name": "",
"website": "",
"type": "",
"policy": "",
"traffic": "",
"ratio": "",
"scope": "",
"notes": "",
"peeringdb_id": null,
"rir": "ARIN",
"country": "",
"city": "",
"latitude": null,
"longitude": null,
"looking_glass": "",
"route_server": "",
"info_prefixes4": 0,
"info_prefixes6": 0,
"status": "",
"peeringdb_created": "",
"peeringdb_updated": ""
},
"prefixes": {
"total": 0,
"ipv4": 0,
"ipv6": 0,
"list": [],
"cross_check": {
"ripe_stat": 0,
"bgp_he_net": null,
"agreement": null,
"note": "bgp.he.net data unavailable"
}
},
"rpki": {
"coverage_percent": 0,
"valid": 0,
"invalid": 0,
"not_found": 0,
"unavailable": 0,
"checked": 0,
"details": [],
"cross_check": {
"cloudflare_valid": 0,
"ripe_valid": 0,
"agreement_pct": null,
"disagreements": [],
"sample_size": 0,
"comparable_size": 0
}
},
"neighbours": {
"total": 0,
"upstream_count": 0,
"downstream_count": 0,
"peer_count": 0,
"upstreams": [],
"downstreams": [],
"peers": [],
"cross_check": {
"ripe_stat_total": 0,
"bgp_he_net_total": null
}
},
"ix_presence": {
"total_connections": 0,
"unique_ixps": 0,
"connections": []
},
"ix_locations": [],
"facilities": {
"total": 0,
"list": []
},
"routing": {
"ipv4_prefixes": 0,
"ipv6_prefixes": 0,
"ipv4_visibility_avg": 0,
"ipv6_visibility_avg": 0,
"total_ris_peers_v4": 0,
"total_ris_peers_v6": 0,
"prefix_sizes_v4": [],
"prefix_sizes_v6": []
},
"resilience_score": null,
"route_leak": {
"detected": false,
"patterns": [],
"tier1_upstream_count": 0,
"tier1_downstream_count": 0,
"_provenance": {
"source": "RIPE Stat asn-neighbours",
"validation": "heuristic",
"confidence": "medium",
"note": "Pattern-based detection only. Not real-time (15-min RIPE RIS snapshot). False positives possible for large networks with legitimate Tier-1 relationships."
}
},
"bgp_he_net": null,
"atlas": {
"connected": 0,
"disconnected": 0,
"anchors": 0,
"probes": []
},
"data_quality": {
"sources_queried": [
"PeeringDB",
"RIPE Stat",
"bgp.he.net",
"Cloudflare RPKI",
"RIPE RPKI Validator"
],
"cross_checks": {
"rpki": {
"sources": 1,
"agreement_pct": null,
"sample_size": 0,
"comparable_size": 0,
"disagreements": []
},
"prefixes": {
"sources": 1,
"agreement_pct": null,
"ripe_stat": 0,
"bgp_he_net": null,
"note": "bgp.he.net data unavailable"
},
"neighbours": {
"sources": 1,
"agreement_pct": null,
"ripe_stat_total": 0,
"bgp_he_net_total": null
}
},
"overall_confidence": "unknown",
"overall_agreement_pct": null
},
"contacts": [],
"registration": {
"created": "2010-07-14",
"last_modified": "2017-02-17",
"rir": "ARIN",
"handle": "AS13335",
"rdap_source": "whois.arin.net"
},
"_provenance": {
"prefixes": {
"source": "RIPE Stat announced-prefixes",
"validation": "cross-validated",
"confidence": "high",
"note": "Cross-checked with bgp.he.net prefix count daily"
},
"neighbours": {
"source": "RIPE Stat asn-neighbours",
"validation": "cross-validated",
"confidence": "high",
"note": "Cross-checked with bgp.he.net peer count daily"
},
"rpki": {
"source": "Cloudflare RPKI + RIPE Validator",
"validation": "cross-validated",
"confidence": "high",
"note": "Two independent RPKI sources compared"
},
"ix_presence": {
"source": "PeeringDB netixlan (local mirror)",
"validation": "cross-validated",
"confidence": "high",
"note": "PeeringDB mirror refreshed daily"
},
"facilities": {
"source": "PeeringDB netfac (local mirror)",
"validation": "single-source",
"confidence": "medium"
},
"bgp_he_net": {
"source": "bgp.he.net HTML scrape",
"validation": "single-source",
"confidence": "medium",
"note": "HTML scrape, no official API — may have parsing drift"
},
"atlas": {
"source": "RIPE Atlas API",
"validation": "single-source",
"confidence": "medium",
"note": "Probe availability varies by region"
},
"resilience_score": {
"source": "Computed from RIPE Stat + PeeringDB",
"validation": "computed",
"confidence": "high",
"note": "All inputs cross-validated daily"
},
"route_leak": {
"source": "RIPE Stat asn-neighbours heuristic",
"validation": "heuristic",
"confidence": "medium",
"note": "Pattern-based, not real-time — false positives possible"
},
"registration": {
"source": "RDAP (RIR registry)",
"validation": "single-source",
"confidence": "high"
},
"contacts": {
"source": "PeeringDB POC API",
"validation": "single-source",
"confidence": "medium",
"note": "Subject to PeeringDB rate limiting"
}
}
}
},
"relationships": {
"status": 200,
"body": {
"asn": 13335,
"counts": {
"upstreams": 0,
"downstreams": 0,
"peers_total": 0,
"uncertain": 0
},
"upstreams": [],
"downstreams": [],
"peers": [],
"methodology": "RIPE Stat asn-neighbours API. left=upstream providers (carry your traffic), right=downstream customers (you carry their traffic), uncertain=lateral peers. Sorted by power score (number of prefixes seen via this relationship).",
"source_url": "https://stat.ripe.net/data/asn-neighbours/data.json?resource=AS13335"
}
},
"compare": {
"status": 200,
"body": {
"meta": {},
"asn1": {
"asn": 13335,
"name": "Unknown",
"ix_count": 0,
"fac_count": 0,
"upstream_count": 0,
"rpki_coverage": 0
},
"asn2": {
"asn": 15169,
"name": "Unknown",
"ix_count": 0,
"fac_count": 0,
"upstream_count": 0,
"rpki_coverage": 0
},
"common_ixps": [],
"only_asn1_ixps": [],
"only_asn2_ixps": [],
"common_facilities": [],
"common_upstreams": [],
"rpki_comparison": {
"asn1_coverage": 0,
"asn2_coverage": 0,
"asn1_checked": 0,
"asn2_checked": 0,
"better": "equal"
}
}
},
"quick-ix": {
"status": 200,
"body": {
"asn": 13335
}
},
"peers-find": {
"status": 400,
"body": {
"error": "Missing ix parameter (IX name)"
}
},
"prefix-detail": {
"status": 200,
"body": {
"meta": {},
"prefix": "1.1.1.0/24",
"rpki": {
"status": "unknown",
"validating_roas": 0
},
"irr_status": "found",
"visibility": {
"ris_peers_seeing": 0,
"source": "ripe_stat"
}
}
},
"ix-detail": {
"status": 400,
"body": {
"error": "Missing ix_id parameter"
}
},
"topology": {
"status": 200,
"body": {
"nodes": [
{
"asn": 13335,
"name": "",
"type": "target",
"depth": 0
}
],
"edges": [],
"target_asn": 13335,
"depth": 2,
"meta": {
"query": "AS13335",
"depth": 2,
"node_count": 1,
"edge_count": 0
}
}
},
"whois": {
"status": 400,
"body": {
"error": "Missing resource parameter (ASN, prefix, or domain)"
}
},
"enrich": {
"status": 200,
"body": {
"asn": "13335",
"description": null,
"wiki_url": null
}
},
"changelog": {
"status": 500,
"body": {
"__non_json__": true,
"status": 500,
"bodyLength": 23
}
},
"webhooks-list": {
"status": 200,
"body": {
"webhooks": [],
"total": 0
}
},
"hijacks-list": {
"status": 200,
"body": {}
},
"hijack-alerts": {
"status": 200,
"body": {
"asn": "",
"monitoring": false,
"prefix_count": 0
}
},
"aspa-adoption-page": {
"status": 200,
"body": {
"__non_json__": true,
"status": 200
}
},
"aspa-adoption-stats": {
"status": 200,
"body": {
"period": "30d",
"current": {
"date": "2026-07-17"
},
"trend": [
{
"date": "2026-06-17"
},
{
"date": "2026-06-18"
},
{
"date": "2026-06-19"
},
{
"date": "2026-06-20"
},
{
"date": "2026-06-21"
},
{
"date": "2026-06-22"
},
{
"date": "2026-06-23"
},
{
"date": "2026-06-24"
},
{
"date": "2026-06-25"
},
{
"date": "2026-06-26"
},
{
"date": "2026-06-27"
},
{
"date": "2026-06-28"
},
{
"date": "2026-06-29"
},
{
"date": "2026-06-30"
},
{
"date": "2026-07-01"
},
{
"date": "2026-07-02"
},
{
"date": "2026-07-03"
},
{
"date": "2026-07-04"
},
{
"date": "2026-07-05"
},
{
"date": "2026-07-06"
},
{
"date": "2026-07-07"
},
{
"date": "2026-07-08"
},
{
"date": "2026-07-09"
},
{
"date": "2026-07-10"
},
{
"date": "2026-07-11"
},
{
"date": "2026-07-12"
},
{
"date": "2026-07-13"
},
{
"date": "2026-07-14"
},
{
"date": "2026-07-15"
},
{
"date": "2026-07-16"
},
{
"date": "2026-07-17"
}
],
"meta": {
"total_snapshots": 80,
"denominator": "atlas_visible_asns",
"source": "rpki_cloudflare_feed"
}
}
},
"ipv6-adoption-stats": {
"status": 200,
"body": {}
},
"atlas-coverage": {
"status": 200,
"body": {
"pages_fetched": 30
}
},
"submarine-cables": {
"status": 502,
"body": {
"error": "API server unavailable",
"detail": "connect ECONNREFUSED 127.0.0.1:39102"
}
},
"communities": {
"status": 502,
"body": {
"error": "API server unavailable",
"detail": "connect ECONNREFUSED 127.0.0.1:39102"
}
}
}