fix(dashboard): add cache-busting and defensive chartManager guards to fix empty charts
This commit is contained in:
@@ -153,6 +153,13 @@ class MonitoringPage {
|
||||
}
|
||||
|
||||
async loadCharts() {
|
||||
// Ensure chartManager is available
|
||||
const cm = window.chartManager || await window.waitForChartManager();
|
||||
if (!cm) {
|
||||
console.warn('chartManager unavailable, skipping monitoring charts');
|
||||
return;
|
||||
}
|
||||
|
||||
// Fetch recent logs for chart data
|
||||
try {
|
||||
const logs = await window.api.get('/system/logs');
|
||||
@@ -168,6 +175,8 @@ class MonitoringPage {
|
||||
|
||||
async loadResponseTimeChart() {
|
||||
try {
|
||||
const cm = window.chartManager;
|
||||
if (!cm) return;
|
||||
// Bucket recent logs by minute for latency chart
|
||||
const buckets = this.bucketByMinute(this.recentLogs, 20);
|
||||
const labels = buckets.map(b => b.label);
|
||||
@@ -187,7 +196,7 @@ class MonitoringPage {
|
||||
}]
|
||||
};
|
||||
|
||||
window.chartManager.createLineChart('response-time-chart', data, {
|
||||
cm.createLineChart('response-time-chart', data, {
|
||||
scales: {
|
||||
y: {
|
||||
title: { display: true, text: 'Milliseconds' },
|
||||
@@ -202,6 +211,8 @@ class MonitoringPage {
|
||||
|
||||
async loadErrorRateChart() {
|
||||
try {
|
||||
const cm = window.chartManager;
|
||||
if (!cm) return;
|
||||
const buckets = this.bucketByMinute(this.recentLogs, 20);
|
||||
const labels = buckets.map(b => b.label);
|
||||
const values = buckets.map(b => {
|
||||
@@ -220,7 +231,7 @@ class MonitoringPage {
|
||||
}]
|
||||
};
|
||||
|
||||
window.chartManager.createLineChart('error-rate-chart', data, {
|
||||
cm.createLineChart('error-rate-chart', data, {
|
||||
scales: {
|
||||
y: {
|
||||
title: { display: true, text: 'Percentage' },
|
||||
@@ -238,6 +249,8 @@ class MonitoringPage {
|
||||
|
||||
async loadRateLimitChart() {
|
||||
try {
|
||||
const cm = window.chartManager;
|
||||
if (!cm) return;
|
||||
// Show requests-per-client from recent logs
|
||||
const clientCounts = {};
|
||||
for (const log of this.recentLogs) {
|
||||
@@ -257,7 +270,7 @@ class MonitoringPage {
|
||||
}]
|
||||
};
|
||||
|
||||
window.chartManager.createBarChart('rate-limit-chart', data, {
|
||||
cm.createBarChart('rate-limit-chart', data, {
|
||||
scales: {
|
||||
y: {
|
||||
title: { display: true, text: 'Request Count' },
|
||||
@@ -452,22 +465,24 @@ class MonitoringPage {
|
||||
}
|
||||
|
||||
updateCharts(metric) {
|
||||
const cm = window.chartManager;
|
||||
if (!cm) return;
|
||||
// Update charts with new metric data
|
||||
if (metric.type === 'response_time' && window.chartManager.charts.has('response-time-chart')) {
|
||||
if (metric.type === 'response_time' && cm.charts.has('response-time-chart')) {
|
||||
this.updateResponseTimeChart(metric.value);
|
||||
}
|
||||
|
||||
if (metric.type === 'error_rate' && window.chartManager.charts.has('error-rate-chart')) {
|
||||
if (metric.type === 'error_rate' && cm.charts.has('error-rate-chart')) {
|
||||
this.updateErrorRateChart(metric.value);
|
||||
}
|
||||
}
|
||||
|
||||
updateResponseTimeChart(value) {
|
||||
window.chartManager.addDataPoint('response-time-chart', value);
|
||||
if (window.chartManager) window.chartManager.addDataPoint('response-time-chart', value);
|
||||
}
|
||||
|
||||
updateErrorRateChart(value) {
|
||||
window.chartManager.addDataPoint('error-rate-chart', value);
|
||||
if (window.chartManager) window.chartManager.addDataPoint('error-rate-chart', value);
|
||||
}
|
||||
|
||||
startDemoUpdates() {
|
||||
|
||||
Reference in New Issue
Block a user