diff options
| -rw-r--r-- | dashboards-grafana/general.json | 2920 | 
1 files changed, 1459 insertions, 1461 deletions
| diff --git a/dashboards-grafana/general.json b/dashboards-grafana/general.json index 97c1a8a..8b5964b 100644 --- a/dashboards-grafana/general.json +++ b/dashboards-grafana/general.json @@ -17,7 +17,7 @@    "gnetId": null,    "graphTooltip": 0,    "id": 1, -  "iteration": 1625306026844, +  "iteration": 1625389625118,    "links": [],    "panels": [      { @@ -197,7 +197,7 @@        "type": "timeseries"      },      { -      "collapsed": true, +      "collapsed": false,        "datasource": null,        "gridPos": {          "h": 1, @@ -206,247 +206,246 @@          "y": 8        },        "id": 31, -      "panels": [ -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "type": "linear" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "displayName": "${__field.labels.ipcp}", -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] -              } -            }, -            "overrides": [] -          }, -          "gridPos": { -            "h": 7, -            "w": 6, -            "x": 0, -            "y": 9 +      "panels": [], +      "title": "Link State Database", +      "type": "row" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 33, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "type": "linear" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_lsdb_neighbors_total\")\n  |> filter(fn: (r) => r[\"_field\"] == \"neighbors\")\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Neighbors", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "type": "linear" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } +          "displayName": "${__field.labels.ipcp}", +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "displayName": "${__field.labels.ipcp}", -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +              { +                "color": "red", +                "value": 80                } -            }, -            "overrides": [] -          }, -          "gridPos": { -            "h": 7, -            "w": 6, -            "x": 6, -            "y": 9 +            ] +          } +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 7, +        "w": 6, +        "x": 0, +        "y": 9 +      }, +      "id": 33, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_lsdb_neighbors_total\")\n  |> filter(fn: (r) => r[\"_field\"] == \"neighbors\")\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Neighbors", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 34, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "type": "linear" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_lsdb_nodes_total\")\n  |> filter(fn: (r) => r[\"_field\"] == \"nodes\")\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Nodes", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "type": "linear" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } +          "displayName": "${__field.labels.ipcp}", +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "displayName": "${__field.labels.ipcp}", -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +              { +                "color": "red", +                "value": 80                } -            }, -            "overrides": [] -          }, -          "gridPos": { -            "h": 7, -            "w": 6, -            "x": 12, -            "y": 9 +            ] +          } +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 7, +        "w": 6, +        "x": 6, +        "y": 9 +      }, +      "id": 34, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_lsdb_nodes_total\")\n  |> filter(fn: (r) => r[\"_field\"] == \"nodes\")\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Nodes", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 35, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "type": "linear"              }, -            "tooltip": { -              "mode": "single" +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_lsdb_links_total\")\n  |> filter(fn: (r) => r[\"_field\"] == \"links\")\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Links (unidirectional)", -          "type": "timeseries" +          "displayName": "${__field.labels.ipcp}", +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null +              }, +              { +                "color": "red", +                "value": 80 +              } +            ] +          } +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 7, +        "w": 6, +        "x": 12, +        "y": 9 +      }, +      "id": 35, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_lsdb_links_total\")\n  |> filter(fn: (r) => r[\"_field\"] == \"links\")\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A"          }        ], -      "title": "Link State Database", -      "type": "row" +      "title": "Links (unidirectional)", +      "type": "timeseries"      },      {        "collapsed": true, @@ -455,7 +454,7 @@          "h": 1,          "w": 24,          "x": 0, -        "y": 9 +        "y": 16        },        "id": 58,        "panels": [], @@ -522,7 +521,7 @@          "h": 7,          "w": 6,          "x": 0, -        "y": 10 +        "y": 17        },        "id": 62,        "options": { @@ -603,7 +602,7 @@          "h": 7,          "w": 6,          "x": 6, -        "y": 10 +        "y": 17        },        "id": 60,        "options": { @@ -685,7 +684,7 @@          "h": 7,          "w": 6,          "x": 12, -        "y": 10 +        "y": 17        },        "id": 69,        "options": { @@ -714,7 +713,7 @@          "h": 1,          "w": 24,          "x": 0, -        "y": 17 +        "y": 24        },        "id": 66,        "panels": [], @@ -780,7 +779,7 @@          "h": 7,          "w": 6,          "x": 0, -        "y": 18 +        "y": 25        },        "id": 61,        "options": { @@ -861,7 +860,7 @@          "h": 7,          "w": 6,          "x": 6, -        "y": 18 +        "y": 25        },        "id": 70,        "options": { @@ -942,7 +941,7 @@          "h": 7,          "w": 6,          "x": 12, -        "y": 18 +        "y": 25        },        "id": 64,        "options": { @@ -971,7 +970,7 @@          "h": 1,          "w": 24,          "x": 0, -        "y": 25 +        "y": 32        },        "id": 68,        "panels": [], @@ -1037,7 +1036,7 @@          "h": 7,          "w": 6,          "x": 0, -        "y": 26 +        "y": 33        },        "id": 74,        "options": { @@ -1118,7 +1117,7 @@          "h": 7,          "w": 6,          "x": 6, -        "y": 26 +        "y": 33        },        "id": 78,        "options": { @@ -1199,7 +1198,7 @@          "h": 7,          "w": 6,          "x": 12, -        "y": 26 +        "y": 33        },        "id": 72,        "options": { @@ -1280,7 +1279,7 @@          "h": 7,          "w": 6,          "x": 18, -        "y": 26 +        "y": 33        },        "id": 75,        "options": { @@ -1361,7 +1360,7 @@          "h": 7,          "w": 6,          "x": 0, -        "y": 33 +        "y": 40        },        "id": 77,        "options": { @@ -1442,7 +1441,7 @@          "h": 7,          "w": 6,          "x": 6, -        "y": 33 +        "y": 40        },        "id": 71,        "options": { @@ -1523,7 +1522,7 @@          "h": 7,          "w": 6,          "x": 12, -        "y": 33 +        "y": 40        },        "id": 73,        "options": { @@ -1604,7 +1603,7 @@          "h": 7,          "w": 6,          "x": 18, -        "y": 33 +        "y": 40        },        "id": 76,        "options": { @@ -1633,7 +1632,7 @@          "h": 1,          "w": 24,          "x": 0, -        "y": 40 +        "y": 47        },        "id": 18,        "panels": [], @@ -1701,7 +1700,7 @@          "h": 10,          "w": 6,          "x": 0, -        "y": 41 +        "y": 48        },        "id": 27,        "options": { @@ -1784,7 +1783,7 @@          "h": 10,          "w": 6,          "x": 6, -        "y": 41 +        "y": 48        },        "id": 37,        "options": { @@ -1866,7 +1865,7 @@          "h": 10,          "w": 6,          "x": 12, -        "y": 41 +        "y": 48        },        "id": 21,        "options": { @@ -1947,7 +1946,7 @@          "h": 10,          "w": 6,          "x": 18, -        "y": 41 +        "y": 48        },        "id": 20,        "options": { @@ -2030,7 +2029,7 @@          "h": 10,          "w": 6,          "x": 0, -        "y": 51 +        "y": 58        },        "id": 23,        "options": { @@ -2113,7 +2112,7 @@          "h": 10,          "w": 6,          "x": 6, -        "y": 51 +        "y": 58        },        "id": 36,        "options": { @@ -2195,7 +2194,7 @@          "h": 10,          "w": 6,          "x": 12, -        "y": 51 +        "y": 58        },        "id": 26,        "options": { @@ -2276,7 +2275,7 @@          "h": 10,          "w": 6,          "x": 18, -        "y": 51 +        "y": 58        },        "id": 22,        "options": { @@ -2305,7 +2304,7 @@          "h": 1,          "w": 24,          "x": 0, -        "y": 61 +        "y": 68        },        "id": 10,        "panels": [], @@ -2373,7 +2372,7 @@          "h": 11,          "w": 6,          "x": 0, -        "y": 62 +        "y": 69        },        "id": 12,        "options": { @@ -2455,7 +2454,7 @@          "h": 11,          "w": 6,          "x": 6, -        "y": 62 +        "y": 69        },        "id": 28,        "options": { @@ -2537,7 +2536,7 @@          "h": 11,          "w": 6,          "x": 12, -        "y": 62 +        "y": 69        },        "id": 15,        "options": { @@ -2619,7 +2618,7 @@          "h": 11,          "w": 6,          "x": 18, -        "y": 62 +        "y": 69        },        "id": 25,        "options": { @@ -2701,7 +2700,7 @@          "h": 10,          "w": 6,          "x": 0, -        "y": 73 +        "y": 80        },        "id": 14,        "options": { @@ -2783,7 +2782,7 @@          "h": 10,          "w": 6,          "x": 6, -        "y": 73 +        "y": 80        },        "id": 29,        "options": { @@ -2865,7 +2864,7 @@          "h": 10,          "w": 6,          "x": 12, -        "y": 73 +        "y": 80        },        "id": 24,        "options": { @@ -2947,7 +2946,7 @@          "h": 10,          "w": 6,          "x": 18, -        "y": 73 +        "y": 80        },        "id": 16,        "options": { @@ -3028,7 +3027,7 @@          "h": 10,          "w": 6,          "x": 0, -        "y": 83 +        "y": 90        },        "id": 80,        "options": { @@ -3109,7 +3108,7 @@          "h": 10,          "w": 6,          "x": 6, -        "y": 83 +        "y": 90        },        "id": 81,        "options": { @@ -3132,1308 +3131,1307 @@        "type": "timeseries"      },      { -      "collapsed": true, +      "collapsed": false,        "datasource": null,        "gridPos": {          "h": 1,          "w": 24,          "x": 0, -        "y": 93 +        "y": 100        },        "id": 39, -      "panels": [ -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "axisSoftMin": 0, -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "min": 0, -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] -              }, -              "unit": "binBps" -            }, -            "overrides": [] -          }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 0, -            "y": 63 +      "panels": [], +      "title": "Data Transfer Local Components", +      "type": "row" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 45, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "axisSoftMin": 0, +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT upstream bandwidth", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "axisSoftMin": 0, -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "min": 0, -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "min": 0, +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 6, -            "y": 63 +          "unit": "binBps" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 0, +        "y": 101 +      }, +      "id": 45, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT upstream bandwidth", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 46, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "axisSoftMin": 0, +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log"              }, -            "tooltip": { -              "mode": "single" +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT upstream packet rate", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "axisSoftMin": 0, -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "min": 0, +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "bytes" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 12, -            "y": 63 +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 6, +        "y": 101 +      }, +      "id": 46, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT upstream packet rate", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 47, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "axisSoftMin": 0, +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false              }, -            "tooltip": { -              "mode": "single" +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT sent bytes", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 18, -            "y": 63 +          "unit": "bytes" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 12, +        "y": 101 +      }, +      "id": 47, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT sent bytes", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 44, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT sent packets", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "binBps" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 0, -            "y": 74 +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 18, +        "y": 101 +      }, +      "id": 44, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT sent packets", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 41, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT downstream bandwidth", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 6, -            "y": 74 +          "unit": "binBps" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 0, +        "y": 112 +      }, +      "id": 41, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT downstream bandwidth", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 50, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false              }, -            "tooltip": { -              "mode": "single" +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT downstream packet rate", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "bytes" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 12, -            "y": 74 +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 6, +        "y": 112 +      }, +      "id": 50, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT downstream packet rate", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 51, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT received bytes", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 18, -            "y": 74 +          "unit": "bytes" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 12, +        "y": 112 +      }, +      "id": 51, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT received bytes", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 48, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false              }, -            "tooltip": { -              "mode": "single" +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "DHT received packets", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "binBps" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 0, -            "y": 85 +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 18, +        "y": 112 +      }, +      "id": 48, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"dht\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "DHT received packets", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 53, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log"              }, -            "tooltip": { -              "mode": "single" +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow Allocator upstream bandwidth", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "axisSoftMin": 0, -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 6, -            "y": 85 +          "unit": "binBps" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 0, +        "y": 123 +      }, +      "id": 53, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Flow Allocator upstream bandwidth", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 54, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "axisSoftMin": 0, +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow allocator upstream packet rate", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "bytes" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 12, -            "y": 85 +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 6, +        "y": 123 +      }, +      "id": 54, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Flow allocator upstream packet rate", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 55, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log"              }, -            "tooltip": { -              "mode": "single" +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow allocator sent bytes", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 18, -            "y": 85 +          "unit": "bytes" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 12, +        "y": 123 +      }, +      "id": 55, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Flow allocator sent bytes", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 52, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false              }, -            "tooltip": { -              "mode": "single" +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow allocator received packets", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "binBps" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 0, -            "y": 96 +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 18, +        "y": 123 +      }, +      "id": 52, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_sent_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Flow allocator received packets", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 49, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow Allocator downstream bandwidth", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 6, -            "y": 96 +          "unit": "binBps" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 0, +        "y": 134 +      }, +      "id": 49, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Flow Allocator downstream bandwidth", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 42, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log"              }, -            "tooltip": { -              "mode": "single" +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none" +            }, +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow allocator downstream packet rate", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "bytes" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 12, -            "y": 96 +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 6, +        "y": 134 +      }, +      "id": 42, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> derivative(unit: 1s)\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Flow allocator downstream packet rate", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 43, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow allocator received bytes", -          "type": "timeseries" -        }, -        { -          "datasource": null, -          "fieldConfig": { -            "defaults": { -              "color": { -                "mode": "palette-classic" -              }, -              "custom": { -                "axisLabel": "", -                "axisPlacement": "auto", -                "barAlignment": 0, -                "drawStyle": "line", -                "fillOpacity": 0, -                "gradientMode": "none", -                "hideFrom": { -                  "legend": false, -                  "tooltip": false, -                  "viz": false -                }, -                "lineInterpolation": "linear", -                "lineWidth": 1, -                "pointSize": 5, -                "scaleDistribution": { -                  "log": 10, -                  "type": "log" -                }, -                "showPoints": "auto", -                "spanNulls": false, -                "stacking": { -                  "group": "A", -                  "mode": "none" -                }, -                "thresholdsStyle": { -                  "mode": "off" -                } -              }, -              "mappings": [], -              "thresholds": { -                "mode": "absolute", -                "steps": [ -                  { -                    "color": "green", -                    "value": null -                  }, -                  { -                    "color": "red", -                    "value": 80 -                  } -                ] +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null                }, -              "unit": "none" -            }, -            "overrides": [] +              { +                "color": "red", +                "value": 80 +              } +            ]            }, -          "gridPos": { -            "h": 11, -            "w": 6, -            "x": 18, -            "y": 96 +          "unit": "bytes" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 12, +        "y": 134 +      }, +      "id": 43, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_bytes_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A" +        } +      ], +      "title": "Flow allocator received bytes", +      "type": "timeseries" +    }, +    { +      "datasource": null, +      "fieldConfig": { +        "defaults": { +          "color": { +            "mode": "palette-classic"            }, -          "id": 56, -          "options": { -            "legend": { -              "calcs": [], -              "displayMode": "list", -              "placement": "bottom" +          "custom": { +            "axisLabel": "", +            "axisPlacement": "auto", +            "barAlignment": 0, +            "drawStyle": "line", +            "fillOpacity": 0, +            "gradientMode": "none", +            "hideFrom": { +              "legend": false, +              "tooltip": false, +              "viz": false +            }, +            "lineInterpolation": "linear", +            "lineWidth": 1, +            "pointSize": 5, +            "scaleDistribution": { +              "log": 10, +              "type": "log" +            }, +            "showPoints": "auto", +            "spanNulls": false, +            "stacking": { +              "group": "A", +              "mode": "none"              }, -            "tooltip": { -              "mode": "single" +            "thresholdsStyle": { +              "mode": "off"              }            }, -          "targets": [ -            { -              "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", -              "refId": "A" -            } -          ], -          "title": "Flow allocator received packets", -          "type": "timeseries" +          "mappings": [], +          "thresholds": { +            "mode": "absolute", +            "steps": [ +              { +                "color": "green", +                "value": null +              }, +              { +                "color": "red", +                "value": 80 +              } +            ] +          }, +          "unit": "none" +        }, +        "overrides": [] +      }, +      "gridPos": { +        "h": 11, +        "w": 6, +        "x": 18, +        "y": 134 +      }, +      "id": 56, +      "options": { +        "legend": { +          "calcs": [], +          "displayMode": "list", +          "placement": "bottom" +        }, +        "tooltip": { +          "mode": "single" +        } +      }, +      "targets": [ +        { +          "query": "from(bucket: \"ouroboros-metrics\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_data_transfer_local_recv_packets_total\")\n  |> filter(fn: (r) => r[\"endpoint\"] == \"flow-allocator\")\n  |> filter(fn: (r) => r[\"qos_cube\"] == \"QoS cube 0\")\n  |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n  |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n  |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n  |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n  |> yield(name: \"last\")", +          "refId": "A"          }        ], -      "title": "Data Transfer Local Components", -      "type": "row" +      "title": "Flow allocator received packets", +      "type": "timeseries"      }    ], -  "refresh": false, +  "refresh": "10s",    "schemaVersion": 30,    "style": "dark",    "tags": [], @@ -4666,12 +4664,12 @@      ]    },    "time": { -    "from": "now-30m", +    "from": "now-5m",      "to": "now"    },    "timepicker": {},    "timezone": "",    "title": "Ouroboros General Dashboard",    "uid": "hbIO3HR7z", -  "version": 93 +  "version": 95  } | 
