refactor: Clean up heartbeat range handling in status page

- Removed fallback to "auto" for heartbeat bar range in the StatusPage model.
- Simplified heartbeat range logic in the status page router to ensure consistent date handling.
- Updated socket handler to directly assign heartbeat bar range from config.
This commit is contained in:
Doruk 2025-06-14 12:02:37 +02:00
parent b441308545
commit ebd47f1a45
3 changed files with 14 additions and 8 deletions

View file

@ -409,7 +409,7 @@ class StatusPage extends BeanModel {
showPoweredBy: !!this.show_powered_by, showPoweredBy: !!this.show_powered_by,
googleAnalyticsId: this.google_analytics_tag_id, googleAnalyticsId: this.google_analytics_tag_id,
showCertificateExpiry: !!this.show_certificate_expiry, showCertificateExpiry: !!this.show_certificate_expiry,
heartbeatBarRange: this.heartbeat_bar_range || "auto", heartbeatBarRange: this.heartbeat_bar_range,
}; };
} }

View file

@ -86,24 +86,30 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques
// Get the status page to determine the heartbeat range // Get the status page to determine the heartbeat range
let statusPage = await R.findOne("status_page", " id = ? ", [ statusPageID ]); let statusPage = await R.findOne("status_page", " id = ? ", [ statusPageID ]);
let heartbeatRange = (statusPage && statusPage.heartbeat_bar_range) ? statusPage.heartbeat_bar_range : "auto"; let heartbeatRange = statusPage ? statusPage.heartbeat_bar_range : "auto";
// Calculate the date range for heartbeats based on range setting // Calculate the date range for heartbeats based on range setting
let dateFrom = new Date(); let dateFrom = null;
if (heartbeatRange === "auto") { if (heartbeatRange === "auto") {
// Auto mode: limit to last 100 beats (original behavior) // Auto mode: limit to last 100 beats (original behavior)
dateFrom = null; dateFrom = null;
} else if (heartbeatRange.endsWith("h")) { } else if (heartbeatRange.endsWith("h")) {
// Hours // Hours
let hours = parseInt(heartbeatRange); let hours = parseInt(heartbeatRange);
dateFrom.setHours(dateFrom.getHours() - hours); let date = new Date();
date.setHours(date.getHours() - hours);
dateFrom = date.toISOString().slice(0, 19).replace('T', ' ');
} else if (heartbeatRange.endsWith("d")) { } else if (heartbeatRange.endsWith("d")) {
// Days // Days
let days = parseInt(heartbeatRange); let days = parseInt(heartbeatRange);
dateFrom.setDate(dateFrom.getDate() - days); let date = new Date();
date.setDate(date.getDate() - days);
dateFrom = date.toISOString().slice(0, 19).replace('T', ' ');
} else { } else {
// Fallback to 90 days // Fallback to 90 days
dateFrom.setDate(dateFrom.getDate() - 90); let date = new Date();
date.setDate(date.getDate() - 90);
dateFrom = date.toISOString().slice(0, 19).replace('T', ' ');
} }
for (let monitorID of monitorIDList) { for (let monitorID of monitorIDList) {
@ -126,7 +132,7 @@ router.get("/api/status-page/heartbeat/:slug", cache("1 minutes"), async (reques
ORDER BY time DESC ORDER BY time DESC
`, [ `, [
monitorID, monitorID,
dateFrom.toISOString(), dateFrom,
]); ]);
} }

View file

@ -165,7 +165,7 @@ module.exports.statusPageSocketHandler = (socket) => {
statusPage.custom_css = config.customCSS; statusPage.custom_css = config.customCSS;
statusPage.show_powered_by = config.showPoweredBy; statusPage.show_powered_by = config.showPoweredBy;
statusPage.show_certificate_expiry = config.showCertificateExpiry; statusPage.show_certificate_expiry = config.showCertificateExpiry;
statusPage.heartbeat_bar_range = config.heartbeatBarRange || "auto"; statusPage.heartbeat_bar_range = config.heartbeatBarRange;
statusPage.modified_date = R.isoDateTime(); statusPage.modified_date = R.isoDateTime();
statusPage.google_analytics_tag_id = config.googleAnalyticsId; statusPage.google_analytics_tag_id = config.googleAnalyticsId;