104 lines
5.5 KiB
JSON
104 lines
5.5 KiB
JSON
|
|
{
|
||
|
|
"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": ""
|
||
|
|
}
|