From 5123934ccc0b6a082a130cc3487cb87b893123d7 Mon Sep 17 00:00:00 2001 From: Pc Date: Mon, 7 Aug 2023 22:20:41 +0330 Subject: [PATCH] ci: Add grafana dashboards for dotnet core --- .../dashboards/ASP.NET Core Endpoint.json | 908 ++++++++++++ .../monitoring/dashboards/ASP.NET Core.json | 1307 +++++++++++++++++ .../monitoring/grafana-data/data/grafana.db | Bin 1536000 -> 1703936 bytes 3 files changed, 2215 insertions(+) create mode 100644 deployments/docker-compose/monitoring/dashboards/ASP.NET Core Endpoint.json create mode 100644 deployments/docker-compose/monitoring/dashboards/ASP.NET Core.json diff --git a/deployments/docker-compose/monitoring/dashboards/ASP.NET Core Endpoint.json b/deployments/docker-compose/monitoring/dashboards/ASP.NET Core Endpoint.json new file mode 100644 index 00000000..9859cc9b --- /dev/null +++ b/deployments/docker-compose/monitoring/dashboards/ASP.NET Core Endpoint.json @@ -0,0 +1,908 @@ +{ + "__inputs": [ + { + "name": "DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY", + "label": "Managed_Prometheus_jamesnk-telemetry", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "9.4.8" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "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" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [ + { + "asDropdown": false, + "icon": "dashboard", + "includeVars": false, + "keepTime": true, + "tags": [], + "targetBlank": false, + "title": " ASP.NET Core", + "tooltip": "", + "type": "link", + "url": "/d/KdDACDp4z/asp-net-core-metrics" + } + ], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-green", + "mode": "continuous-GrYlRd", + "seriesBy": "max" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 50, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "p50" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 40, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.50, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m])) by (le))", + "legendFormat": "p50", + "range": true, + "refId": "p50" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.75, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m])) by (le))", + "hide": false, + "legendFormat": "p75", + "range": true, + "refId": "p75" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.90, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m])) by (le))", + "hide": false, + "legendFormat": "p90", + "range": true, + "refId": "p90" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m])) by (le))", + "hide": false, + "legendFormat": "p95", + "range": true, + "refId": "p95" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.98, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m])) by (le))", + "hide": false, + "legendFormat": "p98", + "range": true, + "refId": "p98" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m])) by (le))", + "hide": false, + "legendFormat": "p99", + "range": true, + "refId": "p99" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.999, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m])) by (le))", + "hide": false, + "legendFormat": "p99.9", + "range": true, + "refId": "p99.9" + } + ], + "title": "Requests Duration - $method $route", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "max" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 50, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "All" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "4XX" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "5XX" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-red", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 46, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\", status_code=~\"4..|5..\"}[5m]) or vector(0)) / sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m]))", + "legendFormat": "All", + "range": true, + "refId": "All" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\", status_code=~\"4..\"}[5m]) or vector(0)) / sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m]))", + "hide": false, + "legendFormat": "4XX", + "range": true, + "refId": "4XX" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\", status_code=~\"5..\"}[5m]) or vector(0)) / sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[5m]))", + "hide": false, + "legendFormat": "5XX", + "range": true, + "refId": "5XX" + } + ], + "title": "Errors Rate - $method $route", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Requests" + }, + "properties": [ + { + "id": "custom.width", + "value": 300 + }, + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-YlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Route" + }, + "properties": [ + { + "id": "links", + "value": [ + { + "title": "", + "url": "/d/NagEsjE4z/asp-net-core-endpoint-details?var-route=${__data.fields.Route}&var-method=${__data.fields.Method}&${__url_time_range}" + } + ] + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 9 + }, + "hideTimeOverride": false, + "id": 44, + "options": { + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Value" + } + ] + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by (exception_name) (\r\n max_over_time(http_server_request_duration_s_count{route=\"$route\", method=\"$method\", exception_name!=\"\"}[$__rate_interval])\r\n)", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{route}}", + "range": false, + "refId": "A" + } + ], + "title": "Unhandled Exceptions", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "method": false + }, + "indexByName": { + "Time": 0, + "Value": 2, + "exception_name": 1 + }, + "renameByName": { + "Value": "Requests", + "exception_name": "Exception", + "method": "Method", + "route": "Route" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 42, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "textMode": "value_and_name" + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum by (status_code) (\r\n max_over_time(http_server_request_duration_s_count{route=\"$route\", method=\"$method\"}[$__rate_interval])\r\n )", + "legendFormat": "Status {{status_code}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests HTTP Status Code", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 12, + "y": 13 + }, + "id": 48, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "textMode": "value_and_name" + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum by (scheme) (\r\n max_over_time(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[$__rate_interval])\r\n )", + "legendFormat": "{{scheme}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Secured", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "purple", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 13 + }, + "id": 50, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "textMode": "value_and_name" + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum by (protocol) (\r\n max_over_time(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route=\"$route\", method=\"$method\"}[$__rate_interval])\r\n )", + "legendFormat": "{{protocol}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests HTTP Protocol", + "type": "stat" + } + ], + "refresh": "", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [ + "dotnet", + "prometheus", + "aspnetcore" + ], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "definition": "label_values(http_server_current_requests, job)", + "hide": 0, + "includeAll": false, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": { + "query": "label_values(http_server_current_requests, job)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "definition": "label_values(http_server_current_requests{job=~\"$job\"}, instance)", + "hide": 0, + "includeAll": false, + "label": "Instance", + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(http_server_current_requests{job=~\"$job\"}, instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "definition": "label_values(http_server_request_duration_s_count, route)", + "description": "Route", + "hide": 0, + "includeAll": false, + "label": "Route", + "multi": false, + "name": "route", + "options": [], + "query": { + "query": "label_values(http_server_request_duration_s_count, route)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "definition": "label_values(http_server_request_duration_s_count{route=~\"$route\"}, method)", + "hide": 0, + "includeAll": false, + "label": "Method", + "multi": false, + "name": "method", + "options": [], + "query": { + "query": "label_values(http_server_request_duration_s_count{route=~\"$route\"}, method)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "ASP.NET Core Endpoint", + "uid": "NagEsjE4z", + "version": 10, + "weekStart": "" +} \ No newline at end of file diff --git a/deployments/docker-compose/monitoring/dashboards/ASP.NET Core.json b/deployments/docker-compose/monitoring/dashboards/ASP.NET Core.json new file mode 100644 index 00000000..b435130d --- /dev/null +++ b/deployments/docker-compose/monitoring/dashboards/ASP.NET Core.json @@ -0,0 +1,1307 @@ +{ + "__inputs": [ + { + "name": "DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY", + "label": "Managed_Prometheus_jamesnk-telemetry", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "9.4.8" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "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": "ASP.NET Core metrics from OpenTelemetry NuGet", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 17706, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-green", + "mode": "continuous-GrYlRd", + "seriesBy": "max" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 50, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "p50" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": false + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 40, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.50, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\"}[$__rate_interval])) by (le))", + "legendFormat": "p50", + "range": true, + "refId": "p50" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.75, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\"}[$__rate_interval])) by (le))", + "hide": false, + "legendFormat": "p75", + "range": true, + "refId": "p75" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.90, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\"}[$__rate_interval])) by (le))", + "hide": false, + "legendFormat": "p90", + "range": true, + "refId": "p90" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.95, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\"}[$__rate_interval])) by (le))", + "hide": false, + "legendFormat": "p95", + "range": true, + "refId": "p95" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.98, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\"}[$__rate_interval])) by (le))", + "hide": false, + "legendFormat": "p98", + "range": true, + "refId": "p98" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.99, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\"}[$__rate_interval])) by (le))", + "hide": false, + "legendFormat": "p99", + "range": true, + "refId": "p99" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "histogram_quantile(0.999, sum(rate(http_server_request_duration_s_bucket{job=\"$job\", instance=\"$instance\"}[$__rate_interval])) by (le))", + "hide": false, + "legendFormat": "p99.9", + "range": true, + "refId": "p99.9" + } + ], + "title": "Requests Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic", + "seriesBy": "max" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 50, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "All" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "4XX" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "5XX" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-red", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 47, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "min", + "max" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", status_code=~\"4..|5..\"}[$__rate_interval]) or vector(0)) / sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\"}[$__rate_interval]))", + "legendFormat": "All", + "range": true, + "refId": "All" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", status_code=~\"4..\"}[$__rate_interval]) or vector(0)) / sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\"}[$__rate_interval]))", + "hide": false, + "legendFormat": "4XX", + "range": true, + "refId": "4XX" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", status_code=~\"5..\"}[$__rate_interval]) or vector(0)) / sum(rate(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\"}[$__rate_interval]))", + "hide": false, + "legendFormat": "5XX", + "range": true, + "refId": "5XX" + } + ], + "title": "Errors Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "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": 8, + "w": 6, + "x": 0, + "y": 9 + }, + "id": 49, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(kestrel_current_connections{job=\"$job\", instance=\"$instance\"})", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Current Connections", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "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": 8, + "w": 6, + "x": 6, + "y": 9 + }, + "id": 55, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum(http_server_current_requests{job=\"$job\", instance=\"$instance\"})", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Current Requests", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 12, + "y": 9 + }, + "id": 58, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Total Requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-red", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 9 + }, + "id": 59, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "value" + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", exception_name!=\"\"})", + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "Total Unhandled Exceptions", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 12, + "y": 13 + }, + "id": 60, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "textMode": "value_and_name" + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum by (scheme) (\r\n max_over_time(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\"}[$__rate_interval])\r\n )", + "legendFormat": "{{scheme}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Secured", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "purple", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 6, + "x": 18, + "y": 13 + }, + "id": 42, + "options": { + "colorMode": "background", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "max" + ], + "fields": "", + "values": false + }, + "textMode": "value_and_name" + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "expr": "sum by (protocol) (\r\n max_over_time(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\"}[$__rate_interval])\r\n )", + "legendFormat": "{{protocol}}", + "range": true, + "refId": "A" + } + ], + "title": "Requests HTTP Protocol", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Requests" + }, + "properties": [ + { + "id": "custom.width", + "value": 300 + }, + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-BlPu" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Endpoint" + }, + "properties": [ + { + "id": "links", + "value": [ + { + "targetBlank": false, + "title": "Test", + "url": "/d/NagEsjE4z/asp-net-core-endpoint-details?var-route=${__data.fields.route}&var-method=${__data.fields.method}&${__url_time_range}" + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "route" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "method" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 17 + }, + "hideTimeOverride": false, + "id": 51, + "options": { + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Value" + } + ] + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "exemplar": false, + "expr": " topk(10,\r\n sum by (route, method, method_route) (\r\n label_join(max_over_time(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route!=\"\"}[$__rate_interval]), \"method_route\", \" \", \"method\", \"route\")\r\n ))", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{route}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 10 Requested Endpoints", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "method": false, + "route": false + }, + "indexByName": { + "Time": 0, + "Value": 4, + "method": 2, + "method_route": 3, + "route": 1 + }, + "renameByName": { + "Value": "Requests", + "method": "", + "method_route": "Endpoint", + "route": "" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Requests" + }, + "properties": [ + { + "id": "custom.width", + "value": 300 + }, + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-YlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Endpoint" + }, + "properties": [ + { + "id": "links", + "value": [ + { + "title": "", + "url": "/d/NagEsjE4z/asp-net-core-endpoint-details?var-route=${__data.fields.route}&var-method=${__data.fields.method}&${__url_time_range}" + } + ] + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "route" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "method" + }, + "properties": [ + { + "id": "custom.hidden", + "value": true + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 17 + }, + "hideTimeOverride": false, + "id": 54, + "options": { + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Value" + } + ] + }, + "pluginVersion": "9.4.8", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "editorMode": "code", + "exemplar": false, + "expr": " topk(10,\r\n sum by (route, method, method_route) (\r\n label_join(max_over_time(http_server_request_duration_s_count{job=\"$job\", instance=\"$instance\", route!=\"\", exception_name!=\"\"}[$__rate_interval]), \"method_route\", \" \", \"method\", \"route\")\r\n ))", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "{{route}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 10 Unhandled Exception Endpoints", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "method": false + }, + "indexByName": { + "Time": 0, + "Value": 4, + "method": 2, + "method_route": 3, + "route": 1 + }, + "renameByName": { + "Value": "Requests", + "method": "", + "method_route": "Endpoint", + "route": "" + } + } + } + ], + "type": "table" + } + ], + "refresh": "", + "revision": 1, + "schemaVersion": 38, + "style": "dark", + "tags": [ + "dotnet", + "prometheus", + "aspnetcore" + ], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "definition": "label_values(http_server_current_requests, job)", + "hide": 0, + "includeAll": false, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": { + "query": "label_values(http_server_current_requests, job)", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_MANAGED_PROMETHEUS_JAMESNK-TELEMETRY}" + }, + "definition": "label_values(http_server_current_requests{job=~\"$job\"}, instance)", + "hide": 0, + "includeAll": false, + "label": "Instance", + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(http_server_current_requests{job=~\"$job\"}, instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "ASP.NET Core", + "uid": "KdDACDp4z", + "version": 5, + "weekStart": "" +} \ No newline at end of file diff --git a/deployments/docker-compose/monitoring/grafana-data/data/grafana.db b/deployments/docker-compose/monitoring/grafana-data/data/grafana.db index ff30cefc348b94e4bde830da46f26d76d264df4f..710a89a4eccb83fdb3eb3b0bebb4b32a759a5041 100644 GIT binary patch delta 71152 zcmeHw3w#{qb+1c>y8tB_)KAG)a@&Uw`H1SDYs0HuTb4dXp9?NiHEN2~Bbf0RrSUZGY|U<^I2U z?X0wtc4gT(VM%7Kd7nAo`Of>C@6MkdzVpt}dsj9+RaWNsJhoG1Wo51R^#mPHJ$B>^ zYpSAUE1Q0Ee~o*fw&^#{os8nF{(1{{uIV~vSw&ZQQcaCT)9Gj;UUqlO%8JV!$H&#w z#PDb|ok^r7x;yGB1{{i%9t|g?lrnrmP0>r6n<^{TWDhgzLH>j944->v*iqHoT*drj8S{Uce`J2c{EGP} z=7)goX{NO%`19JbvdW5D2UA^9?$~mLll*Gh(TS^nR>u4Xu6>hvmH8R-54iff3{&l> zt*WeRaxmJjle~G4qocEq`A*KI%>QDZW4?nM9%IN`YpN^V%=)Sdhl5$C{jR0I&Tj43 zqy2WBd-D-TM>C#tdl~c3%rBT1nC~#(WWLILmiZ`iJDzidxs6$0S?1_sq;xW_X5>Ul zW!7m2lBvX)ni*Bc(+z8JU^$~CGPr{2re~eD%RSlw+vQ#Ka;JXzxflMz(bwEu!Mu$D zb)3O>{|oar^EzJr*R|(<^n#(in==eo)4Gd+CN}E%$#GMVF-Us<>$Wc=05M7?%d!Q z+Pk}d*OqXWwxMlu{llW4^{bgn|4s=4s|@ z_@+tb3I-3^x`+1$ZdPiYm337!eO+Zk>5dS&y_rp-y=b|?9>HRadiDW5E3 ze#!h1^GW6j=6U9MJY@%Sq&?5~-Dn=m|8-JodBt2`*IY5<+s-{PP`-`B%kvCNBOMkH zI{k6p{p&HE4&!=sXWhz1CcPN@RBOXVO92tA}90Sh^%s=Hzaz! zVnB@qgK|iWh#cpYM4wOQf3I32*5`v+KD2Dt&AtI^aARqGaL9eX(gNi5#d_?w1 zcwR`6B7Sek7j($vuRM1ZckbWbta+Nb=6r#A{H>aAGuNCaX!2dnwU0N~ z{pUNtU&EK1>z{R2VI&>Qzti9Qn13hEpVo7iRSj0YP&rVR=4eNUjs+Ya1OQ|4edlILEp_Z0ie{gdRiUlb4N{@Zn|776LT z2|HH(Mcyr)%B8(xzxBvTjr5AW?Z63*@`}A}|4NMp$Xj&{b>!ZEs$YNZ)nC-N)Hh+i zO`NWvQjldTNzGgJ?wwIaVTPGonf*+N@iKkPdd3Yc<;Tnqn8%p^!hDIjlewMAFgG$g zm`%)brj==6o@E|k;><>-()pvA{{uHY>YU~)w&M*O%D3TnUHMl0t|{Mw-{qU})4mBm z%(Z1@)fJG*Wp~qm%FFK3|M`&q&)KSqy7ICQYQJZ+-_zRfom7xdQ+8hQ0s31$rTyNa z{Z7)8x8tY9F+u-4MSo7xpA#hhPW^+^Z1qrCom6v;^Y7~as_|!a>uV~Vr|Lh__=j~5 z)l4$o_3t#Ts{OZ`A2Z)*xUKQ_+P|s!BPQN3(0F~VSbe;S)b}?0viA3@zvt|)`}c-# z)gG<>V$;v+Z*5#zTVFlYw6pFz4IitmpZPz0r~NQQ6&mm16*h z-vUs!!*_92;0WcUtFggtJNzNzAx}2sJml<^Rdri%HHFr8^#=#5>Ne?zHE^4=uRX(6 z)eUUa-fBB~dZ4Nfe2BiZA$#qe;Yu>@6nlt)r(z`Z3ywXdjb({z>vqz5RVBH2Chuygm0; zU1Rfs)l^beGOy#;@d;Bis`+{K7puY*uCnh!F8(opc6&p8+5Woyb(KwbACCl8uMFjb z4TxbsD?|ceR+POwY!a{FRRXdo3jrbt&b5`wv)_M#9KX#OomR(^F)8I4j7YJx+UJ2r ziXD&Jok=8*_3&KZq12(co2t6*@PxZ3l^D;ceQv7wClvGFVeM$IyGOs)?T$%dH8y+{ zN^sAZbZR&OlWI5<9aDQ!Don3*W>^_dNf{Vf!)bEcOO9%B@@OKw@sQ_`r_UXYr!!Jq zR*hZl(Ot%ldP-K4+I?|pOr=N3+h28dihb@w9vvhd6#AS)9{fLhLjPNP+96M`4rp&L zX}rb7Pajh!@X0r^K^2M_$4P926F62-_%I7COJE~DJ`ncH!Jw*!S=-0FB3&@cF_^} z`_hOk{fL~o8it=fK|Xjm?B@kvC>&rp4nIJ?#D;>hpOphaugLj*O2ls;k?(zjj>r)* z@RFnD;4u(x3S=#hr&4M>GYms8uF8}e(;x|*Y%`w0Ollm{$RsJh7*u2>=w%hJ>SF~} z1W73&fek1MCZxcLAspdI*NL{3-ot0EuC;-xs9{m?b8OhhsjLu$jw|}OAQWAW7a}kP zWJxjS^7qbNWH@WGa7O&FaTKq>`XV500pH1rqR-Fzf`I@p3SLg(I1A1{y~uD@XW>-B zAxYv?iS=?Abzt6$k&wM?Boy*VnD?sB$6Ihde39X-vcV~YfjEw1gA%W>pjLsE!V!_> zz&Ro+$H|gt@$m26dy(O+%)+U{TvdF5AR7?_fYT4sltf-;6<*=Ou!A9LBnzJ(y~uDv z%eAIFENZ_J46s2(kTLEdnGN~Fn2@T%c>^IB&{7tkH(gvf8_P{N&rHbSh!PecZ2}?H z3)#&JY)JJ5Sef^6Ks6sxf`Wxlp0o@(Z@p$o_|C?|r?ce~%Ao4;Xo?{^c6}Tk$P*@0#q@;)xmy~C}*G2(ZM%GlgR$F3JRaHghAUwgqz_~&} zg$?=S5E}vkOF@ATs6s>&qnaCb-$W9kl!{a(0X^sAUHJK!3qK!i!Ousa-ISGe*KaI? zH|$|1#cX3PbH45TAI^uIN#_>lil#T4o@)9`Q@m+Y)4FAiZ#4d8BWa8^4mEZ*yw>pT zh6fssHoUK)z5dnu|5ks0{b>D0=KsJ*d9$wiimJN0{ZMeB3e|LHch=>c=*pg0TjRFx ztg-K`w(qR6?_6fzS!v%{Vc%J9-&tngaoKk|?K>Uzop$?9n|-I%zSCmgX}0e$_8q5v zr^&w4Xy0kD@6_9O>g+qU_MIC0P7bcC>}M+NI~BGaro0gYx3bQlzoxG{zWvUcFTYjZ z{9m7~pWN4?5c4)-1iN2_E-H|ds*GO zb!Q%ItMmEl>dKpHYirlk!hy}goy}5@x7|rfZVI@(s)6qUpVfNM>g=?iu9BW1nDrEBsua z2e?t9&`)+I6gsaGNlA`oCdlchTYpN9e75-t@`)ci_K}UxcQ%r%<&M_X!^7!`bVeQ9 zqegJ~XjD=6YH!;L=skVpu@5<22dILR&=l{qXK>Oprav0mcx)Um>GM!+9A^%Cl77x} zxX+V>N*q0f#|_0|@NrY6eGr$WR7trp9>Zr)C25K{e(hY{Oy8)#%X31CjjN>PC1*c5 zBer)mihZ7wK#&)F;Ox0&0oUujwdG~$vg+ZoG;AOB@~XE^e{>(ySmtol*7@q1&ODfQ zR^@SSl}7AhjaY**Vi>Ty&kaXhkJe3td(;0YFaJEYd$D~O+dbHD&M}4U1K1wKMzDPv z+h?%-KDLLjeHPop*gl8t5p47s_hFmBX5RaI_?tfSgV-jq-GS{awhv)je;0o4#ztRu zC$`hr&P+6A`N zRPEPkmkeF!Tut8G=jtJke5qqqA7X;AXX7JoeJ;62AVUj0DjTsKGBy!(&=lV)%Jd+?#Zg<{LfmuqPd8&2&{$RhqU!Y$grAE{YouiX5 z@lBgww^a<2ADpGffOVL{Ic$7{hO7_Fhb_wE%uk*lThoe~mQzuUm4H3$Q8VMIxQ?dy z_*fV*wM4{CJq2m^h?ELTBP!x;h_z{EmX1MLv%eH~1mQD^-gHuxqmihpxJT5uHVlb4 zeM%yH6t_{%g_AL5Qz9OTju38>Q_MyC3i8BvTh?p1C!4>~+EPRDjquIl5I$W5!le@< zJs=ykM~{TUpftY}e~!b#%up(vjsAmc5nNPLpoPP|y_#1h`{f!TGuWS;v>oi~adnX0 zk2Y6t-L}cS$$AY%&MeZ#AzdSb8z$qK>YMb)l02&J!=S+T;~9*P$71BsjjjM`InvQS zEk)t%iN+vesOtt`#W8WD6WPP=9z#x~AqkB0iVBKR)VK_(*6YSxaYMqLh|20*cS?{W zIX9WZN`82zV?CWrD+M}kkbj9J2x}w#GQ19d?iv`PJK8t#eY%XnVfq<#-XCrD*K~VD z-81HQUbR*f`$bXv>_jXrk! zC~2Lh7NRDWdiwO6M>Cn^FdY{-@6=Q(kxCarknS7zxD)Z7UiS&izC@~r>s*gUF zd4nuwnK5HGOR-}(VRH;(8qL9WOQSWL#mzZd(?yIHay7F5Swwd}6r-N<>kMqz;zbh$ zQ4QbX>OZo>pVkLUk$##UrX?wqBK=yb+*~;c zrAWV((=sQD@VeM<@pfMf4yE9GR`LUx*Q<)tBa$`+fN4XHv^yO7y zNj^4$C|jJmE#|jUR#i}62DF?FPED~Ih8{RfJqhIHr&^aeLWJLe(969i+T304o-|a@ zG1V4g#J#q-B2^{U?l7W=YY|MG5lMu`tVb2;aV-c41z@ca4K%};^pGA!)S`;DMv%}$ z9{q81TdfYk)RY#hA@{uGXlS-Dx>to!qAKM0H(QTum|UBK$>ew{i6K}3l`fck)bfKG zNi9F0p+WkIwA;Dj!XUQWO)b7m0+z?Sh}wD+20L=sTFBMNb+-W~kZ3bc$jMhacXa9I z6VBi{bo`K!ik)l%s)t<7R4*ehy#kll4I5kxVNSMeCf|Lnb48b38!+Q~hB}z;bAygZ z)9al*GK-2E-w%vU`n9?4$a#Ekja7~yqdCHv1+OSpc)Up)F zu2(ykRT~qVVoAF@IM3Y+4rHT!AjzG>u4NTIZj2l2v}hJF9HJm1_CzVj~s1gi{_DV?}7ge zhMpm}-5Mhxr+?b{W$F`hZk5MT;xR^J7BKZk5Ge6bA1P*|tj1zDW+NJgOwmqKxeISE z+!scMPgdt)2)Da^U5z1{h}6fdc<`ew)dx>TmCPufYB-2|97i2U+Jx63=(oSmy3UHE zm@ykX!hmE%8b^lF)KniCI_zB5Vd!AC*bpK^dP$x|$9XJ`LXp4QyPd7asJ0Ing*&dNhFml6EOD zdH816Wosujv1O*|DA6>s-zIiJ>%=n-(D)Mt>#==KmrVif*kn4)bCcxo7R~*do0ev2 zQh8KV(U3Y>k!4D(tnx{DaqbhXM7Jucl4>bZ*LG-wGc`rOJDZJ0PQT<>-o8JsyY3bD z7BgWkO&-3*bs71i_q*0ld#Eqh#DG3}7Lq{vihAl=10$2hrSNI$xEb`)3_*Jmo*tt> zWCSS8-ez2F*&KkxQdR>^>AmGpUH zDqQ@^)Up;Wg9Y zaru~gD6j`I2%TC@uk~ zfxPjcvxbHd#qyyTd2%xoY=F<;7@N=}I^pBaK~3?0JMIirPe5Z$oYW6et(YFH)h^dO zPh$Ieuwi~1(^e1VQx|T5`Pp#~q{1Ckts3?eq(NHa4oz>RzQ6WLp6f@>@RO}! z>i+9kF{k#W+g_I!Bp#-E$*G${0az}=S4IndUxo28H} zQ-)-jDU^cq3nj}&XffS<#qcVd>0|R@YKGH_d>%~0nOX#KE^{p8mZT3e3)&V6Ma_nH zNns^VjJK^>z=?Ps;KDt40l+m~ekml-wF%1Xk~%sffQ=k%oe^h;JKhgqp$GK!Gmey%{;zX z%jjH|tG@2lUALuV92)!3Ljl=%h&CV>+my<+=}XBtIk{t|wFP~sl#EkK#-R-Hw?7$Y zm9EU5{(AesY#Wq*;)PB%DP`Ntn{0Ful1)n4Hl=KvQnpPg+s0@sRm!%}I&-|2vu(Qa zX4}wurt-?Vvbq;4>(Ec+KP!e_yNW>%iD2;b_cv%gBx+~(kg!th@+Ju9_9!?@nqPEy zu0z&hdUGm~R1zl8wLdyOZU z-ha0p5~|B560uB_md_G*mCMzIY(cAuU2e7@Of=fzg76Qty2)sg&u4 z&IK1Uv#6BmR%8{MS-YV3h(HaJR#K2GWx6d99?#3!e^Ju$Y;l42UZ&fimUs;DPpbfK z&~l||(mQq0r)4w!y}$whbOO4FU2?UGB5sZl19gm>MSoT`t5qRzeywolt13WhSJKUM zZXv~XdO zK7R8T7TxzBtyh?(QCf{wJ5*bA90J5zo~b_niQ^t;Zh!=R$crt))+?X(Xq6iQ~1-4VO&yd^f`NImP{RK|D{H z`05$H7ri>%a<|axa4jHpmfUl)t@C#`Y2DuEW5GoKLK8czQbVoMP+vUYcO+xoj;}(} z)oI}JJ)W+fgR+8h)fbPnQm*>4-*rE9XBM)*oBC$k3{?{yEN$NGrL2r^rj_yV zuYO1?CPw4t`5SLszzp{yrr)wcGTiC&771>l`G5toSOeS(o8f-2XP%Wx3R2VGrA+rj zJ@e^}O9uJ*X1(i;&&&kDcez&5F5DK>pMr(sQ1>t)l@%P}E^@r7y8QxF_ZOG&T*~U# zsv1l${`u6@7l-)VI)?KKADq{VOIiJS+c}zb>ZPoH6ltOBLAK>eF(rV-C>2Q3(@>awTg0I%4ElVKg1gQ9o5yKZRtlbp6_2CY!A_X^;@c)aR~AqxF6+<$Ix6*KB)dGyqv> zsiMvEFI9w&QyI#O>2NfZeYcDWIeQylY4}Qgq;6el(NwzFD(%s>M3LgsqN%^r%h;9{ zO||OxX#%Nb4WHNIuBAm&mv*t-(xRzLi_g-csf91ryi|*(9yJ$=Ui_k|c~%=bOm(2@ zvOh0t`qPG^b!)1>SMhY&pJU0yKjiPKYcZFc{YYB%dzGLf1z9DeV7>EjFvNyKLXh?O zB~{|Yh`HkG6!fei^G%t6K!E~ zjn7#<&r-cud7KaV!dNyNYs|9(kF~QySb~@31AbpX@$pzpnPaiw?^m2Fd{c+-s%y>; zU|8jXs$a&6#y%;GHJH@^8x9A;tluA!MOjohkqeq@2LE7FX#hnp$4P92140D_3lvKt z)?1EXWn*AI7*w&;akllVR&R3w2Jq~5#vH)AkIMqq(3T=tAUO;I5d1zLi?zr@Y{VN9 z{DQ!XIBX8!_g~ZoaQdRoK%?i-uwpdB98QzlUUF2wyK~Z7X?ihpQq>ZRcF@Hb==wNk zw>xdap$5Z}DD!M25(%<`%KI^&u%>x9#4C~%3ULutR{Szi1ZP*J^6dA2SQ-(n8~GAj zgH72Hi3Ge6Me&Jj*yjU>JT z1V0v}53{_F&JkXLxC%)jmKQM^{s8Cofv4H#$P1-8qL0Y%`DhX|xR$2hIflxbzS^*- z_CKospmL{U2+l{=0R_)xj@3ufVI}P41p#8s53NE7Lga-NRb-`rH{g$`0a*@Uc`3oU z7R>Aix4p;p13?i&ejZ#V667F@)v&^bIX=RALw+t0=0hQ`Bri%oP=j8X_lJFKkfUmL zK;YSs3avX33i`uxAQbjVd{)6byRXw6zz^3!3m3zj;AI70n8yHyL#!0RlhiODlrR$m zAt|fi-SFNVz$MiN_I22hFZv@9-lwoW-bc+N9?Itj`wBQe|?Gm&maG7S^UdB z8A@*;z=}#x0R2-FRfP!QxriL}`U46KsS^H|R`=c4n#DhyFp@V6jaT3xd4z}v{v!!K zRtZEzuNs0N2#a?7?|5(0|Hu;SRrQWG_{|!xs(-%jXl+yVpHywD_+fd{(FXt7zw&2p z?J@`GY=@+TxG;PyY`~8nL6)Hk%K}7nC?xwhRSof~WU5y`dPWjMiK(=^Mz&B?-gZ<3wncmfM>C!3YIeP9zGLsTad95z=#BR zjuokX4qXP%5al2n3@EZ34oGrHu>1-?`a2D>rX0w~X=gP%3m`CJE=Zr_2ZbYb=0*(08N&Og2{aNmLUJLlcGDi=Tj#8ZGG!7v;0 zhd^Y0PLLxZJ`82v0_Y3HlU9+CU6zF`qKFaB>*d*?z+oi)D(GDaN^CF~4)UA=%9E6f z2U%pL1sO;y9PvkFk@XAE5-@c{HYD*X>*FGRDd-CZg`i+T_K^!Th>;apfWrQ8P!d8S z%PAo+a8c!;!1!b~z$w89faN7AI}7i=KmeUsZUMA2qKcd-K%#Ied?*4R4#0B^CzlfB z;8ekYdTjvh)c~4r7E-3Q!pJY0<()sT$$57BG85{%kE?-jNQ}TW8VLcH7+ZL`MHR{j zk5Tmsyc&?g=D7Yq(x5ImN%@;iDH4=rMfOt9GW`+4ssQ_639|m6->=9aHNtzjnRe|A zwVb*e%9~b~IZ4xMxEWfT_%kQE%>g>QGXhN{#6d)bd|A@Z zxCiz=e2Net;b2hCilo0Ucy{tWZ%_z8P4+3Vkq)8 z3A!!sjLBUNZz;jBwE=pMFAqR9mO}eD=Px9nO|`(a?^`>JWsEcGaFi}{hn6DwS4h|M z+H=Q}-1?HEzR-ff(rQE2g7k&dV$$&~6t#K*!G*2GEUh-Ac_;LR7SD6Fp-Z>!axlkr zLYKNuVij__2zgKL)KA2zCSB=#xQzKj=0@jloDV~r{HgD|Co45pD>YWjj3TSsXawftuwd?_wqmYF#u~PXv3?nA?cSI)vulm(Ce2k~ z&9W6d!dU)fL>eDa(KN1)49(j=zSLN4RtL6HW3`wRR%63Q6VZ6jm~?75aY9WEXOL*C zFK%3FtfqG{N4eMmDK?GF3evOek>a)8gD~3oof=mXZ{?RC*!az+!s3TnukusWY3_g@0=z zg;otvs%CZ=dGB^+yS%_IE#%ZqogT9r@M9y+4mVi9r?BeNK~GFdXLcnryT)TNI3^bE zLF7c(8O{zkGscFGk4y1PG^X}&{W)=4ZF!gCdUln%w3WKFjX0N8B*hTv+T+|$?m>29 zeo_xq6qI0UW)*hb?|XM(R4&te28W+Dq=>LHu#}Fbx4?2^KT% zt1qu~G!Z5(dtBWW^pCC{S37z3m}_UvUKPvrDQWWdl`fCNOWtmAt!_?9@pMwcswI$t z^o8U|%r#LVh&*v`a_u75YED!EmpWCxSaTgUAqP_9jFCw4k`Ux2MO!zz}u?rYvb?n zacF`=cE8cNwuMJ}ni)9pU}uW_=V8}|0nLXEg4kiq3S2~+P2q?+PjJL)Tz!z-`bOu9 z4cgnYPeVq9_D=H-E42bMSG(bT8XVT!=^mZaX_d|g6$Rb;?9HgBC~eMyRDVdT-~I*I zF&^H|bM_N-&phMHIYal1Gp)QWjO4+Nc|2f0jvez!yw`q$?wNP+iXE?tbv$T4jvebs zg8c-KJ>!hxTw7FQkPc-ZKi20T>%$lJ;amFn(Z0ZFA7JU@mA;_ThiBn9 zeTH_A;dH0#j@Z`Y_|@y3o#bzS)mc+#j+TeqIqX_i?jIuwrus6{`ex@t4|hk9dnPu zKNeHd?#!s_PNovFnoi?b+MP(MaUy-n$%^W zh}mp;Cbn+G)#fM9kFDukS+_^cjHlu{n&RVQVKwDWMBFqomUfRwsjxJn+J&KpL0OYX ziaU}>Y3NNSRXG}oVzIKU7@$u{gpYz}(AHi!8B;bT;*sbG;WjzNT(qwsPkgs!y@q?T z`5Ub*H5A`Gk8I|}Abh$AgkKP;NC`QgRO}$TA8oGQnkyFb4Hl?Th5XMNU-Rs6&ai@`C7nRky?v!FNcg{`bu#z91=~z!E(@KGk8-!Ydu5P@Mewi*L zb`1>C9qpU2w1Pf^20ipMAlh1vHv4P3y{McLkO}U0UbR*f`$bXv>_jX*4YHKHN`JJtO{yq=%CS4B$2$;BjW8wyaw6&bBM;f@3HakP}PUM}H zW2zLV-uAT?>+=^uS3O!*5;7OH@bc)& zJJYecVLTqCHYM(atxlRdGzUwYXp`)^hsCcsSXx7~1v?xr>$VtP71M2E7_7AXYs*+N z1I<9UVCjKd)s$tL!(1^>!5}9`cDrsM@@D56(!J7kTds>`bzXbNVsM&N^(`RtVIv;K zEDghvokaunZLPI-r>5o=u20+_fVYUNw5M8e8Lkpl-C6oX@b_S2Zl5} zKj(4{kzcpEUb}ksP>Nz^l#ZDUCmP}w=8(E$cwJncpl`HbC3FPs4zg{q&ZvW|-9CPX zO{EWDIec*#uq(F~IW*=dX)90f#V8tnHOCg$HX8(8D_vJLNwRu_8XrM6z#z|&o33$P zo;#9P<{im7{MnF+NH&kgWte+uL$$lX80PS}d`!*c(e3y#bC_dlUlw1z)TLw%#i%M} z#-t?5@LZmP$NzoPFbt@MY*?XTNj^4$#g*eqfId44?b;x9`Zrv0nl7Ch2}?a_AJ*sQ zd9U%q_48f|5B!@3GEtgJcV^ra>~jl&KDQS)bNvC1q4#LYKD8I2$}`(smvx&&c|(>; zEV^{}h+b*sk2Z+K%pxg97&G3y36|}$=j{2$$adH+C!UX)3D}wu$U4xVz%$w zx7#FT*u4qOgtc)cO3D4yo~f>coc(_kGn=~f-^iGkk zU7b6~#^*a5Dov)=t(m!(>n;Y}P~njot-Bbo;&!o?${m({A{1ety@x%c=FV@4Y^AP@hP9eu+?Zyn6*I?!PeYqCv zGJ^y_2-L}BkpNaYdpAhn{qvFl7+>ysKgbKATDK;{aCY*I zzv_SLZdma6YL}}~;|GS{lpGm# zeUNyb>FBcwl9w$}29MwjCj+mEvQ>_N7VFVNGLq=(*8lp+b*>fqUyG4V!Qy2Tog=!- zfh|TZ^=i0RMRDDn^BX7NnKm1`&TUKQ7oED~Tr_l4>5Yh(d2?|e8+7xUYI&i{DOlHZ zw<3|Jffw`_1m33kEXlm!&B_&7y$JAn{Dom}Gx_mWm+z8PEG{#Ji%qfEZ7QdvE9UB+ zFZAoB!u%m3UF8zy)h&K++T-Uqh;l_r9b;1nc=h1`j{|9S46dr|(MdZ`Jmf(%1uPNQ z#iApl8FnP4YE?M1t`hXCvQL|Fg0GT8Ow7u&|`bCj-eT_0bvVY; zw0st6yIl)?kQ3<8S>QRtN>{_xSVPvxW0+6$Drj zPhR8NREULr}8^*3QmASv8aJVE5@6DD(t5zT36jN;9#)vmo30`n>uJRSfMOVDk%+h%jt? zp&lI08O(*0L+TD$y~~PUnh&+1O-n$T!zV%=AlDnlB?Q0>ZnjjMy+Fo3eW5sefsB1R zNA}IY#e$q2QuecyZO_5o3t;Z#u2I)1yZUXWTIKLv-E{Wynk&%7!*ZUB?}{_|u1WLM z-)H_kD+6l@=)VviwsT${HkaLH^Zn;8?MV}#dS^W{$JVmlTfn4Ry)DP^(i}n~8C)?Tor+TV5>q1?>UmyH5_??h+p;#C`$m-Ex)Il&n~_G^Ee>jU zBB@L!L*1@x=&b#8K35R+OmCXaTTKUo#T+!n06a$-N7!4BuTr0;_LmzWO7im7Tu%Fb z=UN(VuGAfyc6Mu|{^{gcj;@i^6RopOr2AcICIMQRewu)vi?trf^-)@F_H;tFMh2xNrvKYbERpH@1I7YpcLo#C zgRhjbvzPUf);%syZ|=c`%)%yp*!R+s2iRwG$6o1p4&;pP?c_@@cCOOB(_QD<*OEWJ zqNBD+L}WWD#nl+Jr-LLp>T=Je=4cs!ye-v_CT}7NZzl60SQ#5nM^9*x6YDc)4gAY< zYc@uVDxfRc!MPnA`rx03ML9$5S(Dd%yu^5PCrz|LV%?0?kmB>|^am^^_is+-yokIy z)|53fQbh8rPFfN|qy5r(Xn#&UzCd=TQF?H0O4n0dqeuWZb*y<9-8}SeIP`RSUnwF! zH=EhP$o*V8TgOwPc`NKxR4(ZSp!s4_%a-)@2GMabn=qLnZ}KReMmp;vrd@|+>RinE z=PhLZN%8q~jNGZ0Pto8FStBB+d-mKb&AUrc*1T);&M@$%i=B5gDS3&cEuH#4T6A%d zrha=qA$|Um_oNGXE@tno9Ht^Y+B}d|Q9D9L{zMS6F-J>Hug*0|`gd*F=iaFmeYy9i zrIA_wG}E(dFQPT{&7fXH8`KgjgbEt&+qm1cVqL-Yv72eY_Yv|ZyIr^Dy3+tqGA5y{ zB*&e$aIsoWJR)0;3=@)TK{>K!B$%Eg%`iOR7$>V^uJ!YUr6Y}&ds9(m^8dEEwooJC zHS)#lobBYAuea7$XGW23sF0QiI_##}JO#+SiMtT>LM{e(pUcJAwmC6o7ONp(HLSy# zCw7y?RZi(Ptr2cO$OiTb{lJ9_gd-F)W|-#n?p#{S#(t3RWtPItk2D6Vo~_Q$z*>k~ zBCKs+5Nj0Dxl8=AXrm-%RlHNQH6o$X{KkdxHc{d8+Y76Geyydv z*G+EPyxqZ5c-my&QT}jQIc=|hfBD)o z-wf6^mO1Kb>wI-hXaD)i+C2RQ$V~y)pVCB&uS8s4J^cAxU3L33)`IGDizqFi8?Tol zjL~8so`Xn1xr#hG6t^mOjHVZx)nqI&F$O6`qkB{_+<`tSxIQC|P{%2H{h1fwd{VM5 zRn!w|ERm#ldZ^Ajag$bUt=%?t7}{;FYOyUPMWndoR;2W3I3cC7h3_|tihBmu+_7jl zC8bDo#I?G@$At)6=~_j;GU9U9ivs%1csXB)Cx0>G3g{a3V-K`$aEDMMV`s7}~R;q4ONpQ(R09{k|e<38>~=kRGU|8(1A4npS63KMc>T zQUNk#_IG%H?r;o^(S9{rmjXDtPefChan!r(jUs3PJVG4kFM*CPu~-5vUJ&zuimexU zq|*sGsvXh+rm0lhXZ9la^#5#MMx*@8j6M)XhQ5VTtmVEKl=c^gQgY{a+gCTEECq3k zY)7PA6gGMe zbst%CvwjD3Uz*4=4{_cy1FK2A^HdZZi?)t3f-$g;jJ_J$%iTt0Vr;@jqoCU{FqsjM mt4_*R8Pbd%B`b(Upvyp-)PO-ij@FP^*u`S?3sWeVH~Ih4z~Th} delta 1071 zcmbu6TWB0*6vtz z2n~p?NTtz0$0wr&Td@xkSMoJTP+DY*0lOe*@YdKOYBAY)i1E&PRx0(q1Hbv;$ILnZ zbH4fcqw|}OEo5|qVc1#b#`DVECDvFza(YmxGq)T27Nu-XG$xF32pT=)8-1ux=5lOM znK|lDR;GjUQ{nW?#AJ=rd2aBg<`y3qxfcew1ME~d{lvsf_mj-xGa~^jEPgxk8p}0i zbI%g3bg*D$t-`2P94$WADbr4w6-%mC^uK-)`fU$?>r13U0NY+&Y3fNp%q-e+nl*u@#yV_0Sv{rVpI)r-9uNkMl{ z3SYzQN>&w3i8AmbP>8KD{`E$dXh3O)9q(3MW#9`~g-iJNIfz#WQ-@HlF>oE$;4_r( z0$t0c9wd~{stMG0CQ}H9@N{QVFcpm`S4T$b+On#;e&UtX3D2tv?&|DlzZ zbOBg_Uc4d|;dq`@s-?iUERU4j(6XvwXp;i*Tr0?zNWu19-zkuiU2&YycL*U>JBT8; z;ySilDA{&cj7TB!@?jAAkspTns_S?p%=^CWMPAV@65_bUD0FPgs|KMJMmDKBQQ#G- z#I6)sFP?2nb5gT$F=#d}(BIn9B^bNaP%DY_5sckpH17p-&x$Gk-NF6so-vh{q2n!N zgjX3j3HyzAVq;Swc)bq`sl%E04P)O>oXDyiFZ`ek(Vw1Ar7qw0|CTDdXQe^He@f-hxAk4OiS5DFVRIh;G};Z7Fn^(h-GYdSfu4B{igg6 Dx@${2