From f4ceb74f72635798f233a41290172a133f5bfa70 Mon Sep 17 00:00:00 2001 From: Benoit SERRA Date: Sun, 25 Dec 2022 20:15:18 +0100 Subject: [PATCH] Opnsense widget (#2) * OPNSense widget : initial version, memory usage is inaccurate. * OPNSense widget : code cleanup in widget.js. Firewall is no longer displayed, so it did not need to be queried. --- public/locales/en/common.json | 7 ++++ src/widgets/components.js | 1 + src/widgets/opnsense/component.jsx | 53 ++++++++++++++++++++++++++++++ src/widgets/opnsense/widget.js | 18 ++++++++++ src/widgets/widgets.js | 2 ++ 5 files changed, 81 insertions(+) create mode 100644 src/widgets/opnsense/component.jsx create mode 100644 src/widgets/opnsense/widget.js diff --git a/public/locales/en/common.json b/public/locales/en/common.json index a1f9df9c..62c1724d 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -401,5 +401,12 @@ "memoryUsed": "Memory Used", "uptime": "Uptime", "numberOfLeases": "Leases" + }, + "opnsense": { + "cpu": "CPU Load", + "memory": "Memory Used", + "uptime": "Uptime", + "wanUpload": "WAN Upload", + "wanDownload": "WAN Download" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index a2a26332..4d8a3454 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -29,6 +29,7 @@ const components = { nzbget: dynamic(() => import("./nzbget/component")), omada: dynamic(() => import("./omada/component")), ombi: dynamic(() => import("./ombi/component")), + opnsense: dynamic(() => import("./opnsense/component")), overseerr: dynamic(() => import("./overseerr/component")), paperlessngx: dynamic(() => import("./paperlessngx/component")), pihole: dynamic(() => import("./pihole/component")), diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx new file mode 100644 index 00000000..1757d68f --- /dev/null +++ b/src/widgets/opnsense/component.jsx @@ -0,0 +1,53 @@ +import { useTranslation } from "next-i18next"; + +import Container from "components/services/widget/container"; +import Block from "components/services/widget/block"; +import useWidgetAPI from "utils/proxy/use-widget-api"; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + + const { data: activityData, error: activityError } = useWidgetAPI(widget, "activity"); + const { data: interfaceData, error: interfaceError } = useWidgetAPI(widget, "interface"); + + if (activityError || interfaceError) { + const finalError = activityError ?? interfaceError; + return ; + } + + if (!activityData || !interfaceData) { + return ( + + + + + + + + ); + } + + const cpuInfos = activityData.headers[2].split(" "); + const cpu = parseFloat(cpuInfos[2]) + parseFloat(cpuInfos[5]) + parseFloat(cpuInfos[8]) + parseFloat(cpuInfos[11]); + const uptimeInfos = activityData.headers[0].match(/.* up ([0-9+:]*) .*/); + const uptime = uptimeInfos[1]; + const memoryInfos = activityData.headers[3].split(" "); + const totalMemory = parseFloat(memoryInfos[1]) + parseFloat(memoryInfos[3]) + parseFloat(memoryInfos[5]) + parseFloat(memoryInfos[7]) + parseFloat(memoryInfos[9])/1024 + parseFloat(memoryInfos[11]); + const memory = ( 1 - parseFloat(memoryInfos[11]) / totalMemory) * 100; + + const wanUpload = interfaceData.interfaces.wan['bytes transmitted']; + const wanDownload = interfaceData.interfaces.wan['bytes received']; + + return ( + + + + + + + + + ); +} diff --git a/src/widgets/opnsense/widget.js b/src/widgets/opnsense/widget.js new file mode 100644 index 00000000..56ad0733 --- /dev/null +++ b/src/widgets/opnsense/widget.js @@ -0,0 +1,18 @@ + +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/api/{endpoint}", + proxyHandler: genericProxyHandler, + + mappings: { + activity: { + endpoint: "diagnostics/activity/getActivity", + }, + interface: { + endpoint: "diagnostics/traffic/interface", + } + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index 523ba9c2..b4a90378 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -24,6 +24,7 @@ import npm from "./npm/widget"; import nzbget from "./nzbget/widget"; import omada from "./omada/widget"; import ombi from "./ombi/widget"; +import opnsense from "./opnsense/widget"; import overseerr from "./overseerr/widget"; import paperlessngx from "./paperlessngx/widget"; import pihole from "./pihole/widget"; @@ -79,6 +80,7 @@ const widgets = { nzbget, omada, ombi, + opnsense, overseerr, paperlessngx, pihole,