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 (
+
+
+
+
+
+
+ );
+}