{ "annotations": {"list": [{"builtIn": 1,"datasource": {"type": "datasource","uid": "grafana"},"enable": true,"hide": true,"iconColor": "rgba(0, 211, 255, 1)","name": "Annotations & Alerts","type": "dashboard"}]}, "description": "IGP link-state topology (BGP-LS) as a node graph. Scope with the BGP Peer feed, IGP protocol, and AS to keep the graph readable. Edge labels are IGP metric; node rings show Segment Routing capability.", "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": null, "links": [{"asDropdown": true,"icon": "external link","includeVars": true,"keepTime": true,"tags": ["obmp-nav"],"title": "OBMP Dashboards","type": "dashboards"}], "liveNow": false, "panels": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "description": "Every BGP-LS node and link for the selected peer feed / protocol / AS. SR-capable nodes show a green ring.", "fieldConfig": { "defaults": {}, "overrides": [ {"matcher": {"id": "byName","options": "arc__sr"},"properties": [{"id": "color","value": {"fixedColor": "green","mode": "fixed"}},{"id": "displayName","value": "SR-capable"}]}, {"matcher": {"id": "byName","options": "arc__plain"},"properties": [{"id": "color","value": {"fixedColor": "blue","mode": "fixed"}},{"id": "displayName","value": "No SR"}]} ] }, "gridPos": {"h": 28,"w": 24,"x": 0,"y": 0}, "id": 2, "options": {"nodes": {"mainStatUnit": "","secondaryStatUnit": ""}}, "targets": [ { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT n.hash_id::text AS id,\n CASE WHEN COALESCE(n.name,'') = '' THEN n.igp_router_id ELSE n.name END AS title,\n n.router_id AS mainstat,\n n.protocol::text AS secondarystat,\n n.igp_router_id AS detail__igp_id,\n 'AS ' || n.asn AS detail__asn,\n COALESCE(NULLIF(n.sr_capabilities,''),'none') AS detail__sr_caps,\n CASE WHEN COALESCE(n.sr_capabilities,'') <> '' THEN 1 ELSE 0 END AS arc__sr,\n CASE WHEN COALESCE(n.sr_capabilities,'') = '' THEN 1 ELSE 0 END AS arc__plain\nFROM ls_nodes n\nWHERE n.iswithdrawn = false\n AND n.peer_hash_id = '$peer_hash'\n AND ('$protocol' = '' OR n.protocol::text = '$protocol')\n AND ($asn = 0 OR n.asn = $asn)\nORDER BY title", "refId": "nodes" }, { "datasource": {"type": "postgres","uid": "obmp_postgres"}, "format": "table", "rawSql": "SELECT l.local_node_hash_id::text || '->' || l.remote_node_hash_id::text AS id,\n l.local_node_hash_id::text AS source,\n l.remote_node_hash_id::text AS target,\n MAX(l.igp_metric)::bigint AS mainstat,\n MAX(l.protocol::text) AS secondarystat,\n MAX(l.te_def_metric)::text AS detail__te_metric,\n MAX(l.max_link_bw)::text AS detail__max_bw\nFROM ls_links l\nJOIN ls_nodes ln ON ln.hash_id = l.local_node_hash_id AND ln.peer_hash_id = l.peer_hash_id\nWHERE l.iswithdrawn = false\n AND l.peer_hash_id = '$peer_hash'\n AND ('$protocol' = '' OR l.protocol::text = '$protocol')\n AND ($asn = 0 OR ln.asn = $asn)\nGROUP BY l.local_node_hash_id, l.remote_node_hash_id", "refId": "edges" } ], "title": "IGP / Link-State Topology", "type": "nodeGraph" } ], "schemaVersion": 36, "style": "dark", "tags": ["obmp", "obmp-nav", "obmp-maps", "linkstate"], "templating": { "list": [ { "current": {}, "datasource": {"type": "postgres","uid": "obmp_postgres"}, "definition": "SELECT __text,__value FROM (select peername as __text, peer_hash_id as __value, count(*) as count from v_ls_nodes group by peername,peer_hash_id) d where count > 0", "hide": 0, "includeAll": false, "label": "BGP Peer feed", "multi": false, "name": "peer_hash", "options": [], "query": "SELECT __text,__value FROM (select peername as __text, peer_hash_id as __value, count(*) as count from v_ls_nodes group by peername,peer_hash_id) d where count > 0", "refresh": 1, "sort": 1, "type": "query" }, { "allValue": "", "current": {"selected": true,"text": "All","value": "$__all"}, "datasource": {"type": "postgres","uid": "obmp_postgres"}, "definition": "SELECT DISTINCT protocol::text FROM ls_nodes WHERE iswithdrawn=false AND protocol IS NOT NULL AND protocol::text <> '' ORDER BY 1", "hide": 0, "includeAll": true, "label": "IGP Protocol", "multi": false, "name": "protocol", "options": [], "query": "SELECT DISTINCT protocol::text FROM ls_nodes WHERE iswithdrawn=false AND protocol IS NOT NULL AND protocol::text <> '' ORDER BY 1", "refresh": 1, "sort": 1, "type": "query" }, { "allValue": "0", "current": {"selected": true,"text": "All","value": "$__all"}, "datasource": {"type": "postgres","uid": "obmp_postgres"}, "definition": "SELECT DISTINCT asn FROM ls_nodes WHERE iswithdrawn=false AND asn > 0 ORDER BY asn", "hide": 0, "includeAll": true, "label": "AS", "multi": false, "name": "asn", "options": [], "query": "SELECT DISTINCT asn FROM ls_nodes WHERE iswithdrawn=false AND asn > 0 ORDER BY asn", "refresh": 1, "sort": 3, "type": "query" } ] }, "time": {"from": "now-6h","to": "now"}, "timepicker": {}, "timezone": "", "title": "IGP / Link-State Topology Map", "uid": "SNOLrQlnz", "version": 1, "weekStart": "" }