From e03822df6eabc2ab98272c656112cb9823e0e5a4 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 8 Oct 2022 00:45:00 -0700 Subject: [PATCH] Add UniFI console service widget --- public/locales/en/common.json | 4 +++ src/widgets/components.js | 1 + src/widgets/unifi/component.jsx | 56 +++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 src/widgets/unifi/component.jsx diff --git a/public/locales/en/common.json b/public/locales/en/common.json index af8fc197..669ebd27 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -36,6 +36,10 @@ "uptime": "System Uptime", "days": "Days", "wan": "WAN", + "lan": "LAN", + "wlan": "WLAN", + "up": "UP", + "down": "DOWN", "wait": "Please wait" }, "docker": { diff --git a/src/widgets/components.js b/src/widgets/components.js index 5357c070..0ff197af 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -32,6 +32,7 @@ const components = { tautulli: dynamic(() => import("./tautulli/component")), traefik: dynamic(() => import("./traefik/component")), transmission: dynamic(() => import("./transmission/component")), + unifi_console: dynamic(() => import("./unifi/component")), }; export default components; diff --git a/src/widgets/unifi/component.jsx b/src/widgets/unifi/component.jsx new file mode 100644 index 00000000..82b33941 --- /dev/null +++ b/src/widgets/unifi/component.jsx @@ -0,0 +1,56 @@ +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: statsData, error: statsError } = useWidgetAPI(widget, "stat/sites"); + + if (statsError || statsData?.error) { + return ; + } + + const defaultSite = statsData?.data?.find(s => s.name === "default"); + + if (!defaultSite) { + return ( + + + + + + + ); + } + + const wan = defaultSite.health.find(h => h.subsystem === "wan"); + const lan = defaultSite.health.find(h => h.subsystem === "lan"); + const wlan = defaultSite.health.find(h => h.subsystem === "wlan"); + const data = { + name: wan.gw_name, + uptime: wan["gw_system-stats"].uptime, + up: wan.status === 'ok', + wlan: { + users: wlan.num_user, + status: wlan.status + }, + lan: { + users: lan.num_user, + status: lan.status + } + }; + + return ( + + + + + + + ); +}