From 0200932ea021814a2946dc26e4d300c9c8c37828 Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 19 May 2026 00:12:12 -0700 Subject: [PATCH] Fix BGP Peer Map empty-variable crash in RR detection When the rr_loopbacks variable resolved empty, the IN (${rr_loopbacks:singlequote}) clause expanded to IN (), a SQL syntax error that blanked the topology panel. Switch to = ANY(string_to_array('${rr_loopbacks:csv}', ',')), which yields a no-match (not a syntax error) on an empty variable. Co-Authored-By: Claude Opus 4.7 (1M context) --- obmp-grafana/dashboards/obmp/Maps-1006/bgp_peer_map.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/obmp-grafana/dashboards/obmp/Maps-1006/bgp_peer_map.json b/obmp-grafana/dashboards/obmp/Maps-1006/bgp_peer_map.json index dd29c28..2ae25a6 100644 --- a/obmp-grafana/dashboards/obmp/Maps-1006/bgp_peer_map.json +++ b/obmp-grafana/dashboards/obmp/Maps-1006/bgp_peer_map.json @@ -25,7 +25,7 @@ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", - "rawSql": "SELECT vp.router_hash_id::text AS id,\n MAX(vp.routername) AS title,\n 'AS ' || MAX(vp.localasn)::text AS mainstat,\n COUNT(DISTINCT vp.peerbgpid) FILTER (WHERE vp.peer_state = 'up')::text || ' peers up' AS secondarystat,\n host(MAX(vp.localbgpid)) AS detail__bgp_id,\n CASE WHEN host(MAX(vp.localbgpid)) IN (${rr_loopbacks:singlequote}) THEN 'Route Reflector' ELSE 'Router' END AS detail__role,\n CASE WHEN host(MAX(vp.localbgpid)) IN (${rr_loopbacks:singlequote}) THEN 1 ELSE 0 END AS arc__rr,\n CASE WHEN host(MAX(vp.localbgpid)) IN (${rr_loopbacks:singlequote}) THEN 0 ELSE 1 END AS arc__std\nFROM v_peers vp\nWHERE vp.localbgpid IS NOT NULL\nGROUP BY vp.router_hash_id\nORDER BY title", + "rawSql": "SELECT vp.router_hash_id::text AS id,\n MAX(vp.routername) AS title,\n 'AS ' || MAX(vp.localasn)::text AS mainstat,\n COUNT(DISTINCT vp.peerbgpid) FILTER (WHERE vp.peer_state = 'up')::text || ' peers up' AS secondarystat,\n host(MAX(vp.localbgpid)) AS detail__bgp_id,\n CASE WHEN host(MAX(vp.localbgpid)) = ANY(string_to_array('${rr_loopbacks:csv}', ',')) THEN 'Route Reflector' ELSE 'Router' END AS detail__role,\n CASE WHEN host(MAX(vp.localbgpid)) = ANY(string_to_array('${rr_loopbacks:csv}', ',')) THEN 1 ELSE 0 END AS arc__rr,\n CASE WHEN host(MAX(vp.localbgpid)) = ANY(string_to_array('${rr_loopbacks:csv}', ',')) THEN 0 ELSE 1 END AS arc__std\nFROM v_peers vp\nWHERE vp.localbgpid IS NOT NULL\nGROUP BY vp.router_hash_id\nORDER BY title", "refId": "nodes" }, {