From 43b5263f41549234acd7e66f0dfe33bc4b4e25f9 Mon Sep 17 00:00:00 2001 From: Mark Walet Date: Thu, 13 Jul 2023 18:39:11 +0200 Subject: [PATCH] Improve proxmox widget --- src/utils/config/service-helpers.js | 6 +++++- src/widgets/proxmox/component.jsx | 32 ++++++++++++++++++++--------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js index c9828c660..931f15e9f 100644 --- a/src/utils/config/service-helpers.js +++ b/src/utils/config/service-helpers.js @@ -289,6 +289,7 @@ export function cleanServiceGroups(groups) { enableNowPlaying, volume, // diskstation widget, enableQueue, // sonarr/radarr + node, // Proxmox } = cleanedService.widget; let fieldsList = fields; @@ -299,7 +300,7 @@ export function cleanServiceGroups(groups) { fieldsList = null; } } - + cleanedService.widget = { type, fields: fieldsList || null, @@ -319,6 +320,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 ( - - + + ); }