diff --git a/src/graphInfluxDB.py b/src/graphInfluxDB.py index b2601f54..7f4e2b78 100644 --- a/src/graphInfluxDB.py +++ b/src/graphInfluxDB.py @@ -114,63 +114,74 @@ def getCircuitBandwidthStats(subscriberCircuits, tinsStats): allPacketsDownload = 0.0 allPacketsUpload = 0.0 for circuit in subscriberCircuits: - circuit['stats']['sinceLastQuery']['bitsDownload'] = circuit['stats']['sinceLastQuery']['bitsUpload'] = 0.0 - circuit['stats']['sinceLastQuery']['bytesSentDownload'] = circuit['stats']['sinceLastQuery']['bytesSentUpload'] = 0.0 - circuit['stats']['sinceLastQuery']['packetDropsDownload'] = circuit['stats']['sinceLastQuery']['packetDropsUpload'] = 0.0 - circuit['stats']['sinceLastQuery']['packetsSentDownload'] = circuit['stats']['sinceLastQuery']['packetsSentUpload'] = 0.0 + circuit['stats']['sinceLastQuery']['bitsDownload'] = circuit['stats']['sinceLastQuery']['bitsUpload'] = None + circuit['stats']['sinceLastQuery']['bytesSentDownload'] = circuit['stats']['sinceLastQuery']['bytesSentUpload'] = None + circuit['stats']['sinceLastQuery']['packetDropsDownload'] = circuit['stats']['sinceLastQuery']['packetDropsUpload'] = None + circuit['stats']['sinceLastQuery']['packetsSentDownload'] = circuit['stats']['sinceLastQuery']['packetsSentUpload'] = None try: if (circuit['stats']['currentQuery']['bytesSentDownload'] - circuit['stats']['priorQuery']['bytesSentDownload']) >= 0.0: circuit['stats']['sinceLastQuery']['bytesSentDownload'] = circuit['stats']['currentQuery']['bytesSentDownload'] - circuit['stats']['priorQuery']['bytesSentDownload'] else: - circuit['stats']['sinceLastQuery']['bytesSentDownload'] = 0.0 + circuit['stats']['sinceLastQuery']['bytesSentDownload'] = None if (circuit['stats']['currentQuery']['bytesSentUpload'] - circuit['stats']['priorQuery']['bytesSentUpload']) >= 0.0: circuit['stats']['sinceLastQuery']['bytesSentUpload'] = circuit['stats']['currentQuery']['bytesSentUpload'] - circuit['stats']['priorQuery']['bytesSentUpload'] else: - circuit['stats']['sinceLastQuery']['bytesSentUpload'] = 0.0 + circuit['stats']['sinceLastQuery']['bytesSentUpload'] = None except: - circuit['stats']['sinceLastQuery']['bytesSentDownload'] = 0.0 - circuit['stats']['sinceLastQuery']['bytesSentUpload'] = 0.0 + circuit['stats']['sinceLastQuery']['bytesSentDownload'] = None + circuit['stats']['sinceLastQuery']['bytesSentUpload'] = None try: if (circuit['stats']['currentQuery']['packetDropsDownload'] - circuit['stats']['priorQuery']['packetDropsDownload']) >= 0.0: circuit['stats']['sinceLastQuery']['packetDropsDownload'] = circuit['stats']['currentQuery']['packetDropsDownload'] - circuit['stats']['priorQuery']['packetDropsDownload'] else: - circuit['stats']['sinceLastQuery']['packetDropsDownload'] = 0.0 + circuit['stats']['sinceLastQuery']['packetDropsDownload'] = None if (circuit['stats']['currentQuery']['packetDropsUpload'] - circuit['stats']['priorQuery']['packetDropsUpload']) >= 0.0: circuit['stats']['sinceLastQuery']['packetDropsUpload'] = circuit['stats']['currentQuery']['packetDropsUpload'] - circuit['stats']['priorQuery']['packetDropsUpload'] else: - circuit['stats']['sinceLastQuery']['packetDropsUpload'] = 0.0 + circuit['stats']['sinceLastQuery']['packetDropsUpload'] = None except: - circuit['stats']['sinceLastQuery']['packetDropsDownload'] = 0.0 - circuit['stats']['sinceLastQuery']['packetDropsUpload'] = 0.0 + circuit['stats']['sinceLastQuery']['packetDropsDownload'] = None + circuit['stats']['sinceLastQuery']['packetDropsUpload'] = None try: if (circuit['stats']['currentQuery']['packetsSentDownload'] - circuit['stats']['priorQuery']['packetsSentDownload']) >= 0.0: circuit['stats']['sinceLastQuery']['packetsSentDownload'] = circuit['stats']['currentQuery']['packetsSentDownload'] - circuit['stats']['priorQuery']['packetsSentDownload'] else: - circuit['stats']['sinceLastQuery']['packetsSentDownload'] = 0.0 + circuit['stats']['sinceLastQuery']['packetsSentDownload'] = None if (circuit['stats']['currentQuery']['packetsSentUpload'] - circuit['stats']['priorQuery']['packetsSentUpload']) >= 0.0: circuit['stats']['sinceLastQuery']['packetsSentUpload'] = circuit['stats']['currentQuery']['packetsSentUpload'] - circuit['stats']['priorQuery']['packetsSentUpload'] else: - circuit['stats']['sinceLastQuery']['packetsSentUpload'] = 0.0 + circuit['stats']['sinceLastQuery']['packetsSentUpload'] = None except: - circuit['stats']['sinceLastQuery']['packetsSentDownload'] = 0.0 - circuit['stats']['sinceLastQuery']['packetsSentUpload'] = 0.0 + circuit['stats']['sinceLastQuery']['packetsSentDownload'] = None + circuit['stats']['sinceLastQuery']['packetsSentUpload'] = None - allPacketsDownload += circuit['stats']['sinceLastQuery']['packetsSentDownload'] - allPacketsUpload += circuit['stats']['sinceLastQuery']['packetsSentUpload'] + if(circuit['stats']['sinceLastQuery']['packetsSentDownload']): + allPacketsDownload += circuit['stats']['sinceLastQuery']['packetsSentDownload'] + if(circuit['stats']['sinceLastQuery']['packetsSentUpload']): + allPacketsUpload += circuit['stats']['sinceLastQuery']['packetsSentUpload'] if 'priorQuery' in circuit['stats']: if 'time' in circuit['stats']['priorQuery']: currentQueryTime = datetime.fromisoformat(circuit['stats']['currentQuery']['time']) priorQueryTime = datetime.fromisoformat(circuit['stats']['priorQuery']['time']) deltaSeconds = (currentQueryTime - priorQueryTime).total_seconds() - circuit['stats']['sinceLastQuery']['bitsDownload'] = round( - ((circuit['stats']['sinceLastQuery']['bytesSentDownload'] * 8) / deltaSeconds)) if deltaSeconds > 0 else 0 - circuit['stats']['sinceLastQuery']['bitsUpload'] = round( - ((circuit['stats']['sinceLastQuery']['bytesSentUpload'] * 8) / deltaSeconds)) if deltaSeconds > 0 else 0 + if (circuit['stats']['sinceLastQuery']['bytesSentDownload']): + circuit['stats']['sinceLastQuery']['bitsDownload'] = round((circuit['stats']['sinceLastQuery']['bytesSentDownload'] * 8) / deltaSeconds) if deltaSeconds > 0 else 0 + else: + circuit['stats']['sinceLastQuery']['bitsDownload'] = None + if (circuit['stats']['sinceLastQuery']['bytesSentUpload']): + circuit['stats']['sinceLastQuery']['bitsUpload'] = round((circuit['stats']['sinceLastQuery']['bytesSentUpload'] * 8) / deltaSeconds) if deltaSeconds > 0 else 0 + else: + circuit['stats']['sinceLastQuery']['bitsUpload'] = None + else: - circuit['stats']['sinceLastQuery']['bitsDownload'] = (circuit['stats']['sinceLastQuery']['bytesSentDownload'] * 8) - circuit['stats']['sinceLastQuery']['bitsUpload'] = (circuit['stats']['sinceLastQuery']['bytesSentUpload'] * 8) + circuit['stats']['sinceLastQuery']['bitsDownload'] = None + if(circuit['stats']['sinceLastQuery']['bytesSentDownload']): + circuit['stats']['sinceLastQuery']['bitsDownload'] = (circuit['stats']['sinceLastQuery']['bytesSentDownload'] * 8) + circuit['stats']['sinceLastQuery']['bitsUpload'] = None + if(circuit['stats']['sinceLastQuery']['bytesSentUpload']): + circuit['stats']['sinceLastQuery']['bitsUpload'] = (circuit['stats']['sinceLastQuery']['bytesSentUpload'] * 8) tinsStats['sinceLastQuery']['Bulk']['Download']['dropPercentage'] = tinsStats['sinceLastQuery']['Bulk']['Upload']['dropPercentage'] = 0.0 tinsStats['sinceLastQuery']['BestEffort']['Download']['dropPercentage'] = tinsStats['sinceLastQuery']['BestEffort']['Upload']['dropPercentage'] = 0.0 @@ -275,14 +286,20 @@ def getParentNodeBandwidthStats(parentNodes, subscriberCircuits): thisParentNodeStats = {'sinceLastQuery': {}} for circuit in subscriberCircuits: if circuit['ParentNode'] == parentNode['parentNodeName']: - thisNodeBitsDownload += circuit['stats']['sinceLastQuery']['bitsDownload'] - thisNodeBitsUpload += circuit['stats']['sinceLastQuery']['bitsUpload'] + if circuit['stats']['sinceLastQuery']['bitsDownload']: + thisNodeBitsDownload += circuit['stats']['sinceLastQuery']['bitsDownload'] + if circuit['stats']['sinceLastQuery']['bitsUpload']: + thisNodeBitsUpload += circuit['stats']['sinceLastQuery']['bitsUpload'] #thisNodeDropsDownload += circuit['packetDropsDownloadSinceLastQuery'] #thisNodeDropsUpload += circuit['packetDropsUploadSinceLastQuery'] - thisNodeDropsTotal += (circuit['stats']['sinceLastQuery']['packetDropsDownload'] + circuit['stats']['sinceLastQuery']['packetDropsUpload']) - packetsSentDownloadAggregate += circuit['stats']['sinceLastQuery']['packetsSentDownload'] - packetsSentUploadAggregate += circuit['stats']['sinceLastQuery']['packetsSentUpload'] - packetsSentTotalAggregate += (circuit['stats']['sinceLastQuery']['packetsSentDownload'] + circuit['stats']['sinceLastQuery']['packetsSentUpload']) + if circuit['stats']['sinceLastQuery']['packetDropsDownload'] and circuit['stats']['sinceLastQuery']['packetDropsUpload']: + thisNodeDropsTotal += (circuit['stats']['sinceLastQuery']['packetDropsDownload'] + circuit['stats']['sinceLastQuery']['packetDropsUpload']) + if circuit['stats']['sinceLastQuery']['packetsSentDownload']: + packetsSentDownloadAggregate += circuit['stats']['sinceLastQuery']['packetsSentDownload'] + if circuit['stats']['sinceLastQuery']['packetsSentUpload']: + packetsSentUploadAggregate += circuit['stats']['sinceLastQuery']['packetsSentUpload'] + if circuit['stats']['sinceLastQuery']['packetsSentDownload'] and circuit['stats']['sinceLastQuery']['packetsSentUpload']: + packetsSentTotalAggregate += (circuit['stats']['sinceLastQuery']['packetsSentDownload'] + circuit['stats']['sinceLastQuery']['packetsSentUpload']) circuitsMatched += 1 if (packetsSentDownloadAggregate > 0) and (packetsSentUploadAggregate > 0): #overloadFactorDownloadSinceLastQuery = float(round((thisNodeDropsDownload/packetsSentDownloadAggregate)*100.0, 3)) @@ -424,22 +441,34 @@ def refreshBandwidthGraphs(): queriesToSendCount = 0 for chunk in chunkedsubscriberCircuits: + seenSomethingBesides0s = False queriesToSend = [] for circuit in chunk: - bitsDownload = float(circuit['stats']['sinceLastQuery']['bitsDownload']) - bitsUpload = float(circuit['stats']['sinceLastQuery']['bitsUpload']) - percentUtilizationDownload = round((bitsDownload / round(circuit['maxDownload'] * 1000000))*100.0, 1) - percentUtilizationUpload = round((bitsUpload / round(circuit['maxUpload'] * 1000000))*100.0, 1) + bitsDownloadMin = float(circuit['minDownload']) * 1000000 if circuit['minDownload'] else None + bitsDownloadMax = float(circuit['maxDownload']) * 1000000 if circuit['maxDownload'] else None + bitsUploadMin = float(circuit['minUpload']) * 1000000 if circuit['minUpload'] else None + bitsUploadMax = float(circuit['maxUpload']) * 1000000 if circuit['maxUpload'] else None + bitsDownload = float(circuit['stats']['sinceLastQuery']['bitsDownload']) if circuit['stats']['sinceLastQuery']['bitsDownload'] else None + bitsUpload = float(circuit['stats']['sinceLastQuery']['bitsUpload']) if circuit['stats']['sinceLastQuery']['bitsUpload'] else None + bytesSentDownload = float(circuit['stats']['sinceLastQuery']['bytesSentDownload']) if circuit['stats']['sinceLastQuery']['bytesSentDownload'] else None + bytesSentUpload = float(circuit['stats']['sinceLastQuery']['bytesSentUpload']) if circuit['stats']['sinceLastQuery']['bytesSentUpload'] else None + percentUtilizationDownload = round((bitsDownload / round(circuit['maxDownload'] * 1000000))*100.0, 1) if bitsDownload and circuit['maxDownload'] else None + percentUtilizationUpload = round((bitsUpload / round(circuit['maxUpload'] * 1000000))*100.0, 1) if bitsUpload and circuit['maxUpload'] else None + if bitsDownload and bitsUpload: + if (bitsDownload > 0.0) or (bitsUpload > 0.0): + seenSomethingBesides0s = True p = Point('Bandwidth').tag("Circuit", circuit['circuitName']).tag("ParentNode", circuit['ParentNode']).tag("Type", "Circuit").field("Download", bitsDownload).field("Upload", bitsUpload).time(timestamp) queriesToSend.append(p) p = Point('Utilization').tag("Circuit", circuit['circuitName']).tag("ParentNode", circuit['ParentNode']).tag("Type", "Circuit").field("Download", percentUtilizationDownload).field("Upload", percentUtilizationUpload).time(timestamp) queriesToSend.append(p) - write_api.write(bucket=influxDBBucket, record=queriesToSend) + if seenSomethingBesides0s: + write_api.write(bucket=influxDBBucket, record=queriesToSend) # print("Added " + str(len(queriesToSend)) + " points to InfluxDB.") queriesToSendCount += len(queriesToSend) queriesToSend = [] + seenSomethingBesides0s = False for parentNode in parentNodes: bitsDownload = float(parentNode['stats']['sinceLastQuery']['bitsDownload']) bitsUpload = float(parentNode['stats']['sinceLastQuery']['bitsUpload']) @@ -448,6 +477,9 @@ def refreshBandwidthGraphs(): droppedPacketsAllTime += dropsTotal percentUtilizationDownload = round((bitsDownload / round(parentNode['maxDownload'] * 1000000))*100.0, 1) percentUtilizationUpload = round((bitsUpload / round(parentNode['maxUpload'] * 1000000))*100.0, 1) + if bitsDownload and bitsUpload: + if (bitsDownload > 0.0) or (bitsUpload > 0.0): + seenSomethingBesides0s = True p = Point('Bandwidth').tag("Device", parentNode['parentNodeName']).tag("ParentNode", parentNode['parentNodeName']).tag("Type", "Parent Node").field("Download", bitsDownload).field("Upload", bitsUpload).time(timestamp) queriesToSend.append(p) p = Point('Utilization').tag("Device", parentNode['parentNodeName']).tag("ParentNode", parentNode['parentNodeName']).tag("Type", "Parent Node").field("Download", percentUtilizationDownload).field("Upload", percentUtilizationUpload).time(timestamp) @@ -455,11 +487,13 @@ def refreshBandwidthGraphs(): p = Point('Overload').tag("Device", parentNode['parentNodeName']).tag("ParentNode", parentNode['parentNodeName']).tag("Type", "Parent Node").field("Overload", overloadFactor).time(timestamp) queriesToSend.append(p) - write_api.write(bucket=influxDBBucket, record=queriesToSend) + if seenSomethingBesides0s: + write_api.write(bucket=influxDBBucket, record=queriesToSend) # print("Added " + str(len(queriesToSend)) + " points to InfluxDB.") queriesToSendCount += len(queriesToSend) if 'cake diffserv4' in sqm: + seenSomethingBesides0s = False queriesToSend = [] listOfTins = ['Bulk', 'BestEffort', 'Video', 'Voice'] for tin in listOfTins: @@ -467,10 +501,13 @@ def refreshBandwidthGraphs(): queriesToSend.append(p) # Check to ensure tin percentage has value (!= None) before graphing. During partial or full reload these will have a value of None. if (tinsStats['sinceLastQuery'][tin]['Download']['percentage'] != None) and (tinsStats['sinceLastQuery'][tin]['Upload']['percentage'] != None): + if (tinsStats['sinceLastQuery'][tin]['Download']['percentage'] > 0.0) or (tinsStats['sinceLastQuery'][tin]['Upload']['percentage'] > 0.0): + seenSomethingBesides0s = True p = Point('Tins Assigned').tag("Type", "Tin").tag("Tin", tin).field("Download", tinsStats['sinceLastQuery'][tin]['Download']['percentage']).field("Upload", tinsStats['sinceLastQuery'][tin]['Upload']['percentage']).time(timestamp) queriesToSend.append(p) - write_api.write(bucket=influxDBBucket, record=queriesToSend) + if seenSomethingBesides0s: + write_api.write(bucket=influxDBBucket, record=queriesToSend) # print("Added " + str(len(queriesToSend)) + " points to InfluxDB.") queriesToSendCount += len(queriesToSend) diff --git a/src/influxDBdashboardTemplate.json b/src/influxDBdashboardTemplate.json index eed390d5..29a47041 100644 --- a/src/influxDBdashboardTemplate.json +++ b/src/influxDBdashboardTemplate.json @@ -1 +1 @@ -[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"friendly-keldysh-08b001"},"spec":{"charts":[{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Download Bandwidth | Nodes","opacity":1,"orientationThreshold":100000000,"position":"stacked","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value"},{"axes":[{"label":"RTT (ms)","name":"x"}],"binCount":140,"colors":[{"id":"fd2dc3e9-d00b-44bd-97c0-b39748787656","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"9a32b733-aac8-4ee7-8f9e-41c0600b4270","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"3247c366-9139-4bef-aadc-78e5df8ef217","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"fillColumns":["ParentNode"],"height":4,"kind":"Histogram","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"TCP Latency | Circuits","position":"stacked","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{},"width":5,"xCol":"_value","yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"9a3213f8-38be-4075-a164-0af0b13fde1c","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"a236706f-192f-4538-b08f-b1a5944a67e9","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"53c9ec3a-c023-4326-b624-ebd7d9890929","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"TCP Latency | Nodes","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Download Bandwidth | Circuits","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":12},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Drop","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Drops by Tin | Download","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tin Drop Percentage\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":16},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Download by Tin","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tins Assigned\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":20},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Utilization","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Overload Drops | Nodes","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Overload\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":24},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Upload Bandwidth | Nodes","opacity":1,"orientationThreshold":100000000,"position":"stacked","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value"},{"axes":[{"name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"07e5a63c-177b-4f4f-8343-5ff0a3ad460f","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"c518431a-907b-4635-9e50-33e0ddd7c1cd","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"59acc504-b3e3-45b7-98b3-2d4790e50e61","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Band","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"lowerColumn":"max","mainColumn":"mean","name":"TCP Latency | Network","opacity":1,"orientationThreshold":100000000,"queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Network\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: 60s, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")\n\nfrom(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Network\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: 60s, fn: max, createEmpty: false)\n |> yield(name: \"max\")\n\nfrom(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Network\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: 60s, fn: min, createEmpty: false)\n |> yield(name: \"min\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"upperColumn":"min","width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Utilization","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Utilization | Nodes","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Utilization\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Upload Bandwidth | Circuits","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":12},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Drop","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Drops by Tin | Upload","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tin Drop Percentage\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":16},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Upload by Tin","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tins Assigned\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":20},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Utilization","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"CPU","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"CPU\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":24},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":25},{"id":"8b4b10e5-5b16-41b0-8f5b-97f22f8eace2","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":75}],"fieldOptions":[{"displayName":"_start","fieldName":"_start"},{"displayName":"_stop","fieldName":"_stop"},{"displayName":"_time","fieldName":"_time"},{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true},{"displayName":"ParentNode","fieldName":"ParentNode"},{"displayName":"Type","fieldName":"Type"},{"displayName":"_field","fieldName":"_field"},{"displayName":"_measurement","fieldName":"_measurement"}],"height":4,"kind":"Table","name":"Utilization | Nodes","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Utilization\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n\n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10},{"colors":[{"id":"base","name":"viridian","type":"text","hex":"#32B08C"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":75},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":125}],"fieldOptions":[{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true}],"height":4,"kind":"Table","name":"TCP Latency | Nodes | Standard View","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: median, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":4},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"836815c4-8f0b-4296-9797-c4d2c66454da","name":"viridian","type":"text","hex":"#32B08C","value":9},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"pineapple","type":"text","hex":"#FFB94A","value":20},{"id":"dfec4920-0c00-4788-b3e2-d3cefcf9dbf6","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"d322c223-c8d2-4ee2-9e26-fdd00b9911d9","name":"ruby","type":"text","hex":"#BF3D5E","value":70},{"id":"bb134440-7624-4055-884e-5712af40bf55","name":"fire","type":"text","hex":"#DC4E58","value":100}],"fieldOptions":[{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true}],"height":4,"kind":"Table","name":"TCP Latency | Nodes | Metaverse-Ready View","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: median, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":8},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":25},{"id":"8b4b10e5-5b16-41b0-8f5b-97f22f8eace2","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":75}],"fieldOptions":[{"displayName":"_start","fieldName":"_start"},{"displayName":"_stop","fieldName":"_stop"},{"displayName":"Circuit","fieldName":"Circuit","visible":true},{"displayName":"_time","fieldName":"_time"},{"displayName":"_value","fieldName":"_value","visible":true},{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"ParentNode","fieldName":"ParentNode"},{"displayName":"Type","fieldName":"Type"},{"displayName":"_field","fieldName":"_field"},{"displayName":"_measurement","fieldName":"_measurement"}],"height":4,"kind":"Table","name":"Utilization | Circuit","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Utilization\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n\n |> sort(columns: [\"_value\", \"Circuit\"], desc: true)\n |> keep(columns: [\"_value\", \"Circuit\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":12},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":25},{"id":"8b4b10e5-5b16-41b0-8f5b-97f22f8eace2","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":75}],"fieldOptions":[{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true}],"height":4,"kind":"Table","name":"Overload | Nodes","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Overload\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n |> map(fn: (r) => ({ r with _value: r._value}))\n \n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":16}],"name":"LibreQoS"}}] +[{"apiVersion":"influxdata.com/v2alpha1","kind":"Dashboard","metadata":{"name":"amazing-solomon-c8b001"},"spec":{"charts":[{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Download Bandwidth | Nodes","opacity":1,"orientationThreshold":100000000,"position":"stacked","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value"},{"axes":[{"label":"RTT (ms)","name":"x"}],"binCount":140,"colors":[{"id":"fd2dc3e9-d00b-44bd-97c0-b39748787656","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"9a32b733-aac8-4ee7-8f9e-41c0600b4270","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"3247c366-9139-4bef-aadc-78e5df8ef217","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"fillColumns":["ParentNode"],"height":4,"kind":"Histogram","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"TCP Latency | Circuits","position":"stacked","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{},"width":5,"xCol":"_value","yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"9a3213f8-38be-4075-a164-0af0b13fde1c","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"a236706f-192f-4538-b08f-b1a5944a67e9","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"53c9ec3a-c023-4326-b624-ebd7d9890929","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"TCP Latency | Nodes","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Download Bandwidth | Circuits","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":12},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Drop","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Drops by Tin | Download","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tin Drop Percentage\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":16},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Download by Tin","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tins Assigned\")\n |> filter(fn: (r) => r[\"_field\"] == \"Download\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":20},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Utilization","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Overload Drops | Nodes","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Overload\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","yCol":"_value","yPos":24},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Upload Bandwidth | Nodes","opacity":1,"orientationThreshold":100000000,"position":"stacked","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value"},{"axes":[{"name":"x","scale":"linear"},{"name":"y","scale":"linear"}],"colorizeRows":true,"colors":[{"id":"07e5a63c-177b-4f4f-8343-5ff0a3ad460f","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"c518431a-907b-4635-9e50-33e0ddd7c1cd","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"59acc504-b3e3-45b7-98b3-2d4790e50e61","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Band","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"lowerColumn":"max","mainColumn":"mean","name":"TCP Latency | Network","opacity":1,"orientationThreshold":100000000,"queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Network\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: 60s, fn: mean, createEmpty: false)\n |> yield(name: \"mean\")\n\nfrom(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Network\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: 60s, fn: max, createEmpty: false)\n |> yield(name: \"max\")\n\nfrom(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Network\")\n |> filter(fn: (r) => r[\"_field\"] == \"TCP Latency\")\n |> aggregateWindow(every: 60s, fn: min, createEmpty: false)\n |> yield(name: \"min\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"upperColumn":"min","width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":4},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Utilization","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Utilization | Nodes","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Utilization\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":8},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"10","label":"bits per second","name":"y","scale":"linear","suffix":"bps"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Upload Bandwidth | Circuits","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Bandwidth\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":12},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Drop","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Drops by Tin | Upload","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tin Drop Percentage\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":16},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"monotoneX","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"Upload by Tin","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Tins Assigned\")\n |> filter(fn: (r) => r[\"_field\"] == \"Upload\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":20},{"axes":[{"base":"10","name":"x","scale":"linear"},{"base":"2","label":"Percent Utilization","name":"y","scale":"linear","suffix":"%"}],"colorizeRows":true,"colors":[{"id":"d3804aa0-9930-45e5-879e-8a79b306d2bc","name":"Nineteen Eighty Four","type":"scale","hex":"#31C0F6"},{"id":"ff778217-93b4-41c1-baf9-5eac71c6969a","name":"Nineteen Eighty Four","type":"scale","hex":"#A500A5"},{"id":"770d44dd-3a18-4132-af57-86f3a5fb4738","name":"Nineteen Eighty Four","type":"scale","hex":"#FF7E27"}],"geom":"line","height":4,"hoverDimension":"auto","kind":"Xy","legendColorizeRows":true,"legendOpacity":1,"legendOrientationThreshold":100000000,"name":"CPU","opacity":1,"orientationThreshold":100000000,"position":"overlaid","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"CPU\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> yield(name: \"last\")"}],"staticLegend":{"colorizeRows":true,"opacity":1,"orientationThreshold":100000000,"widthRatio":1},"width":5,"widthRatio":1,"xCol":"_time","xPos":5,"yCol":"_value","yPos":24},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":25},{"id":"8b4b10e5-5b16-41b0-8f5b-97f22f8eace2","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":75}],"fieldOptions":[{"displayName":"_start","fieldName":"_start"},{"displayName":"_stop","fieldName":"_stop"},{"displayName":"_time","fieldName":"_time"},{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true},{"displayName":"ParentNode","fieldName":"ParentNode"},{"displayName":"Type","fieldName":"Type"},{"displayName":"_field","fieldName":"_field"},{"displayName":"_measurement","fieldName":"_measurement"}],"height":4,"kind":"Table","name":"Utilization | Nodes","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Utilization\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n\n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10},{"colors":[{"id":"base","name":"viridian","type":"text","hex":"#32B08C"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":75},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":125}],"fieldOptions":[{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true}],"height":4,"kind":"Table","name":"TCP Latency | Nodes | Standard View","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: median, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":4},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"836815c4-8f0b-4296-9797-c4d2c66454da","name":"viridian","type":"text","hex":"#32B08C","value":9},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"pineapple","type":"text","hex":"#FFB94A","value":20},{"id":"dfec4920-0c00-4788-b3e2-d3cefcf9dbf6","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"d322c223-c8d2-4ee2-9e26-fdd00b9911d9","name":"ruby","type":"text","hex":"#BF3D5E","value":70},{"id":"bb134440-7624-4055-884e-5712af40bf55","name":"fire","type":"text","hex":"#DC4E58","value":100}],"fieldOptions":[{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true}],"height":4,"kind":"Table","name":"TCP Latency | Nodes | Metaverse-Ready View","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"TCP Latency\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: median, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":8},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":25},{"id":"8b4b10e5-5b16-41b0-8f5b-97f22f8eace2","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":75}],"fieldOptions":[{"displayName":"_start","fieldName":"_start"},{"displayName":"_stop","fieldName":"_stop"},{"displayName":"Circuit","fieldName":"Circuit","visible":true},{"displayName":"_time","fieldName":"_time"},{"displayName":"_value","fieldName":"_value","visible":true},{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"ParentNode","fieldName":"ParentNode"},{"displayName":"Type","fieldName":"Type"},{"displayName":"_field","fieldName":"_field"},{"displayName":"_measurement","fieldName":"_measurement"}],"height":4,"kind":"Table","name":"Utilization | Circuit","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Utilization\")\n |> filter(fn: (r) => r[\"Type\"] == \"Circuit\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n\n |> sort(columns: [\"_value\", \"Circuit\"], desc: true)\n |> keep(columns: [\"_value\", \"Circuit\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":12},{"colors":[{"id":"base","name":"ocean","type":"text","hex":"#4591ED"},{"id":"ebf165e1-871a-4b10-b558-e039f376be40","name":"thunder","type":"text","hex":"#FFD255","value":25},{"id":"8b4b10e5-5b16-41b0-8f5b-97f22f8eace2","name":"curacao","type":"text","hex":"#F95F53","value":50},{"id":"a36e8317-8138-46a4-bec4-a7588d9f348c","name":"ruby","type":"text","hex":"#BF3D5E","value":75}],"fieldOptions":[{"displayName":"Device","fieldName":"Device","visible":true},{"displayName":"_value","fieldName":"_value","visible":true}],"height":4,"kind":"Table","name":"Overload | Nodes","queries":[{"query":"from(bucket: \"libreqos\")\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r[\"_measurement\"] == \"Overload\")\n |> filter(fn: (r) => r[\"Type\"] == \"Parent Node\")\n |> aggregateWindow(every: v.windowPeriod, fn: last, createEmpty: false)\n |> last()\n |> group(columns: [\"Type\", \"_time\"])\n |> map(fn: (r) => ({ r with _value: r._value}))\n \n |> sort(columns: [\"_value\", \"Device\"], desc: true)\n |> keep(columns: [\"_value\", \"Device\"])\n |> top(n:9, columns: [\"_value\"])"}],"staticLegend":{},"tableOptions":{"sortBy":"_value","verticalTimeAxis":true},"timeFormat":"YYYY-MM-DD HH:mm:ss","width":2,"xPos":10,"yPos":16}],"name":"LibreQoS"}}] \ No newline at end of file