From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 575C41FF15C for ; Fri, 31 Oct 2025 13:47:52 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1362811544; Fri, 31 Oct 2025 13:48:27 +0100 (CET) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Date: Fri, 31 Oct 2025 13:43:46 +0100 Message-ID: <20251031124822.2739685-4-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251031124822.2739685-1-d.csapak@proxmox.com> References: <20251031124822.2739685-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.027 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [mod.rs] Subject: [pdm-devel] [PATCH datacenter-manager v3 03/21] ui: dashboard: node panel: make remote type optional X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Datacenter Manager development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" and if it's `None` show a summary of all nodes, regardless of remote type. Signed-off-by: Dominik Csapak --- ui/src/dashboard/mod.rs | 4 +-- ui/src/dashboard/node_status_panel.rs | 49 +++++++++++++++++++-------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/ui/src/dashboard/mod.rs b/ui/src/dashboard/mod.rs index 3b5b3b50..c9b1c014 100644 --- a/ui/src/dashboard/mod.rs +++ b/ui/src/dashboard/mod.rs @@ -470,7 +470,7 @@ impl Component for PdmDashboard { .with_child(RemotePanel::new(self.status.clone())), ) .with_child( - create_node_panel(RemoteType::Pve, self.status.clone()) + create_node_panel(Some(RemoteType::Pve), self.status.clone()) .flex(1.0) .width(300), ) @@ -485,7 +485,7 @@ impl Component for PdmDashboard { .width(300), ) .with_child( - create_node_panel(RemoteType::Pbs, self.status.clone()) + create_node_panel(Some(RemoteType::Pbs), self.status.clone()) .flex(1.0) .width(300), ) diff --git a/ui/src/dashboard/node_status_panel.rs b/ui/src/dashboard/node_status_panel.rs index c66d82e6..0873635d 100644 --- a/ui/src/dashboard/node_status_panel.rs +++ b/ui/src/dashboard/node_status_panel.rs @@ -18,14 +18,17 @@ use super::loading_column; #[derive(PartialEq, Clone, Properties)] pub struct NodeStatusPanel { - remote_type: RemoteType, + remote_type: Option, status: Option, failed_remotes: usize, } impl NodeStatusPanel { + /// Create a node status panel. + /// + /// Passing `None` to `remote_type` means creating a panel for all nodes, regardless of remote type. pub fn new( - remote_type: RemoteType, + remote_type: Option, status: Option, failed_remotes: usize, ) -> Self { @@ -95,13 +98,14 @@ impl yew::Component for NodeStatusPanelComponent { fn map_status( status: &NodeStatusCount, - remote_type: RemoteType, + remote_type: Option, failed_remotes: usize, ) -> (Fa, String, Vec) { - let mut search_terms = vec![ - SearchTerm::new("node").category(Some("type")), - SearchTerm::new(remote_type.to_string()).category(Some("remote-type")), - ]; + let mut search_terms = vec![SearchTerm::new("node").category(Some("type"))]; + + if let Some(remote_type) = remote_type { + search_terms.push(SearchTerm::new(remote_type.to_string()).category(Some("remote-type"))); + } let (icon, status_msg) = match status { NodeStatusCount { online, @@ -126,11 +130,11 @@ fn map_status( ) } NodeStatusCount { online, .. } if failed_remotes > 0 => match remote_type { - RemoteType::Pve => ( + Some(RemoteType::Pve) | None => ( Status::Unknown.into(), tr!("{0} of an unknown number of nodes online", online), ), - RemoteType::Pbs => ( + Some(RemoteType::Pbs) => ( Status::Error.into(), tr!("{0} remotes failed", failed_remotes), ), @@ -141,22 +145,37 @@ fn map_status( (icon, status_msg, search_terms) } -pub fn create_node_panel(remote_type: RemoteType, status: Option) -> Panel { +/// Create a node status panel. +/// +/// Passing `None` to `remote_type` means creating a panel for all nodes, regardless of remote type. +pub fn create_node_panel( + remote_type: Option, + status: Option, +) -> Panel { let (icon, title) = match remote_type { - RemoteType::Pve => ("building", tr!("Virtual Environment Nodes")), - RemoteType::Pbs => ("building-o", tr!("Backup Server Nodes")), + Some(RemoteType::Pve) => ("building", tr!("Virtual Environment Nodes")), + Some(RemoteType::Pbs) => ("building-o", tr!("Backup Server Nodes")), + None => ("building", tr!("Nodes")), }; let (nodes_status, failed_remotes) = match status { Some(status) => { let nodes_status = match remote_type { - RemoteType::Pve => Some(status.pve_nodes.clone()), - RemoteType::Pbs => Some(status.pbs_nodes.clone()), + Some(RemoteType::Pve) => Some(status.pve_nodes.clone()), + Some(RemoteType::Pbs) => Some(status.pbs_nodes.clone()), + None => Some(NodeStatusCount { + online: status.pve_nodes.online + status.pbs_nodes.online, + offline: status.pve_nodes.offline + status.pbs_nodes.offline, + unknown: status.pve_nodes.unknown + status.pbs_nodes.unknown, + }), }; let failed_remotes = status .failed_remotes_list .iter() - .filter(|item| item.remote_type == remote_type) + .filter(|item| match remote_type { + Some(remote_type) => item.remote_type == remote_type, + None => true, + }) .count(); (nodes_status, failed_remotes) } -- 2.47.3 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel