From 3240b7a169b8d51ab83138342f2ee69662993181 Mon Sep 17 00:00:00 2001 From: theshaun Date: Sat, 13 May 2023 17:20:57 +1000 Subject: [PATCH] Add support for pfSense API --- src/widgets/pfsenseapi/component.jsx | 71 ++++++++++++++++++++++++++++ src/widgets/pfsenseapi/widget.js | 24 ++++++++++ 2 files changed, 95 insertions(+) create mode 100644 src/widgets/pfsenseapi/component.jsx create mode 100644 src/widgets/pfsenseapi/widget.js diff --git a/src/widgets/pfsenseapi/component.jsx b/src/widgets/pfsenseapi/component.jsx new file mode 100644 index 00000000..00e0719e --- /dev/null +++ b/src/widgets/pfsenseapi/component.jsx @@ -0,0 +1,71 @@ +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"; +import { sys } from "typescript"; + +export default function Component({ service }) { + const { t } = useTranslation(); + + const { widget } = service; + + const { data: systemData, error: systemError } = useWidgetAPI(widget, "system"); + const { data: interfaceData, error: interfaceError } = useWidgetAPI(widget, "interface"); + + const showDiskUsage = widget.fields?.includes('disk'); + const showWanIP = widget.fields?.includes('wanIP'); + + if (systemError || interfaceError) { + const finalError = systemError ?? interfaceError; + return ; + } + + if (!systemData || !interfaceData) { + return ( + + + + {showDiskUsage && } + + + {showWanIP && } + + ); + } + + + const loadAvg = systemData.data.load_avg[0]; + const memory = systemData.data.mem_usage; + const tempC = systemData.data.temp_c + const disk = systemData.data.disk_usage + + const wanState = interfaceData.data.filter(l => l.hwif === widget.wan)[0].status + const wanStatus = (wanState == "up") ? + {t("pfsenseapi.up")}: + {t("pfsenseapi.down")}; + const wanIP = interfaceData.data.filter(l => l.hwif === widget.wan)[0].ipaddr + + return ( + + + + {showDiskUsage && } + + + {showWanIP && } + + ); +} diff --git a/src/widgets/pfsenseapi/widget.js b/src/widgets/pfsenseapi/widget.js new file mode 100644 index 00000000..88aa44fd --- /dev/null +++ b/src/widgets/pfsenseapi/widget.js @@ -0,0 +1,24 @@ + +import genericProxyHandler from "utils/proxy/handlers/generic"; + +const widget = { + api: "{url}/api/v1/{endpoint}", + proxyHandler: genericProxyHandler, + + mappings: { + system: { + endpoint: "status/system", + validate: [ + "data" + ] + }, + interface: { + endpoint: "status/interface", + validate: [ + "data" + ] + } + }, +}; + +export default widget;