diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index c26281c7e..e99582b24 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -290,6 +290,7 @@ export function cleanServiceGroups(groups) {
enableNowPlaying,
volume, // diskstation widget,
enableQueue, // sonarr/radarr
+ node, // Proxmox
} = cleanedService.widget;
let fieldsList = fields;
@@ -300,7 +301,7 @@ export function cleanServiceGroups(groups) {
fieldsList = null;
}
}
-
+
cleanedService.widget = {
type,
fields: fieldsList || null,
@@ -323,6 +324,9 @@ export function cleanServiceGroups(groups) {
if (type === "unifi") {
if (site) cleanedService.widget.site = site;
}
+ if (type === "proxmox") {
+ if (node) cleanedService.widget.node = node;
+ }
if (type === "kubernetes") {
if (namespace) cleanedService.widget.namespace = namespace;
if (app) cleanedService.widget.app = app;
diff --git a/src/widgets/proxmox/component.jsx b/src/widgets/proxmox/component.jsx
index e022be6e8..10151f592 100644
--- a/src/widgets/proxmox/component.jsx
+++ b/src/widgets/proxmox/component.jsx
@@ -4,6 +4,7 @@ import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
+
function calcRunning(total, current) {
return current.status === "running" ? total + 1 : total;
}
@@ -25,29 +26,40 @@ export default function Component({ service }) {
-
+
);
}
const { data } = clusterData ;
- const vms = data.filter(item => item.type === "qemu" && item.template === 0) || [];
- const lxc = data.filter(item => item.type === "lxc" && item.template === 0) || [];
- const nodes = data.filter(item => item.type === "node") || [];
-
+ const vms = data.filter(item => item.type === "qemu" && item.template === 0 && (widget.node === undefined || widget.node === item.node)) || [];
+ const lxc = data.filter(item => item.type === "lxc" && item.template === 0 && (widget.node === undefined || widget.node === item.node)) || [];
+ const nodes = data.filter(item => item.type === "node" && (widget.node === undefined || widget.node === item.node)) || [];
const runningVMs = vms.reduce(calcRunning, 0);
const runningLXC = lxc.reduce(calcRunning, 0);
- // TODO: support more than one node
- // TODO: better handling of cluster with zero nodes
- const node = nodes.length > 0 ? nodes[0] : { cpu: 0.0, mem: 0, maxmem: 0 };
+ if (nodes.length === 0) {
+ return (
+
+
+
+
+
+
+ );
+ }
+
+ const maxMemory = nodes.reduce((sum, n) => n.maxmem + sum, 0);
+ const usedMemory = nodes.reduce((sum, n) => n.mem + sum, 0);
+ const maxCpu = nodes.reduce((sum, n) => n.maxcpu + sum, 0);
+ const usedCpu = nodes.reduce((sum, n) => (n.cpu * n.maxcpu) + sum, 0);
return (
-
-
+
+
);
}