Blame
|
1 | # Grafana |
||||||
| 2 | ||||||||
|
3 | ## Battery |
||||||
|
4 | |||||||
|
5 | ``` |
||||||
| 6 | from(bucket: "meshcore") |
|||||||
| 7 | |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |
|||||||
|
8 | |> filter(fn: (r) => r._measurement == "meshcore_status") |
||||||
| 9 | |> filter(fn: (r) => r._field == "bat") |
|||||||
|
10 | |> map(fn: (r) => ({ |
||||||
|
11 | _time: r._time, |
||||||
| 12 | _value: r._value, |
|||||||
| 13 | series: r.node |
|||||||
|
14 | })) |
||||||
|
15 | |> group(columns: ["series"]) |
||||||
| 16 | |> aggregateWindow(every:15m, fn:last, createEmpty:true) |
|||||||
|
17 | ``` |
||||||
|
18 | |||||||
|
19 | ## Noise Floor |
||||||
|
20 | |||||||
| 21 | ``` |
|||||||
| 22 | from(bucket: "meshcore") |
|||||||
| 23 | |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |
|||||||
|
24 | |> filter(fn: (r) => r._measurement == "meshcore_status") |
||||||
| 25 | |> filter(fn: (r) => r._field == "noise_floor") |
|||||||
| 26 | |> group(columns: ["node"]) |
|||||||
| 27 | |> aggregateWindow(every: 15m, fn: mean, createEmpty: true) |
|||||||
| 28 | ``` |
|||||||
| 29 | ||||||||
| 30 | ## RF Link Health |
|||||||
| 31 | ||||||||
| 32 | ``` |
|||||||
| 33 | from(bucket: "meshcore") |
|||||||
| 34 | |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |
|||||||
| 35 | |> filter(fn: (r) => r._measurement == "meshcore_status") |
|||||||
| 36 | |> filter(fn: (r) => |
|||||||
| 37 | r._field == "last_snr" or |
|||||||
| 38 | r._field == "last_rssi" or |
|||||||
| 39 | r._field == "noise_floor" |
|||||||
| 40 | ) |
|||||||
| 41 | |> group(columns: ["node", "_field"]) |
|||||||
| 42 | |> aggregateWindow(every:15m, fn:mean, createEmpty:true) |
|||||||
| 43 | ``` |
|||||||
| 44 | ||||||||
| 45 | ## Status SNR |
|||||||
| 46 | ||||||||
| 47 | ``` |
|||||||
| 48 | from(bucket: "meshcore") |
|||||||
| 49 | |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |
|||||||
| 50 | |> filter(fn: (r) => r._measurement == "meshcore_status") |
|||||||
| 51 | |> filter(fn: (r) => r._field == "last_snr") |
|||||||
|
52 | |> map(fn: (r) => ({ |
||||||
|
53 | _time: r._time, |
||||||
| 54 | _value: r._value, |
|||||||
| 55 | node: r.node |
|||||||
|
56 | })) |
||||||
|
57 | |> group(columns: ["node"]) |
||||||
| 58 | |> aggregateWindow(every: 15m, fn: mean, createEmpty: true) |
|||||||
|
59 | ``` |
||||||
| 60 | ||||||||
|
61 | ## Trace SNR |
||||||
|
62 | |||||||
|
63 | ``` |
||||||
| 64 | from(bucket: "meshcore") |
|||||||
| 65 | |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |
|||||||
|
66 | |> filter(fn: (r) => r._measurement == "meshcore_trace") |
||||||
|
67 | |> filter(fn: (r) => r._field == "snr") |
||||||
|
68 | |> map(fn: (r) => ({ |
||||||
|
69 | _time: r._time, |
||||||
| 70 | _value: r._value, |
|||||||
| 71 | route: r.from + " → " + r.to + " : " + r.site |
|||||||
|
72 | })) |
||||||
|
73 | |> group(columns: ["route"]) |
||||||
| 74 | |> aggregateWindow(every: 15m, fn: mean, createEmpty: true) |
|||||||
|
75 | ``` |
||||||