From b4d64e5e80417ccf28fd13766190e29a29697224 Mon Sep 17 00:00:00 2001 From: Benoit SERRA Date: Sun, 25 Dec 2022 20:15:18 +0100 Subject: [PATCH 1/6] 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 | 6 ++++ 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, 80 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 8436d28b..2a968c17 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -406,5 +406,11 @@ "streams_all": "All Streams", "streams_active": "Active Streams", "streams_xepg": "XEPG Channels" + }, + "opnsense": { + "cpu": "CPU Load", + "memory": "Memory Used", + "wanUpload": "WAN Upload", + "wanDownload": "WAN Download" } } diff --git a/src/widgets/components.js b/src/widgets/components.js index 4ee443ac..10277732 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 0c53b388..3e73e55f 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"; @@ -80,6 +81,7 @@ const widgets = { nzbget, omada, ombi, + opnsense, overseerr, paperlessngx, pihole, From 8926e2f194a70f5061c41e337767da87b2866aa6 Mon Sep 17 00:00:00 2001 From: Benoit SERRA Date: Mon, 26 Dec 2022 07:36:36 +0100 Subject: [PATCH 2/6] Opnsense widget (#3) * 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. * OPNSense widget : fixing the CPU code to make it more reliable. * OPNSense widget : fixing the CPU code to make it more reliable. Removing uptime info --- src/widgets/opnsense/component.jsx | 9 +++------ src/widgets/opnsense/widget.js | 6 ++++++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx index 1757d68f..d9e64929 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -20,7 +20,6 @@ export default function Component({ service }) { if (!activityData || !interfaceData) { return ( - @@ -29,10 +28,9 @@ export default function Component({ service }) { ); } - 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 cpuidle = activityData.headers[2].substring(60,64); + const cpu = 100 - parseFloat(cpuidle); 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; @@ -42,7 +40,6 @@ export default function Component({ service }) { return ( - diff --git a/src/widgets/opnsense/widget.js b/src/widgets/opnsense/widget.js index 56ad0733..a144ee4c 100644 --- a/src/widgets/opnsense/widget.js +++ b/src/widgets/opnsense/widget.js @@ -8,9 +8,15 @@ const widget = { mappings: { activity: { endpoint: "diagnostics/activity/getActivity", + validate: [ + "headers" + ] }, interface: { endpoint: "diagnostics/traffic/interface", + validate: [ + "interfaces" + ] } }, }; From 8c64f24cb6424b0f85f6f3372e29c6a991b26c9e Mon Sep 17 00:00:00 2001 From: Benoit SERRA Date: Mon, 26 Dec 2022 08:31:41 +0100 Subject: [PATCH 3/6] Update src/widgets/opnsense/component.jsx Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src/widgets/opnsense/component.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx index d9e64929..c17a389f 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -29,8 +29,8 @@ export default function Component({ service }) { } - const cpuidle = activityData.headers[2].substring(60,64); - const cpu = 100 - parseFloat(cpuidle); + const cpuIdle = activityData.headers[2].match(/ ([0-9.]+)% idle/)[1]; + const cpu = 100 - parseFloat(cpuIdle); 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; From f2bc5869bfa3312dc1657f6aa53a42b63f5473e6 Mon Sep 17 00:00:00 2001 From: Benoit SERRA Date: Mon, 26 Dec 2022 09:27:39 +0100 Subject: [PATCH 4/6] Update public/locales/en/common.json Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- public/locales/en/common.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 2a968c17..032c1dfe 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -409,7 +409,7 @@ }, "opnsense": { "cpu": "CPU Load", - "memory": "Memory Used", + "memory": "Active Memory", "wanUpload": "WAN Upload", "wanDownload": "WAN Download" } From 04dcfd2ef2b1b675c117c9ba7a7b2e3702617bce Mon Sep 17 00:00:00 2001 From: Benoit SERRA Date: Mon, 26 Dec 2022 09:27:49 +0100 Subject: [PATCH 5/6] Update src/widgets/opnsense/component.jsx Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com> --- src/widgets/opnsense/component.jsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx index c17a389f..f835ce09 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -31,9 +31,7 @@ export default function Component({ service }) { const cpuIdle = activityData.headers[2].match(/ ([0-9.]+)% idle/)[1]; const cpu = 100 - parseFloat(cpuIdle); - 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 memory = activityData.headers[3].match(/Mem: (.+) Active,/)[1]; const wanUpload = interfaceData.interfaces.wan['bytes transmitted']; const wanDownload = interfaceData.interfaces.wan['bytes received']; From e3bccd6dbdb69afea566b6114bbcbf94bb5d116a Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 26 Dec 2022 00:29:51 -0800 Subject: [PATCH 6/6] Update src/widgets/opnsense/component.jsx --- src/widgets/opnsense/component.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/widgets/opnsense/component.jsx b/src/widgets/opnsense/component.jsx index f835ce09..53396b31 100644 --- a/src/widgets/opnsense/component.jsx +++ b/src/widgets/opnsense/component.jsx @@ -39,7 +39,7 @@ export default function Component({ service }) { return ( - +