diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 0bf28285..150afbd9 100755 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -502,5 +502,10 @@ "lastrun": "Last Run", "nextrun": "Next Run", "failed": "Failed" + }, + "unmanic": { + "active_workers": "Active Workers", + "total_workers": "Total Workers", + "records_total": "Queue Length" } } \ No newline at end of file diff --git a/src/widgets/components.js b/src/widgets/components.js index e4ecb947..fb64e2b0 100644 --- a/src/widgets/components.js +++ b/src/widgets/components.js @@ -68,6 +68,7 @@ const components = { tubearchivist: dynamic(() => import("./tubearchivist/component")), truenas: dynamic(() => import("./truenas/component")), unifi: dynamic(() => import("./unifi/component")), + unmanic: dynamic(() => import("./unmanic/component")), watchtower: dynamic(() => import("./watchtower/component")), xteve: dynamic(() => import("./xteve/component")), immich: dynamic(() => import("./immich/component")), diff --git a/src/widgets/unmanic/component.jsx b/src/widgets/unmanic/component.jsx new file mode 100644 index 00000000..1d68e765 --- /dev/null +++ b/src/widgets/unmanic/component.jsx @@ -0,0 +1,33 @@ +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 { widget } = service; + + const { data: workersData, error: workersError } = useWidgetAPI(widget, "workers"); + const { data: pendingData, error: pendingError } = useWidgetAPI(widget, "pending"); + + if (workersError || pendingError) { + const finalError = workersError ?? pendingError; + return ; + } + + if (!workersData || !pendingData) { + return ( + + + + + + ); + } + + return ( + + + + + + ); +} diff --git a/src/widgets/unmanic/widget.js b/src/widgets/unmanic/widget.js new file mode 100644 index 00000000..5de0626d --- /dev/null +++ b/src/widgets/unmanic/widget.js @@ -0,0 +1,27 @@ +import genericProxyHandler from "utils/proxy/handlers/generic"; +import { asJson } from "utils/proxy/api-helpers"; + +const widget = { + api: "{url}/unmanic/api/v2/{endpoint}", + proxyHandler: genericProxyHandler, + + mappings: { + workers: { + endpoint: "workers/status", + map: (data) => ({ + total_workers: (asJson(data).workers_status).length, + active_workers: (asJson(data).workers_status).filter(worker => !worker.idle).length, + }) + }, + pending: { + method: "POST", + body: "{}", + endpoint: "pending/tasks", + validate: [ + "recordsTotal" + ] + }, + }, +}; + +export default widget; diff --git a/src/widgets/widgets.js b/src/widgets/widgets.js index bf9457c6..c9f299cb 100644 --- a/src/widgets/widgets.js +++ b/src/widgets/widgets.js @@ -66,6 +66,7 @@ import watchtower from "./watchtower/widget"; import xteve from "./xteve/widget"; import immich from "./immich/widget"; import uptimekuma from "./uptimekuma/widget"; +import unmanic from "./unmanic/widget"; const widgets = { adguard, @@ -134,6 +135,7 @@ const widgets = { truenas, unifi, unifi_console: unifi, + unmanic, watchtower, xteve, immich,