From 942b55ca031b4a487d299c7e189052634fdb9c17 Mon Sep 17 00:00:00 2001 From: Nelson Chan Date: Tue, 3 Jan 2023 21:45:55 +0800 Subject: [PATCH] Fix: Add support for maintenance in badges --- server/config.js | 1 + server/routers/api-router.js | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/server/config.js b/server/config.js index d46f24b75..398ddbb10 100644 --- a/server/config.js +++ b/server/config.js @@ -5,6 +5,7 @@ const badgeConstants = { naColor: "#999", defaultUpColor: "#66c20a", defaultDownColor: "#c2290a", + defaultMaintenanceColor: "#1747f5", defaultPingColor: "blue", // as defined by badge-maker / shields.io defaultStyle: "flat", defaultPingValueSuffix: "ms", diff --git a/server/routers/api-router.js b/server/routers/api-router.js index bbecbced3..45236d206 100644 --- a/server/routers/api-router.js +++ b/server/routers/api-router.js @@ -111,8 +111,10 @@ router.get("/api/badge/:id/status", cache("5 minutes"), async (request, response label, upLabel = "Up", downLabel = "Down", + maintenanceLabel = "Maintenance", upColor = badgeConstants.defaultUpColor, downColor = badgeConstants.defaultDownColor, + maintenanceColor = badgeConstants.defaultMaintenanceColor, style = badgeConstants.defaultStyle, value, // for demo purpose only } = request.query; @@ -139,11 +141,39 @@ router.get("/api/badge/:id/status", cache("5 minutes"), async (request, response badgeValues.color = badgeConstants.naColor; } else { const heartbeat = await Monitor.getPreviousHeartbeat(requestedMonitorId); - const state = overrideValue !== undefined ? overrideValue : heartbeat.status === 1; + const state = overrideValue !== undefined ? overrideValue : heartbeat.status; badgeValues.label = label ? label : ""; - badgeValues.color = state ? upColor : downColor; - badgeValues.message = label ?? state ? upLabel : downLabel; + switch (state) { + case 1: + badgeValues.color = upColor; + break; + case 3: + badgeValues.color = maintenanceColor; + break; + case 0: + badgeValues.color = downColor; + break; + default: + badgeValues.color = badgeConstants.naColor; + } + if (label !== undefined) { + badgeValues.message = label; + } else { + switch (state) { + case 1: + badgeValues.message = upLabel; + break; + case 3: + badgeValues.message = maintenanceLabel; + break; + case 0: + badgeValues.message = downLabel; + break; + default: + badgeValues.message = "N/A"; + } + } } // build the svg based on given values