From 05641d2e1e2fa250a899fb7c6b78c059c274b89e Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Fri, 22 Dec 2023 00:41:08 +0800 Subject: [PATCH] Feat: Improve aggregate using sliding window --- src/components/PingChart.vue | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/components/PingChart.vue b/src/components/PingChart.vue index e3b09370..d1392477 100644 --- a/src/components/PingChart.vue +++ b/src/components/PingChart.vue @@ -213,7 +213,7 @@ export default { let colorData = []; // Color Data for Bar Chart const period = parseInt(this.chartPeriodHrs); - let aggregatePoints = period > 6 ? 10 : 5; + let aggregatePoints = period > 6 ? 12 : 4; let aggregateBuffer = []; @@ -224,24 +224,25 @@ export default { continue; } - if (datapoint.down > 0) { - // Clear the aggregate buffer - if (aggregateBuffer.length > 0) { + if (datapoint.up > 0) { + // Aggregate Up data using a sliding window + aggregateBuffer.push(datapoint); + + if (aggregateBuffer.length === aggregatePoints) { const average = this.getAverage(aggregateBuffer); this.pushDatapoint(average, avgPingData, minPingData, maxPingData, downData, colorData); - aggregateBuffer = []; + aggregateBuffer = aggregateBuffer.slice(Math.floor(aggregatePoints / 2)); } - - this.pushDatapoint(datapoint, avgPingData, minPingData, maxPingData, downData, colorData); } else { - // Only aggregate up datapoints - aggregateBuffer.push(datapoint); - - if (aggregateBuffer.length === aggregatePoints) { + // datapoint is fully down, no need to aggregate + // Clear the aggregate buffer + if (aggregateBuffer.length > 0) { const average = this.getAverage(aggregateBuffer); this.pushDatapoint(average, avgPingData, minPingData, maxPingData, downData, colorData); aggregateBuffer = []; } + + this.pushDatapoint(datapoint, avgPingData, minPingData, maxPingData, downData, colorData); } } }