diff options
| -rw-r--r-- | .gitignore | 6 | ||||
| -rw-r--r-- | README.md | 97 | ||||
| -rw-r--r-- | config.ini.example | 18 | ||||
| -rw-r--r-- | dashboards-grafana/general.json | 5335 | ||||
| -rw-r--r-- | dashboards/general.json | 13452 | ||||
| -rw-r--r-- | exporters-influxdb/pyExporter/config.ini.example | 6 | ||||
| -rwxr-xr-x | exporters-influxdb/pyExporter/oexport.py | 909 | ||||
| -rw-r--r-- | oexport.py | 860 | ||||
| -rw-r--r-- | pyproject.toml | 19 | ||||
| -rw-r--r-- | ribreader.py | 773 |
10 files changed, 15209 insertions, 6266 deletions
@@ -1,3 +1,7 @@ *~ *# -./exporters-influxdb/pyExporter/config.ini
\ No newline at end of file +./config.ini +./venv/ +__pycache__/ +*.egg-info/ +.vscode/ @@ -3,20 +3,18 @@ A collection of observability tools for exporting and visualising metrics collected from Ouroboros. -Currently has one very simple exporter for InfluxDB, and provides -additional visualization via grafana. - -More features will be added over time. +The exporter pushes metrics to InfluxDB or writes them as InfluxDB +line protocol to a local file, and provides additional visualization +via grafana. ## Requirements: -InfluxDB 0SS 2.0, https://docs.influxdata.com/influxdb/v2.0/ - -python influxdb-client, install via +The influxdb-client Python package is required in both modes. It is +installed automatically via `pip install .` -``` -pip install 'influxdb-client[ciso]' -``` +InfluxDB OSS 2.0, https://docs.influxdata.com/influxdb/v2.0/ +(only required when pushing metrics directly to InfluxDB, not +needed for file mode) ## Optional requirements: @@ -45,21 +43,90 @@ select Dashboards -> Manage -> Import and then either upload the json file from this repository in -dashboards-grafana/general.json +dashboards/general.json or copy the contents of that file to the "Import via panel json" textbox and click "Load". ## Run the exporter: -Clone this repository and go to the pyExporter directory. +Clone this repository. + +Create and activate a virtual environment and install the dependencies: + +``` +python -m venv venv +source venv/bin/activate +pip install . +``` + +### InfluxDB mode (default) Edit the config.ini.example file and fill out the InfluxDB information (token, org). Save it as config.ini. -and run oexport.py +Run oexport: ``` -cd exporters-influxdb/pyExporter/ -python oexport.py +oexport ``` + +Extra tags can be added to every metric: + +``` +oexport --tag env=production --tag region=eu +``` + +### File mode + +Write metrics as InfluxDB line protocol to a local file, without +pushing to a running InfluxDB instance. This requires no InfluxDB +connection and no config.ini: + +``` +oexport --output-file metrics.lp +``` + +Tags can be injected in file mode as well: + +``` +oexport --output-file metrics.lp \ + --tag test=oping_unimpaired \ + --tag run=20260401_143022 +``` + +The resulting file can be bulk-imported into InfluxDB later: + +``` +influx write --bucket ouroboros-metrics --file metrics.lp +``` + +### CLI options + +| Flag | Description | +|---------------------|-------------------------------------------------| +| `-i, --interval` | FRCT interval, ms (default: 1000) | +| `--slow-interval` | IPCP/LSDB/DHT/FA/DT interval, ms | +| `-b, --bucket` | InfluxDB bucket (default: ouroboros-metrics) | +| `-o, --output-file` | Write InfluxDB line protocol to a file | +| `-t, --tag` | Extra tag as key=value (repeatable) | +| `-c, --config` | Path to config.ini (default: ./config.ini) | +| `--url` | InfluxDB server URL | +| `--org` | InfluxDB organization | +| `--token` | InfluxDB authentication token | + +### Config file + +All settings can also be specified in config.ini. CLI flags take +precedence over config file values. See config.ini.example for +details. + +| Section | Key | Equivalent CLI flag | +|--------------|------------|---------------------| +| `[influx2]` | `url` | `--url` | +| `[influx2]` | `org` | `--org` | +| `[influx2]` | `token` | `--token` | +| `[exporter]` | `interval` | `--interval` | +| `[exporter]` | `bucket` | `--bucket` | +| `[output]` | `file` | `--output-file` | +| `[output]` | `tags` | `--tag` | diff --git a/config.ini.example b/config.ini.example new file mode 100644 index 0000000..427ece7 --- /dev/null +++ b/config.ini.example @@ -0,0 +1,18 @@ +[influx2] +url=http://localhost:8086 +org=<your-org> +token=<your-token> +timeout=6000 +verify_ssl=False + +[exporter] +; FRCT collection interval in milliseconds (default: 1000) +;interval = 1000 +; InfluxDB bucket name (default: ouroboros-metrics) +;bucket = ouroboros-metrics + +[output] +; Uncomment to write line protocol to file instead of InfluxDB +;file = /path/to/metrics.lp +; Extra tags added to every point (comma-separated key=value pairs) +;tags = test=mytest,run=12345 diff --git a/dashboards-grafana/general.json b/dashboards-grafana/general.json deleted file mode 100644 index fea664b..0000000 --- a/dashboards-grafana/general.json +++ /dev/null @@ -1,5335 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "description": "Dashboard for monitoring Ouroboros", - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": 1, - "iteration": 1647766812003, - "links": [], - "liveNow": false, - "panels": [ - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 8, - "panels": [], - "title": "System", - "type": "row" - }, - { - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.type}", - "mappings": [], - "noValue": "0", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 1 - }, - "id": 2, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_broadcast_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_eth-dix_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_eth-llc_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_local_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_udp_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_unicast_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_unknown_ipcps_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"ipcps\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"type\"], set: ${_type:json}))\n |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "System IPCPs", - "type": "timeseries" - }, - { - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "normal" - }, - "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": 6, - "y": 1 - }, - "id": 6, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_flows_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"flows\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "System flows", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 8 - }, - "id": 31, - "panels": [], - "title": "Link State Database", - "type": "row" - }, - { - "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 - }, - "id": 33, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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": 6, - "y": 9 - }, - "id": 34, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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": 12, - "y": 9 - }, - "id": 35, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 16 - }, - "id": 58, - "panels": [], - "title": "Retransmissions", - "type": "row" - }, - { - "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" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 17 - }, - "id": 90, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_rxm\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Number of packet retransmissions", - "type": "timeseries" - }, - { - "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" - } - }, - "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 17 - }, - "id": 60, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "desc" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"srtt_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Smoothed Round-Trip Time (sRTT)", - "type": "timeseries" - }, - { - "description": "", - "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" - } - }, - "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 17 - }, - "id": 62, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rto_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Retransmission timeout (RTO)", - "type": "timeseries" - }, - { - "description": "", - "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" - } - }, - "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 17 - }, - "id": 69, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"mdev_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "RTT deviation off mean ", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 24 - }, - "id": 66, - "panels": [], - "title": "Delta-t constants", - "type": "row" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 25 - }, - "id": 61, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"mpl_timer_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Maximum Packet Lifetime (MPL)", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 25 - }, - "id": 70, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"r_timer_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Retransmission timer (R-timer)", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 25 - }, - "id": 64, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"a_timer_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Acknowledgment Timer (A-timer)", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 32 - }, - "id": 68, - "panels": [], - "title": "Delta-t Window", - "type": "row" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 33 - }, - "id": 74, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "t1 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_snd_lwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"snd_lwe\")\n\nt2 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_snd_rwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"snd_rwe\")\n\njoin(tables: {t1: t1, t2: t2}, on: [\"_time\", \"process\", \"flow_descriptor\", \"system\"])\n |> map(fn: (r) => ({ r with _value: r._value_t2 - r._value_t1 }))\n |> drop(columns: [\"_value_t1\", \"_value_t2\"])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Sender Window Size", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 33 - }, - "id": 78, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_snd_lwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"snd_lwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Sender Left Window Edge (sLWE)", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 33 - }, - "id": 72, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"snd_rwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Sender Right Window Edge (sRWE)", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 33 - }, - "id": 75, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"snd_seqno\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Sender Next Sequence Number", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 40 - }, - "id": 77, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "t1 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_rcv_lwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_lwe\")\n\nt2 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_rcv_rwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_rwe\")\n\njoin(tables: {t1: t1, t2: t2}, on: [\"_time\", \"process\", \"flow_descriptor\", \"system\"])\n |> map(fn: (r) => ({ r with _value: r._value_t2 - r._value_t1 }))\n |> drop(columns: [\"_value_t1\", \"_value_t2\"])\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Receiver Window Size", - "type": "timeseries" - }, - { - "description": "", - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 40 - }, - "id": 91, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_lwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Receiver Left Window Edge (rLWE)", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 40 - }, - "id": 73, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_rwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Receiver Right Window Edge (rRWE)", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 40 - }, - "id": 76, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_seqno\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Receiver Next Sequence Number", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 47 - }, - "id": 71, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_dup\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Duplicate packets received", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 6, - "y": 47 - }, - "id": 92, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_out\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Packets received outside of window", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 12, - "y": 47 - }, - "id": 93, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_rqo\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Packets received outside of reorder queue", - "type": "timeseries" - }, - { - "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.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 18, - "y": 47 - }, - "id": 94, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "bcmLTHg7z" - }, - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_rdv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Rendez-vous packets sent", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 54 - }, - "id": 18, - "panels": [], - "title": "IPCP N+1 flows", - "type": "row" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "log": 10, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bps" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 55 - }, - "id": 27, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_bytes_total\")\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 |> map(fn: (r) => ({ r with _value: float(v: r._value) * 8.0}))\n |> derivative(unit: 1s)\n |> aggregateWindow(every: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Upstream bandwidth", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "log": 10, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 55 - }, - "id": 37, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_pkts_total\")\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: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Upstream packet rate", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 55 - }, - "id": 21, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_bytes_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Total sent bytes", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 55 - }, - "id": 20, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_pkts_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Total sent packets", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "log": 10, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bps" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 65 - }, - "id": 23, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_bytes_total\")\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 |> map(fn: (r) => ({ r with _value: float(v: r._value) * 8.0}))\n |> derivative(unit: 1s)\n |> aggregateWindow(every: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Downstream bandwidth", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "log": 10, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "pps" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 65 - }, - "id": 36, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_pkts_total\")\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: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", - "refId": "A" - } - ], - "title": "Downstream packet rate", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 65 - }, - "id": 26, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_bytes_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Total received bytes", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 65 - }, - "id": 22, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_pkts_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Total received packets", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 75 - }, - "id": 88, - "panels": [], - "title": "N+1 flow management", - "type": "row" - }, - { - "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" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 6, - "x": 0, - "y": 76 - }, - "id": 83, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Upstream flow update rate", - "type": "timeseries" - }, - { - "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" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 6, - "x": 6, - "y": 76 - }, - "id": 85, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Flow updates sent", - "type": "timeseries" - }, - { - "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" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 6, - "x": 0, - "y": 85 - }, - "id": 84, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Downstream flow update rate", - "type": "timeseries" - }, - { - "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" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 6, - "x": 6, - "y": 85 - }, - "id": 86, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Flow updates received", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 94 - }, - "id": 10, - "panels": [], - "title": "IPCP Congestion avoidance", - "type": "row" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "log": 10, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 95 - }, - "id": 12, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_wnd_width_ns\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_wnd_width_ns\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Congestion Window Width", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 95 - }, - "id": 29, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_up_cong_lvl\")\n |> filter(fn: (r) => r[\"_field\"] == \"up_cong_lvl\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Upstream congestion level", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 95 - }, - "id": 15, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_wnd_current_pkts\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_wnd_current_pkts\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Congestion window current packets", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 95 - }, - "id": 16, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_up_pkt_ctr\")\n |> filter(fn: (r) => r[\"_field\"] == \"up_pkt_ctr\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Upstream packet counter", - "type": "timeseries" - }, - { - "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": 2, - "scaleDistribution": { - "log": 2, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 105 - }, - "id": 14, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_wnd_size_bytes\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_wnd_size_bytes\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Congestion window size (Bytes)", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 6, - "y": 105 - }, - "id": 28, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_down_cong_lvl\")\n |> filter(fn: (r) => r[\"_field\"] == \"down_cong_lvl\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Downstream congestion level", - "type": "timeseries" - }, - { - "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": 2, - "scaleDistribution": { - "log": 2, - "type": "log" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 12, - "y": 105 - }, - "id": 24, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_wnd_current_bytes\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_wnd_current_bytes\")\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Congestion window current bytes", - "type": "timeseries" - }, - { - "description": "", - "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": 2, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 18, - "y": 105 - }, - "id": 25, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_down_pkt_ctr\")\n |> filter(fn: (r) => r[\"_field\"] == \"down_pkt_ctr\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Downstream packet counter", - "type": "timeseries" - }, - { - "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" - } - }, - "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "bps" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 6, - "x": 0, - "y": 115 - }, - "id": 80, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "multi", - "sort": "none" - } - }, - "targets": [ - { - "query": "t1 = from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_wnd_size_bytes\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_wnd_size_bytes\")\n\nt2 = from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_wnd_width_ns\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_wnd_width_ns\")\n\njoin(tables: {t1: t1, t2: t2}, on: [\"_time\", \"ipcp\", \"flow_id\", \"layer\", \"system\"])\n |> map(fn: (r) => ({ r with _value: float(v: r._value_t1) / float(v: r._value_t2) * 1000000000.0}))\n |> drop(columns: [\"_value_t1\", \"_value_t2\"])\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 |> map(fn: (r) => ({ r with _value: float(v: r._value) * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")", - "refId": "A" - } - ], - "title": "Target Bandwidth", - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 125 - }, - "id": 39, - "panels": [], - "title": "IPCP Data Transfer - Local Components", - "type": "row" - }, - { - "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": 126 - }, - "id": 45, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 6, - "y": 126 - }, - "id": 46, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 12, - "y": 126 - }, - "id": 47, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 18, - "y": 126 - }, - "id": 44, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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 - } - ] - }, - "unit": "binBps" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 0, - "y": 137 - }, - "id": 41, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 6, - "y": 137 - }, - "id": 50, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 12, - "y": 137 - }, - "id": 51, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 18, - "y": 137 - }, - "id": 48, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - }, - { - "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 - } - ] - }, - "unit": "binBps" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 0, - "y": 148 - }, - "id": 49, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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 upstream bandwidth", - "type": "timeseries" - }, - { - "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 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 6, - "y": 148 - }, - "id": 42, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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 upstream packet rate", - "type": "timeseries" - }, - { - "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 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 12, - "y": 148 - }, - "id": 43, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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 sent bytes", - "type": "timeseries" - }, - { - "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 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 18, - "y": 148 - }, - "id": 56, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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 sent packets", - "type": "timeseries" - }, - { - "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 - } - ] - }, - "unit": "binBps" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 0, - "y": 159 - }, - "id": 53, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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 downstream bandwidth", - "type": "timeseries" - }, - { - "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 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 6, - "y": 159 - }, - "id": 54, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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 downstream packet rate", - "type": "timeseries" - }, - { - "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 - } - ] - }, - "unit": "bytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 12, - "y": 159 - }, - "id": 55, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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 received bytes", - "type": "timeseries" - }, - { - "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 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 6, - "x": 18, - "y": 159 - }, - "id": 52, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "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" - } - ], - "refresh": "5s", - "schemaVersion": 35, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"system\",\n predicate: (r) => true,\n start: -5d\n)\n \n", - "hide": 0, - "includeAll": true, - "label": "System", - "multi": true, - "name": "_system", - "options": [], - "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"system\",\n predicate: (r) => true,\n start: -5d\n)\n \n", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"type\",\n predicate: (r) => true,\n start: -30d\n)", - "hide": 0, - "includeAll": true, - "label": "Type", - "multi": true, - "name": "_type", - "options": [], - "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"type\",\n predicate: (r) => true,\n start: -30d\n)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"layer\",\n predicate: (r) => true,\n start: -30d\n)", - "hide": 0, - "includeAll": true, - "label": "Layer", - "multi": true, - "name": "_layer", - "options": [], - "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"layer\",\n predicate: (r) => true,\n start: -30d\n)", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": true, - "text": [ - "All" - ], - "value": [ - "$__all" - ] - }, - "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"ipcp\",\n predicate: (r) => true,\n start: -30d\n)\n", - "hide": 0, - "includeAll": true, - "label": "IPCP", - "multi": true, - "name": "_ipcp", - "options": [], - "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"ipcp\",\n predicate: (r) => true,\n start: -30d\n)\n", - "refresh": 2, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "auto": false, - "auto_count": 30, - "auto_min": "10s", - "current": { - "selected": false, - "text": "5s", - "value": "5s" - }, - "hide": 0, - "label": "Interval", - "name": "_interval", - "options": [ - { - "selected": false, - "text": "1ms", - "value": "1ms" - }, - { - "selected": false, - "text": "10ms", - "value": "10ms" - }, - { - "selected": false, - "text": "100ms", - "value": "100ms" - }, - { - "selected": false, - "text": "500ms", - "value": "500ms" - }, - { - "selected": false, - "text": "1s", - "value": "1s" - }, - { - "selected": true, - "text": "5s", - "value": "5s" - }, - { - "selected": false, - "text": "10s", - "value": "10s" - }, - { - "selected": false, - "text": "30s", - "value": "30s" - }, - { - "selected": false, - "text": "1m", - "value": "1m" - }, - { - "selected": false, - "text": "10m", - "value": "10m" - }, - { - "selected": false, - "text": "30m", - "value": "30m" - }, - { - "selected": false, - "text": "1h", - "value": "1h" - }, - { - "selected": false, - "text": "6h", - "value": "6h" - }, - { - "selected": false, - "text": "12h", - "value": "12h" - }, - { - "selected": false, - "text": "1d", - "value": "1d" - }, - { - "selected": false, - "text": "7d", - "value": "7d" - }, - { - "selected": false, - "text": "14d", - "value": "14d" - }, - { - "selected": false, - "text": "30d", - "value": "30d" - } - ], - "query": "1ms, 10ms, 100ms, 500ms, 1s, 5s, 10s, 30s, 1m,10m,30m,1h,6h,12h,1d,7d,14d,30d", - "queryValue": "", - "refresh": 2, - "skipUrlSync": false, - "type": "interval" - } - ] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Ouroboros General Dashboard", - "uid": "hbIO3HR7z", - "version": 124, - "weekStart": "" -} diff --git a/dashboards/general.json b/dashboards/general.json new file mode 100644 index 0000000..4047d9e --- /dev/null +++ b/dashboards/general.json @@ -0,0 +1,13452 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Dashboard for monitoring Ouroboros", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "panels": [], + "title": "System", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.type}", + "mappings": [], + "noValue": "0", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 1 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_broadcast_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_eth-dix_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_eth-llc_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_local_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_udp_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_unicast_ipcps_total\" or r[\"_measurement\"] == \"ouroboros_unknown_ipcps_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"ipcps\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"type\"], set: ${_type:json}))\n |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "System IPCPs", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "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" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 1 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_flows_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"flows\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "System flows", + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 31, + "panels": [], + "title": "Link State Database", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 9 + }, + "id": 33, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 9 + }, + "id": 34, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 9 + }, + "id": 35, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 95, + "panels": [], + "title": "DHT", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 17 + }, + "id": 96, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_dht_keys_total\")\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\")\n\n", + "refId": "A" + } + ], + "title": "Keys", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 17 + }, + "id": 97, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_dht_local_values_total\")\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": "Local Values", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 12, + "y": 17 + }, + "id": 98, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_dht_non_local_values_total\")\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": "Non-local Values", + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, + "id": 18, + "panels": [], + "title": "IPCP N+1 flows", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 26 + }, + "id": 27, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_bytes_total\")\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 |> map(fn: (r) => ({ r with _value: float(v: r._value) * 8.0}))\n |> derivative(unit: 1s)\n |> aggregateWindow(every: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Upstream bandwidth", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 26 + }, + "id": 37, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_pkts_total\")\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: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Upstream packet rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 26 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_bytes_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Total sent bytes", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 26 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_pkts_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Total sent packets", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 36 + }, + "id": 23, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_bytes_total\")\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 |> map(fn: (r) => ({ r with _value: float(v: r._value) * 8.0}))\n |> derivative(unit: 1s)\n |> aggregateWindow(every: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Downstream bandwidth", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 36 + }, + "id": 36, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_pkts_total\")\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: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Downstream packet rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 36 + }, + "id": 26, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_bytes_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_bytes_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Total received bytes", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp},${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 36 + }, + "id": 22, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_pkts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_pkts_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Total received packets", + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 46 + }, + "id": 88, + "panels": [], + "title": "N+1 flow management", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 47 + }, + "id": 83, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Upstream flow update rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 47 + }, + "id": 85, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_sent_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"sent_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Flow updates sent", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 0, + "y": 56 + }, + "id": 84, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Downstream flow update rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 6, + "x": 6, + "y": 56 + }, + "id": 86, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_recv_flow_updates_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"recv_flow_updates_total\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Flow updates received", + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 65 + }, + "id": 10, + "panels": [], + "title": "IPCP Congestion avoidance", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 66 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_regime\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_regime\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Congestion regime", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 66 + }, + "id": 29, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_up_cong_lvl\")\n |> filter(fn: (r) => r[\"_field\"] == \"up_cong_lvl\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Upstream congestion level", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 66 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_paced_rate\")\n |> filter(fn: (r) => r[\"_field\"] == \"paced_rate\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Paced rate (Bytes/s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 66 + }, + "id": 28, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_down_cong_lvl\")\n |> filter(fn: (r) => r[\"_field\"] == \"down_cong_lvl\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Downstream congestion level", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 76 + }, + "id": 24, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cong_tokens\")\n |> filter(fn: (r) => r[\"_field\"] == \"cong_tokens\")\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Token bucket (Bytes)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 76 + }, + "id": 80, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_paced_rate\")\n |> filter(fn: (r) => r[\"_field\"] == \"paced_rate\")\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 |> map(fn: (r) => ({ r with _value: float(v: r._value) * 8.0}))\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Target Bandwidth", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 0, + "y": 86 + }, + "id": 81, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_path_capacity\")\n |> filter(fn: (r) => r[\"_field\"] == \"path_capacity\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Path capacity (Bytes/s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.ipcp}, ${__field.labels.flow_id}", + "mappings": [], + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 6, + "y": 86 + }, + "id": 82, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_cap_rate_floor\")\n |> filter(fn: (r) => r[\"_field\"] == \"cap_rate_floor\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Capacity rate floor (Bytes/s)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "", + "min": 0, + "max": 1 + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 76 + }, + "id": 216, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_jain_index\")\n |> filter(fn: (r) => r[\"_field\"] == \"jain_index\")\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: ${_interval}, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Flow fairness (Jain index)", + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 96 + }, + "id": 39, + "panels": [], + "title": "IPCP Data Transfer - Local Components", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": 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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 0, + "y": 97 + }, + "id": 45, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": 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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 6, + "y": 97 + }, + "id": 46, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": 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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 12, + "y": 97 + }, + "id": 47, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 18, + "y": 97 + }, + "id": 44, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 0, + "y": 108 + }, + "id": 41, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 6, + "y": 108 + }, + "id": 50, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 12, + "y": 108 + }, + "id": 51, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 18, + "y": 108 + }, + "id": 48, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 0, + "y": 119 + }, + "id": 49, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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 upstream bandwidth", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 6, + "y": 119 + }, + "id": 42, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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 upstream packet rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 12, + "y": 119 + }, + "id": 43, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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 sent bytes", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 18, + "y": 119 + }, + "id": 56, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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 sent packets", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 0, + "y": 130 + }, + "id": 53, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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 downstream bandwidth", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": 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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 6, + "y": 130 + }, + "id": 54, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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 downstream packet rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 12, + "y": 130 + }, + "id": 55, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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 received bytes", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "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" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 6, + "x": 18, + "y": 130 + }, + "id": 52, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "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" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 141 + }, + "id": 134, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 142 + }, + "id": 126, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth frames sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 142 + }, + "id": 127, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth frames rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 142 + }, + "id": 128, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_mgmt_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth mgmt sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 142 + }, + "id": 129, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_mgmt_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth mgmt rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 149 + }, + "id": 130, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_bad_id\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth bad EID/SAP/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 149 + }, + "id": 131, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_dlv_f\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth N+1 deliv. fail/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 149 + }, + "id": 132, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"kern_drp\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth kernel drops/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 149 + }, + "id": 133, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"sock_ingress\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp: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": "Eth socket ingress", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 163 + }, + "id": 214, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"sock_egress\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp: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": "Eth socket egress", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 156 + }, + "id": 152, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_flows\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp: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": "Eth active flows", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 156 + }, + "id": 153, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_buf_f\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth buf-alloc fails/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 156 + }, + "id": 154, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_rcv_f\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth frame read fails/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 156 + }, + "id": 155, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"n_snd_f\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth frame send fails/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 163 + }, + "id": 156, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"kern_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth kernel frames rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 163 + }, + "id": 157, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"sock_rcvbuf\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp: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": "Eth socket rcvbuf", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 163 + }, + "id": 158, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"sock_sndbuf\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp: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": "Eth socket sndbuf", + "type": "timeseries" + } + ], + "title": "Eth IPCP", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 149 + }, + "id": 141, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 150 + }, + "id": 135, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"b_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth flow tx", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 150 + }, + "id": 136, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"b_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth flow rx", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 150 + }, + "id": 137, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"p_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth flow tx pkts/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 150 + }, + "id": 138, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"p_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth flow rx pkts/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 157 + }, + "id": 139, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"p_dlv_f\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth flow N+1 fail/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.ipcp}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 157 + }, + "id": 140, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"p_snd_f\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> filter(fn: (r) => contains(value: r[\"ipcp\"], set: ${_ipcp:json}))\n |> filter(fn: (r) => contains(value: r[\"layer\"], set: ${_layer:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Eth flow send fail/s", + "type": "timeseries" + } + ], + "title": "Eth \u2014 per-flow", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 157 + }, + "id": 66, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 158 + }, + "id": 61, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"mpl_timer_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Maximum Packet Lifetime (MPL)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 158 + }, + "id": 70, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"r_timer_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Retransmission timer (R-timer)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 158 + }, + "id": 64, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"a_timer_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Acknowledgment Timer (A-timer)", + "type": "timeseries" + } + ], + "title": "Delta-t constants", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 165 + }, + "id": 68, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 166 + }, + "id": 74, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "t1 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_snd_lwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"snd_lwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n\nt2 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_snd_rwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"snd_rwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n\njoin(tables: {t1: t1, t2: t2}, on: [\"_time\", \"process\", \"flow_descriptor\", \"system\"])\n |> map(fn: (r) => ({ r with _value: r._value_t2 - r._value_t1 }))\n |> drop(columns: [\"_value_t1\", \"_value_t2\"])\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Sender Window Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 166 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_snd_lwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"snd_lwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Sender Left Window Edge (sLWE)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 166 + }, + "id": 72, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"snd_rwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Sender Right Window Edge (sRWE)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 166 + }, + "id": 75, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"snd_seqno\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Sender Next Sequence Number", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 173 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "t1 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_rcv_lwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_lwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n\nt2 = from(bucket: \"ouroboros-metrics\") \n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_rcv_rwe\")\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_rwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n\njoin(tables: {t1: t1, t2: t2}, on: [\"_time\", \"process\", \"flow_descriptor\", \"system\"])\n |> map(fn: (r) => ({ r with _value: r._value_t2 - r._value_t1 }))\n |> drop(columns: [\"_value_t1\", \"_value_t2\"])\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Receiver Window Size", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 173 + }, + "id": 91, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_lwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Receiver Left Window Edge (rLWE)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 173 + }, + "id": 73, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_rwe\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Receiver Right Window Edge (rRWE)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 173 + }, + "id": 76, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rcv_seqno\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Receiver Next Sequence Number", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 180 + }, + "id": 71, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"dup_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Duplicate packets received", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 180 + }, + "id": 92, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"out_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Packets received outside of window", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 180 + }, + "id": 93, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rqo_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Packets received outside of reorder queue", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 180 + }, + "id": 94, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rdv_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Rendez-vous packets sent", + "type": "timeseries" + } + ], + "title": "Delta-t Window", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 173 + }, + "id": 58, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 174 + }, + "id": 60, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"srtt_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Smoothed Round-Trip Time (sRTT)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 174 + }, + "id": 62, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rto_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Retransmission timeout (RTO)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 174 + }, + "id": 69, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"mdev_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "RTT deviation off mean ", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 174 + }, + "id": 149, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"min_rtt_ns\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "Minimum RTT (RACK base)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 181 + }, + "id": 114, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rtt_smpl\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "RTT samples/s", + "type": "timeseries" + } + ], + "title": "RTT-estimation", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 188 + }, + "id": 107, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 189 + }, + "id": 99, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_rxm_rto\" or r[\"_measurement\"] == \"ouroboros_process_frct_rxm_rack\" or r[\"_measurement\"] == \"ouroboros_process_frct_rxm_dupthresh\" or r[\"_measurement\"] == \"ouroboros_process_frct_rxm_nack\")\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_rto\" or r[\"_field\"] == \"rxm_rack\" or r[\"_field\"] == \"rxm_dupthresh\" or r[\"_field\"] == \"rxm_nack\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> group(columns: [\"system\", \"process\", \"flow_descriptor\", \"_time\"])\n |> sum()\n |> group(columns: [\"system\", \"process\", \"flow_descriptor\"])\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "RXMs sent/s (all drivers)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 189 + }, + "id": 100, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "RXMs rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 189 + }, + "id": 101, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_rto\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "RTO-driven RXMs/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 189 + }, + "id": 102, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_rack\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "RACK-driven RXMs/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 196 + }, + "id": 103, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_sack\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "SACK-driven RXMs/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 196 + }, + "id": 145, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_dupthresh\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "DupThresh-driven RXMs/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 196 + }, + "id": 208, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_nack\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "NACK-driven RXMs/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 196 + }, + "id": 209, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_dup_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Duplicate RXMs rcvd/s", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 RXM rates", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 203 + }, + "id": 207, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 204 + }, + "id": 104, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"ack_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "ACK packets sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 204 + }, + "id": 105, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"ack_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "ACK packets rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 204 + }, + "id": 106, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"ack_fire\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Delayed-ACK fires/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 204 + }, + "id": 144, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"ack_dup_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "ACK wire dups/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 211 + }, + "id": 112, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"sack_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "SACKs sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 211 + }, + "id": 113, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"sack_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "SACKs rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 211 + }, + "id": 146, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"dsack_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "D-SACKs sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 211 + }, + "id": 147, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"dsack_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "D-SACKs received/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 218 + }, + "id": 148, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"dsack_drop\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "D-SACKs out-of-range/s", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 ACK rates", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 247 + }, + "id": 116, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 248 + }, + "id": 108, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"dup_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Duplicates rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 248 + }, + "id": 109, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"ooo_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "OOO arrivals/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 248 + }, + "id": 110, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"out_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Out-of-window/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 248 + }, + "id": 111, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rqo_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Out-of-rqueue/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 255 + }, + "id": 115, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"ka_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Keepalives sent/s", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 anomalies", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 255 + }, + "id": 210, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 256 + }, + "id": 211, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_rx_q_now\")\n |> filter(fn: (r) => r[\"_field\"] == \"rx_q_now\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "RX rbuff queued", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}", + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 256 + }, + "id": 213, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_tx_q_now\")\n |> filter(fn: (r) => r[\"_field\"] == \"tx_q_now\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")", + "refId": "A" + } + ], + "title": "TX rbuff queued", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 rbuff queues", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 262 + }, + "id": 142, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 263 + }, + "id": 117, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"frag_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Fragments sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 263 + }, + "id": 118, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"frag_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Fragments rcvd/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 263 + }, + "id": 119, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"frag_drop\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Fragments dropped/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 263 + }, + "id": 124, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"sdu_snd_frag\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "SDU writes fragged/s", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 Fragmentation", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 270 + }, + "id": 143, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 271 + }, + "id": 120, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_strm_snd_byte\")\n |> filter(fn: (r) => r[\"_field\"] == \"strm_snd_byte\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Stream tx rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 271 + }, + "id": 121, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_strm_rcv_byte\")\n |> filter(fn: (r) => r[\"_field\"] == \"strm_rcv_byte\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Stream rx rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 271 + }, + "id": 122, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_strm_dlv_byte\")\n |> filter(fn: (r) => r[\"_field\"] == \"strm_dlv_byte\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Stream delivered", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 271 + }, + "id": 123, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_process_frct_strm_drop\")\n |> filter(fn: (r) => r[\"_field\"] == \"strm_drop\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Stream pkts dropped/s", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 Stream", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 278 + }, + "id": 170, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 279 + }, + "id": 171, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"nack_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Pre-DRF NACKs sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 279 + }, + "id": 172, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"nack_rcv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Pre-DRF NACKs received/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 279 + }, + "id": 173, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tlp_snd\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "TLP probes sent/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 279 + }, + "id": 174, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"inact_drop\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Inactivity drops/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 286 + }, + "id": 175, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"drf_rebase\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "DRF window rebases/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 286 + }, + "id": 176, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rq_released\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "rq slots cleared/s", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 Signaling", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 279 + }, + "id": 159, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 280 + }, + "id": 150, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx ring drops/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 280 + }, + "id": 151, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"rxm_tx_dead\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "RXM tx into dead flow/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 280 + }, + "id": 200, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop_ack\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx drops/s (ACK)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 280 + }, + "id": 201, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop_sack\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx drops/s (SACK)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 287 + }, + "id": 202, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop_ka\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx drops/s (KA)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 6, + "y": 287 + }, + "id": 203, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop_rttp\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx drops/s (RTTP)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 12, + "y": 287 + }, + "id": 204, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop_nack\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx drops/s (NACK)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 18, + "y": 287 + }, + "id": 205, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop_rdv\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx drops/s (RDV)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "pps", + "displayName": "${__field.labels.system}:${__field.labels.process}/${__field.labels.flow_descriptor}" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 294 + }, + "id": 206, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_field\"] == \"tx_drop_other\")\n |> filter(fn: (r) => contains(value: r[\"system\"], set: ${_system:json}))\n |> aggregateWindow(every: v.windowPeriod, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Tx drops/s (other)", + "type": "timeseries" + } + ], + "title": "FRCT \u2014 Tx ring drops", + "type": "row" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 76 + }, + "id": 215, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_loss_cuts_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"loss_cuts_total\")\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: ${_interval}, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Signal-loss cuts/s", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 12, + "y": 86 + }, + "id": 218, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_ss_tc_ns\")\n |> filter(fn: (r) => r[\"_field\"] == \"ss_tc_ns\")\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: ${_interval}, fn: last, createEmpty: false)\n |> yield(name: \"last\")", + "refId": "A" + } + ], + "title": "Ramp time constant (ss_tc)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 6, + "x": 18, + "y": 86 + }, + "id": 217, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "query": "from(bucket: \"ouroboros-metrics\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"ouroboros_flow_allocator_hb_rtt_samples_total\")\n |> filter(fn: (r) => r[\"_field\"] == \"hb_rtt_samples_total\")\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: ${_interval}, fn: max, createEmpty: false)\n |> derivative(unit: 1s, nonNegative: true)\n |> yield(name: \"rate\")", + "refId": "A" + } + ], + "title": "Heartbeat RTT samples/s", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "1m", + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"system\",\n predicate: (r) => true,\n start: -5d\n)\n \n", + "includeAll": true, + "label": "System", + "multi": true, + "name": "_system", + "options": [], + "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"system\",\n predicate: (r) => true,\n start: -5d\n)\n \n", + "refresh": 2, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"type\",\n predicate: (r) => true,\n start: -30d\n)", + "includeAll": true, + "label": "Type", + "multi": true, + "name": "_type", + "options": [], + "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"type\",\n predicate: (r) => true,\n start: -30d\n)", + "refresh": 2, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"layer\",\n predicate: (r) => true,\n start: -30d\n)", + "includeAll": true, + "label": "Layer", + "multi": true, + "name": "_layer", + "options": [], + "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"layer\",\n predicate: (r) => true,\n start: -30d\n)", + "refresh": 2, + "regex": "", + "type": "query" + }, + { + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "influxdb", + "uid": "df36a9e8-5205-4042-9bfb-0516cbcacb4f" + }, + "definition": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"ipcp\",\n predicate: (r) => true,\n start: -30d\n)\n", + "includeAll": true, + "label": "IPCP", + "multi": true, + "name": "_ipcp", + "options": [], + "query": "import \"influxdata/influxdb/v1\"\n\nv1.tagValues(\n bucket: \"ouroboros-metrics\",\n tag: \"ipcp\",\n predicate: (r) => true,\n start: -30d\n)\n", + "refresh": 2, + "regex": "", + "type": "query" + }, + { + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5s", + "value": "5s" + }, + "label": "Interval", + "name": "_interval", + "options": [ + { + "selected": false, + "text": "1ms", + "value": "1ms" + }, + { + "selected": false, + "text": "10ms", + "value": "10ms" + }, + { + "selected": false, + "text": "100ms", + "value": "100ms" + }, + { + "selected": false, + "text": "500ms", + "value": "500ms" + }, + { + "selected": false, + "text": "1s", + "value": "1s" + }, + { + "selected": true, + "text": "5s", + "value": "5s" + }, + { + "selected": false, + "text": "10s", + "value": "10s" + }, + { + "selected": false, + "text": "30s", + "value": "30s" + }, + { + "selected": false, + "text": "1m", + "value": "1m" + }, + { + "selected": false, + "text": "10m", + "value": "10m" + }, + { + "selected": false, + "text": "30m", + "value": "30m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + }, + { + "selected": false, + "text": "6h", + "value": "6h" + }, + { + "selected": false, + "text": "12h", + "value": "12h" + }, + { + "selected": false, + "text": "1d", + "value": "1d" + }, + { + "selected": false, + "text": "7d", + "value": "7d" + }, + { + "selected": false, + "text": "14d", + "value": "14d" + }, + { + "selected": false, + "text": "30d", + "value": "30d" + } + ], + "query": "1ms,10ms,100ms,500ms,1s,5s,10s,30s,1m,10m,30m,1h,6h,12h,1d,7d,14d,30d", + "refresh": 2, + "type": "interval" + } + ] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Ouroboros General Dashboard", + "uid": "hbIO3HR7z", + "version": 6 +} diff --git a/exporters-influxdb/pyExporter/config.ini.example b/exporters-influxdb/pyExporter/config.ini.example deleted file mode 100644 index f2656f7..0000000 --- a/exporters-influxdb/pyExporter/config.ini.example +++ /dev/null @@ -1,6 +0,0 @@ -[influx2] -url=http://localhost:8086 -org=<your-org> -token=<your-token> -timeout=6000 -verify_ssl=False
\ No newline at end of file diff --git a/exporters-influxdb/pyExporter/oexport.py b/exporters-influxdb/pyExporter/oexport.py deleted file mode 100755 index e0edca0..0000000 --- a/exporters-influxdb/pyExporter/oexport.py +++ /dev/null @@ -1,909 +0,0 @@ -#! /usr/bin/python -""" -Ouroboros InfluxDB metrics exporter - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following -disclaimer in the documentation and/or other materials provided -with the distribution. - -3. Neither the name of the copyright holder nor the names of its -contributors may be used to endorse or promote products derived -from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED -OF THE POSSIBILITY OF SUCH DAMAGE. -""" - -import os -import re -import socket -import time -import argparse -from datetime import datetime -from typing import Optional - -from influxdb_client import InfluxDBClient, Point -from influxdb_client.client.write_api import WriteOptions, PointSettings -from influxdb_client.rest import ApiException -from pytz import utc - -IPCP_TYPE_UNICAST = 'unicast' -IPCP_TYPE_BROADCAST = 'broadcast' -IPCP_TYPE_UDP = 'udp' -IPCP_TYPE_ETH_DIX = 'eth-dix' -IPCP_TYPE_ETH_LLC = 'eth-llc' -IPCP_TYPE_LOCAL = 'local' -IPCP_TYPE_UNKNOWN = 'unknown' - -IPCP_TYPES = [IPCP_TYPE_UNICAST, - IPCP_TYPE_BROADCAST, - IPCP_TYPE_UDP, - IPCP_TYPE_ETH_DIX, - IPCP_TYPE_ETH_LLC, - IPCP_TYPE_LOCAL, - IPCP_TYPE_UNKNOWN] - -IPCP_STATE_NULL = 'null' -IPCP_STATE_INIT = 'init' -IPCP_STATE_OPERATIONAL = 'operational' -IPCP_STATE_SHUTDOWN = 'shutdown' - -IPCP_STATES = [IPCP_STATE_NULL, - IPCP_STATE_INIT, - IPCP_STATE_OPERATIONAL, - IPCP_STATE_SHUTDOWN] - - -class OuroborosRIBReader: - """ - Class for reading stuff from the Ouroboros system - Resource Information Base (RIB) - """ - def __init__(self, - rib_path: str): - - self.rib_path = rib_path - - def _get_dir_for_ipcp(self, - ipcp_name: str) -> str: - - return os.path.join(self.rib_path, ipcp_name) - - def _get_dir_for_process(self, - process_name: str) -> str: - - return os.path.join(self.rib_path, process_name) - - def _get_dt_dir_for_ipcp(self, - ipcp_name: str) -> Optional[str]: - - path = self._get_dir_for_ipcp(ipcp_name) - try: - _subdirs = [f.name for f in os.scandir(path)] - except IOError as _: - return None - - for _dir in _subdirs: - if len(_dir) > 3 and _dir[:3] == 'dt.': - return os.path.join(path, _dir) - - return None - - def _get_path_for_ipcp_flow_n_plus_1_info(self, - ipcp_name: str, - fd: str): - - return os.path.join(self.rib_path, ipcp_name, 'flow-allocator', fd) - - def _get_path_for_ipcp_flow_n_minus_1_info(self, - ipcp_name: str, - fd: str) -> str: - - dt_dir = self._get_dt_dir_for_ipcp(ipcp_name) - return os.path.join(dt_dir, fd) - - def _get_path_for_frct_flow_info(self, - process: str, - fd: str) -> str: - - process_dir = self._get_dir_for_process(process) - return os.path.join(process_dir, str(fd), 'frct') - - def _get_ipcp_type_for_ipcp(self, - ipcp_name: str) -> str: - - _dir = self._get_dir_for_ipcp(ipcp_name) - path = '{}/info/_type'.format(_dir) - if not os.path.exists(path): - return IPCP_TYPE_UNKNOWN - - try: - with open(path) as f: - return f.readline()[:-1] - except IOError as _: - return IPCP_TYPE_UNKNOWN - - def _get_layer_name_for_ipcp(self, - ipcp_name: str) -> str: - - _dir = self._get_dir_for_ipcp(ipcp_name) - path = '{}/info/_layer'.format(_dir) - if not os.path.exists(path): - return '(error)' - - try: - with open(path) as f: - return f.readline()[:-1] - except IOError as _: - return '(error)' - - def _get_ipcp_state_for_ipcp(self, - ipcp_name: str) -> str: - - _dir = self._get_dir_for_ipcp(ipcp_name) - path = '{}/info/_state'.format(_dir) - if not os.path.exists(path): - return IPCP_TYPE_UNKNOWN - - try: - with open(path) as f: - return f.readline()[:-1] - except IOError as e: - print(e) - return IPCP_TYPE_UNKNOWN - - def _get_n_plus_1_flows_for_ipcp(self, - ipcp_name: str) -> list[str]: - - path = os.path.join(self._get_dir_for_ipcp(ipcp_name), 'flow-allocator') - - if not os.path.exists(path): - return [] - - try: - return [f.name for f in os.scandir(path)] - except IOError as e: - print(e) - - return [] - - def _get_n_minus_1_flows_for_ipcp(self, - ipcp_name: str) -> list[str]: - - path = self._get_dt_dir_for_ipcp(ipcp_name) - if path is None: - return [] - - if not os.path.exists(path): - return [] - - try: - return [f.name for f in os.scandir(path)] - except IOError as e: - print(e) - return [] - - def _get_address_for_ipcp(self, - ipcp_name): - - path = self._get_dir_for_ipcp(ipcp_name) - try: - _subdirs = [f.name for f in os.scandir(path)] - except IOError as _: - return None - - for _dir in _subdirs: - if len(_dir) > 3 and _dir[:3] == 'dt.': - return _dir[3:] - - return None - - def get_lsdb_stats_for_ipcp(self, - ipcp_name: str) -> dict: - """ - Get statistics for the link state database of an IPCP - :param ipcp_name: name of the IPCP - :return: statistics in a dict - """ - - address = self._get_address_for_ipcp(ipcp_name) - if address is None: - return {} - - path = os.path.join(self._get_dir_for_ipcp(ipcp_name), 'lsdb/') - if not os.path.exists(path): - return {} - - nodes = [] - neighbors = 0 - links = 0 - - lsdb_entries = [] - try: - lsdb_entries = [f.path for f in os.scandir(path)] - except IOError as _: - pass - - for lsdb_entry in lsdb_entries: - try: - with open(lsdb_entry) as e: - for line in e.readlines(): - if 'src' in line: - src = line.split()[-1] - if src not in nodes: - nodes += [src] - if src == address: - neighbors += 1 - if 'dst' in line: - dst = line.split()[-1] - if dst not in nodes: - nodes += [dst] - links += 1 - except IOError as _: - continue - - stats = {'neighbors': neighbors, - 'nodes': len(nodes), - 'links': links} - - return stats - - def _get_flows_for_process(self, - process_name: str) -> list[str]: - path = self._get_dir_for_process(process_name) - - if not os.path.exists(path): - return [] - - try: - return [f.name for f in os.scandir(path) if f.is_dir()] - except IOError as e: - print(e) - - return [] - - @staticmethod - def _get_trailing_number(s: str) -> int: - m = re.search(r'\d+$', s) - return int(m.group()) if m else None - - def _get_flow_info_for_n_plus_1_flow(self, - ipcp_name: str, - fd: str) -> dict: - - str_to_metric = { - 'Flow established at': None, - 'Remote address': None, - 'Local endpoint ID': 'endpoint_id', - 'Remote endpoint ID': None, - 'Sent (packets)': 'sent_pkts_total', - 'Sent (bytes)': 'sent_bytes_total', - 'Send failed (packets)': 'send_failed_packets_total', - 'Send failed (bytes)': 'send_failed_bytes_total', - 'Received (packets)': 'recv_pkts_total', - 'Received (bytes)': 'recv_bytes_total', - 'Receive failed (packets)': 'recv_failed_pkts_total', - 'Receive failed (bytes)': 'recv_failed_bytes_total', - 'Sent flow updates (packets)': 'sent_flow_updates_total', - 'Received flow updates (packets)': 'recv_flow_updates_total', - 'Congestion avoidance algorithm': None, - 'Upstream congestion level': 'up_cong_lvl', - 'Downstream congestion level': 'down_cong_lvl', - 'Upstream packet counter': 'up_pkt_ctr', - 'Downstream packet counter': 'down_pkt_ctr', - 'Congestion window size (ns)': 'cong_wnd_width_ns', - 'Packets in this window': 'cong_wnd_current_pkts', - 'Bytes in this window': 'cong_wnd_current_bytes', - 'Max bytes in this window': 'cong_wnd_size_bytes', - 'Current congestion regime': None - } - - ret = dict() - - path = self._get_path_for_ipcp_flow_n_plus_1_info(ipcp_name, fd) - - if not os.path.exists(path): - return dict() - - with open(path) as f: - for line in f.readlines(): - split_line = line.split(':') - phrase = split_line[0] - if phrase not in str_to_metric: - continue - metric = str_to_metric[phrase] - if metric is not None: - value = self._get_trailing_number(split_line[1]) - ret[metric] = value - - return ret - - def _get_frct_info_for_process_flow(self, - process: str, - fd: str) -> dict: - - str_to_metric = { - 'Maximum packet lifetime (ns)': 'mpl_timer_ns', - 'Max time to Ack (ns)': 'a_timer_ns', - 'Max time to Retransmit (ns)': 'r_timer_ns', - 'Smoothed rtt (ns)': 'srtt_ns', - 'RTT standard deviation (ns)': 'mdev_ns', - 'Retransmit timeout RTO (ns)': 'rto_ns', - 'Sender left window edge': 'snd_lwe', - 'Sender right window edge': 'snd_rwe', - 'Sender inactive (ns)': 'snd_inact', - 'Sender current sequence number': 'snd_seqno', - 'Receiver left window edge': 'rcv_lwe', - 'Receiver right window edge': 'rcv_rwe', - 'Receiver inactive (ns)': 'rcv_inact', - 'Receiver last ack': 'rcv_seqno', - 'Number of pkt retransmissions': 'n_rxm', - 'Number of duplicates received': 'n_dup', - 'Number of rendez-vous sent': 'n_rdv', - 'Number of packets out of window': 'n_out', - 'Number of packets out of rqueue': 'n_rqo' - } - - ret = dict() - - path = self._get_path_for_frct_flow_info(process, fd) - - if not os.path.exists(path): - return dict() - - ret['fd'] = fd - - with open(path) as f: - for line in f.readlines(): - split_line = line.split(':') - phrase = split_line[0] - if phrase not in str_to_metric: - continue - metric = str_to_metric[phrase] - if metric is not None: - value = self._get_trailing_number(split_line[1]) - ret[metric] = value - - return ret - - def get_flow_allocator_flow_info_for_ipcp(self, - ipcp_name: str) -> list[dict]: - """ - Get the flow intformation for all N+1 flows in a certain IPCP - :param ipcp_name: name of the IPCP - :return: dict with flow information - """ - flow_info = [] - - flow_descriptors = self._get_n_plus_1_flows_for_ipcp(ipcp_name) - for flow in flow_descriptors: - info = self._get_flow_info_for_n_plus_1_flow(ipcp_name, flow) - flow_info += [info] - - return flow_info - - def _get_flow_info_for_n_minus_1_flow(self, - ipcp_name: str, - fd: str) -> dict: - - ret = dict() - - path = self._get_path_for_ipcp_flow_n_minus_1_info(ipcp_name, fd) - - str_to_qos_metric = { - 'Flow established at': None, - ' sent (packets)': 'sent_packets_total', - ' sent (bytes)': 'sent_bytes_total', - ' rcvd (packets)': 'recv_packets_total', - ' rcvd (bytes)': 'recv_bytes_total', - ' local sent (packets)': 'local_sent_packets_total', - ' local sent (bytes)': 'local_sent_bytes_total', - ' local rcvd (packets)': 'local_recv_packets_total', - ' local rcvd (bytes)': 'local_recv_bytes_total', - ' dropped ttl (packets)': 'ttl_packets_dropped_total', - ' dropped ttl (bytes)': 'ttl_bytes_dropped_total', - ' failed writes (packets)': 'write_packets_dropped_total', - ' failed writes (bytes)': 'write_bytes_dropped_total', - ' failed nhop (packets)': 'nhop_packets_dropped_total', - ' failed nhop (bytes)': 'nhop_bytes_dropped_total' - } - - if not os.path.exists(path): - return dict() - - with open(path) as f: - _current_cube = '' - ret['fd'] = fd - for line in [_line for _line in f.readlines() if _line != '\n']: - if 'Endpoint address' in line: - ret['endpoint'] = line.split(':')[-1].replace(' ', '')[:-1] - elif 'Queued packets (rx)' in line: - ret['queued_packets_rx'] = self._get_trailing_number(line) - elif 'Queued packets (tx)' in line: - ret['queued_packets_tx'] = self._get_trailing_number(line) - elif 'Qos cube' in line: - _cube = self._get_trailing_number(line[:-2]) - _current_cube = 'QoS cube ' + str(_cube) - ret[_current_cube] = dict() - else: - split_line = line.split(':') - metric = str_to_qos_metric[split_line[0]] - if metric is not None: - value = self._get_trailing_number(split_line[1]) - ret[_current_cube][metric] = value - - return ret - - def get_data_transfer_flow_info_for_ipcp(self, - ipcp_name: str) -> list[dict]: - """ - Get the flow information for all Data Transfer (N-1) flows in a certain IPCP - :param ipcp_name: name of the IPCP - :return: flow information for the data transfer flows - """ - - flow_info = [] - - flow_descriptors = self._get_n_minus_1_flows_for_ipcp(ipcp_name) - for flow in flow_descriptors: - info = self._get_flow_info_for_n_minus_1_flow(ipcp_name, flow) - flow_info += [info] - - return flow_info - - def get_frct_info_for_process(self, - process_name: str) -> list[dict]: - """ - Get the frct information for all flows for a certain process - :param process_name: name of the process - :return: flow information for the N-1 flows - """ - - frct_info = [] - - flow_descriptors = self._get_flows_for_process(process_name) - - for flow in flow_descriptors: - info = self._get_frct_info_for_process_flow(process_name, flow) - frct_info += [info] - - return frct_info - - # pylint: disable-msg=too-many-arguments - def get_ipcp_list(self, - names_only: bool = False, # return name and layer name - types: bool = True, - states: bool = True, - layers: bool = True, - flows: bool = True) -> list[dict]: - """ - Get a list of all IPCPs - :param names_only: only return IPCP names and layer names - :param types: return IPCP type - :param states: return IPCP state - :param layers: return layer in which the IPCP is enrolled - :param flows: return the number of allocated (N+1) flows for this IPCP - :return: list of dicts containing IPCP info - """ - - ipcp_list = [] - - if not os.path.exists(self.rib_path): - return [] - - for ipcp_dir in [f.path for f in os.scandir(self.rib_path) - if f.is_dir() and not f.name.startswith('proc.')]: - ipcp_name = os.path.split(ipcp_dir)[-1] - ipcp_type = None - ipcp_state = None - ipcp_layer = self._get_layer_name_for_ipcp(ipcp_name) if layers else None - ipcp_flows = None - if not names_only: - ipcp_type = self._get_ipcp_type_for_ipcp(ipcp_name) if types else None - ipcp_state = self._get_ipcp_state_for_ipcp(ipcp_name) if states else None - ipcp_flows = self._get_n_plus_1_flows_for_ipcp(ipcp_name) if flows else None - - ipcp_list += [{'name': ipcp_name, - 'type': ipcp_type, - 'state': ipcp_state, - 'layer': ipcp_layer, - 'flows': len(ipcp_flows) if ipcp_flows else None}] - return ipcp_list - # pylint: enable-msg=too-many-arguments - - def get_process_list(self) -> list[str]: - """ - Get a list of all the Ouroboros applications that may be exposing frct stats - :return: list of process names ("proc.<pid>") - """ - proc_list = [] - - if not os.path.exists(self.rib_path): - return [] - - for proc in [f.name for f in os.scandir(self.rib_path) - if f.is_dir() and f.name.startswith('proc.')]: - proc_list += [proc] - - return proc_list - - -class OuroborosExporter: - """ - Export Ouroboros metrics to InfluxDB - """ - - def __init__(self, - bucket='ouroboros-metrics', - config='./config.ini', - rib_path='/tmp/ouroboros/'): - - point_settings = PointSettings() - point_settings.add_default_tag('system', socket.gethostname()) - - write_options = WriteOptions(batch_size=500, - flush_interval=10_000, - jitter_interval=1_000, - retry_interval=1_000, - max_retries=5, - max_retry_delay=30_000, - exponential_base=2) - - self.bucket = bucket - self.client = InfluxDBClient.from_config_file(config) - self.write_api = self.client.write_api(write_options=write_options, - point_settings=point_settings).write - self.query_api = self.client.query_api() - self.ribreader = OuroborosRIBReader(rib_path=rib_path) - - def __exit__(self, _type, value, traceback): - self.client.close() - - def _write_ouroboros_ipcps_total(self, - now, - ipcp_type, - n_ipcps): - - point = { - 'measurement': 'ouroboros_{}_ipcps_total'.format(ipcp_type), - 'tags': { - 'type': ipcp_type, - }, - 'fields': { - 'ipcps': n_ipcps, - 'time': str(now) - } - } - - self.write_api(bucket=self.bucket, - record=Point.from_dict(point)) - - def _write_ouroboros_flow_allocator_flows_total(self, - now, - ipcp, - layer, - n_flows): - point = { - 'measurement': 'ouroboros_flow_allocator_flows_total', - 'tags': { - 'ipcp': ipcp, - 'layer': layer - }, - 'fields': { - 'flows': n_flows, - 'time': str(now) - } - } - - self.write_api(bucket=self.bucket, - record=Point.from_dict(point)) - - # pylint: disable-msg=too-many-arguments - def _write_ouroboros_fa_congestion_metric(self, - metric: str, - now: str, - ipcp_name: str, - eid: str, - layer, - value): - - point = { - 'measurement': 'ouroboros_flow_allocator_' + metric, - 'tags': { - 'ipcp': ipcp_name, - 'layer': layer, - 'flow_id': eid - }, - 'fields': { - metric: value, - 'time': now - } - } - - try: - self.write_api(bucket=self.bucket, - record=Point.from_dict(point)) - except ApiException as e: - print(e, point) - - def _write_ouroboros_lsdb_node_metric(self, - metric: str, - now: str, - ipcp_name: str, - layer: str, - value): - - point = { - 'measurement': 'ouroboros_lsdb_' + metric + '_total', - 'tags': { - 'ipcp': ipcp_name, - 'layer': layer - }, - 'fields': { - metric: value, - 'time': now - } - } - - try: - self.write_api(bucket=self.bucket, - record=Point.from_dict(point)) - except ApiException as e: - print(e, point) - - def _write_ouroboros_data_transfer_metric(self, - metric: str, - now: str, - qos_cube: str, - fd: str, - endpoint: str, - ipcp_name: str, - layer, - value): - - point = { - 'measurement': 'ouroboros_data_transfer_' + metric, - 'tags': { - 'ipcp': ipcp_name, - 'layer': layer, - 'flow_descriptor': fd, - 'qos_cube': qos_cube, - 'endpoint': endpoint - }, - 'fields': { - metric: value, - 'time': now - } - } - - try: - self.write_api(bucket=self.bucket, - record=Point.from_dict(point)) - except ApiException as e: - print(e, point) - - def _write_ouroboros_data_transfer_queued(self, - now, - fd, - ipcp_name, - layer, - metrics) -> None: - point = dict() - for metric in metrics: - point = { - 'measurement': 'ouroboros_data_transfer_' + metric, - 'tags': { - 'ipcp': ipcp_name, - 'layer': layer, - 'flow_descriptor': fd, - }, - 'fields': { - metric: metrics[metric], - 'time': now - } - } - - try: - self.write_api(bucket=self.bucket, - record=Point.from_dict(point)) - except ApiException as e: - print(e, point) - - def _write_ouroboros_process_frct_metric(self, - now, - metric, - fd, - process, - value): - point = { - 'measurement': 'ouroboros_process_frct_' + metric, - 'tags': { - 'process': process, - 'flow_descriptor': fd, - }, - 'fields': { - metric: value, - 'time': now - } - } - - try: - self.write_api(bucket=self.bucket, - record=Point.from_dict(point)) - except ApiException as e: - print(e, point) - # pylint: enable-msg=too-many-arguments - - @staticmethod - def _filter_ipcp_list(ipcp_list: list[dict], - ipcp_type: str = None, - ipcp_state: str = None, - layer: str = None) -> list[dict]: - - if ipcp_type not in IPCP_TYPES: - return [] - - if ipcp_type: - ipcp_list = [ipcp for ipcp in ipcp_list if ipcp['type'] == ipcp_type] - - if ipcp_state: - ipcp_list = [ipcp for ipcp in ipcp_list if ipcp['state'] == ipcp_state] - - if layer: - ipcp_list = [ipcp for ipcp in ipcp_list if ipcp['layer'] == layer] - - return ipcp_list - - def _export_ouroboros_ipcps_total(self): - - ipcps = self.ribreader.get_ipcp_list() - - ipcps_total = dict() - - for _type in IPCP_TYPES: - ipcps_total[_type] = len(self._filter_ipcp_list(ipcps, ipcp_type=_type)) - - now = datetime.now(utc) - - for _type, n_ipcps in ipcps_total.items(): - self._write_ouroboros_ipcps_total(now, _type, n_ipcps) - - def _export_ouroboros_flow_allocator_flows_total(self): - - ipcps = self.ribreader.get_ipcp_list() - - now = datetime.now(utc) - - for ipcp in [ipcp for ipcp in ipcps if ipcp['flows'] is not None]: - self._write_ouroboros_flow_allocator_flows_total(now, ipcp['name'], ipcp['layer'], ipcp['flows']) - - def _export_ouroboros_fa_congestion_metrics(self): - - ipcps = self.ribreader.get_ipcp_list(names_only=True) - - now = datetime.now(utc) - - for ipcp in ipcps: - flows = self.ribreader.get_flow_allocator_flow_info_for_ipcp(ipcp['name']) - for flow in flows: - for metric in flow: - if metric == 'endpoint_id': - continue - - self._write_ouroboros_fa_congestion_metric(metric, - str(now), - ipcp['name'], - flow['endpoint_id'], - ipcp['layer'], - flow[metric]) - - def _export_ouroboros_lsdb_metrics(self): - - ipcps = self.ribreader.get_ipcp_list(names_only=True) - - now = datetime.now(utc) - - for ipcp in ipcps: - metrics = self.ribreader.get_lsdb_stats_for_ipcp(ipcp['name']) - for metric, value in metrics.items(): - self._write_ouroboros_lsdb_node_metric(metric, - str(now), - ipcp['name'], - ipcp['layer'], - value) - - def _export_ouroboros_data_transfer_metrics(self): - ipcps = self.ribreader.get_ipcp_list(names_only=True) - - now = datetime.now(utc) - - for ipcp in ipcps: - info = self.ribreader.get_data_transfer_flow_info_for_ipcp(ipcp['name']) - for flow in info: - qoscubes = [_field for _field in flow if str(_field).startswith('QoS cube')] - for qoscube in qoscubes: - for metric in flow[qoscube]: - self._write_ouroboros_data_transfer_metric(metric, - str(now), - qoscube, - flow['fd'], - flow['endpoint'], - ipcp['name'], - ipcp['layer'], - flow[qoscube][metric]) - self._write_ouroboros_data_transfer_queued(str(now), - flow['fd'], - ipcp['name'], - ipcp['layer'], - {'queued_packets_rx': flow['queued_packets_rx'], - 'queued_packets_tx': flow['queued_packets_tx']}) - - def _export_ouroboros_process_frct_metrics(self): - processes = self.ribreader.get_process_list() - - now = datetime.now(utc) - - for process in processes: - for frct_info in self.ribreader.get_frct_info_for_process(process): - for metric in frct_info: - self._write_ouroboros_process_frct_metric(str(now), - metric, - frct_info['fd'], - process, - frct_info[metric]) - - def export(self): - """ - Export all available metrics - :return: - """ - - self._export_ouroboros_ipcps_total() - self._export_ouroboros_flow_allocator_flows_total() - self._export_ouroboros_fa_congestion_metrics() - self._export_ouroboros_lsdb_metrics() - self._export_ouroboros_data_transfer_metrics() - self._export_ouroboros_process_frct_metrics() - - def run(self, - interval_ms: float = 1000): - """ - Run the ouroboros exporter - - :param interval_ms: read interval in milliseconds - :return: None - """ - - while True: - time.sleep(interval_ms / 1000.0) - self.export() - - -if __name__ == '__main__': - argparser = argparse.ArgumentParser(description="Ouroboros InfluxDB metrics exporter") - argparser.add_argument('-i', '--interval', type=int, default='1000', - help="Interval at which to collect metrics (milliseconds)") - argparser.add_argument('-b', '--bucket', type=str, default='ouroboros-metrics', - help="InfluxDB bucket to write to") - args = argparser.parse_args() - interval_ms = args.interval - exporter = OuroborosExporter(bucket=args.bucket) - exporter.run(interval_ms=interval_ms) diff --git a/oexport.py b/oexport.py new file mode 100644 index 0000000..4e869ea --- /dev/null +++ b/oexport.py @@ -0,0 +1,860 @@ +# +# SPDX-FileCopyrightText: 2021 - 2026 Dimitri Staessens +# SPDX-License-Identifier: BSD-3-Clause +# + +""" +Ouroboros InfluxDB metrics exporter + +Samples the Ouroboros RIB on a fixed period and writes the readings to +InfluxDB or to a file. +""" + +from __future__ import annotations + +import ctypes +import ctypes.util +import os +import socket +import struct +import sys +import time +import argparse +import configparser +from abc import ABC, abstractmethod +from datetime import datetime +from types import TracebackType +from typing import Any, Optional + +from influxdb_client import InfluxDBClient, Point +from influxdb_client.client.write_api import WriteOptions, PointSettings +from influxdb_client.rest import ApiException +from pytz import utc + +from ribreader import OuroborosRIBReader, IPCP_TYPES + +_CLOCK_MONOTONIC = 1 +_TFD_CLOEXEC = 0o2000000 +_FAIRNESS_REGIMES = {1, 2, 4} + +_libc = None + +_libc_path = ctypes.util.find_library('c') +if sys.platform == 'linux' and _libc_path: + try: + _libc = ctypes.CDLL(_libc_path, use_errno=True) + except OSError: + pass + + +def _jain_index(values: list[float]) -> Optional[float]: + """ + Jain's fairness index over a list of non-negative rates. + """ + + n = len(values) + if n == 0: + return None + + total = sum(values) + + sq = sum(v * v for v in values) + if sq == 0: + return None + + return (total * total) / (n * sq) + + +def _fairness_rates(flows: list[dict]) -> list[float]: + """ + Paced rates that count toward the Jain fairness index. + """ + + rates = [] + + for flow in flows: + rate = flow.get('paced_rate', 0) + if rate <= 0: + continue + + regime = flow.get('cong_regime') + sent = flow.get('sent_bytes_total', 0) + rcvd = flow.get('recv_bytes_total', 0) + + if regime is not None: + if regime in _FAIRNESS_REGIMES: + rates.append(rate) + elif sent * 4 > rcvd: + rates.append(rate) + + return rates + + +def _make_timerfd(interval_ns: int) -> int: + """ + Create and arm a CLOCK_MONOTONIC timerfd for *interval_ns* + nanoseconds. + + Returns the file descriptor. The caller must close it when done. + Raises :exc:`OSError` if the syscalls fail. + """ + + fd = _libc.timerfd_create(_CLOCK_MONOTONIC, _TFD_CLOEXEC) + if fd < 0: + errno = ctypes.get_errno() + raise OSError(errno, f"timerfd_create failed: {os.strerror(errno)}") + + sec = interval_ns // 1_000_000_000 + nsec = interval_ns % 1_000_000_000 + + itimerspec = struct.pack('qqqq', sec, nsec, sec, nsec) + buf = ctypes.create_string_buffer(itimerspec) + + ret = _libc.timerfd_settime(fd, 0, buf, None) + if ret < 0: + errno = ctypes.get_errno() + + os.close(fd) + raise OSError(errno, f"timerfd_settime failed: {os.strerror(errno)}") + + return fd + + +class MetricsWriter(ABC): + """ + Abstract base class for metrics output writers. + """ + + @abstractmethod + def write(self, bucket: str, record: Point) -> None: + """ + Write a single metric point. + """ + + @abstractmethod + def close(self) -> None: + """ + Release resources held by the writer. + """ + + +class InfluxDBWriter(MetricsWriter): + """ + Write metrics to an InfluxDB instance. + """ + + def __init__(self, # pylint: disable=too-many-arguments,too-many-positional-arguments + cfg_path: str = './config.ini', + tags: dict = None, + url: str = None, + org: str = None, + token: str = None) -> None: + + point_settings = PointSettings() + + point_settings.add_default_tag('system', socket.gethostname()) + + if tags: + for key, value in tags.items(): + point_settings.add_default_tag(key, value) + + write_options = WriteOptions(batch_size=500, + flush_interval=10_000, + jitter_interval=1_000, + retry_interval=1_000, + max_retries=5, + max_retry_delay=30_000, + exponential_base=2) + + if url: + self.client = InfluxDBClient(url=url, org=org, token=token) + else: + self.client = InfluxDBClient.from_config_file(cfg_path) + + self._write_api = self.client.write_api(write_options=write_options, + point_settings=point_settings).write + + def write(self, bucket: str, record: Point) -> None: + try: + self._write_api(bucket=bucket, record=record) + except ApiException as e: + print(e) + + def close(self) -> None: + self.client.close() + + +class FileWriter(MetricsWriter): + """ + Write metrics as InfluxDB line protocol to a file. + """ + + def __init__(self, + path: str, + tags: dict = None) -> None: + + self._tags = tags or {} + self._file = open(path, 'a', encoding='utf-8') # pylint: disable=consider-using-with + + def write(self, bucket: str, record: Point) -> None: + for key, value in self._tags.items(): + record = record.tag(key, value) + + record = record.tag('system', socket.gethostname()) + + self._file.write(record.to_line_protocol() + '\n') + self._file.flush() + + def close(self) -> None: + self._file.close() + + +class OuroborosExporter: + """ + Export Ouroboros metrics through a MetricsWriter + """ + + def __init__(self, + metrics_writer: MetricsWriter, + bucket: str = 'ouroboros-metrics', + rib_path: str = '/tmp/ouroboros/') -> None: + + self.bucket = bucket + self.writer = metrics_writer + self.ribreader = OuroborosRIBReader(rib_path=rib_path) + + def __exit__(self, + _type: type[BaseException] | None, + value: BaseException | None, + traceback: TracebackType | None) -> None: + self.writer.close() + + def _write_ouroboros_ipcps_total(self, + now: str, + ipcp_type: str, + n_ipcps: int) -> None: + + point = { + 'measurement': f'ouroboros_{ipcp_type}_ipcps_total', + 'tags': { + 'type': ipcp_type, + }, + 'fields': { + 'ipcps': n_ipcps, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_flow_allocator_flows_total(self, + now: str, + ipcp: str, + layer: str, + n_flows: int) -> None: + point = { + 'measurement': 'ouroboros_flow_allocator_flows_total', + 'tags': { + 'ipcp': ipcp, + 'layer': layer + }, + 'fields': { + 'flows': n_flows, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + # pylint: disable=too-many-arguments,too-many-positional-arguments + def _write_ouroboros_fa_congestion_metric(self, + metric: str, + now: str, + ipcp_name: str, + eid: str, + layer: str, + value: Any) -> None: + + point = { + 'measurement': f'ouroboros_flow_allocator_{metric}', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer, + 'flow_id': eid + }, + 'fields': { + metric: value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_fa_fairness_metric(self, + now: str, + ipcp_name: str, + layer: str, + value: float) -> None: + + point = { + 'measurement': 'ouroboros_flow_allocator_jain_index', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer, + }, + 'fields': { + 'jain_index': value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_lsdb_node_metric(self, + metric: str, + now: str, + ipcp_name: str, + layer: str, + value: Any) -> None: + + point = { + 'measurement': f'ouroboros_lsdb_{metric}_total', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer + }, + 'fields': { + metric: value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_dht_node_metric(self, + metric: str, + now: str, + ipcp_name: str, + layer: str, + value: Any) -> None: + + point = { + 'measurement': f'ouroboros_dht_{metric}_total', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer + }, + 'fields': { + metric: value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_data_transfer_metric(self, + metric: str, + now: str, + qos_cube: str, + fd: str, + endpoint: str, + ipcp_name: str, + layer: str, + value: Any) -> None: + + point = { + 'measurement': f'ouroboros_data_transfer_{metric}', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer, + 'flow_descriptor': fd, + 'qos_cube': qos_cube, + 'endpoint': endpoint + }, + 'fields': { + metric: value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_data_transfer_queued(self, + now: str, + fd: str, + ipcp_name: str, + layer: str, + metrics: dict) -> None: + for metric in metrics: + point = { + 'measurement': f'ouroboros_data_transfer_{metric}', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer, + 'flow_descriptor': fd, + }, + 'fields': { + metric: metrics[metric], + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_process_frct_metric(self, + now: str, + metric: str, + fd: str, + process: str, + value: Any) -> None: + point = { + 'measurement': f'ouroboros_process_frct_{metric}', + 'tags': { + 'process': process, + 'flow_descriptor': fd, + }, + 'fields': { + metric: value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_eth_summary_metric(self, + now: str, + metric: str, + ipcp_name: str, + layer: str, + value: Any) -> None: + point = { + 'measurement': f'ouroboros_eth_{metric}', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer, + }, + 'fields': { + metric: value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + + def _write_ouroboros_eth_flow_metric(self, + now: str, + metric: str, + fd: str, + ipcp_name: str, + layer: str, + value: Any) -> None: + point = { + 'measurement': f'ouroboros_eth_flow_{metric}', + 'tags': { + 'ipcp': ipcp_name, + 'layer': layer, + 'flow_descriptor': fd, + }, + 'fields': { + metric: value, + }, + 'time': now, + } + + self.writer.write(bucket=self.bucket, + record=Point.from_dict(point)) + # pylint: enable=too-many-arguments,too-many-positional-arguments + + @staticmethod + def _filter_ipcp_list(ipcp_list: list[dict], + ipcp_type: str = None, + ipcp_state: str = None, + layer: str = None) -> list[dict]: + + if ipcp_type not in IPCP_TYPES: + print(f"Unknown IPCP TYPE: {ipcp_type}") + return [] + + if ipcp_type: + ipcp_list = [ipcp for ipcp in ipcp_list if ipcp['type'] == ipcp_type] + + if ipcp_state: + ipcp_list = [ipcp for ipcp in ipcp_list if ipcp['state'] == ipcp_state] + + if layer: + ipcp_list = [ipcp for ipcp in ipcp_list if ipcp['layer'] == layer] + + return ipcp_list + + def _export_ouroboros_ipcps_total(self) -> None: + + ipcps = self.ribreader.get_ipcp_list() + + ipcps_total = {} + + for _type in IPCP_TYPES: + ipcps_total[_type] = len(self._filter_ipcp_list(ipcps, ipcp_type=_type)) + + now = datetime.now(utc) + + for _type, n_ipcps in ipcps_total.items(): + self._write_ouroboros_ipcps_total(now, _type, n_ipcps) + + def _export_ouroboros_flow_allocator_flows_total(self) -> None: + + ipcps = self.ribreader.get_ipcp_list() + + now = datetime.now(utc) + + for ipcp in [ipcp for ipcp in ipcps if ipcp['flows'] is not None]: + self._write_ouroboros_flow_allocator_flows_total( + now, ipcp['name'], ipcp['layer'], ipcp['flows']) + + def _export_ouroboros_fa_congestion_metrics(self) -> None: + + ipcps = self.ribreader.get_ipcp_list(names_only=True) + + now = datetime.now(utc) + + for ipcp in ipcps: + flows = self.ribreader.get_flow_allocator_flow_info_for_ipcp(ipcp['name']) + for flow in flows: + for metric, value in flow.items(): + if metric == 'endpoint_id': + continue + + self._write_ouroboros_fa_congestion_metric( + metric, str(now), ipcp['name'], + flow['endpoint_id'], ipcp['layer'], value) + + rates = _fairness_rates(flows) + if len(rates) >= 2: + jain = _jain_index(rates) + if jain is not None: + self._write_ouroboros_fa_fairness_metric( + str(now), ipcp['name'], ipcp['layer'], jain) + + def _export_ouroboros_lsdb_metrics(self) -> None: + + ipcps = self.ribreader.get_ipcp_list(names_only=True) + + now = datetime.now(utc) + + for ipcp in ipcps: + metrics = self.ribreader.get_lsdb_stats_for_ipcp(ipcp['name']) + for metric, value in metrics.items(): + self._write_ouroboros_lsdb_node_metric(metric, + str(now), + ipcp['name'], + ipcp['layer'], + value) + + def _export_ouroboros_dht_metrics(self) -> None: + + ipcps = self.ribreader.get_ipcp_list(names_only=True) + + now = datetime.now(utc) + + for ipcp in ipcps: + metrics = self.ribreader.get_dht_stats_for_ipcp(ipcp['name']) + for metric, value in metrics.items(): + self._write_ouroboros_dht_node_metric(metric, + str(now), + ipcp['name'], + ipcp['layer'], + value) + + def _export_ouroboros_data_transfer_metrics(self) -> None: + ipcps = self.ribreader.get_ipcp_list(names_only=True) + + now = datetime.now(utc) + + for ipcp in ipcps: + info = self.ribreader.get_data_transfer_flow_info_for_ipcp(ipcp['name']) + for flow in info: + qoscubes = [_field for _field in flow if str(_field).startswith('QoS cube')] + for qoscube in qoscubes: + for metric in flow[qoscube]: + self._write_ouroboros_data_transfer_metric( + metric, str(now), qoscube, + flow['fd'], flow['endpoint'], + ipcp['name'], ipcp['layer'], + flow[qoscube][metric]) + + queued = { + 'queued_packets_rx': flow['queued_packets_rx'], + 'queued_packets_tx': flow['queued_packets_tx'] + } + + self._write_ouroboros_data_transfer_queued( + str(now), flow['fd'], ipcp['name'], + ipcp['layer'], queued) + + def _export_ouroboros_process_frct_metrics(self) -> None: + processes = self.ribreader.get_process_list() + + now = datetime.now(utc) + + for process in processes: + for frct_info in self.ribreader.get_frct_info_for_process(process): + for metric, value in frct_info.items(): + self._write_ouroboros_process_frct_metric( + str(now), metric, frct_info['fd'], + process, value) + + def _export_ouroboros_eth_metrics(self) -> None: + ipcps = self.ribreader.get_ipcp_list(names_only=True) + + now = datetime.now(utc) + + for ipcp in ipcps: + summary = self.ribreader.get_eth_summary_for_ipcp( + ipcp['name']) + for metric, value in summary.items(): + self._write_ouroboros_eth_summary_metric( + str(now), metric, ipcp['name'], + ipcp['layer'], value) + + flows = self.ribreader.get_eth_flow_info_for_ipcp( + ipcp['name']) + for flow in flows: + for metric, value in flow.items(): + if metric == 'fd': + continue + self._write_ouroboros_eth_flow_metric( + str(now), metric, flow['fd'], + ipcp['name'], ipcp['layer'], value) + + def export(self) -> None: + """ + Export all available metrics + """ + + self._export_ouroboros_ipcps_total() + self._export_ouroboros_flow_allocator_flows_total() + self._export_ouroboros_fa_congestion_metrics() + self._export_ouroboros_lsdb_metrics() + self._export_ouroboros_dht_metrics() + self._export_ouroboros_data_transfer_metrics() + self._export_ouroboros_eth_metrics() + self._export_ouroboros_process_frct_metrics() + + def run(self, + interval_ms: float = 1000, + slow_interval_ms: float = 1000) -> None: + """ + Run the ouroboros exporter + + :param interval_ms: FRCT poll interval in milliseconds + :param slow_interval_ms: interval for all other metrics (IPCP, + LSDB, DHT, FA, DT) in milliseconds + """ + + slow_every = max(1, round(slow_interval_ms / interval_ms)) + tick = 0 + + interval_ns = int(interval_ms * 1_000_000) + + if _libc is not None: + tfd = _make_timerfd(interval_ns) + try: + while True: + os.read(tfd, 8) + + if tick % slow_every == 0: + self.export() + else: + self._export_ouroboros_process_frct_metrics() + tick += 1 + finally: + os.close(tfd) + else: + while True: + time.sleep(interval_ms / 1000.0) + + if tick % slow_every == 0: + self.export() + else: + self._export_ouroboros_process_frct_metrics() + + tick += 1 + + +def _parse_args() -> argparse.Namespace: + """ + The command line as an argparse namespace. + """ + + argparser = argparse.ArgumentParser(description="Ouroboros metrics exporter") + + argparser.add_argument('-i', '--interval', type=int, default='1000', + help="Interval at which to collect FRCT metrics (milliseconds)") + argparser.add_argument('--slow-interval', type=int, default=None, + help="Interval for IPCP/LSDB/DHT/FA/DT metrics (milliseconds, " + "default: max(interval, 1000))") + argparser.add_argument('-b', '--bucket', type=str, default='ouroboros-metrics', + help="InfluxDB bucket to write to") + argparser.add_argument('-o', '--output-file', type=str, default=None, + help="Write line protocol to file instead of InfluxDB") + argparser.add_argument('-t', '--tag', action='append', default=[], + help="Extra tag as key=value (repeatable)") + argparser.add_argument('-c', '--config', type=str, default='./config.ini', + help="Path to config.ini") + argparser.add_argument('--url', type=str, default=None, + help="InfluxDB server URL") + argparser.add_argument('--org', type=str, default=None, + help="InfluxDB organization") + argparser.add_argument('--token', type=str, default=None, + help="InfluxDB authentication token") + + return argparser.parse_args() + + +def _tags_from_cli(tag_args: list[str]) -> dict: + """ + The --tag key=value pairs as a dict. A malformed pair exits 1. + """ + + tags = {} + + for tag_str in tag_args: + if '=' not in tag_str: + print(f"Error: --tag must be in key=value format, got: '{tag_str}'", + file=sys.stderr) + sys.exit(1) + + key, value = tag_str.split('=', 1) + tags[key] = value + + return tags + + +def _merge_output_section(config: configparser.ConfigParser, + args: argparse.Namespace) -> None: + """ + Apply the [output] section where the command line left a gap. + """ + + if not config.has_section('output'): + return + + if args.output_file is None and config.has_option('output', 'file'): + args.output_file = config.get('output', 'file') + + if not config.has_option('output', 'tags'): + return + + for tag_str in config.get('output', 'tags').split(','): + tag_str = tag_str.strip() + if tag_str and '=' in tag_str: + key, value = tag_str.split('=', 1) + + args.tags.setdefault(key, value) + + +def _merge_exporter_section(config: configparser.ConfigParser, + args: argparse.Namespace) -> None: + """ + Apply the [exporter] section where the command line left a gap. + """ + + if not config.has_section('exporter'): + return + + if args.interval == 1000 and config.has_option('exporter', 'interval'): + args.interval = config.getint('exporter', 'interval') + + if (args.bucket == 'ouroboros-metrics' + and config.has_option('exporter', 'bucket')): + args.bucket = config.get('exporter', 'bucket') + + +def _merge_influx_section(config: configparser.ConfigParser, + args: argparse.Namespace) -> None: + """ + Apply the [influx2] section where the command line left a gap. + """ + + if not config.has_section('influx2'): + return + + if args.url is None and config.has_option('influx2', 'url'): + args.url = config.get('influx2', 'url') + + if args.org is None and config.has_option('influx2', 'org'): + args.org = config.get('influx2', 'org') + + if args.token is None and config.has_option('influx2', 'token'): + args.token = config.get('influx2', 'token') + + +def _merge_config(path: str, args: argparse.Namespace) -> None: + """ + Layer the config file at *path* underneath *args*. A missing file + leaves *args* untouched. + """ + + if not os.path.exists(path): + return + + config = configparser.ConfigParser() + + config.read(path) + + _merge_output_section(config, args) + _merge_exporter_section(config, args) + _merge_influx_section(config, args) + + +def _make_writer(args: argparse.Namespace) -> MetricsWriter: + """ + The writer the options ask for. + """ + + if args.output_file: + return FileWriter(path=args.output_file, tags=args.tags) + + return InfluxDBWriter(cfg_path=args.config, tags=args.tags, + url=args.url, org=args.org, + token=args.token) + + +def main() -> None: + """ + Run the Ouroboros metrics exporter. + """ + + args = _parse_args() + + args.tags = _tags_from_cli(args.tag) + + _merge_config(args.config, args) + + writer = _make_writer(args) + + exporter = OuroborosExporter(metrics_writer=writer, + bucket=args.bucket) + try: + if args.slow_interval is not None: + slow_interval = args.slow_interval + else: + slow_interval = max(args.interval, 1000) + + exporter.run(interval_ms=args.interval, + slow_interval_ms=slow_interval) + finally: + writer.close() + + +if __name__ == '__main__': + main() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..9ba8b28 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2021 - 2026 Dimitri Staessens +# SPDX-License-Identifier: BSD-3-Clause + +[project] +name = "ouroboros-metrics" +dynamic = ["version"] +dependencies = ["influxdb-client[ciso]", "pytz"] + +[project.scripts] +oexport = "oexport:main" + +[tool.setuptools] +py-modules = ["ribreader", "oexport"] + +[build-system] +requires = ["setuptools>=64", "setuptools_scm>=8"] +build-backend = "setuptools.build_meta" + +[tool.setuptools_scm] diff --git a/ribreader.py b/ribreader.py new file mode 100644 index 0000000..4bc3e92 --- /dev/null +++ b/ribreader.py @@ -0,0 +1,773 @@ +# +# SPDX-FileCopyrightText: 2021 - 2026 Dimitri Staessens +# SPDX-License-Identifier: BSD-3-Clause +# + +""" +Ouroboros RIB filesystem reader +""" + +from __future__ import annotations + +import os +import re +from typing import Optional + +IPCP_TYPE_UNICAST = 'unicast' +IPCP_TYPE_BROADCAST = 'broadcast' +IPCP_TYPE_UDP = 'udp' +IPCP_TYPE_ETH_DIX = 'eth-dix' +IPCP_TYPE_ETH_LLC = 'eth-llc' +IPCP_TYPE_LOCAL = 'local' +IPCP_TYPE_UNKNOWN = 'unknown' + +IPCP_TYPES = [IPCP_TYPE_UNICAST, + IPCP_TYPE_BROADCAST, + IPCP_TYPE_UDP, + IPCP_TYPE_ETH_DIX, + IPCP_TYPE_ETH_LLC, + IPCP_TYPE_LOCAL, + IPCP_TYPE_UNKNOWN] + +IPCP_STATE_NULL = 'null' +IPCP_STATE_INIT = 'init' +IPCP_STATE_OPERATIONAL = 'operational' +IPCP_STATE_SHUTDOWN = 'shutdown' + +IPCP_STATES = [IPCP_STATE_NULL, + IPCP_STATE_INIT, + IPCP_STATE_OPERATIONAL, + IPCP_STATE_SHUTDOWN] + + +class OuroborosRIBReader: + """ + Reader for the Ouroboros Resource Information Base (RIB) + """ + + def __init__(self, + rib_path: str) -> None: + + self.rib_path = rib_path + + def _get_dir_for_ipcp(self, + ipcp_name: str) -> str: + + return os.path.join(self.rib_path, ipcp_name) + + def _get_dir_for_process(self, + process_name: str) -> str: + + return os.path.join(self.rib_path, process_name) + + def _get_dt_dir_for_ipcp(self, + ipcp_name: str) -> Optional[str]: + + path = self._get_dir_for_ipcp(ipcp_name) + try: + _subdirs = [f.name for f in os.scandir(path)] + except IOError as _: + return None + + for _dir in _subdirs: + if len(_dir) > 3 and _dir[:3] == 'dt.': + return os.path.join(path, _dir) + + return None + + def _get_path_for_ipcp_flow_n_plus_1_info(self, + ipcp_name: str, + fd: str) -> str: + + return os.path.join(self.rib_path, ipcp_name, 'flow-allocator', fd) + + def _get_path_for_ipcp_flow_n_minus_1_info(self, + ipcp_name: str, + fd: str) -> str: + + dt_dir = self._get_dt_dir_for_ipcp(ipcp_name) + + return os.path.join(dt_dir, fd) + + def _get_path_for_frct_flow_info(self, + process: str, + fd: str) -> str: + + process_dir = self._get_dir_for_process(process) + + return os.path.join(process_dir, str(fd), 'frct') + + def _get_ipcp_type_for_ipcp(self, + ipcp_name: str) -> str: + + _dir = self._get_dir_for_ipcp(ipcp_name) + + path = f'{_dir}/info/_type' + if not os.path.exists(path): + return IPCP_TYPE_UNKNOWN + + try: + with open(path, encoding='utf-8') as f: + return f.readline()[:-1] + except IOError as _: + return IPCP_TYPE_UNKNOWN + + def _get_layer_name_for_ipcp(self, + ipcp_name: str) -> str: + + _dir = self._get_dir_for_ipcp(ipcp_name) + + path = f'{_dir}/info/_layer' + if not os.path.exists(path): + return '(error)' + + try: + with open(path, encoding='utf-8') as f: + return f.readline()[:-1] + except IOError as _: + return '(error)' + + def _get_ipcp_state_for_ipcp(self, + ipcp_name: str) -> str: + + _dir = self._get_dir_for_ipcp(ipcp_name) + + path = f'{_dir}/info/_state' + if not os.path.exists(path): + return IPCP_TYPE_UNKNOWN + + try: + with open(path, encoding='utf-8') as f: + return f.readline()[:-1] + except IOError as e: + print(e) + return IPCP_TYPE_UNKNOWN + + def _get_n_plus_1_flows_for_ipcp(self, + ipcp_name: str) -> list[str]: + + path = os.path.join(self._get_dir_for_ipcp(ipcp_name), + 'flow-allocator') + if not os.path.exists(path): + return [] + + try: + return [f.name for f in os.scandir(path)] + except IOError as e: + print(e) + + return [] + + def _get_n_minus_1_flows_for_ipcp(self, + ipcp_name: str) -> list[str]: + + path = self._get_dt_dir_for_ipcp(ipcp_name) + if path is None: + return [] + + if not os.path.exists(path): + return [] + + try: + return [f.name for f in os.scandir(path)] + except IOError as e: + print(e) + return [] + + def _get_address_for_ipcp(self, + ipcp_name: str) -> Optional[str]: + + path = self._get_dir_for_ipcp(ipcp_name) + try: + _subdirs = [f.name for f in os.scandir(path)] + except IOError as _: + return None + + for _dir in _subdirs: + if len(_dir) > 3 and _dir[:3] == 'dt.': + return _dir[3:] + + return None + + def get_lsdb_stats_for_ipcp(self, + ipcp_name: str) -> dict: + """ + Get statistics for the link state database of an IPCP + :param ipcp_name: name of the IPCP + :return: statistics in a dict + """ + + address = self._get_address_for_ipcp(ipcp_name) + if address is None: + return {} + + path = os.path.join(self._get_dir_for_ipcp(ipcp_name), + 'lsdb/') + if not os.path.exists(path): + return {} + + nodes = [] + neighbors = 0 + links = 0 + + lsdb_entries = [] + try: + lsdb_entries = [f.path for f in os.scandir(path)] + except IOError as _: + pass + + for lsdb_entry in lsdb_entries: + try: + with open(lsdb_entry, encoding='utf-8') as e: + for line in e.readlines(): + if 'src' in line: + src = line.split()[-1] + if src not in nodes: + nodes += [src] + + if src == address: + neighbors += 1 + + if 'dst' in line: + dst = line.split()[-1] + if dst not in nodes: + nodes += [dst] + links += 1 + except IOError as _: + continue + + stats = {'neighbors': neighbors, + 'nodes': len(nodes), + 'links': links} + + return stats + + @staticmethod + def _get_trailing_number(s: str) -> Optional[int]: + + m = re.search(r'-?\d+$', s) + + return int(m.group()) if m else None + + def get_dht_stats_for_ipcp(self, + ipcp_name: str) -> dict: + """ + Get statistics for the DHT directory of an IPCP + :param ipcp_name: name of the IPCP + :return: statistics in a dict + """ + + str_to_metric = { + ' Number of keys': 'keys', + ' Number of local values': 'local_values', + ' Number of non-local values': 'non_local_values' + } + + path = os.path.join(self._get_dir_for_ipcp(ipcp_name), + 'dht/stats') + if not os.path.exists(path): + return {} + + ret = {} + + with open(path, encoding='utf-8') as f: + for line in f.readlines(): + split_line = line.split(':') + + phrase = split_line[0] + if phrase not in str_to_metric: + continue + + metric = str_to_metric[phrase] + value = self._get_trailing_number(split_line[1]) + ret[metric] = value + + return ret + + def _get_flows_for_process(self, + process_name: str) -> list[str]: + + path = self._get_dir_for_process(process_name) + if not os.path.exists(path): + return [] + + try: + return [f.name for f in os.scandir(path) if f.is_dir()] + except IOError as e: + print(e) + + return [] + + def _get_flow_info_for_n_plus_1_flow(self, + ipcp_name: str, + fd: str) -> dict: + + str_to_metric = { + 'Local endpoint ID': 'endpoint_id', + 'Sent (packets)': 'sent_pkts_total', + 'Sent (bytes)': 'sent_bytes_total', + 'Send failed (packets)': 'send_failed_packets_total', + 'Send failed (bytes)': 'send_failed_bytes_total', + 'Received (packets)': 'recv_pkts_total', + 'Received (bytes)': 'recv_bytes_total', + 'Receive failed (packets)': 'recv_failed_pkts_total', + 'Receive failed (bytes)': 'recv_failed_bytes_total', + 'Sent flow updates (packets)': 'sent_flow_updates_total', + 'Received flow updates (packets)': 'recv_flow_updates_total', + 'Upstream congestion level': 'up_cong_lvl', + 'Downstream congestion level': 'down_cong_lvl', + 'Paced rate (bytes/s)': 'paced_rate', + 'Pacer lead (bytes)': 'cong_tokens', + 'Congestion regime (code)': 'cong_regime', + 'Control steps (count)': 'ctrl_steps_total', + 'Control time elapsed (ns)': 'ctrl_time_ns_total', + 'Control time banked (ns)': 'ctrl_banked_ns_total', + 'Feedback updates (count)': 'fb_updates_total', + 'Feedback timeouts (count)': 'fb_timeouts_total', + 'Path capacity (bytes/s)': 'path_capacity', + 'Capacity rate floor (bytes/s)': 'cap_rate_floor', + 'Capacity updates (count)': 'cap_updates_total', + 'Slow start peak rate (bytes/s)': 'ss_peak_rate', + 'Signal-loss cuts (count)': 'loss_cuts_total', + 'Heartbeat RTT samples (count)': 'hb_rtt_samples_total', + 'Ramp time constant (ns)': 'ss_tc_ns', + } + + ret = {} + + path = self._get_path_for_ipcp_flow_n_plus_1_info( + ipcp_name, fd) + if not os.path.exists(path): + return {} + + with open(path, encoding='utf-8') as f: + for line in f.readlines(): + split_line = line.split(':') + + phrase = split_line[0] + if phrase not in str_to_metric: + continue + + metric = str_to_metric[phrase] + value = self._get_trailing_number(split_line[1]) + ret[metric] = value + + return ret + + def _get_frct_info_for_process_flow(self, + process: str, + fd: str) -> dict: + + str_to_metric = { + 'Maximum packet lifetime (ns)': 'mpl_timer_ns', + 'Max time to Ack (ns)': 'a_timer_ns', + 'Max time to Retransmit (ns)': 'r_timer_ns', + 'Smoothed rtt (ns)': 'srtt_ns', + 'RTT standard deviation (ns)': 'mdev_ns', + 'Retransmit timeout RTO (ns)': 'rto_ns', + 'Minimum RTT (RACK base, ns)': 'min_rtt_ns', + 'Sender left window edge': 'snd_lwe', + 'Sender right window edge': 'snd_rwe', + 'Sender inactive (ns)': 'snd_inact', + 'Sender current sequence number': 'snd_seqno', + 'Receiver left window edge': 'rcv_lwe', + 'Receiver right window edge': 'rcv_rwe', + 'Receiver inactive (ns)': 'rcv_inact', + 'Receiver last ack': 'rcv_seqno', + 'RXM (RTO-driven) sent': 'rxm_rto', + 'RXM packets received': 'rxm_rcv', + ' duplicates received': 'rxm_dup_rcv', + 'RXM (SACK mechanism) sent': 'rxm_sack', + 'RXM (RACK-driven) sent': 'rxm_rack', + 'RXM (DupThresh-driven) sent': 'rxm_dupthresh', + 'RXM (NACK-driven) sent': 'rxm_nack', + 'ACK packets sent': 'ack_snd', + 'Delayed-ACK timer fires': 'ack_fire', + ' suppressed (seqno)': 'ack_supp_seqno', + ' suppressed (inact)': 'ack_supp_inact', + ' suppressed (rate)': 'ack_supp_rate', + 'ACK packets received': 'ack_rcv', + ' fed RTT estimator': 'ack_rtt', + ' wire dups dropped': 'ack_dup_rcv', + 'FRCTI_RCV time (ns)': 'rcv_proc_ns', + 'tw_move time (ns)': 'tw_move_ns', + 'drain_rx_nb calls': 'drain_calls', + 'Duplicates received': 'dup_rcv', + 'Out-of-window pkts received': 'out_rcv', + 'Out-of-rqueue pkts received': 'rqo_rcv', + 'OOO arrivals': 'ooo_rcv', + 'SACKs sent': 'sack_snd', + 'SACKs received': 'sack_rcv', + 'D-SACKs sent': 'dsack_snd', + 'D-SACKs received': 'dsack_rcv', + 'D-SACK out-of-range dropped': 'dsack_drop', + 'Pre-DRF NACKs sent': 'nack_snd', + 'Pre-DRF NACKs received': 'nack_rcv', + 'Tail loss probes sent': 'tlp_snd', + 'Inactivity drops (silent)': 'inact_drop', + 'DRF window rebases': 'drf_rebase', + 'rq slots cleared by release_rq': 'rq_released', + 'RTT probes sent': 'rttp_snd', + 'RTT probe replies received': 'rttp_rcv', + 'RTT estimator samples': 'rtt_smpl', + 'Rendez-vous packets sent': 'rdv_snd', + 'Rendez-vous packets received': 'rdv_rcv', + 'Keepalives sent': 'ka_snd', + 'Keepalives received': 'ka_rcv', + 'SDU writes fragmented': 'sdu_snd_frag', + ' alloc fail mid-SDU': 'sdu_snd_alloc', + ' tx fail mid-SDU': 'sdu_snd_tx', + 'Fragments sent': 'frag_snd', + 'Fragments received': 'frag_rcv', + 'SDUs delivered reassembled': 'sdu_reasm', + 'SDUs delivered (SOLE)': 'sdu_sole', + 'Fragments dropped (malformed)': 'frag_drop', + 'Stream bytes sent': 'strm_snd_byte', + 'Stream bytes received': 'strm_rcv_byte', + 'Stream bytes delivered': 'strm_dlv_byte', + 'Stream packets dropped': 'strm_drop', + 'Stream FINs dropped': 'strm_fin_drop', + 'RX rbuff queued': 'rx_q_now', + 'TX rbuff queued': 'tx_q_now', + 'RXM-due entries': 'rxm_due_count', + ' bail (acked)': 'rxm_due_acked', + ' bail (unowned)': 'rxm_due_unowned', + ' bail (aged)': 'rxm_due_aged', + ' bail (defer)': 'rxm_due_defer', + 'RXM-arm malloc failures': 'rxm_arm_fail', + 'RXM cancels (teardown)': 'rxm_cancel', + 'RXM tx into dead flow': 'rxm_tx_dead', + 'Tx ring drops (any cause)': 'tx_drop', + ' ack': 'tx_drop_ack', + ' sack': 'tx_drop_sack', + ' ka': 'tx_drop_ka', + ' rttp': 'tx_drop_rttp', + ' nack': 'tx_drop_nack', + ' rdv': 'tx_drop_rdv', + ' other': 'tx_drop_other', + } + + ret = {} + + path = self._get_path_for_frct_flow_info(process, fd) + if not os.path.exists(path): + return {} + + ret['fd'] = fd + + with open(path, encoding='utf-8') as f: + for line in f.readlines(): + split_line = line.split(':') + + phrase = split_line[0] + if phrase not in str_to_metric: + continue + + metric = str_to_metric[phrase] + value = self._get_trailing_number(split_line[1]) + ret[metric] = value + + return ret + + def get_flow_allocator_flow_info_for_ipcp(self, + ipcp_name: str + ) -> list[dict]: + """ + Get the flow information for all N+1 flows in an IPCP. + :param ipcp_name: name of the IPCP + :return: list of dicts with per-flow information + """ + + flow_info = [] + + flow_descriptors = self._get_n_plus_1_flows_for_ipcp( + ipcp_name) + for flow in flow_descriptors: + info = self._get_flow_info_for_n_plus_1_flow( + ipcp_name, flow) + flow_info += [info] + + return flow_info + + def _get_flow_info_for_n_minus_1_flow(self, + ipcp_name: str, + fd: str) -> dict: + + ret = {} + + path = self._get_path_for_ipcp_flow_n_minus_1_info( + ipcp_name, fd) + + str_to_qos_metric = { + ' sent (packets)': 'sent_packets_total', + ' sent (bytes)': 'sent_bytes_total', + ' rcvd (packets)': 'recv_packets_total', + ' rcvd (bytes)': 'recv_bytes_total', + ' local sent (packets)': 'local_sent_packets_total', + ' local sent (bytes)': 'local_sent_bytes_total', + ' local rcvd (packets)': 'local_recv_packets_total', + ' local rcvd (bytes)': 'local_recv_bytes_total', + ' dropped ttl (packets)': 'ttl_packets_dropped_total', + ' dropped ttl (bytes)': 'ttl_bytes_dropped_total', + ' failed writes (packets)': 'write_packets_dropped_total', + ' failed writes (bytes)': 'write_bytes_dropped_total', + ' failed nhop (packets)': 'nhop_packets_dropped_total', + ' failed nhop (bytes)': 'nhop_bytes_dropped_total' + } + + if not os.path.exists(path): + return {} + + with open(path, encoding='utf-8') as f: + _current_cube = '' + ret['fd'] = fd + + for line in [_l for _l in f.readlines() if _l != '\n']: + if 'Endpoint address' in line: + ret['endpoint'] = ( + line.split(':')[-1].replace(' ', '')[:-1]) + elif 'Queued packets (rx)' in line: + ret['queued_packets_rx'] = ( + self._get_trailing_number(line)) + elif 'Queued packets (tx)' in line: + ret['queued_packets_tx'] = ( + self._get_trailing_number(line)) + elif 'Qos cube' in line: + _cube = self._get_trailing_number(line[:-2]) + _current_cube = f'QoS cube {_cube}' + ret[_current_cube] = {} + else: + split_line = line.split(':') + if split_line[0] not in str_to_qos_metric: + continue + metric = str_to_qos_metric[split_line[0]] + value = self._get_trailing_number( + split_line[1]) + ret[_current_cube][metric] = value + + return ret + + def get_data_transfer_flow_info_for_ipcp(self, + ipcp_name: str + ) -> list[dict]: + """ + Get flow info for all Data Transfer (N-1) flows in an IPCP. + :param ipcp_name: name of the IPCP + :return: list of dicts with per-flow information + """ + + flow_info = [] + + flow_descriptors = self._get_n_minus_1_flows_for_ipcp( + ipcp_name) + for flow in flow_descriptors: + info = self._get_flow_info_for_n_minus_1_flow( + ipcp_name, flow) + flow_info += [info] + + return flow_info + + def get_frct_info_for_process(self, + process_name: str) -> list[dict]: + """ + Get the FRCT information for all flows of a process. + :param process_name: name of the process + :return: list of dicts with per-flow FRCT information + """ + + frct_info = [] + + flow_descriptors = self._get_flows_for_process( + process_name) + for flow in flow_descriptors: + info = self._get_frct_info_for_process_flow( + process_name, flow) + frct_info += [info] + + return frct_info + + def get_ipcp_list(self, + names_only: bool = False) -> list[dict]: + """ + Get a list of all IPCPs. + :param names_only: only return IPCP names and layer names + :return: list of dicts containing IPCP info + """ + + ipcp_list = [] + + if not os.path.exists(self.rib_path): + return [] + + for entry in os.scandir(self.rib_path): + if not entry.is_dir() or entry.name.startswith('proc.'): + continue + + ipcp_name = os.path.split(entry.path)[-1] + ipcp_type = None + ipcp_state = None + ipcp_flows = None + n_flows = None + + ipcp_layer = self._get_layer_name_for_ipcp(ipcp_name) + + if not names_only: + ipcp_type = self._get_ipcp_type_for_ipcp(ipcp_name) + ipcp_state = self._get_ipcp_state_for_ipcp(ipcp_name) + ipcp_flows = self._get_n_plus_1_flows_for_ipcp(ipcp_name) + + if ipcp_flows: + n_flows = len(ipcp_flows) + + ipcp_list += [{ + 'name': ipcp_name, + 'type': ipcp_type, + 'state': ipcp_state, + 'layer': ipcp_layer, + 'flows': n_flows}] + + return ipcp_list + + def get_process_list(self) -> list[str]: + """ + Get a list of all Ouroboros application processes in the RIB. + :return: list of process names ("proc.<pid>") + """ + + proc_list = [] + + if not os.path.exists(self.rib_path): + return [] + + for entry in os.scandir(self.rib_path): + if entry.is_dir() and entry.name.startswith('proc.'): + proc_list += [entry.name] + + return proc_list + + def _get_eth_flows_for_ipcp(self, + ipcp_name: str) -> list[str]: + + path = os.path.join(self._get_dir_for_ipcp(ipcp_name), + 'eth') + if not os.path.exists(path): + return [] + + eth_flows = [] + + try: + for entry in os.scandir(path): + if entry.name != 'summary': + eth_flows += [entry.name] + except IOError as e: + print(e) + + return [] + + return eth_flows + + def get_eth_summary_for_ipcp(self, + ipcp_name: str) -> dict: + """ + Get summary statistics for the eth IPCP. + :param ipcp_name: name of the IPCP + :return: statistics in a dict + """ + + str_to_metric = { + 'Active flows': 'n_flows', + 'Total frames received': 'n_rcv', + 'Total frames sent': 'n_snd', + 'Management frames received': 'n_mgmt_rcv', + 'Management frames sent': 'n_mgmt_snd', + 'Bad EID/SAP frames': 'n_bad_id', + 'Delivery (N+1) failures': 'n_dlv_f', + 'Buffer alloc failures': 'n_buf_f', + 'Frame read failures': 'n_rcv_f', + 'Frame send failures': 'n_snd_f', + 'Socket rcvbuf (bytes)': 'sock_rcvbuf', + 'Socket sndbuf (bytes)': 'sock_sndbuf', + 'Socket ingress (bytes)': 'sock_ingress', + 'Socket egress (bytes)': 'sock_egress', + 'Kernel frames received': 'kern_rcv', + 'Kernel frames dropped': 'kern_drp', + } + + path = os.path.join(self._get_dir_for_ipcp(ipcp_name), + 'eth', 'summary') + if not os.path.exists(path): + return {} + + ret = {} + + try: + with open(path, encoding='utf-8') as f: + for line in f.readlines(): + split_line = line.split(':') + + phrase = split_line[0] + if phrase not in str_to_metric: + continue + metric = str_to_metric[phrase] + value = self._get_trailing_number( + split_line[1]) + ret[metric] = value + except IOError: + pass + + return ret + + def _get_eth_flow_info(self, + ipcp_name: str, + fd: str) -> dict: + + str_to_metric = { + 'Sent (packets)': 'p_snd', + 'Sent (bytes)': 'b_snd', + 'Send failed (packets)': 'p_snd_f', + 'Received (packets)': 'p_rcv', + 'Received (bytes)': 'b_rcv', + 'Delivery (N+1) failures': 'p_dlv_f', + } + + path = os.path.join(self._get_dir_for_ipcp(ipcp_name), + 'eth', fd) + if not os.path.exists(path): + return {} + + ret = {'fd': fd} + + try: + with open(path, encoding='utf-8') as f: + for line in f.readlines(): + split_line = line.split(':') + + phrase = split_line[0] + if phrase not in str_to_metric: + continue + metric = str_to_metric[phrase] + value = self._get_trailing_number( + split_line[1]) + ret[metric] = value + except IOError: + pass + + return ret + + def get_eth_flow_info_for_ipcp(self, + ipcp_name: str + ) -> list[dict]: + """ + Get flow info for all flows in an eth IPCP. + :param ipcp_name: name of the IPCP + :return: list of dicts with per-flow statistics + """ + + flow_info = [] + + for fd in self._get_eth_flows_for_ipcp(ipcp_name): + info = self._get_eth_flow_info(ipcp_name, fd) + if info: + flow_info += [info] + + return flow_info |
