mirror of
https://github.com/tcivie/meshtastic-metrics-exporter.git
synced 2025-02-21 03:15:27 -08:00
1659 lines
44 KiB
JSON
1659 lines
44 KiB
JSON
{
|
|
"annotations": {
|
|
"list": [
|
|
{
|
|
"builtIn": 1,
|
|
"datasource": {
|
|
"type": "grafana",
|
|
"uid": "-- Grafana --"
|
|
},
|
|
"enable": true,
|
|
"hide": true,
|
|
"iconColor": "rgba(0, 211, 255, 1)",
|
|
"name": "Annotations & Alerts",
|
|
"type": "dashboard"
|
|
}
|
|
]
|
|
},
|
|
"editable": true,
|
|
"fiscalYearStartMonth": 0,
|
|
"graphTooltip": 0,
|
|
"id": 11,
|
|
"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
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 80
|
|
}
|
|
]
|
|
},
|
|
"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 client_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": "client_details"
|
|
}
|
|
],
|
|
"title": "Total nodes in mesh",
|
|
"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": 4,
|
|
"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 client_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": "client_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": "chars"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"gridPos": {
|
|
"h": 4,
|
|
"w": 5,
|
|
"x": 9,
|
|
"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": "sum by(source_id) (mesh_packet_want_ack_total)",
|
|
"fullMetaSearch": false,
|
|
"hide": true,
|
|
"includeNullMetadata": false,
|
|
"instant": false,
|
|
"legendFormat": "__auto",
|
|
"range": true,
|
|
"refId": "A",
|
|
"useBackend": false
|
|
},
|
|
{
|
|
"datasource": {
|
|
"type": "prometheus",
|
|
"uid": "P1809F7CD0C75ACF3"
|
|
},
|
|
"disableTextWrap": false,
|
|
"editorMode": "builder",
|
|
"expr": "histogram_quantile(0.95, sum by(le) (rate(text_message_app_length_bucket{node_id=~\"$Nodes\"}[$__rate_interval])))",
|
|
"fullMetaSearch": false,
|
|
"hide": false,
|
|
"includeNullMetadata": false,
|
|
"instant": false,
|
|
"legendFormat": "{{long_name}}",
|
|
"range": true,
|
|
"refId": "B",
|
|
"useBackend": false
|
|
}
|
|
],
|
|
"title": "Typical Maximum Message Length",
|
|
"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": 14,
|
|
"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": "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": "postgres",
|
|
"uid": "PA942B37CCFAF5A81"
|
|
},
|
|
"description": "Graph that is built from Neighbor Info reports and shows the signal strenth for each line",
|
|
"gridPos": {
|
|
"h": 29,
|
|
"w": 6,
|
|
"x": 0,
|
|
"y": 5
|
|
},
|
|
"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 \n node_id AS \"id\", \n long_name AS \"title\", \n hardware_model AS \"detail__Hardware Detail\", \n role AS \"detail__Client Role\", \n mqtt_status AS \"detail__MQTT Status\", \n short_name AS \"subtitle\",\n CASE \n WHEN mqtt_status = 'online' THEN '#2ECC71' -- Green for online\n WHEN mqtt_status = 'offline' THEN '#E74C3C' -- Red for offline\n ELSE '#808080' -- Gray for none or any other status\n END AS \"color\"\nFROM \n client_details",
|
|
"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": "client_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": "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",
|
|
"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": "area"
|
|
}
|
|
},
|
|
"fieldMinMax": false,
|
|
"mappings": [],
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": null
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 12
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 20
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"gridPos": {
|
|
"h": 9,
|
|
"w": 18,
|
|
"x": 6,
|
|
"y": 5
|
|
},
|
|
"id": 3,
|
|
"options": {
|
|
"legend": {
|
|
"calcs": [
|
|
"mean"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": 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": "Percent of airtime for transmission used within the last hour",
|
|
"type": "timeseries"
|
|
},
|
|
{
|
|
"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": 6,
|
|
"y": 14
|
|
},
|
|
"id": 5,
|
|
"options": {
|
|
"displayLabels": [
|
|
"name"
|
|
],
|
|
"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"
|
|
},
|
|
"mappings": [],
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": null
|
|
},
|
|
{
|
|
"color": "#EAB839",
|
|
"value": 4
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 6
|
|
}
|
|
]
|
|
},
|
|
"unit": "hops"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"gridPos": {
|
|
"h": 10,
|
|
"w": 13,
|
|
"x": 11,
|
|
"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/edqo1uh0eglq8f/node-dashboard?orgId=1&var-nodeID=${__data.fields[0]}"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": "color",
|
|
"value": {
|
|
"fixedColor": "light-blue",
|
|
"mode": "fixed"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"gridPos": {
|
|
"h": 10,
|
|
"w": 18,
|
|
"x": 6,
|
|
"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 client_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": "client_details"
|
|
}
|
|
],
|
|
"title": "General Information",
|
|
"transformations": [
|
|
{
|
|
"id": "extractFields",
|
|
"options": {
|
|
"format": "json",
|
|
"keepTime": false,
|
|
"replace": true,
|
|
"source": "Value"
|
|
}
|
|
},
|
|
{
|
|
"id": "organize",
|
|
"options": {
|
|
"excludeByName": {},
|
|
"includeByName": {},
|
|
"indexByName": {},
|
|
"renameByName": {
|
|
"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": "datasource",
|
|
"uid": "-- Mixed --"
|
|
},
|
|
"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": 11,
|
|
"w": 24,
|
|
"x": 0,
|
|
"y": 34
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
},
|
|
"location": {
|
|
"latitude": "Value #Latitude",
|
|
"longitude": "Value #Longitude",
|
|
"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": "prometheus",
|
|
"uid": "P1809F7CD0C75ACF3"
|
|
},
|
|
"editorMode": "code",
|
|
"exemplar": false,
|
|
"expr": "device_longitude{node_id=~\"$Nodes\"} * 1e-7",
|
|
"format": "table",
|
|
"hide": false,
|
|
"instant": true,
|
|
"legendFormat": "__auto",
|
|
"range": false,
|
|
"refId": "Longitude"
|
|
},
|
|
{
|
|
"datasource": {
|
|
"type": "prometheus",
|
|
"uid": "P1809F7CD0C75ACF3"
|
|
},
|
|
"editorMode": "code",
|
|
"exemplar": false,
|
|
"expr": "device_latitude{node_id=~\"$Nodes\"} * 1e-7",
|
|
"format": "table",
|
|
"hide": false,
|
|
"instant": true,
|
|
"legendFormat": "__auto",
|
|
"range": false,
|
|
"refId": "Latitude"
|
|
},
|
|
{
|
|
"datasource": {
|
|
"type": "prometheus",
|
|
"uid": "P1809F7CD0C75ACF3"
|
|
},
|
|
"disableTextWrap": false,
|
|
"editorMode": "code",
|
|
"exemplar": false,
|
|
"expr": "device_position_precision{node_id=~\"$Nodes\"}",
|
|
"format": "table",
|
|
"fullMetaSearch": false,
|
|
"hide": false,
|
|
"includeNullMetadata": true,
|
|
"instant": true,
|
|
"legendFormat": "__auto",
|
|
"range": false,
|
|
"refId": "Precision",
|
|
"useBackend": false
|
|
},
|
|
{
|
|
"datasource": {
|
|
"type": "prometheus",
|
|
"uid": "P1809F7CD0C75ACF3"
|
|
},
|
|
"disableTextWrap": false,
|
|
"editorMode": "code",
|
|
"exemplar": false,
|
|
"expr": "device_altitude{node_id=~\"$Nodes\"}",
|
|
"format": "table",
|
|
"fullMetaSearch": false,
|
|
"hide": false,
|
|
"includeNullMetadata": true,
|
|
"instant": true,
|
|
"legendFormat": "__auto",
|
|
"range": false,
|
|
"refId": "Elevation",
|
|
"useBackend": false
|
|
},
|
|
{
|
|
"datasource": {
|
|
"type": "postgres",
|
|
"uid": "PA942B37CCFAF5A81"
|
|
},
|
|
"editorMode": "code",
|
|
"format": "table",
|
|
"hide": false,
|
|
"rawQuery": true,
|
|
"rawSql": "SELECT * FROM client_details",
|
|
"refId": "A",
|
|
"sql": {
|
|
"columns": [
|
|
{
|
|
"parameters": [
|
|
{
|
|
"name": "*",
|
|
"type": "functionParameter"
|
|
}
|
|
],
|
|
"type": "function"
|
|
}
|
|
],
|
|
"groupBy": [
|
|
{
|
|
"property": {
|
|
"type": "string"
|
|
},
|
|
"type": "groupBy"
|
|
}
|
|
],
|
|
"limit": 50
|
|
},
|
|
"table": "client_details"
|
|
}
|
|
],
|
|
"title": "Nodes map",
|
|
"transformations": [
|
|
{
|
|
"id": "joinByField",
|
|
"options": {
|
|
"byField": "node_id",
|
|
"mode": "outer"
|
|
}
|
|
},
|
|
{
|
|
"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"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"type": "geomap"
|
|
},
|
|
{
|
|
"datasource": {
|
|
"type": "prometheus",
|
|
"uid": "P1809F7CD0C75ACF3"
|
|
},
|
|
"description": "Last reported battely value of the nodes",
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 0,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineStyle": {
|
|
"fill": "solid"
|
|
},
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "dashed+area"
|
|
}
|
|
},
|
|
"mappings": [],
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "red"
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 20
|
|
},
|
|
{
|
|
"color": "green",
|
|
"value": 80
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"gridPos": {
|
|
"h": 11,
|
|
"w": 24,
|
|
"x": 0,
|
|
"y": 45
|
|
},
|
|
"id": 11,
|
|
"options": {
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"mode": "single",
|
|
"sort": "none"
|
|
}
|
|
},
|
|
"pluginVersion": "10.4.2",
|
|
"targets": [
|
|
{
|
|
"datasource": {
|
|
"type": "prometheus",
|
|
"uid": "P1809F7CD0C75ACF3"
|
|
},
|
|
"disableTextWrap": false,
|
|
"editorMode": "builder",
|
|
"expr": "telemetry_app_battery_level{node_id=~\"$Nodes\"}",
|
|
"fullMetaSearch": false,
|
|
"includeNullMetadata": true,
|
|
"instant": false,
|
|
"legendFormat": "{{long_name}}",
|
|
"range": true,
|
|
"refId": "A",
|
|
"useBackend": false
|
|
}
|
|
],
|
|
"title": "Nodes Battery report",
|
|
"type": "timeseries"
|
|
}
|
|
],
|
|
"refresh": "1m",
|
|
"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 client_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 client_details \nORDER BY long_name",
|
|
"refresh": 1,
|
|
"regex": "",
|
|
"skipUrlSync": false,
|
|
"sort": 0,
|
|
"type": "query"
|
|
}
|
|
]
|
|
},
|
|
"time": {
|
|
"from": "now-24h",
|
|
"to": "now"
|
|
},
|
|
"timepicker": {},
|
|
"timezone": "browser",
|
|
"title": "Main Dashboard",
|
|
"uid": "edqkge9mf7v28g",
|
|
"version": 2,
|
|
"weekStart": "sunday"
|
|
} |