Feat: Support maintenance in chart

pull/4264/head
Nelson Chan 4 months ago
parent 86f2a86a4e
commit 499632d69b
No known key found for this signature in database

@ -229,7 +229,7 @@ export default {
if (this.chartRawData) { if (this.chartRawData) {
for (const datapoint of this.chartRawData) { for (const datapoint of this.chartRawData) {
// Empty datapoints are ignored // Empty datapoints are ignored
if (datapoint.up === 0 && datapoint.down === 0) { if (datapoint.up === 0 && datapoint.down === 0 && datapoint.maintenance === 0) {
continue; continue;
} }
@ -375,42 +375,48 @@ export default {
methods: { methods: {
// Get color of bar chart for this datapoint // Get color of bar chart for this datapoint
getBarColorForDatapoint(datapoint) { getBarColorForDatapoint(datapoint) {
if (datapoint.down === 0) { if (datapoint.maintenance != null) {
// Target is in maintenance
return "rgba(23,71,245,0.41)";
} else if (datapoint.down === 0) {
// Target is up // Target is up
return "#FFFFFFFF"; return "#FFFFFFFF";
} else if (datapoint.up === 0) { } else if (datapoint.up === 0) {
// Target is down
return "#DC354568"; return "#DC354568";
} else { } else {
// Show yellow for mixed status
return "rgba(245,182,23,0.41)"; return "rgba(245,182,23,0.41)";
} }
// TODO: handle maintenance status
// return "rgba(23,71,245,0.41)"
}, },
// push datapoint to chartData // push datapoint to chartData
pushDatapoint(datapoint, avgPingData, minPingData, maxPingData, downData, colorData) { pushDatapoint(datapoint, avgPingData, minPingData, maxPingData, downData, colorData) {
const x = this.$root.unixToDateTime(datapoint.timestamp); const x = this.$root.unixToDateTime(datapoint.timestamp);
// Show ping values if it was up in this period // Show ping values if it was up in this period
if (datapoint.up > 0 && datapoint.avgPing > 0) { avgPingData.push({
avgPingData.push({ x,
x, y: datapoint.up > 0 && datapoint.avgPing > 0 ? datapoint.avgPing : null,
y: datapoint.avgPing, });
}); minPingData.push({
minPingData.push({ x,
x, y: datapoint.up > 0 && datapoint.avgPing > 0 ? datapoint.minPing : null,
y: datapoint.minPing, });
}); maxPingData.push({
maxPingData.push({ x,
x, y: datapoint.up > 0 && datapoint.avgPing > 0 ? datapoint.maxPing : null,
y: datapoint.maxPing, });
});
}
downData.push({ let bar = {
x, x,
y: datapoint.down, y: datapoint.down,
}); };
if (datapoint.maintenance) {
bar.y += datapoint.maintenance;
}
downData.push(bar);
colorData.push(this.getBarColorForDatapoint(datapoint)); colorData.push(this.getBarColorForDatapoint(datapoint));
}, },
@ -418,6 +424,7 @@ export default {
getAverage(datapoints) { getAverage(datapoints) {
const totalUp = datapoints.reduce((total, current) => total + current.up, 0); const totalUp = datapoints.reduce((total, current) => total + current.up, 0);
const totalDown = datapoints.reduce((total, current) => total + current.down, 0); const totalDown = datapoints.reduce((total, current) => total + current.down, 0);
const totalMaintenance = datapoints.reduce((total, current) => total + (current.maintenance || 0), 0);
const totalPing = datapoints.reduce((total, current) => total + current.avgPing * current.up, 0); const totalPing = datapoints.reduce((total, current) => total + current.avgPing * current.up, 0);
const minPing = datapoints.reduce((min, current) => Math.min(min, current.minPing), Infinity); const minPing = datapoints.reduce((min, current) => Math.min(min, current.minPing), Infinity);
const maxPing = datapoints.reduce((max, current) => Math.max(max, current.maxPing), 0); const maxPing = datapoints.reduce((max, current) => Math.max(max, current.maxPing), 0);
@ -432,7 +439,8 @@ export default {
timestamp: datapoints[midpoint].timestamp, timestamp: datapoints[midpoint].timestamp,
up: totalUp, up: totalUp,
down: totalDown, down: totalDown,
avgPing: totalPing / totalUp, maintenance: totalMaintenance > 0 ? totalMaintenance : undefined,
avgPing: totalUp > 0 ? totalPing / totalUp : 0,
minPing, minPing,
maxPing, maxPing,
}; };

Loading…
Cancel
Save