218 lines
6.1 KiB
JSON
218 lines
6.1 KiB
JSON
{
|
|
"title": "Meshtastic Firmware - Recorder Stream",
|
|
"description": "Live view of `.mtlog/` streams shipped by `mtlog_to_datadog.py`. Heap, packet volume, log levels, errors. One row per port.",
|
|
"widgets": [
|
|
{
|
|
"definition": {
|
|
"title": "Free heap (bytes)",
|
|
"type": "timeseries",
|
|
"show_legend": true,
|
|
"requests": [
|
|
{
|
|
"queries": [
|
|
{
|
|
"name": "free_heap",
|
|
"data_source": "metrics",
|
|
"query": "avg:mesh.local.heap_free_bytes{service:meshtastic-firmware} by {port}"
|
|
}
|
|
],
|
|
"response_format": "timeseries",
|
|
"display_type": "line"
|
|
}
|
|
],
|
|
"yaxis": { "label": "bytes" }
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Heap slope (bytes/min) - last 1h",
|
|
"type": "query_value",
|
|
"precision": 0,
|
|
"requests": [
|
|
{
|
|
"queries": [
|
|
{
|
|
"name": "slope",
|
|
"data_source": "metrics",
|
|
"query": "derivative(avg:mesh.local.heap_free_bytes{service:meshtastic-firmware})",
|
|
"aggregator": "avg"
|
|
}
|
|
],
|
|
"response_format": "scalar"
|
|
}
|
|
],
|
|
"conditional_formats": [
|
|
{ "comparator": "<", "value": -100, "palette": "white_on_red" },
|
|
{ "comparator": "<", "value": 0, "palette": "white_on_yellow" },
|
|
{ "comparator": ">=", "value": 0, "palette": "white_on_green" }
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Total heap (bytes)",
|
|
"type": "timeseries",
|
|
"requests": [
|
|
{
|
|
"queries": [
|
|
{
|
|
"name": "total_heap",
|
|
"data_source": "metrics",
|
|
"query": "avg:mesh.local.heap_total_bytes{service:meshtastic-firmware} by {port}"
|
|
}
|
|
],
|
|
"response_format": "timeseries",
|
|
"display_type": "line"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Battery level (%)",
|
|
"type": "timeseries",
|
|
"requests": [
|
|
{
|
|
"queries": [
|
|
{
|
|
"name": "battery",
|
|
"data_source": "metrics",
|
|
"query": "avg:mesh.device.battery_level{service:meshtastic-firmware} by {port}"
|
|
}
|
|
],
|
|
"response_format": "timeseries",
|
|
"display_type": "line"
|
|
}
|
|
],
|
|
"yaxis": { "min": "0", "max": "105" }
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Air utilization (TX %)",
|
|
"type": "timeseries",
|
|
"requests": [
|
|
{
|
|
"queries": [
|
|
{
|
|
"name": "airutil",
|
|
"data_source": "metrics",
|
|
"query": "avg:mesh.device.air_util_tx{service:meshtastic-firmware} by {port}"
|
|
}
|
|
],
|
|
"response_format": "timeseries",
|
|
"display_type": "line"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Channel utilization (%)",
|
|
"type": "timeseries",
|
|
"requests": [
|
|
{
|
|
"queries": [
|
|
{
|
|
"name": "chutil",
|
|
"data_source": "metrics",
|
|
"query": "avg:mesh.device.channel_utilization{service:meshtastic-firmware} by {port}"
|
|
}
|
|
],
|
|
"response_format": "timeseries",
|
|
"display_type": "line"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Log volume by level",
|
|
"type": "timeseries",
|
|
"show_legend": true,
|
|
"requests": [
|
|
{
|
|
"response_format": "timeseries",
|
|
"display_type": "bars",
|
|
"queries": [
|
|
{
|
|
"name": "log_count",
|
|
"data_source": "logs",
|
|
"indexes": ["*"],
|
|
"compute": { "aggregation": "count" },
|
|
"search": { "query": "service:meshtastic-firmware" },
|
|
"group_by": [
|
|
{
|
|
"facet": "@level",
|
|
"limit": 10,
|
|
"sort": { "order": "desc", "aggregation": "count" }
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Recent ERROR / CRIT firmware logs",
|
|
"type": "list_stream",
|
|
"requests": [
|
|
{
|
|
"response_format": "event_list",
|
|
"query": {
|
|
"data_source": "logs_stream",
|
|
"query_string": "service:meshtastic-firmware (status:error OR @level:ERROR OR @level:CRIT)",
|
|
"indexes": [],
|
|
"sort": { "column": "timestamp", "order": "desc" }
|
|
},
|
|
"columns": [
|
|
{ "field": "timestamp", "width": "auto" },
|
|
{ "field": "host", "width": "auto" },
|
|
{ "field": "@port", "width": "auto" },
|
|
{ "field": "@level", "width": "auto" },
|
|
{ "field": "@thread", "width": "auto" },
|
|
{ "field": "message", "width": "stretch" }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"definition": {
|
|
"title": "Recorder marker events",
|
|
"type": "list_stream",
|
|
"requests": [
|
|
{
|
|
"response_format": "event_list",
|
|
"query": {
|
|
"data_source": "logs_stream",
|
|
"query_string": "service:meshtastic-firmware @level:MARK",
|
|
"indexes": [],
|
|
"sort": { "column": "timestamp", "order": "desc" }
|
|
},
|
|
"columns": [
|
|
{ "field": "timestamp", "width": "auto" },
|
|
{ "field": "host", "width": "auto" },
|
|
{ "field": "message", "width": "stretch" }
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"template_variables": [
|
|
{
|
|
"name": "port",
|
|
"prefix": "port",
|
|
"available_values": [],
|
|
"default": "*"
|
|
},
|
|
{ "name": "host", "prefix": "host", "available_values": [], "default": "*" }
|
|
],
|
|
"layout_type": "ordered",
|
|
"notify_list": [],
|
|
"reflow_type": "auto"
|
|
}
|