Merge pull request #807 from JeffResc/unmanic

Add Unmanic service widget
pull/1022/head
shamoon 2 years ago committed by GitHub
commit 080d684089
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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"
}
}

@ -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")),

@ -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 <Container error={finalError} />;
}
if (!workersData || !pendingData) {
return (
<Container service={service}>
<Block label="unmanic.active_workers" />
<Block label="unmanic.total_workers" />
<Block label="unmanic.records_total" />
</Container>
);
}
return (
<Container service={service}>
<Block label="unmanic.active_workers" value={workersData.active_workers} />
<Block label="unmanic.total_workers" value={workersData.total_workers} />
<Block label="unmanic.records_total" value={pendingData.recordsTotal} />
</Container>
);
}

@ -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;

@ -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,

Loading…
Cancel
Save