{ "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "grafana", "uid": "-- Grafana --" }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", "target": { "limit": 100, "matchAny": true, "tags": [ "server" ], "type": "dashboard" }, "type": "dashboard" }, { "datasource": { "type": "datasource", "uid": "grafana" }, "enable": true, "iconColor": "light-yellow", "name": "Annotations", "target": { "limit": 100, "matchAny": true, "tags": [ "server", "MQTT" ], "type": "tags" } } ] }, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, "id": 1, "links": [], "panels": [ { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "description": "Total number of observed nodes in the mesh", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "nodes" }, "overrides": [] }, "gridPos": { "h": 4, "w": 4, "x": 0, "y": 0 }, "id": 15, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "showPercentChange": false, "textMode": "auto", "wideLayout": true }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "editorMode": "builder", "format": "table", "rawSql": "SELECT COUNT(node_id) FROM node_details WHERE node_id <> '0' LIMIT 50 ", "refId": "A", "sql": { "columns": [ { "name": "COUNT", "parameters": [ { "name": "node_id", "type": "functionParameter" } ], "type": "function" } ], "groupBy": [], "limit": 50, "whereJsonTree": { "children1": [ { "id": "8abb8aaa-4567-489a-bcde-f19082bbe79a", "properties": { "field": "node_id", "fieldSrc": "field", "operator": "not_equal", "value": [ "0" ], "valueError": [ null ], "valueSrc": [ "value" ], "valueType": [ "text" ] }, "type": "rule" } ], "id": "8a9ab9aa-0123-4456-b89a-b190828e3675", "type": "group" }, "whereString": "node_id <> '0'" }, "table": "node_details" } ], "title": "Total nodes in mesh", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "description": "Nodes that sent any packet in the last 30 minutes", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] } }, "overrides": [] }, "gridPos": { "h": 4, "w": 5, "x": 4, "y": 0 }, "id": 21, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "showPercentChange": true, "textMode": "auto", "wideLayout": true }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "builder", "expr": "sum(count by(source_id) (count by(source_id) (delta(mesh_packet_ids_created{source_id=~\"$Nodes\"}[30m]))))", "fullMetaSearch": false, "includeNullMetadata": true, "instant": false, "legendFormat": "{{source_long_name}}", "range": true, "refId": "A", "useBackend": false } ], "title": "Active nodes in the last 30 minutes", "type": "stat" }, { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "description": "Status of nodes in the MQTT server", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "fieldMinMax": false, "mappings": [ { "options": { "none": { "color": "text", "index": 0, "text": "⚪️ Unknown" }, "offline": { "color": "red", "index": 1, "text": "🛑 Offline" }, "online": { "color": "green", "index": 2, "text": "🟢 Online" } }, "type": "value" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] } }, "overrides": [] }, "gridPos": { "h": 4, "w": 5, "x": 9, "y": 0 }, "id": 17, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "orientation": "vertical", "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": true }, "showPercentChange": false, "textMode": "auto", "wideLayout": true }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "editorMode": "builder", "format": "table", "rawSql": "SELECT COUNT(mqtt_status), mqtt_status FROM node_details WHERE (COALESCE(mqtt_status, '') <> '' AND mqtt_status NOT LIKE '%none%') GROUP BY mqtt_status LIMIT 50 ", "refId": "A", "sql": { "columns": [ { "name": "COUNT", "parameters": [ { "name": "mqtt_status", "type": "functionParameter" } ], "type": "function" }, { "parameters": [ { "name": "mqtt_status", "type": "functionParameter" } ], "type": "function" } ], "groupBy": [ { "property": { "name": "mqtt_status", "type": "string" }, "type": "groupBy" } ], "limit": 50, "whereJsonTree": { "children1": [ { "id": "89b8baab-cdef-4012-b456-7190836a7bf2", "properties": { "field": "mqtt_status", "fieldSrc": "field", "operator": "is_not_empty", "value": [], "valueSrc": [], "valueType": [] }, "type": "rule" }, { "id": "ab9a9b88-89ab-4cde-b012-3190836b4df7", "properties": { "field": "mqtt_status", "fieldSrc": "field", "operator": "not_like", "value": [ "none" ], "valueError": [ null ], "valueSrc": [ "value" ], "valueType": [ "text" ] }, "type": "rule" } ], "id": "babb9899-0123-4456-b89a-b19079f5bfed", "properties": { "conjunction": "AND" }, "type": "group" }, "whereString": "(COALESCE(mqtt_status, '') <> '' AND mqtt_status NOT LIKE '%none%')" }, "table": "node_details" } ], "title": "MQTT Node status", "type": "stat" }, { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "description": "This metric shows the length that only 5% of messages exceed, representing the typical upper limit of message sizes in our Meshtastic network. It helps identify trends in message length without being skewed by rare, extremely long outliers. By focusing on the 95th percentile, we get a reliable measure of 'long' messages while filtering out unusual spikes.", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null } ] }, "unit": "bytes" }, "overrides": [] }, "gridPos": { "h": 4, "w": 5, "x": 14, "y": 0 }, "id": 6, "options": { "colorMode": "value", "graphMode": "area", "justifyMode": "auto", "orientation": "auto", "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "showPercentChange": false, "textMode": "auto", "wideLayout": true }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "builder", "expr": "histogram_quantile(0.95, sum by(le) (rate(text_message_app_size_in_bytes_bucket{source_id=~\"$Nodes\"}[$__rate_interval])))", "fullMetaSearch": false, "hide": false, "includeNullMetadata": false, "instant": false, "legendFormat": "__auto", "range": true, "refId": "A", "useBackend": false } ], "title": "Typical Maximum Message Length in Bytes", "type": "stat" }, { "datasource": { "type": "datasource", "uid": "-- Mixed --" }, "description": "Total packets sent in specified time range", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "red", "value": 80 } ] }, "unit": "Packets" }, "overrides": [] }, "gridPos": { "h": 4, "w": 5, "x": 19, "y": 0 }, "id": 22, "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "auto", "orientation": "auto", "percentChangeColorMode": "standard", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "showPercentChange": false, "textMode": "auto", "wideLayout": true }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "builder", "expr": "sum(sum by(portnum) (mesh_packet_source_types_total{source_id=~\"$Nodes\"}))", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", "range": true, "refId": "A", "useBackend": false } ], "title": "Total packets sent", "type": "stat" }, { "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, "y": 4 }, "id": 16, "panels": [], "title": "Main Data", "type": "row" }, { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "description": "Shows the max recorded chanel utilization and the average", "fieldConfig": { "defaults": { "color": { "mode": "thresholds", "seriesBy": "last" }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "axisSoftMax": 11, "axisSoftMin": 7, "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": 3600000, "lineInterpolation": "linear", "lineStyle": { "fill": "solid" }, "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "dashed+area" } }, "fieldMinMax": false, "mappings": [], "min": 0, "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "yellow", "value": 10 }, { "color": "red", "value": 20 } ] }, "unit": "percent" }, "overrides": [] }, "gridPos": { "h": 9, "w": 11, "x": 0, "y": 5 }, "id": 23, "options": { "legend": { "calcs": [ "lastNotNull", "max", "mean" ], "displayMode": "table", "placement": "bottom", "showLegend": false }, "tooltip": { "mode": "multi", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "builder", "expr": "max(telemetry_app_channel_utilization{node_id=~\"$Nodes\"})", "fullMetaSearch": false, "hide": true, "includeNullMetadata": true, "instant": false, "legendFormat": "Chanel utilization (Max)", "range": true, "refId": "Max Chanel Utilization recorded", "useBackend": false }, { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "builder", "expr": "avg(telemetry_app_channel_utilization{node_id=~\"$Nodes\"})", "fullMetaSearch": false, "hide": false, "includeNullMetadata": true, "instant": false, "legendFormat": "Chanel utilization (Avg)", "range": true, "refId": "Average Chanel Utilization", "useBackend": false } ], "title": "Channel Utilization (ChUtil)", "type": "timeseries" }, { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "description": "This panel shows the percentage of airtime used for transmissions in the last hour. Airtime in LoRa networks represents the duration a device occupies the radio frequency channel to send data. It's a critical metric for:\n\nNetwork capacity: Higher airtime usage indicates increased network load.\n\nRegulatory compliance: Many regions limit the total airtime per device.\n\nBattery life: More airtime generally means higher power consumption.\n\nThe data comes from Meshtastic packets, reflecting actual network usage. High percentages may suggest the need for optimization or capacity planning.", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "axisSoftMax": 6.5, "barAlignment": 0, "drawStyle": "points", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholdsStyle": { "mode": "dashed+area" } }, "fieldMinMax": false, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "yellow", "value": 5 }, { "color": "red", "value": 8 } ] }, "unit": "percent" }, "overrides": [] }, "gridPos": { "h": 9, "w": 13, "x": 11, "y": 5 }, "id": 3, "options": { "legend": { "calcs": [ "mean" ], "displayMode": "table", "placement": "right", "showLegend": true, "sortBy": "Mean", "sortDesc": true }, "tooltip": { "mode": "single", "sort": "none" } }, "pluginVersion": "10.4.2", "targets": [ { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "code", "exemplar": false, "expr": "telemetry_app_air_util_tx{node_id=~\"$Nodes\"} > -100\nand\ndelta(telemetry_app_air_util_tx{node_id=~\"$Nodes\"}[1m]) != 0", "format": "time_series", "fullMetaSearch": false, "includeNullMetadata": false, "instant": false, "legendFormat": "{{long_name}}", "range": true, "refId": "A", "useBackend": false } ], "title": "Duty Cycle (AirUtilTX)", "type": "timeseries" }, { "datasource": { "type": "grafana-postgresql-datasource", "uid": "PA942B37CCFAF5A81" }, "description": "Graph that is built from Neighbor Info reports and shows the signal strenth for each line", "gridPos": { "h": 32, "w": 11, "x": 0, "y": 14 }, "id": 20, "options": { "edges": { "mainStatUnit": "dB" }, "nodes": { "arcs": [] } }, "pluginVersion": "10.4.2", "targets": [ { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "editorMode": "code", "format": "table", "rawQuery": true, "rawSql": "SELECT DISTINCT\n cd.node_id AS \"id\",\n cd.long_name AS \"title\",\n cd.hardware_model AS \"detail__Hardware Detail\",\n cd.role AS \"detail__Client Role\",\n cd.mqtt_status AS \"detail__MQTT Status\",\n cd.short_name AS \"subtitle\",\n CASE\n WHEN cd.mqtt_status = 'online' THEN '#2ECC71' -- Green for online\n WHEN cd.mqtt_status = 'offline' THEN '#E74C3C' -- Red for offline\n ELSE '#808080' -- Gray for none or any other status\n END AS \"color\"\nFROM\n node_details cd\nLEFT JOIN (\n SELECT node_id FROM node_neighbors\n UNION\n SELECT neighbor_id FROM node_neighbors\n) nn ON cd.node_id = nn.node_id\nWHERE nn.node_id IS NOT NULL", "refId": "nodes", "sql": { "columns": [ { "alias": "\"id\"", "parameters": [ { "name": "node_id", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"title\"", "parameters": [ { "name": "long_name", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"detail__Hardware Detail\"", "parameters": [ { "name": "hardware_model", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"detail__Client Role\"", "parameters": [ { "name": "role", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"detail__MQTT Status\"", "parameters": [ { "name": "mqtt_status", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"subtitle\"", "parameters": [ { "name": "short_name", "type": "functionParameter" } ], "type": "function" } ], "groupBy": [ { "property": { "type": "string" }, "type": "groupBy" } ], "limit": 50 }, "table": "node_details" }, { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "editorMode": "code", "format": "table", "hide": false, "rawQuery": true, "rawSql": "SELECT \n CONCAT(neighbor_id, '_', node_id) AS id,\n neighbor_id AS \"source\",\n node_id AS \"target\",\n snr AS \"mainstat\",\n CASE\n WHEN snr < -13 THEN '#E74C3C' -- Red for SNR < -13\n WHEN snr < -7 THEN '#F4D03F' -- Yellow for -13 ≤ SNR < -7\n ELSE '#2ECC71' -- Green for SNR ≥ -7\n END AS \"color\",\n GREATEST(0.1, LEAST(2, 1 + ((snr + 13) / 10))) AS \"thickness\"\nFROM \n node_neighbors", "refId": "edges", "sql": { "columns": [ { "parameters": [ { "name": "id", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"source\"", "parameters": [ { "name": "neighbor_id", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"target\"", "parameters": [ { "name": "node_id", "type": "functionParameter" } ], "type": "function" }, { "alias": "\"mainstat\"", "parameters": [ { "name": "snr", "type": "functionParameter" } ], "type": "function" } ], "groupBy": [ { "property": { "type": "string" }, "type": "groupBy" } ], "limit": 50 }, "table": "node_neighbors" } ], "title": "Node Graph", "type": "nodeGraph" }, { "datasource": { "type": "datasource", "uid": "-- Mixed --" }, "description": "Displays types of packets in the selected time range.\n\nFor more details see:\nhttps://buf.build/meshtastic/protobufs/docs/main:meshtastic#meshtastic.PortNum", "fieldConfig": { "defaults": { "color": { "fixedColor": "green", "mode": "palette-classic" }, "custom": { "hideFrom": { "legend": false, "tooltip": false, "viz": false } }, "fieldMinMax": false, "mappings": [], "unit": "Packets" }, "overrides": [] }, "gridPos": { "h": 10, "w": 5, "x": 11, "y": 14 }, "id": 5, "options": { "displayLabels": [ "name", "percent" ], "legend": { "displayMode": "list", "placement": "right", "showLegend": false }, "pieType": "donut", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "tooltip": { "mode": "single", "sort": "none" } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "builder", "expr": "sum by(portnum) (mesh_packet_source_types_total{source_id=~\"$Nodes\"})", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", "range": true, "refId": "A", "useBackend": false } ], "title": "Packet types for selected time", "type": "piechart" }, { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "description": "How many hops are configured for each client", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "fieldMinMax": false, "mappings": [], "max": 7, "min": 0, "thresholds": { "mode": "absolute", "steps": [ { "color": "green", "value": null }, { "color": "#EAB839", "value": 4 }, { "color": "red", "value": 6 } ] }, "unit": "hops" }, "overrides": [] }, "gridPos": { "h": 10, "w": 8, "x": 16, "y": 14 }, "id": 9, "options": { "minVizHeight": 75, "minVizWidth": 75, "orientation": "auto", "reduceOptions": { "calcs": [ "lastNotNull" ], "fields": "", "values": false }, "showThresholdLabels": false, "showThresholdMarkers": true, "sizing": "auto" }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "prometheus", "uid": "P1809F7CD0C75ACF3" }, "disableTextWrap": false, "editorMode": "code", "expr": "max(\n mesh_packet_hop_start{source_id=~\"$Nodes\"}\n and\n (delta(mesh_packet_hop_start{source_id=~\"$Nodes\"}[1m]) != 0)\n) by (source_id, source_long_name)", "fullMetaSearch": false, "includeNullMetadata": true, "instant": false, "legendFormat": "{{source_long_name}}", "range": true, "refId": "A", "useBackend": false } ], "title": "The configured max hops for each client", "type": "gauge" }, { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "description": "Information stored on the Redis DB which includes \"hard to get\" information - that is needed to be gathered over time.", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "custom": { "align": "center", "cellOptions": { "type": "color-text" }, "filterable": true, "inspect": true }, "links": [], "mappings": [ { "options": { "none": { "color": "text", "index": 2, "text": "⚪️ Unknown" }, "offline": { "color": "red", "index": 1, "text": "🛑 offline" }, "online": { "color": "green", "index": 0, "text": "🟢 online" } }, "type": "value" }, { "options": { "match": "empty", "result": { "color": "text", "index": 3, "text": "⚪️ Unknown" } }, "type": "special" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "text" } ] } }, "overrides": [ { "matcher": { "id": "byName", "options": "Node ID" }, "properties": [ { "id": "links", "value": [ { "targetBlank": true, "title": "Go to node dashboard", "url": "http://grafana.mesh-il.com:3000/d/edqo1uh0eglq8g/node-dashboard?orgId=1&var-nodeID=${__data.fields[0]}" } ] }, { "id": "color", "value": { "fixedColor": "light-blue", "mode": "fixed" } } ] }, { "matcher": { "id": "byName", "options": "Record Created At" }, "properties": [ { "id": "unit", "value": "dateTimeAsLocal" } ] }, { "matcher": { "id": "byName", "options": "Client Role" }, "properties": [ { "id": "custom.width", "value": 126 } ] } ] }, "gridPos": { "h": 22, "w": 13, "x": 11, "y": 24 }, "id": 14, "options": { "cellHeight": "sm", "footer": { "countRows": true, "enablePagination": false, "fields": [], "reducer": [ "count" ], "show": true }, "showHeader": true, "sortBy": [ { "desc": true, "displayName": "MQTT Status" } ] }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "editorMode": "code", "format": "table", "rawQuery": true, "rawSql": "SELECT * FROM node_details WHERE node_id <> '0'", "refId": "A", "sql": { "columns": [ { "parameters": [ { "name": "*", "type": "functionParameter" } ], "type": "function" } ], "groupBy": [ { "property": { "type": "string" }, "type": "groupBy" } ], "limit": 50, "whereJsonTree": { "children1": [ { "id": "aa8aab9b-4567-489a-bcde-f190819d6a21", "properties": { "field": "node_id", "fieldSrc": "field", "operator": "not_equal", "value": [ "0" ], "valueSrc": [ "value" ], "valueType": [ "text" ] }, "type": "rule" } ], "id": "aab899bb-0123-4456-b89a-b190819173ad", "type": "group" }, "whereString": "node_id <> '0'" }, "table": "node_details" } ], "title": "General Information", "transformations": [ { "id": "extractFields", "options": { "format": "json", "keepTime": false, "replace": true, "source": "Value" } }, { "id": "organize", "options": { "excludeByName": {}, "includeByName": {}, "indexByName": {}, "renameByName": { "created_at": "Record Created At", "hardware_model": "Hardware Model", "long_name": "Long name", "mqtt_status": "MQTT Status", "node_id": "Node ID", "role": "Client Role", "short_name": "Short Name" } } } ], "type": "table" }, { "datasource": { "type": "grafana-postgresql-datasource", "uid": "PA942B37CCFAF5A81" }, "description": "Displays the nodes on the map", "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "custom": { "hideFrom": { "legend": false, "tooltip": false, "viz": false } }, "mappings": [ { "options": { "none": { "color": "blue", "index": 0, "text": "⚪️ Unknown" }, "offline": { "color": "red", "index": 2, "text": "🛑 Offline" }, "online": { "color": "green", "index": 1, "text": "🟢 Online" } }, "type": "value" } ], "thresholds": { "mode": "absolute", "steps": [ { "color": "blue" } ] }, "unit": "string" }, "overrides": [] }, "gridPos": { "h": 25, "w": 24, "x": 0, "y": 46 }, "id": 8, "options": { "basemap": { "config": {}, "name": "Layer 0", "opacity": 1, "tooltip": true, "type": "xyz" }, "controls": { "mouseWheelZoom": true, "showAttribution": true, "showDebug": false, "showMeasure": true, "showScale": true, "showZoom": true }, "layers": [ { "config": { "showLegend": true, "style": { "color": { "field": "mqtt_status", "fixed": "dark-green" }, "opacity": 0.2, "rotation": { "fixed": 0, "max": 360, "min": -360, "mode": "mod" }, "size": { "fixed": 10, "max": 5, "min": 1 }, "symbol": { "fixed": "img/icons/marker/triangle.svg", "mode": "fixed" }, "symbolAlign": { "horizontal": "center", "vertical": "top" }, "text": { "field": "Short Name", "fixed": "", "mode": "field" }, "textConfig": { "fontSize": 12, "offsetX": 0, "offsetY": 5, "textAlign": "center", "textBaseline": "middle" } } }, "filterData": { "id": "byRefId", "options": "Nodes" }, "location": { "latitude": "latitude_norm", "longitude": "longitude_norm", "mode": "coords" }, "name": "Layer 1", "tooltip": true, "type": "markers" } ], "tooltip": { "mode": "details" }, "view": { "allLayers": true, "id": "coords", "lat": 32.008273, "lon": 34.969099, "padding": 30, "zoom": 8 } }, "pluginVersion": "11.1.0", "targets": [ { "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "editorMode": "code", "format": "table", "hide": false, "rawQuery": true, "rawSql": "SELECT * FROM node_details WHERE longitude != 0 AND longitude IS NOT NULL", "refId": "Nodes", "sql": { "columns": [ { "parameters": [ { "name": "*", "type": "functionParameter" } ], "type": "function" } ], "groupBy": [ { "property": { "type": "string" }, "type": "groupBy" } ], "limit": 50 }, "table": "node_details" } ], "title": "Nodes map", "transformations": [ { "id": "organize", "options": { "excludeByName": { "Time 1": false, "Time 2": true, "Time 3": true, "Time 4": true, "__name__ 1": true, "__name__ 2": true, "hardware_model 2": true, "hardware_model 3": true, "hardware_model 4": true, "hardware_model 5": true, "instance 1": true, "instance 2": true, "instance 3": true, "instance 4": true, "job 1": true, "job 2": true, "job 3": true, "job 4": true, "long_name 2": true, "long_name 3": true, "long_name 4": true, "long_name 5": true, "role 2": true, "role 3": true, "role 4": true, "role 5": true, "short_name 2": true, "short_name 3": true, "short_name 4": true, "short_name 5": true }, "includeByName": {}, "indexByName": {}, "renameByName": { "Time 1": "Log Time", "__name__ 1": "", "hardware_model 1": "Hardware Model", "long_name 1": "Long Name", "mqtt_status": "MQTT_STATUS", "node_id": "Node ID", "role 1": "Client Role", "short_name 1": "Short Name" } } }, { "id": "calculateField", "options": { "alias": "longitude_norm", "binary": { "left": "longitude", "operator": "*", "right": "1e-7" }, "mode": "binary", "reduce": { "include": [ "longitude", "latitude" ], "reducer": "sum" }, "replaceFields": false } }, { "id": "calculateField", "options": { "alias": "latitude_norm", "binary": { "left": "latitude", "operator": "*", "right": "1e-7" }, "mode": "binary", "reduce": { "reducer": "sum" } } } ], "type": "geomap" } ], "refresh": "5m", "schemaVersion": 39, "tags": [], "templating": { "list": [ { "current": { "selected": false, "text": "All", "value": "$__all" }, "datasource": { "type": "postgres", "uid": "PA942B37CCFAF5A81" }, "definition": "SELECT \n concat(long_name, ' (', node_id, ')') as __text, \n node_id as __value \nFROM node_details \nORDER BY long_name", "hide": 0, "includeAll": true, "label": "Nodes", "multi": true, "name": "Nodes", "options": [], "query": "SELECT \n concat(long_name, ' (', node_id, ')') as __text, \n node_id as __value \nFROM node_details \nORDER BY long_name", "refresh": 1, "regex": "", "skipUrlSync": false, "sort": 0, "type": "query" } ] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "browser", "title": "Main Dashboard", "uid": "edqkge9mf7v28g", "version": 5, "weekStart": "sunday" }