From 24e25e8953e5eecb6ccd0796dab5651efeae89ab Mon Sep 17 00:00:00 2001 From: Thorben Date: Fri, 15 Dec 2023 22:33:29 +0100 Subject: [PATCH] Enhancement: fritzbox uptime display (#2481) --- src/widgets/fritzbox/component.jsx | 28 ++++++++++++++++++++-------- src/widgets/fritzbox/proxy.js | 6 +++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/widgets/fritzbox/component.jsx b/src/widgets/fritzbox/component.jsx index 7c32f617f..e4234cd0b 100644 --- a/src/widgets/fritzbox/component.jsx +++ b/src/widgets/fritzbox/component.jsx @@ -6,16 +6,28 @@ import useWidgetAPI from "utils/proxy/use-widget-api"; export const fritzboxDefaultFields = ["connectionStatus", "uptime", "maxDown", "maxUp"]; -const formatUptime = (timestamp) => { - const hours = Math.floor(timestamp / 3600); - const minutes = Math.floor((timestamp % 3600) / 60); - const seconds = timestamp % 60; +const formatUptime = (uptimeInSeconds) => { + const days = Math.floor(uptimeInSeconds / (3600 * 24)); + const hours = Math.floor((uptimeInSeconds % (3600 * 24)) / 3600); + const minutes = Math.floor((uptimeInSeconds % 3600) / 60); + const seconds = Math.floor(uptimeInSeconds) % 60; + const format = (num) => String(num).padStart(2, "0"); - const hourDuration = hours > 0 ? `${hours}h` : "00h"; - const minDuration = minutes > 0 ? `${minutes}m` : "00m"; - const secDuration = seconds > 0 ? `${seconds}s` : "00s"; + let uptimeStr = ""; + if (days) { + uptimeStr += `${days}d`; + } + if (uptimeInSeconds >= 3600) { + uptimeStr += `${format(hours)}h`; + } + if (uptimeInSeconds >= 60) { + uptimeStr += `${format(minutes)}m`; + } + if (!days) { + uptimeStr += `${format(seconds)}s `; + } - return hourDuration + minDuration + secDuration; + return uptimeStr; }; export default function Component({ service }) { diff --git a/src/widgets/fritzbox/proxy.js b/src/widgets/fritzbox/proxy.js index 3c0b0f72c..a0a22d8b5 100644 --- a/src/widgets/fritzbox/proxy.js +++ b/src/widgets/fritzbox/proxy.js @@ -50,12 +50,12 @@ export default async function fritzboxProxyHandler(req, res) { const serviceWidget = await getServiceWidget(group, service); if (!serviceWidget) { - res.status(500).json({ error: "Service widget not found" }); + res.status(500).json({ error: { message: "Service widget not found" } }); return; } if (!serviceWidget.url) { - res.status(500).json({ error: "Service widget url not configured" }); + res.status(500).json({ error: { message: "Service widget url not configured" } }); return; } @@ -91,6 +91,6 @@ export default async function fritzboxProxyHandler(req, res) { }); }) .catch((error) => { - res.status(500).json({ error: error.message }); + res.status(500).json({ error: { message: error.message } }); }); }