diff --git a/grafana-public/dashboards/README-Introduction.json b/grafana-public/dashboards/README-Introduction.json new file mode 100644 index 0000000..3cf757b --- /dev/null +++ b/grafana-public/dashboards/README-Introduction.json @@ -0,0 +1,76 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Short synopsis of each of the differential measurement dashboards.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 543, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "xIXR1_LMz" + }, + "gridPos": { + "h": 19, + "w": 18, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# README - Introduction to M-Lab differential measurements\nMatt Mathis, 2025-11-03\n\nThese dashboards are intended for public use: Please share.\n- See the [short slide deck](https://docs.google.com/presentation/d/1NtlXFFAkwF5HqHWcDcrbh3TrGUdpdHKa1AWJ404kLQ4/edit?usp=sharing)\nfor a quick introduction.\n\n- See the [full slide deck](https://docs.google.com/presentation/d/1wpx45K30QD2ZIDuS5WsuRGrbcCrxs56cvuhydWRIRiw/edit?usp=sharing)\nfor a detailed description of the methodology.\n\n- See the [case for deploying servers](https://docs.google.com/presentation/d/1LBmas8kQtiT9Gv48fBjH3Eqbj4DXIVMGdACnTqr9K78/edit?usp=sharing)\nto understand how ISPs can use M-Lab instrumentation to help them\nimprove their service to their customers, and thereby build a better Internet.\n\n## Global Metro Barchart [link](${detailURL}20250110a)\nDisplay Global interconnect quality (pain) metrics.\nEvaluate the interconnections between ISPs by measuring differences in performance to M-Lab servers\nfrom each of the N largest Client ISPs in the metro.\nIf the score is high (poor) it means that users attached to a some ISPs get different performances\nto the different M-Lab servers, indicating non-uniform connectivity between the ISPs.\nIn all cases high scores suggest peering problems,\nand low scores are probably good as long as M-Lab has sufficient coverage.\n\n## Metro Details Dashboard [link](${detailURL}20250114a)\nShow the detailed performance statistics between the top N client ISPs\nand all MLab sites in the selected metro.\nThis dashboard is slated to be replaced\nby the Regional Details Dashboad, below.\n\n## Regional Details Dashboard [link](${detailURL}20251103a)\nShow detailed performance statistics of the cross product of\nselected client ISPs and selected M-Lab site in the vicinity\nof a selected anchor metro.\nThis dashboard is feature rich, and expected to continue to evolve.", + "mode": "markdown" + }, + "pluginVersion": "11.1.3", + "type": "text" + } + ], + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "description": "Base path name within a relative URL", + "hide": 2, + "name": "detailURL", + "query": "/d/", + "skipUrlSync": false, + "type": "constant" + } + ] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": { + "hidden": true + }, + "timezone": "utc", + "title": "0 README - Introduction to differential measurements", + "uid": "ef30n862ylji8a", + "version": 11, + "weekStart": "" +} diff --git a/grafana-public/dashboards/exp-time-series.json b/grafana-public/dashboards/exp-time-series.json new file mode 100644 index 0000000..663ba97 --- /dev/null +++ b/grafana-public/dashboards/exp-time-series.json @@ -0,0 +1,1061 @@ +{ + "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": "First Time Series of metro report data, including KSdistance and spread", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 512, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "xIXR1_LMz" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 25, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# Experimental Time Series \n### Warning: This is a pre-release of experimental software.\nIt is not running on production infrastructure and is subject to changes or deletion without notification.\nFor more information scroll down and see the [slides](https://docs.google.com/presentation/d/1wpx45K30QD2ZIDuS5WsuRGrbcCrxs56cvuhydWRIRiw/edit?usp=sharing).\n\nAlthough it has not be investigated carefully,\nthis sample data is believed to be the consequence of\nroute flapping between two paths that have small but not identical RTTs.\nIt may not have any operational consequences.\n\nTODO: A way to do a transverse cut of this data: a metro dashboard slice of a single hour of this timeseries.", + "mode": "markdown" + }, + "pluginVersion": "11.1.3", + "type": "text" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": true, + "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": "always", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "fieldMinMax": true, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "spread" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 23, + "x": 0, + "y": 8 + }, + "id": 23, + "links": [ + { + "title": "SPoutlier", + "url": "" + } + ], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "timezone": [ + "utc" + ], + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": "SELECT timeBin AS time,\n KSdistance, KSoutlier,\n spread, SPoutlier,\n -- Implicitly uses ${datasource}\nFROM `${dataset}.timeseries_report` (\"${method}\",\"${xAxis}\", ${binSize}, \"${field}\",\n -- DATE_SUB(\"$e ndDate\", INTERVAL ${d uration:raw}-1 DAY), DATE(\"$e ndDate\"),\n DATE(\"${__from:date}\"), DATE(\"${__to:date}\"),\n \"^(${region:regex}).*\", \"^(${ClientISP:regex})\", ${ISPcount})\nWHERE level = \"Regional Summary\"\n -- AND (TIMESTAMP(DATE_SUB(\"$endDate\", INTERVAL ${duration:raw}-1 DAY)) < \"${__to:date:iso}\" OR\n -- ERROR('Prefetch is before timepicker'))\n -- AND ( \"${__from:date:iso}\" > TIMESTAMP(DATE(\"$endDate\")) OR\n -- ERROR('Prefetch is after timepicker'))\nORDER BY timeBin \n", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Time Series", + "type": "timeseries" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "Show servers and ISPs causing outliers.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "fillOpacity": 80, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 1, + "scaleDistribution": { + "type": "linear" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "fieldMinMax": true, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "spread" + }, + "properties": [ + { + "id": "custom.axisPlacement", + "value": "right" + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 23, + "x": 0, + "y": 16 + }, + "id": 24, + "links": [ + { + "title": "SPoutlier", + "url": "" + } + ], + "options": { + "barRadius": 0, + "barWidth": 1, + "fullHighlight": true, + "groupWidth": 0.79, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "orientation": "auto", + "showValue": "auto", + "stacking": "none", + "tooltip": { + "mode": "multi", + "sort": "none" + }, + "xField": "time", + "xTickLabelMaxLength": 10, + "xTickLabelRotation": -90, + "xTickLabelSpacing": 0 + }, + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": "SELECT timeBin AS time,\n KSdistance, KSoutlier,\n spread, SPoutlier,\n -- Implicitly uses ${datasource}\nFROM `${dataset}.timeseries_report` (\"${method}\",\"${xAxis}\", ${binSize}, \"${field}\",\n -- DATE_SUB(\"$e ndDate\", INTERVAL ${d uration:raw}-1 DAY), DATE(\"$e ndDate\"),\n DATE(\"${__from:date}\"), DATE(\"${__to:date}\"),\n \"^(${region:regex}).*\", \"^(${ClientISP:regex})\", ${ISPcount})\nWHERE level = \"Regional Summary\"\n -- AND (TIMESTAMP(DATE_SUB(\"$endDate\", INTERVAL ${duration:raw}-1 DAY)) < \"${__to:date:iso}\" OR\n -- ERROR('Prefetch is before timepicker'))\n -- AND ( \"${__from:date:iso}\" > TIMESTAMP(DATE(\"$endDate\")) OR\n -- ERROR('Prefetch is after timepicker'))\nORDER BY timeBin \n", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Time Series with hover data", + "type": "barchart" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "These are aggregated across the entire prefetch date range.", + "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": "level" + }, + "properties": [ + { + "id": "custom.width", + "value": 142 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "metro" + }, + "properties": [ + { + "id": "custom.width", + "value": 64 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Sites" + }, + "properties": [ + { + "id": "custom.width", + "value": 47 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tests" + }, + "properties": [ + { + "id": "custom.width", + "value": 66 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "percent" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "KSdistance" + }, + "properties": [ + { + "id": "custom.width", + "value": 89 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Gmean" + }, + "properties": [ + { + "id": "custom.width", + "value": 63 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "spread" + }, + "properties": [ + { + "id": "custom.width", + "value": 65 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ISPrank" + }, + "properties": [ + { + "id": "custom.width", + "value": 52 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "data" + }, + "properties": [ + { + "id": "custom.width", + "value": 175 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Spread" + }, + "properties": [ + { + "id": "custom.width", + "value": 54 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ISPname" + }, + "properties": [ + { + "id": "custom.width", + "value": 343 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ISPtests" + }, + "properties": [ + { + "id": "custom.width", + "value": 76 + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 23, + "x": 0, + "y": 28 + }, + "id": 22, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.1.3", + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": "SELECT * EXCEPT (serverStart, serverEnd)\nFROM `${dataset}.regional_report` (\"${method}\",\"none\", ${binSize},\"${field}\",\n -- DATE_SUB(\"$endDate\", INTERVAL ${duration:raw}-1 DAY),\n -- DATE(\"$endDate\"),\n DATE(\"${__from:date}\"), DATE(\"${__to:date}\"),\n \"^(${region:regex}).*\", \"^(${ClientISP:regex})\", ${ISPcount})\nWHERE \"${verbose:raw}\" = 'yes' OR level like '%%Summary'\n# ORDER BY ISPname, Sites\nORDER BY ISPtests DESC, Sites", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Aggregate results for ${field}", + "type": "table" + } + ], + "refresh": "", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Google BigQuery (mlab-collaboration)", + "value": "P116E76923C5457A4" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "datasource", + "options": [], + "query": "grafana-bigquery-datasource", + "queryValue": "", + "refresh": 1, + "regex": "/(mlab-oti|mlab-staging|mlab-sandbox|mlab-collaboration)/", + "skipUrlSync": false, + "type": "datasource" + }, + { + "hide": 2, + "label": "dataset", + "name": "dataset", + "query": "mlab-collaboration.mm_preproduction", + "skipUrlSync": false, + "type": "constant" + }, + { + "current": { + "selected": true, + "text": "experimental", + "value": "experimental" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "method", + "options": [ + { + "selected": false, + "text": "cached", + "value": "cached" + }, + { + "selected": false, + "text": "live", + "value": "live" + }, + { + "selected": true, + "text": "experimental", + "value": "experimental" + } + ], + "query": "cached, live ,experimental", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "MinRTT", + "value": "MinRTT" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "field", + "options": [ + { + "selected": true, + "text": "MinRTT", + "value": "MinRTT" + }, + { + "selected": false, + "text": "MeanThroughputMbps", + "value": "MeanThroughputMbps" + }, + { + "selected": false, + "text": "uploadMeanThroughputMbps", + "value": "uploadMeanThroughputMbps" + }, + { + "selected": false, + "text": "LossRate", + "value": "LossRate" + }, + { + "selected": false, + "text": "linearMinRTT", + "value": "linearMinRTT" + }, + { + "selected": false, + "text": "linearMSS", + "value": "linearMSS" + }, + { + "selected": false, + "text": "RTO", + "value": "RTO" + }, + { + "selected": false, + "text": "MSS", + "value": "MSS" + }, + { + "selected": false, + "text": "", + "value": "" + } + ], + "query": "MinRTT, MeanThroughputMbps, uploadMeanThroughputMbps, LossRate, linearMinRTT, linearMSS, RTO, MSS, \n", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "den NA Denver, US", + "value": "den" + }, + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "definition": "", + "description": "Used to select Client ISPs to be evaluated in region. ", + "hide": 0, + "includeAll": false, + "label": "Anchor metro", + "multi": false, + "name": "anchor", + "options": [], + "query": { + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": "# From: 2024-12-20 Prototype cached site picker \n\nSELECT\n CONCAT(metro, ' ', ContinentCode, ' ', City, ', ', CountryCode) AS text,\n metro AS value,\nFROM (\n SELECT\n REGEXP_EXTRACT(site, '^([a-z]{3})') AS metro,\n ANY_VALUE(ContinentCode) AS ContinentCode,\n ANY_VALUE(City) AS City,\n ANY_VALUE(CountryCode) AS CountryCode,\n -- Uses ${datasource} implicitly\n FROM `${dataset}.cached_metadata`\n GROUP BY metro\n ORDER BY ContinentCode, CountryCode, metro\n)\n", + "refId": "tempvar", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1", + "value": "1" + }, + "description": "Radius from the anchor metro for selecting servers", + "hide": 0, + "includeAll": false, + "label": "Radius (kM)", + "multi": false, + "name": "radius", + "options": [ + { + "selected": true, + "text": "1", + "value": "1" + }, + { + "selected": false, + "text": "100", + "value": "100" + }, + { + "selected": false, + "text": "500", + "value": "500" + } + ], + "query": "1, 100, 500", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": true, + "text": [ + "den02 (0.0 US) 3356, Level 3 Parent, LLC", + "den04 (0.0 US) 6461, Zayo Bandwidth", + "den05 (0.0 US) 1299, Telia Company AB" + ], + "value": [ + "den02", + "den04", + "den05" + ] + }, + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "definition": "", + "description": "Manually select server sites within a specified radius of the anchor metro.", + "hide": 0, + "includeAll": false, + "label": "Servers", + "multi": true, + "name": "region", + "options": [], + "query": { + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": " SELECT\n # FORMAT ('TEXT=\"%t (%t) %t\" VALUE=%t', site, ANY_VALUE(ROUND(distance)), ANY_VALUE(ASName), site) AS LongText,\n site AS value,\n FORMAT ('%t (%t %t) %t', site, ANY_VALUE(ROUND(distance)), ANY_VALUE(CountryCode), ANY_VALUE(ASName)) AS text\n FROM (\n SELECT\n ST_DISTANCE(\n ( SELECT ANY_VALUE(ST_GEOGPOINT(Longitude, Latitude))\n -- Uses ${datasource} implicitly\n FROM `mlab-collaboration.mm_preproduction.cached_metadata`\n WHERE REGEXP_CONTAINS ( site, \"^(${anchor:regex})\" )),\n ST_GEOGPOINT(Longitude, Latitude)\n ) / 1000.0 AS distance,\n *\n -- Uses ${datasource} Implicitly\n FROM `mlab-collaboration.mm_preproduction.cached_metadata`\n ORDER BY distance, site\n)\nWHERE distance < ${radius}\nGROUP BY site\n", + "refId": "tempvar", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "10", + "value": "10" + }, + "description": "Number of ISPs to include", + "hide": 0, + "includeAll": false, + "label": "Client ISPs", + "multi": false, + "name": "ISPcount", + "options": [ + { + "selected": false, + "text": "0", + "value": "0" + }, + { + "selected": false, + "text": "1", + "value": "1" + }, + { + "selected": false, + "text": "2", + "value": "2" + }, + { + "selected": false, + "text": "5", + "value": "5" + }, + { + "selected": true, + "text": "10", + "value": "10" + }, + { + "selected": false, + "text": "20", + "value": "20" + }, + { + "selected": false, + "text": "50", + "value": "50" + } + ], + "query": "0,1,2,5,10,20,50", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": true, + "text": [ + "7922 Comcast Cable Communications, LLC", + "13335 Cloudflare, Inc " + ], + "value": [ + "7922 Comcast Cable Communications, LLC", + "13335 Cloudflare, Inc " + ] + }, + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "definition": "", + "description": "Choose high volume Client ISPs. ", + "hide": 0, + "includeAll": false, + "label": "Client ISPs", + "multi": true, + "name": "ClientISP", + "options": [], + "query": { + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": "\nSELECT\n ISPname AS text,\n-- Uses \"${datasource}\" Implicitly\nFROM `${dataset}.access_ndt7_cached_histograms`(\"MinRTT\", \"^(${anchor:regex})\", ${ISPcount})\nGROUP BY ISPrank, ISPname\nORDER BY ISPrank\n", + "refId": "tempvar", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "hour", + "value": "hour" + }, + "description": "Time bin size. Future may support diurnal summing.", + "hide": 0, + "includeAll": false, + "label": "Time Axis", + "multi": false, + "name": "xAxis", + "options": [ + { + "selected": false, + "text": "day", + "value": "day" + }, + { + "selected": true, + "text": "hour", + "value": "hour" + } + ], + "query": "day,hour", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "yes", + "value": "yes" + }, + "description": "Show or hide MSI stats in the table view", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "verbose", + "options": [ + { + "selected": true, + "text": "yes", + "value": "yes" + }, + { + "selected": false, + "text": "no", + "value": "no" + } + ], + "query": "yes, no", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "50", + "value": "50" + }, + "hide": 2, + "includeAll": false, + "multi": false, + "name": "binSize", + "options": [ + { + "selected": true, + "text": "50", + "value": "50" + }, + { + "selected": false, + "text": "1", + "value": "1" + } + ], + "query": "50, 1", + "skipUrlSync": false, + "type": "custom" + }, + { + "hide": 2, + "name": "detailURL", + "query": "/d/20250114a?orgId=1", + "skipUrlSync": false, + "type": "constant" + } + ] + }, + "time": { + "from": "2025-07-27T00:00:00.000Z", + "to": "2025-08-02T23:59:59.000Z" + }, + "timepicker": { + "hidden": false, + "nowDelay": "3d", + "refresh_intervals": [ + "1d", + "2d", + "7d" + ] + }, + "timezone": "utc", + "title": "EXP Time Series", + "uid": "becs8jrn7r75sc", + "version": 32, + "weekStart": "" +} diff --git a/grafana-public/dashboards/global-metro-bar-chart.json b/grafana-public/dashboards/global-metro-bar-chart.json index f23d218..b1d627c 100644 --- a/grafana-public/dashboards/global-metro-bar-chart.json +++ b/grafana-public/dashboards/global-metro-bar-chart.json @@ -47,8 +47,7 @@ "showLineNumbers": false, "showMiniMap": false }, - - "content": "# Global Metro Bar Chart \n\n### Warning: This is a pre-release of experimental software.\nIt is not running on production infrastructure and is subject to changes or deletion without notification.\n\nFor more information scroll down or see the [slides](https://docs.google.com/presentation/d/1wpx45K30QD2ZIDuS5WsuRGrbcCrxs56cvuhydWRIRiw/edit?usp=sharing).\n\nEvaluate the interconnections between ISPs by measuring differences in performance to MLab servers\nfrom each of the N largest Client ISPs in the metro.\nIf the score is poor it means that users attached to a some ISPs get different performances\nto the different MLab servers,\nindicating non-uniform connectivity between the ISPs.\n\nThe metrics are: KSdistance (0 is ideal), the worst case vertical distance between the cdf distributions;\nand spread (1 is ideal), the worst case ratio of the geometric means.\nTo make it more visible, KSdistance is scaled 10x,\nsuch that 10 is the worst possible score, indicating non-overlapping distributions.\n\nThis data is precomputed for the date range shown, and can't be adjusted in this version of the dashboard.\n\nTo see the entire MLab fleet select verbose,\nwhich also shows singleton MLab sites that can't be analyzed by this technique.\nThese sites show 0 spread.\n\n\n", + "content": "# Global Metro Bar Chart \n### Warning: This is a pre-release of experimental software.\nIt is not running on production infrastructure and is subject to changes or deletion without notification.\nFor documentation see the [README](/d/ef30n862ylji8a/) or scroll down for basic information. \n\nEvaluate the interconnections between ISPs by measuring differences in performance to MLab servers\nfrom each of the N largest Client ISPs in the metro.\nIf the score is poor it means that users attached to a some ISPs get different performances\nto the different MLab servers,\nindicating non-uniform connectivity between the ISPs.\n\nThe metrics are: KSdistance (0 is ideal), the worst case vertical distance between the cdf distributions;\nand spread (1 is ideal), the worst case ratio of the geometric means.\nTo make it more visible, KSdistance is scaled 10x,\nsuch that 10 is the worst possible score, indicating non-overlapping distributions.\n\nThis data is precomputed for the date range shown, and can't be adjusted in this version of the dashboard.\n\nTo see the entire MLab fleet select verbose,\nwhich also shows singleton MLab sites that can't be analyzed by this technique.\nThese sites show 0 spread.\n\n\n", "mode": "markdown" }, "pluginVersion": "11.1.3", @@ -430,8 +429,8 @@ { "current": { "selected": false, - "text": "0 2025-02-21 - 2025-02-27 Cached", - "value": "0 2025-02-21 - 2025-02-27 Cached" + "text": "0 2025-10-24 - 2025-10-27 Cached", + "value": "0 2025-10-24 - 2025-10-27 Cached" }, "datasource": { "type": "grafana-bigquery-datasource", @@ -489,6 +488,6 @@ "timezone": "utc", "title": "Global Metro Bar Chart", "uid": "20250110a", - "version": 69, + "version": 71, "weekStart": "" } diff --git a/grafana-public/dashboards/metro-details-dashboard.json b/grafana-public/dashboards/metro-details-dashboard.json index 398bbf3..a06dfd8 100644 --- a/grafana-public/dashboards/metro-details-dashboard.json +++ b/grafana-public/dashboards/metro-details-dashboard.json @@ -47,7 +47,7 @@ "showLineNumbers": false, "showMiniMap": false }, - "content": "# Metro Details Dashboard \n\n### Warning: This is a pre-release of research software.\nIt is not running on production infrastructure and is subject to change or deletion without notification.\n\nFor more information scroll down or see the [slides](https://docs.google.com/presentation/d/1wpx45K30QD2ZIDuS5WsuRGrbcCrxs56cvuhydWRIRiw/edit?usp=sharing).\n\nShow the detailed performance statistics between the top N client ISPs and all MLab sites in the selected metro.\nThe first three rows are aggregates: metro wide, by server, or by Client ISP.\n\nThe rest of the dashboard shows the performance statics individually between each of the top N Client ISPs and all MLab servers.\n\nUnder ideal conditions each Client ISP will have identical performance to each MLab site.\n\nThis data is precomputed for the date ranges shown at the top of the ISP summary table.\n\n", + "content": "# Metro Details Dashboard \n\n### Warning: This is a pre-release of research software.\nIt is not running on production infrastructure and is subject to changes or deletion without notification.\nFor documentation see the [README](/d/ef30n862ylji8a/) or scroll down for basic information. \n\nThis dashboard is obsolete and is slated to be replaced by\nthe [Regional Details Dashboard](/d/20251103a) in a future release.\n\nShow the detailed performance statistics between the top N client ISPs and all MLab sites in the selected metro.\nThe first three rows are aggregates: metro wide, by server, or by Client ISP.\n\nThe rest of the dashboard shows the performance statics individually between each of the top N Client ISPs and all MLab servers.\n\nUnder ideal conditions each Client ISP will have identical performance to each MLab site.\n\nThis data is precomputed for the date ranges shown at the top of the ISP summary table.\n\n", "mode": "markdown" }, "pluginVersion": "11.1.3", @@ -299,8 +299,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.0017403859668322157, - 0.0330673333698121 + -0.0039550861885633976, + 0.07514663758270455 ], "type": "linear" } @@ -388,8 +388,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.0016565652664183963, - 0.03147474006194953 + -0.0015219181158154737, + 0.028916444200494 ], "type": "linear" } @@ -479,8 +479,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.004170842421741438, - 0.07924600601308732 + -0.006976609959164827, + 0.13255558922413171 ], "type": "linear" } @@ -593,8 +593,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.003892118951050179, - 0.07395026006995341 + -0.006092275156131325, + 0.11575322796649518 ], "type": "linear" } @@ -707,8 +707,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.0020762162798916243, - 0.03944810931794086 + -0.001982925211271668, + 0.03767557901416169 ], "type": "linear" } @@ -821,8 +821,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.0041055645079002044, - 0.07800572565010386 + -0.006599498835050872, + 0.12539047786596658 ], "type": "linear" } @@ -935,8 +935,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.010046703595090694, - 0.19088736830672315 + -0.013597060599229391, + 0.25834415138535843 ], "type": "linear" } @@ -1049,8 +1049,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.002008464807632342, - 0.03816083134501449 + -0.0025004599291579537, + 0.047508738654001126 ], "type": "linear" } @@ -1178,8 +1178,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.003578265030888367, - 0.06798703558687898 + -0.004373522458628842, + 0.083096926713948 ], "type": "linear" } @@ -1292,8 +1292,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.022880996405958583, - 0.4347389317132131 + -0.023082715244054666, + 0.43857158963703863 ], "type": "linear" } @@ -1406,8 +1406,8 @@ "autorange": true, "gridcolor": "#333", "range": [ - -0.003742125527299506, - 0.07110038501869062 + -0.003332044808452723, + 0.06330885136060174 ], "type": "linear" } @@ -1507,7 +1507,7 @@ "allValue": ".*", "current": { "selected": false, - "text": "gru SA Sao Paulo, BR", + "text": "gru SA Campinas, BR", "value": "gru" }, "datasource": { @@ -1557,8 +1557,8 @@ { "current": { "selected": false, - "text": "2", - "value": "2" + "text": "5", + "value": "5" }, "description": "Number of ISPs to include - TODO rename the variable", "hide": 0, @@ -1573,12 +1573,12 @@ "value": "1" }, { - "selected": true, + "selected": false, "text": "2", "value": "2" }, { - "selected": false, + "selected": true, "text": "5", "value": "5" }, @@ -1702,6 +1702,6 @@ "timezone": "utc", "title": "Metro Details Dashboard", "uid": "20250114a", - "version": 33, + "version": 35, "weekStart": "" } diff --git a/grafana-public/dashboards/regional-calibration-dashboard.json b/grafana-public/dashboards/regional-calibration-dashboard.json new file mode 100644 index 0000000..51395ec --- /dev/null +++ b/grafana-public/dashboards/regional-calibration-dashboard.json @@ -0,0 +1,852 @@ +{ + "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": "Find server pairs with minimal deltas circa an anchor metro.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 534, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "xIXR1_LMz" + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 121, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# Regional Calibration Dashboard \n### Warning: This is a pre-release of experimental software.\nIt is not running on production infrastructure and is subject to changes or deletion without notification.\nFor more information scroll down and see the [slides](https://docs.google.com/presentation/d/1wpx45K30QD2ZIDuS5WsuRGrbcCrxs56cvuhydWRIRiw/edit?usp=sharing).\n\nScan all selected sites to find triplets: target Site, benchmark Site and ClientISP;\nwhere both MLab Sites provide similar measures of the ClientISP.\nThis is indicated by small KSdistance (robust but it has weak intutive meaning) and spread.\nSpead is the ratio of the mean performances, and can be drirectly interperted as such. \ne.g. A spread of 1.01 means the mean measurements are different by 1%.\nHowever spread by itself is subject to false pass results,\nbecause two ISPs can have very different distrabution and the same mean performances.\n\nThis dashboard it prone to false results other ways, for example if the radius is too large or you scan too many client ISPs\nit might find irrevant matches.\nIt doesn't include sufficient consistency checks,\nfor example confirming that the benchmark site is an appropriate for the targetSite and the region:\nthat its performance is comperable or above other sites in the region.\n\nThere is also an underlying assumption that needs to be explored:\nIn regions where there is poor interconnection, how do you define calibration,\nwhen many Clients have poor connectivity to many sites?\n\nTODO:\n- Resolve language around spread, ratio, inverse and change.\n- Add some metric of the high performance tail (e.g. the 95 percentile) to be sure that we are not calibrating truncated distrabutions. \n- Add logic to qualify benchmark sites.\n- Add links to the the proper regional details dashboards.\n- Tinker with the scatter plot tool tips. Can they be more useful?\n\nFor more information see the\n[slides](https://docs.google.com/presentation/d/1wpx45K30QD2ZIDuS5WsuRGrbcCrxs56cvuhydWRIRiw/edit?usp=sharing).", + "mode": "markdown" + }, + "pluginVersion": "11.1.3", + "type": "text" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "The inverse ratio is the mean of the alternate site divided by the mean of the target site. Ideally it should be close to 1.0.\nHigher values mean the target site is worse than the alternate site. This plot excludes sites where the target is better than the alternate (inverse < 1.0).", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": true, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 1, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "pointSize": { + "fixed": 3 + }, + "scaleDistribution": { + "type": "linear" + }, + "show": "points" + }, + "fieldMinMax": false, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 122, + "options": { + "dims": { + "x": "spread" + }, + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "series": [ + { + "x": "inverse", + "y": "KSdistance" + } + ], + "seriesMapping": "manual", + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "P116E76923C5457A4" + }, + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": "\nSELECT *\n-- FROM `${dataset}.cached_metro_report`(\"MeanThroughputMBPS\", \"${site:regex}\", ${ISPcount})\nFROM `${dataset}.calibration_report` (\"${method}\",\"${xAxis}\", ${binSize}, \"${field}\",\n DATE(REGEXP_EXTRACT(\"${__from:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n DATE(REGEXP_EXTRACT(\"${__to:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n \"^(${region:regex})\",${radius}, ${ISPcount})\nWHERE inverse >= 1.0\n", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Scatter plot of KSdistance and inverse ratio", + "type": "xychart" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "KSdistance should be near 0, and spread should be near 1.0. If not, suspect a calibration problem. \n\nThis version contains some experimental columns (inverse, ratio and change) because both spread and KSdistance are symmetrical. We need to know if target site is better or worse than the alternate site.", + "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": "rank" + }, + "properties": [ + { + "id": "custom.width", + "value": 45 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "name" + }, + "properties": [ + { + "id": "custom.width", + "value": 261 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tests" + }, + "properties": [ + { + "id": "custom.width", + "value": 71 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Percent" + }, + "properties": [ + { + "id": "custom.width", + "value": 67 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "metro" + }, + "properties": [ + { + "id": "custom.width", + "value": 55 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pct" + }, + "properties": [ + { + "id": "custom.width", + "value": 35 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ISPrank" + }, + "properties": [ + { + "id": "custom.width", + "value": 70 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "percent" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "KSdistance" + }, + "properties": [ + { + "id": "custom.width", + "value": 104 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Spread" + }, + "properties": [ + { + "id": "custom.width", + "value": 68 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "pct" + }, + "properties": [ + { + "id": "custom.width", + "value": 37 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 246 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Sites" + }, + "properties": [ + { + "id": "custom.width", + "value": 47 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "calKS" + }, + "properties": [ + { + "id": "custom.width", + "value": 68 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Gmean" + }, + "properties": [ + { + "id": "custom.width", + "value": 66 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "level" + }, + "properties": [ + { + "id": "custom.width", + "value": 142 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "KSoutlier" + }, + "properties": [ + { + "id": "custom.width", + "value": 201 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 174 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SPoutlier" + }, + "properties": [ + { + "id": "custom.width", + "value": 196 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "targetSite" + }, + "properties": [ + { + "id": "custom.width", + "value": 162 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "spread" + }, + "properties": [ + { + "id": "custom.width", + "value": 101 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "inverse" + }, + "properties": [ + { + "id": "custom.width", + "value": 121 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ratio" + }, + "properties": [ + { + "id": "custom.width", + "value": 98 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "change" + }, + "properties": [ + { + "id": "custom.width", + "value": 81 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "distance" + }, + "properties": [ + { + "id": "custom.width", + "value": 92 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "triplets" + }, + "properties": [ + { + "id": "custom.width", + "value": 113 + } + ] + } + ] + }, + "gridPos": { + "h": 26, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 20, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "spread" + } + ] + }, + "pluginVersion": "11.1.3", + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-oti", + "rawQuery": true, + "rawSql": "\nSELECT * \n-- FROM `${dataset}.cached_metro_report`(\"MinRTT\", \"${site:regex}\", ${ISPcount})\nFROM `${dataset}.calibration_report` (\"${method}\",\"${xAxis}\", ${binSize}, \"${field}\",\n DATE(REGEXP_EXTRACT(\"${__from:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n DATE(REGEXP_EXTRACT(\"${__to:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n \"^(${region:regex})\",${radius}, ${ISPcount}) \n", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Calibration report", + "type": "table" + } + ], + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Google BigQuery (mlab-collaboration)", + "value": "P116E76923C5457A4" + }, + "hide": 1, + "includeAll": false, + "multi": false, + "name": "datasource", + "options": [], + "query": "grafana-bigquery-datasource", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "hide": 2, + "name": "dataset", + "query": "mlab-collaboration.mm_preproduction", + "skipUrlSync": false, + "type": "constant" + }, + { + "current": { + "selected": true, + "text": "cached", + "value": "cached" + }, + "description": "Select processing stack version", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "method", + "options": [ + { + "selected": true, + "text": "cached", + "value": "cached" + }, + { + "selected": false, + "text": "live", + "value": "live" + }, + { + "selected": false, + "text": "experimental", + "value": "experimental" + } + ], + "query": "cached, live, experimental", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "MeanThroughputMbps", + "value": "MeanThroughputMbps" + }, + "description": "Select the 4th data column. (Linear fields don't display correctly.) \nMethod must be set to experimental FIRST.", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "field", + "options": [ + { + "selected": true, + "text": "MeanThroughputMbps", + "value": "MeanThroughputMbps" + }, + { + "selected": false, + "text": "uploadMeanThroughputMbps", + "value": "uploadMeanThroughputMbps" + }, + { + "selected": false, + "text": "LossRate", + "value": "LossRate" + } + ], + "query": "MeanThroughputMbps, uploadMeanThroughputMbps, LossRate", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": ".*", + "current": { + "selected": true, + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "definition": "", + "description": "Used to select Client ISPs to be evaluated in region. ", + "hide": 0, + "includeAll": true, + "label": "Region", + "multi": true, + "name": "region", + "options": [], + "query": { + "editorMode": "code", + "format": 1, + "location": "", + "project": "measurement-lab", + "rawQuery": true, + "rawSql": "# From: 2024-12-20 Prototype cached site picker \n\nSELECT\n CONCAT(metro, ' ', ContinentCode, ' ', City, ', ', CountryCode) AS text,\n metro AS value,\nFROM (\n SELECT\n REGEXP_EXTRACT(site, '^([a-z]{3})') AS metro,\n ANY_VALUE(ContinentCode) AS ContinentCode,\n ANY_VALUE(City) AS City,\n ANY_VALUE(CountryCode) AS CountryCode,\n -- Uses ${datasource} implicitly\n FROM `${dataset}.cached_metadata`\n GROUP BY metro\n ORDER BY ContinentCode, CountryCode, metro\n)\n", + "refId": "tempvar", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "1", + "value": "1" + }, + "description": "Radius from the anchor metro for selecting servers", + "hide": 0, + "includeAll": false, + "label": "Radius (kM)", + "multi": false, + "name": "radius", + "options": [ + { + "selected": true, + "text": "1", + "value": "1" + }, + { + "selected": false, + "text": "100", + "value": "100" + }, + { + "selected": false, + "text": "500", + "value": "500" + } + ], + "query": "1, 100, 500", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "none", + "value": "none" + }, + "description": "Select time granularity for some experimental queries. ", + "hide": 2, + "includeAll": false, + "multi": false, + "name": "xAxis", + "options": [ + { + "selected": true, + "text": "none", + "value": "none" + }, + { + "selected": false, + "text": "day", + "value": "day" + }, + { + "selected": false, + "text": "hour", + "value": "hour" + } + ], + "query": "none, day, hour", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": "400", + "current": { + "selected": false, + "text": "5", + "value": "5" + }, + "description": "Number of ISPs to include when searching for calibration triplets", + "hide": 0, + "includeAll": false, + "label": "", + "multi": false, + "name": "ISPcount", + "options": [ + { + "selected": true, + "text": "5", + "value": "5" + }, + { + "selected": false, + "text": "2", + "value": "2" + }, + { + "selected": false, + "text": "10", + "value": "10" + } + ], + "query": "5, 2, 10", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "description": "Shim", + "hide": 2, + "name": "binSize", + "query": "50", + "skipUrlSync": false, + "type": "constant" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": { + "hidden": false + }, + "timezone": "utc", + "title": "MLab Regional Calibration Dashboard", + "uid": "eeuzfimjclgqoa", + "version": 12, + "weekStart": "" +} diff --git a/grafana-public/dashboards/regional-details-dashboard.json b/grafana-public/dashboards/regional-details-dashboard.json new file mode 100644 index 0000000..f53a247 --- /dev/null +++ b/grafana-public/dashboards/regional-details-dashboard.json @@ -0,0 +1,1577 @@ +{ + "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": "Selectable matrix of Client ISPs and MLab Server comparisons, circa an anchor metro.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 544, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "xIXR1_LMz" + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 121, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# Regional Details Dashboard\n### Warning: This is a pre-release of experimental software.\nIt is not running on production infrastructure and is subject to changes or deletion without notification.\nFor documentation see the [README](/d/ef30n862ylji8a/) or scroll down for basic information. \n\nThe Anchor Metro is used to preselect servers (within the selected radus)\nand preselect client ISPs (by rank in the anchor metro).\n\nData is shown for all selected Severs cross all selected Client ISPs.\n\nNote that the client data is preselected by rank independently in each metro.\nIf a client ISP's rank differs between metros, some of its data might not be shown.\nTo workaround this, select extra client rows,\nbeyond the last clinetISP that you want to select.\n\nIf shown method selects the backend: Please use cached.\n\n", + "mode": "markdown" + }, + "pluginVersion": "11.1.3", + "type": "text" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "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": "name" + }, + "properties": [ + { + "id": "custom.width", + "value": 135 + } + ] + } + ] + }, + "gridPos": { + "h": 1, + "w": 1, + "x": 12, + "y": 0 + }, + "id": 154, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.1.3", + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": "SELECT \"{dataset}\" AS name, \"${dataset}\" AS value\nUNION ALL SELECT \"{method}\", \"${method}\"\nUNION ALL SELECT \"{anchor}\", \"${anchor}\"\nUNION ALL SELECT \"{radius}\", \"${radius}\"\nUNION ALL SELECT \"{region:regex}\", \"${region:regex}\"\nUNION ALL SELECT \"{ISPcount}\", \"${ISPcount}\"\nUNION ALL SELECT \"{ClientISP:regex}\", \"${ClientISP:regex}\"\n-- Consider dates\n", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": ". . . . . Diagnostic Panel", + "type": "table" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "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": "rank" + }, + "properties": [ + { + "id": "custom.width", + "value": 45 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "name" + }, + "properties": [ + { + "id": "custom.width", + "value": 261 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "tests" + }, + "properties": [ + { + "id": "custom.width", + "value": 71 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Percent" + }, + "properties": [ + { + "id": "custom.width", + "value": 67 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "metro" + }, + "properties": [ + { + "id": "custom.width", + "value": 55 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pct" + }, + "properties": [ + { + "id": "custom.width", + "value": 35 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "ISPrank" + }, + "properties": [ + { + "id": "custom.width", + "value": 70 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "percent" + }, + "properties": [ + { + "id": "custom.width", + "value": 69 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "KSdistance" + }, + "properties": [ + { + "id": "custom.width", + "value": 91 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Spread" + }, + "properties": [ + { + "id": "custom.width", + "value": 68 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "pct" + }, + "properties": [ + { + "id": "custom.width", + "value": 37 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 246 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Sites" + }, + "properties": [ + { + "id": "custom.width", + "value": 47 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "calKS" + }, + "properties": [ + { + "id": "custom.width", + "value": 68 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Gmean" + }, + "properties": [ + { + "id": "custom.width", + "value": 108 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "level" + }, + "properties": [ + { + "id": "custom.width", + "value": 142 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "KSoutlier" + }, + "properties": [ + { + "id": "custom.width", + "value": 201 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metric" + }, + "properties": [ + { + "id": "custom.width", + "value": 174 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SPoutlier" + }, + "properties": [ + { + "id": "custom.width", + "value": 196 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "KS_breadcrumb" + }, + "properties": [ + { + "id": "custom.width", + "value": 181 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SP_Breadcrumb" + }, + "properties": [ + { + "id": "custom.width", + "value": 177 + } + ] + } + ] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 6 + }, + "id": 20, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.1.3", + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-oti", + "rawQuery": true, + "rawSql": "\nSELECT level, Metric, Sites, tests, pct, KSdistance,\n KSoutlier AS KS_breadcrumb, Spread, SPoutlier AS SP_Breadcrumb, ISPname\nFROM (\n SELECT * EXCEPT (ISPname),\n data AS metric,\n percent AS pct,\n IF (level like \"Regional Summary\",\n FORMAT (\"%t summary\", REGEXP_REPLACE(ISPname, '^0 ', \"\")),\n ISPname\n ) AS ISPname,\n -- FROM `${dataset}.cached_metro_report`(\"MinRTT\", \"${site:regex}\", ${ISPcount})\n FROM `${dataset}.regional_report` (\"${method}\",\"${xAxis}\", ${binSize}, \"${table_field}\",\n DATE(REGEXP_EXTRACT(\"${__from:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n DATE(REGEXP_EXTRACT(\"${__to:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n \"^(${region:regex})\", \"^(${ClientISP:regex})\", ${ISPcount})\n WHERE ${verbose} OR level like \"Regional Summary\" OR level LIKE \"ISP%%\" \n)", + "refId": "A", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + } + ], + "title": "Summary Statistics for the top ISPs in $anchor", + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 34, + "panels": [], + "repeat": "ClientISP", + "repeatDirection": "h", + "title": "Performance Distributions for Client ISP $ClientISP", + "type": "row" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "", + "gridPos": { + "h": 13, + "w": 6, + "x": 0, + "y": 16 + }, + "id": 81, + "maxDataPoints": 80000, + "options": { + "config": { + "displayModeBar": true + }, + "data": [], + "layout": { + "font": { + "color": "grey" + }, + "legend": { + "orientation": "h" + }, + "margin": { + "b": 50, + "l": 50, + "r": 50, + "t": 10 + }, + "paper_bgcolor": "rgba(0, 0, 0, 0)", + "plot_bgcolor": "rgba(0, 0, 0, 0)", + "xaxis": { + "autorange": false, + "gridcolor": "#333", + "range": [ + 0, + 300 + ], + "type": "linear" + }, + "yaxis": { + "autorange": true, + "gridcolor": "#333", + "range": [ + -0.026115306133018455, + 0.4961908165273505 + ], + "type": "linear" + } + }, + "onclick": "console.log(\"okay\");\nconsole.log(data)\n// window.updateVariables({query:{'var-project':'test'}, partial: true})", + "script": "console.log(data);\nvar sites = {};\n\nvar x = data.series[0].fields[0].values;\nvar y = data.series[0].fields[1].values;\nvar names = data.series[0].fields[2].values;\n\nnames.forEach(site => {\n sites[site] = {\n x: [],\n y: [],\n name: site,\n line: {\n width: 1\n }\n }\n}); \nx.forEach((xv, i) => {\n sites[names[i]].x.push(x[i]);\n sites[names[i]].y.push(y[i]);\n})\nvar data = [];\nObject.keys(sites).sort().forEach(site => {\n data.push(sites[site]);\n});\nconsole.log(data);\nvar site = \"atl03\";\nvar trace = {\n x: x, //.filter((element, i) => names[i] === site),\n y: y, //.filter((element, i) => names[i] === site),\n name: names //.filter((element, i) => names[i] === site)\n};\nconsole.log(\"okay2\");\nconsole.log(trace);\n//return {data:[trace]};\nreturn {data:data};" + }, + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 0, + "group": [], + "location": "US", + "metricColumn": "none", + "orderByCol": "1", + "orderBySort": "1", + "project": "mlab-oti", + "rawQuery": true, + "rawSql": "WITH\n\nISPdata AS (\n SELECT\n bin,\n binIX,\n CAST(ROUND(binIX / 50.0 * ${binSize}) AS INT) AS thinedIX,\n SUM(hist) AS hist,\n siteName,\n FROM `${dataset}.access_ndt7_isp_histograms` (\"${method}\", \"${xAxis}\", ${binSize}, \"MinRTT\",\n DATE(REGEXP_EXTRACT(\"${__from:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n DATE(REGEXP_EXTRACT(\"${__to:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n \"${region:regex}\", ${ISPcount})\n WHERE REGEXP_CONTAINS ( ISPname, \"^(${ClientISP:regex})\" )\n GROUP BY siteName, thinedIX, binIX, bin\n HAVING (binIX = thinedIX * 50 / ${binSize}) OR (\"$mode\" = \"cdf\")\n)\n\nSELECT bin,\n CASE \"$mode\"\n WHEN \"pdf\" THEN hist / SUM(hist) OVER (partition by siteName)\n WHEN \"peak\" THEN hist / MAX(hist) OVER (partition by siteName)\n ELSE SUM(hist) OVER (PARTITION BY siteName ORDER BY bin ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) / SUM(hist) OVER (partition by siteName)\n END AS data,\n siteName,\n FROM ISPdata\n ORDER BY bin", + "refId": "A", + "select": [ + [ + { + "params": [ + "-- value --" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "timeColumn": "-- time --", + "timeColumnType": "DATE", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Download MinRTT (linear mS) per MLab Site for ${ClientISP}", + "type": "ae3e-plotly-panel" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "", + "gridPos": { + "h": 13, + "w": 6, + "x": 6, + "y": 16 + }, + "id": 48, + "maxDataPoints": 80000, + "options": { + "config": { + "displayModeBar": true + }, + "data": [], + "layout": { + "font": { + "color": "grey" + }, + "legend": { + "orientation": "h" + }, + "margin": { + "b": 50, + "l": 50, + "r": 50, + "t": 10 + }, + "paper_bgcolor": "rgba(0, 0, 0, 0)", + "plot_bgcolor": "rgba(0, 0, 0, 0)", + "xaxis": { + "autorange": false, + "gridcolor": "#333", + "range": [ + -0.3, + 3 + ], + "type": "log" + }, + "yaxis": { + "autorange": true, + "gridcolor": "#333", + "range": [ + -0.026115306133018455, + 0.4961908165273505 + ], + "type": "linear" + } + }, + "onclick": "console.log(\"okay\");\nconsole.log(data)\n// window.updateVariables({query:{'var-project':'test'}, partial: true})", + "script": "console.log(data);\nvar sites = {};\n\nvar x = data.series[0].fields[0].values;\nvar y = data.series[0].fields[1].values;\nvar names = data.series[0].fields[2].values;\n\nnames.forEach(site => {\n sites[site] = {\n x: [],\n y: [],\n name: site,\n line: {\n width: 1\n }\n }\n}); \nx.forEach((xv, i) => {\n sites[names[i]].x.push(x[i]);\n sites[names[i]].y.push(y[i]);\n})\nvar data = [];\nObject.keys(sites).sort().forEach(site => {\n data.push(sites[site]);\n});\nconsole.log(data);\nvar site = \"atl03\";\nvar trace = {\n x: x, //.filter((element, i) => names[i] === site),\n y: y, //.filter((element, i) => names[i] === site),\n name: names //.filter((element, i) => names[i] === site)\n};\nconsole.log(\"okay2\");\nconsole.log(trace);\n//return {data:[trace]};\nreturn {data:data};" + }, + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 0, + "group": [], + "location": "US", + "metricColumn": "none", + "orderByCol": "1", + "orderBySort": "1", + "project": "mlab-oti", + "rawQuery": true, + "rawSql": "WITH\n\nISPdata AS (\n SELECT\n bin,\n binIX,\n CAST(ROUND(binIX / 50.0 * ${binSize}) AS INT) AS thinedIX,\n SUM(hist) AS hist,\n siteName,\n FROM `${dataset}.access_ndt7_isp_histograms` (\"${method}\", \"${xAxis}\", ${binSize}, \"MinRTT\",\n DATE(REGEXP_EXTRACT(\"${__from:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n DATE(REGEXP_EXTRACT(\"${__to:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n \"${region:regex}\", ${ISPcount})\n WHERE REGEXP_CONTAINS ( ISPname, \"^(${ClientISP:regex})\" )\n GROUP BY siteName, thinedIX, binIX, bin\n HAVING (binIX = thinedIX * 50 / ${binSize}) OR (\"$mode\" = \"cdf\")\n)\n\nSELECT bin,\n CASE \"$mode\"\n WHEN \"pdf\" THEN hist / SUM(hist) OVER (partition by siteName)\n WHEN \"peak\" THEN hist / MAX(hist) OVER (partition by siteName)\n ELSE SUM(hist) OVER (PARTITION BY siteName ORDER BY bin ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) / SUM(hist) OVER (partition by siteName)\n END AS data,\n siteName,\n FROM ISPdata\n ORDER BY bin", + "refId": "A", + "select": [ + [ + { + "params": [ + "-- value --" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "timeColumn": "-- time --", + "timeColumnType": "DATE", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Download MinRTT (mS) per MLab Site for $ClientISP", + "type": "ae3e-plotly-panel" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "", + "gridPos": { + "h": 13, + "w": 6, + "x": 12, + "y": 16 + }, + "id": 43, + "maxDataPoints": 80000, + "options": { + "config": { + "displayModeBar": true + }, + "data": [], + "layout": { + "font": { + "color": "grey" + }, + "legend": { + "orientation": "h" + }, + "margin": { + "b": 50, + "l": 50, + "r": 50, + "t": 10 + }, + "paper_bgcolor": "rgba(0, 0, 0, 0)", + "plot_bgcolor": "rgba(0, 0, 0, 0)", + "xaxis": { + "autorange": false, + "gridcolor": "#333", + "range": [ + -0.3, + 3.3 + ], + "type": "log" + }, + "yaxis": { + "autorange": true, + "gridcolor": "#333", + "range": [ + -0.0023341868970811943, + 0.044349551044542676 + ], + "type": "linear" + } + }, + "onclick": "console.log(\"okay\");\nconsole.log(data)\n// window.updateVariables({query:{'var-project':'test'}, partial: true})", + "script": "console.log(data);\nvar sites = {};\n\nvar x = data.series[0].fields[0].values;\nvar y = data.series[0].fields[1].values;\nvar names = data.series[0].fields[2].values;\n\nnames.forEach(site => {\n sites[site] = {\n x: [],\n y: [],\n name: site,\n line: {\n width: 1\n }\n }\n}); \nx.forEach((xv, i) => {\n sites[names[i]].x.push(x[i]);\n sites[names[i]].y.push(y[i]);\n})\nvar data = [];\nObject.keys(sites).sort().forEach(site => {\n data.push(sites[site]);\n});\nconsole.log(data);\nvar site = \"atl03\";\nvar trace = {\n x: x, //.filter((element, i) => names[i] === site),\n y: y, //.filter((element, i) => names[i] === site),\n name: names //.filter((element, i) => names[i] === site)\n};\nconsole.log(\"okay2\");\nconsole.log(trace);\n//return {data:[trace]};\nreturn {data:data};" + }, + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 0, + "group": [], + "location": "US", + "metricColumn": "none", + "orderByCol": "1", + "orderBySort": "1", + "project": "mlab-oti", + "rawQuery": true, + "rawSql": "\nWITH\n\nISPdata AS (\n SELECT\n bin,\n binIX,\n CAST(ROUND(binIX / 50.0 * ${binSize}) AS INT) AS thinedIX,\n SUM(hist) AS hist,\n siteName,\n FROM `${dataset}.access_ndt7_isp_histograms` (\"${method}\", \"${xAxis}\", ${binSize}, \"MeanThroughputMbps\",\n DATE(REGEXP_EXTRACT(\"${__from:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n DATE(REGEXP_EXTRACT(\"${__to:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n \"${region:regex}\", ${ISPcount})\n WHERE REGEXP_CONTAINS ( ISPname, \"^(${ClientISP:regex})\" )\n GROUP BY siteName, thinedIX, binIX, bin\n HAVING (binIX = thinedIX * 50 / ${binSize}) OR (\"$mode\" = \"cdf\")\n)\n\nSELECT bin,\n CASE \"$mode\"\n WHEN \"pdf\" THEN hist / SUM(hist) OVER (partition by siteName)\n WHEN \"peak\" THEN hist / MAX(hist) OVER (partition by siteName)\n ELSE SUM(hist) OVER (PARTITION BY siteName ORDER BY bin ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) / SUM(hist) OVER (partition by siteName)\n END AS data,\n siteName,\n FROM ISPdata\n ORDER BY bin", + "refId": "A", + "select": [ + [ + { + "params": [ + "-- value --" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "timeColumn": "-- time --", + "timeColumnType": "DATE", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Download Mbps per MLab Site for $ClientISP", + "type": "ae3e-plotly-panel" + }, + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "description": "", + "gridPos": { + "h": 13, + "w": 6, + "x": 18, + "y": 16 + }, + "id": 133, + "maxDataPoints": 80000, + "options": { + "config": { + "displayModeBar": true + }, + "data": [], + "layout": { + "font": { + "color": "grey" + }, + "legend": { + "orientation": "h" + }, + "margin": { + "b": 50, + "l": 50, + "r": 50, + "t": 10 + }, + "paper_bgcolor": "rgba(0, 0, 0, 0)", + "plot_bgcolor": "rgba(0, 0, 0, 0)", + "xaxis": { + "autorange": true, + "gridcolor": "#333", + "range": [ + 5.299999999999999, + 7.4799999999999995 + ], + "showspikes": false, + "type": "log" + }, + "yaxis": { + "autorange": true, + "gridcolor": "#333", + "range": [ + -0.055555555555555566, + 1.0555555555555556 + ], + "showspikes": false, + "type": "linear" + } + }, + "onclick": "console.log(\"okay\");\nconsole.log(data)\n// window.updateVariables({query:{'var-project':'test'}, partial: true})", + "script": "console.log(data);\nvar sites = {};\n\nvar x = data.series[0].fields[0].values;\nvar y = data.series[0].fields[1].values;\nvar names = data.series[0].fields[2].values;\n\nnames.forEach(site => {\n sites[site] = {\n x: [],\n y: [],\n name: site,\n line: {\n width: 1\n }\n }\n}); \nx.forEach((xv, i) => {\n sites[names[i]].x.push(x[i]);\n sites[names[i]].y.push(y[i]);\n})\nvar data = [];\nObject.keys(sites).sort().forEach(site => {\n data.push(sites[site]);\n});\nconsole.log(data);\nvar site = \"atl03\";\nvar trace = {\n x: x, //.filter((element, i) => names[i] === site),\n y: y, //.filter((element, i) => names[i] === site),\n name: names //.filter((element, i) => names[i] === site)\n};\nconsole.log(\"okay2\");\nconsole.log(trace);\n//return {data:[trace]};\nreturn {data:data};" + }, + "targets": [ + { + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "editorMode": "code", + "format": 1, + "group": [], + "location": "US", + "metricColumn": "none", + "orderByCol": "1", + "orderBySort": "1", + "project": "mlab-oti", + "rawQuery": true, + "rawSql": "\nWITH\n\nISPdata AS (\n SELECT\n bin,\n SUM(hist) AS hist,\n siteName,\n -- FROM `${dataset}.access_ndt7_cached_histograms`(\"MeanThroughputMbps\", \"${region:regex}\", ${ISPrank})\n FROM `${dataset}.access_ndt7_isp_histograms` (\"${method}\", \"${xAxis}\", ${binSize}, \"${field}\",\n DATE(REGEXP_EXTRACT(\"${__from:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n DATE(REGEXP_EXTRACT(\"${__to:date:iso}\", '[0-9]{4}-[0-9]{2}-[0-9]{2}')),\n \"${region:regex}\", ${ISPcount})\n\n WHERE REGEXP_CONTAINS ( ISPname, \"^(${ClientISP:regex})\" )\n GROUP BY siteName, bin\n)\n\nSELECT bin,\n CASE \"$mode\"\n WHEN \"pdf\" THEN hist / SUM(hist) OVER (partition by siteName)\n WHEN \"peak\" THEN hist / MAX(hist) OVER (partition by siteName)\n ELSE SUM(hist) OVER (PARTITION BY siteName ORDER BY bin ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) / SUM(hist) OVER (partition by siteName)\n END AS data,\n siteName,\n FROM ISPdata\n ORDER BY bin", + "refId": "A", + "select": [ + [ + { + "params": [ + "-- value --" + ], + "type": "column" + } + ] + ], + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + }, + "timeColumn": "-- time --", + "timeColumnType": "DATE", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Download $field per MLab Site for $ClientISP", + "type": "ae3e-plotly-panel" + } + ], + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Google BigQuery (mlab-collaboration)", + "value": "P116E76923C5457A4" + }, + "description": "Backend credentials", + "hide": 2, + "includeAll": false, + "multi": false, + "name": "datasource", + "options": [], + "query": "grafana-bigquery-datasource", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "description": "Path to BQ resources not inherited from credentials", + "hide": 2, + "name": "dataset", + "query": "mlab-collaboration.mm_preproduction", + "skipUrlSync": false, + "type": "constant" + }, + { + "current": { + "selected": false, + "text": "cached", + "value": "cached" + }, + "description": "Select processing stack version", + "hide": 2, + "includeAll": false, + "multi": false, + "name": "method", + "options": [ + { + "selected": true, + "text": "cached", + "value": "cached" + }, + { + "selected": false, + "text": "live", + "value": "live" + }, + { + "selected": false, + "text": "experimental", + "value": "experimental" + } + ], + "query": "cached, live, experimental", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": ".*", + "current": { + "selected": false, + "text": "gru SA Campinas, BR", + "value": "gru" + }, + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "definition": "", + "description": "Used to select M-Lab servers and Client ISPs to be evaluated in the region. ", + "hide": 0, + "includeAll": false, + "label": "Anchor metro", + "multi": false, + "name": "anchor", + "options": [], + "query": { + "editorMode": "code", + "format": 1, + "location": "", + "project": "measurement-lab", + "rawQuery": true, + "rawSql": "# From: 2024-12-20 Prototype cached site picker \n\nSELECT\n FORMAT('%t %t %t, %t', metro, ContinentCode, City, CountryCode) AS text,\n metro AS value,\nFROM (\n SELECT\n REGEXP_EXTRACT(site, '^([a-z]{3})') AS metro,\n ANY_VALUE(ContinentCode) AS ContinentCode,\n ANY_VALUE(City) AS City,\n ANY_VALUE(CountryCode) AS CountryCode,\n FROM `${dataset}.cached_metadata`\n GROUP BY metro\n ORDER BY ContinentCode, CountryCode, metro\n)\n", + "refId": "tempvar", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "100", + "value": "100" + }, + "description": "Radius from the anchor metro for selecting servers", + "hide": 0, + "includeAll": false, + "label": "Radius (kM)", + "multi": false, + "name": "radius", + "options": [ + { + "selected": false, + "text": "1", + "value": "1" + }, + { + "selected": true, + "text": "100", + "value": "100" + }, + { + "selected": false, + "text": "500", + "value": "500" + } + ], + "query": "1, 100, 500", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": true, + "text": [ + "gru02 (0.0 BR) 262589, INTERNEXA BRASIL OPERADORA DE TELECOMUNICACOES S A", + "gru03 (0.0 BR) 6762, TELECOM ITALIA SPARKLE S p A ", + "gru06 (0.0 BR) 396982, Google LLC" + ], + "value": [ + "gru02", + "gru03", + "gru06" + ] + }, + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "definition": "", + "description": "Select M-Lab sites within the specified radius of the anchor metro.", + "hide": 0, + "includeAll": false, + "label": "Servers", + "multi": true, + "name": "region", + "options": [], + "query": { + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-collaboration", + "rawQuery": true, + "rawSql": " SELECT\n # FORMAT ('TEXT=\"%t (%t) %t\" VALUE=%t', site, ANY_VALUE(ROUND(distance)), ANY_VALUE(ASName), site) AS LongText,\n site AS value,\n FORMAT ('%t (%t %t) %t', site, ANY_VALUE(ROUND(distance)), ANY_VALUE(CountryCode), ANY_VALUE(ASName)) AS text\n FROM (\n SELECT\n ST_DISTANCE(\n ( SELECT ANY_VALUE(ST_GEOGPOINT(Longitude, Latitude))\n FROM `${dataset}.cached_metadata`\n WHERE REGEXP_CONTAINS ( site, \"^(${anchor:regex})\" )),\n ST_GEOGPOINT(Longitude, Latitude)\n ) / 1000.0 AS distance,\n *\n -- Uses ${datasource} Implicitly\n FROM `mlab-collaboration.mm_preproduction.cached_metadata`\n ORDER BY distance, site\n)\nWHERE distance < ${radius}\nGROUP BY site\n", + "refId": "tempvar", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "10", + "value": "10" + }, + "description": "Number of Client ISPs to preprocess. It is best to include extras, beyond the Client ISP selectors.", + "hide": 0, + "includeAll": false, + "label": "Client Rows", + "multi": false, + "name": "ISPcount", + "options": [ + { + "selected": false, + "text": "0", + "value": "0" + }, + { + "selected": false, + "text": "1", + "value": "1" + }, + { + "selected": false, + "text": "2", + "value": "2" + }, + { + "selected": false, + "text": "3", + "value": "3" + }, + { + "selected": false, + "text": "4", + "value": "4" + }, + { + "selected": false, + "text": "5", + "value": "5" + }, + { + "selected": true, + "text": "10", + "value": "10" + }, + { + "selected": false, + "text": "20", + "value": "20" + }, + { + "selected": false, + "text": "50", + "value": "50" + } + ], + "query": "0,1,2,3,4,5,10,20,50", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "allValue": ".*", + "current": { + "selected": true, + "text": [ + "18881 TELEFÔNICA BRASIL S A", + "28573 CLARO S A ", + "26599 TELEFÔNICA BRASIL S A", + "27699 TELEFÔNICA BRASIL S A", + "14593 Space Exploration Technologies Corporation", + "26615 Tim Celular S A " + ], + "value": [ + "18881 TELEFÔNICA BRASIL S A", + "28573 CLARO S A ", + "26599 TELEFÔNICA BRASIL S A", + "27699 TELEFÔNICA BRASIL S A", + "14593 Space Exploration Technologies Corporation", + "26615 Tim Celular S A " + ] + }, + "datasource": { + "type": "grafana-bigquery-datasource", + "uid": "${datasource}" + }, + "definition": "", + "description": "Select Client ISPs of interest. ", + "hide": 0, + "includeAll": false, + "label": "Client ISPs", + "multi": true, + "name": "ClientISP", + "options": [], + "query": { + "editorMode": "code", + "format": 1, + "location": "", + "project": "mlab-oti", + "rawQuery": true, + "rawSql": "\nSELECT\n ISPname AS text,\nFROM `${dataset}.access_ndt7_cached_histograms`(\"MinRTT\", \"${anchor:regex}\", ${ISPcount})\nGROUP BY ISPrank, ISPname\nORDER BY ISPrank\n", + "refId": "tempvar", + "sql": { + "columns": [ + { + "parameters": [], + "type": "function" + } + ], + "groupBy": [ + { + "property": { + "type": "string" + }, + "type": "groupBy" + } + ], + "limit": 50 + } + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": false, + "text": "pdf", + "value": "pdf" + }, + "description": "Select graph type.", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "mode", + "options": [ + { + "selected": true, + "text": "pdf", + "value": "pdf" + }, + { + "selected": false, + "text": "peak", + "value": "peak" + }, + { + "selected": false, + "text": "cdf", + "value": "cdf" + } + ], + "query": "pdf,peak,cdf", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "50", + "value": "50" + }, + "description": "Re-scale the pdf X axes to the specified number of bins per decade, to smooth Y axis noise. The raw data is 50 bins per decade.", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "binSize", + "options": [ + { + "selected": true, + "text": "50", + "value": "50" + }, + { + "selected": false, + "text": "25", + "value": "25" + }, + { + "selected": false, + "text": "10", + "value": "10" + }, + { + "selected": false, + "text": "5", + "value": "5" + }, + { + "selected": false, + "text": "2", + "value": "2" + }, + { + "selected": false, + "text": "1", + "value": "1" + } + ], + "query": "50, 25, 10, 5, 2, 1", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "none", + "value": "none" + }, + "description": "Select time granularity for some experimental queries. ", + "hide": 2, + "includeAll": false, + "multi": false, + "name": "xAxis", + "options": [ + { + "selected": true, + "text": "none", + "value": "none" + }, + { + "selected": false, + "text": "day", + "value": "day" + }, + { + "selected": false, + "text": "hour", + "value": "hour" + } + ], + "query": "none, day, hour", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "MeanThroughputMbps", + "value": "MeanThroughputMbps" + }, + "description": "Select metric displayed in the table.", + "hide": 0, + "includeAll": false, + "label": "Table Field", + "multi": false, + "name": "table_field", + "options": [ + { + "selected": false, + "text": "MinRTT", + "value": "MinRTT" + }, + { + "selected": true, + "text": "MeanThroughputMbps", + "value": "MeanThroughputMbps" + }, + { + "selected": false, + "text": "uploadMeanThroughputMbps", + "value": "uploadMeanThroughputMbps" + }, + { + "selected": false, + "text": "LossRate", + "value": "LossRate" + }, + { + "selected": false, + "text": "linearMinRTT", + "value": "linearMinRTT" + }, + { + "selected": false, + "text": "linearMSS", + "value": "linearMSS" + }, + { + "selected": false, + "text": "RTO", + "value": "RTO" + }, + { + "selected": false, + "text": "fineMeanThroughputMbps", + "value": "fineMeanThroughputMbps" + } + ], + "query": "MinRTT, MeanThroughputMbps, uploadMeanThroughputMbps, LossRate, linearMinRTT, linearMSS, RTO, fineMeanThroughputMbps", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "false", + "value": "false" + }, + "description": "Show more detail in the result table.", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "verbose", + "options": [ + { + "selected": true, + "text": "false", + "value": "false" + }, + { + "selected": false, + "text": "true", + "value": "true" + } + ], + "query": "false, true", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + }, + { + "current": { + "selected": false, + "text": "none", + "value": "none" + }, + "description": "Select the 4th data column.\nMost choices are not supported when using cached data", + "hide": 0, + "includeAll": false, + "label": "Fourth column", + "multi": false, + "name": "field", + "options": [ + { + "selected": true, + "text": "none", + "value": "none" + }, + { + "selected": false, + "text": "MinRTT", + "value": "MinRTT" + }, + { + "selected": false, + "text": "MeanThroughputMbps", + "value": "MeanThroughputMbps" + }, + { + "selected": false, + "text": "uploadMeanThroughputMbps", + "value": "uploadMeanThroughputMbps" + }, + { + "selected": false, + "text": "LossRate", + "value": "LossRate" + }, + { + "selected": false, + "text": "RTO", + "value": "RTO" + } + ], + "query": "none, MinRTT, MeanThroughputMbps, uploadMeanThroughputMbps, LossRate, RTO", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": { + "hidden": true + }, + "timezone": "utc", + "title": "Public Regional Details Dashboard", + "uid": "20251103a", + "version": 4, + "weekStart": "" +}