From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 031BB1FF165 for ; Thu, 23 Oct 2025 10:33:02 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id C34CC38ED; Thu, 23 Oct 2025 10:33:28 +0200 (CEST) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Date: Thu, 23 Oct 2025 10:28:10 +0200 Message-ID: <20251023083253.1038119-7-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251023083253.1038119-1-d.csapak@proxmox.com> References: <20251023083253.1038119-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.028 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pdm-devel] [PATCH datacenter-manager v2 06/16] ui: dashboard: refactor task summary panel creation to its own module 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" so we can easily reuse it outside the dashboard struct. Signed-off-by: Dominik Csapak --- ui/src/dashboard/mod.rs | 65 +++++++++++++++------------------------ ui/src/dashboard/tasks.rs | 30 ++++++++++++++++++ 2 files changed, 54 insertions(+), 41 deletions(-) diff --git a/ui/src/dashboard/mod.rs b/ui/src/dashboard/mod.rs index fa0fe2fc..c0b20b36 100644 --- a/ui/src/dashboard/mod.rs +++ b/ui/src/dashboard/mod.rs @@ -54,7 +54,7 @@ use status_row::DashboardStatusRow; mod filtered_tasks; mod tasks; -use tasks::TaskSummary; +use tasks::create_task_summary_panel; /// The initial 'max-age' parameter in seconds. The backend polls every 15 minutes, so to increase /// the chance of showing some data quickly use that as max age at the very first load. @@ -145,44 +145,6 @@ pub struct PdmDashboard { } impl PdmDashboard { - fn create_task_summary_panel( - &self, - statistics: &StatisticsOptions, - remotes: Option, - ) -> Panel { - let (hours, since) = Self::get_task_options(&self.config); - let title = match remotes { - Some(_count) => tr!("Task Summary Sorted by Failed Tasks (Last {0}h)", hours), - None => tr!("Task Summary by Category (Last {0}h)", hours), - }; - Panel::new() - .flex(1.0) - .width(500) - .border(true) - .title(create_title_with_icon("list", title)) - .with_child( - Container::new() - .class(FlexFit) - .padding(2) - .with_optional_child( - statistics - .data - .clone() - .map(|data| TaskSummary::new(data, since, remotes)), - ) - .with_optional_child( - (statistics.error.is_none() && statistics.data.is_none()) - .then_some(loading_column()), - ) - .with_optional_child( - statistics - .error - .as_ref() - .map(|err| error_message(&err.to_string())), - ), - ) - } - fn create_top_entities_panel( &self, icon: &str, @@ -383,6 +345,7 @@ impl Component for PdmDashboard { } fn view(&self, ctx: &yew::Context) -> yew::Html { + let (hours, since) = Self::get_task_options(&self.config); let content = Column::new() .class(FlexFit) .with_child( @@ -541,8 +504,28 @@ impl Component for PdmDashboard { .style("padding-top", "0") .class(pwt::css::Flex::Fill) .class(FlexWrap::Wrap) - .with_child(self.create_task_summary_panel(&self.statistics, None)) - .with_child(self.create_task_summary_panel(&self.statistics, Some(5))) + .with_child( + create_task_summary_panel( + self.statistics.data.clone(), + self.statistics.error.as_ref(), + None, + hours, + since, + ) + .flex(1.0) + .width(500), + ) + .with_child( + create_task_summary_panel( + self.statistics.data.clone(), + self.statistics.error.as_ref(), + Some(5), + hours, + since, + ) + .flex(1.0) + .width(500), + ) .with_child(create_sdn_panel(self.status.clone()).flex(1.0).width(200)), ); diff --git a/ui/src/dashboard/tasks.rs b/ui/src/dashboard/tasks.rs index d32cf378..cdb0d9c6 100644 --- a/ui/src/dashboard/tasks.rs +++ b/ui/src/dashboard/tasks.rs @@ -2,6 +2,7 @@ use std::collections::BTreeMap; use std::collections::HashMap; use std::rc::Rc; +use anyhow::Error; use yew::html::Scope; use yew::virtual_dom::Key; @@ -11,11 +12,15 @@ use pwt::prelude::*; use pwt::props::ExtractPrimaryKey; use pwt::state::Store; use pwt::widget::data_table::{DataTable, DataTableColumn, DataTableHeader}; +use pwt::widget::error_message; +use pwt::widget::Panel; use pwt::widget::{ActionIcon, Container, Tooltip}; use pwt_macros::{builder, widget}; use pdm_api_types::TaskStatistics; +use crate::dashboard::create_title_with_icon; +use crate::dashboard::loading_column; use crate::tasks::TaskWorkerType; use super::filtered_tasks::FilteredTasks; @@ -295,3 +300,28 @@ impl Component for ProxmoxTaskSummary { .into() } } + +pub fn create_task_summary_panel( + statistics: Option, + error: Option<&Error>, + remotes: Option, + hours: u32, + since: i64, +) -> Panel { + let title = match remotes { + Some(_count) => tr!("Task Summary Sorted by Failed Tasks (Last {0}h)", hours), + None => tr!("Task Summary by Category (Last {0}h)", hours), + }; + let loading = error.is_none() && statistics.is_none(); + Panel::new() + .border(true) + .title(create_title_with_icon("list", title)) + .with_child( + Container::new() + .class(css::FlexFit) + .padding(2) + .with_optional_child(statistics.map(|data| TaskSummary::new(data, since, remotes))) + .with_optional_child((loading).then_some(loading_column())) + .with_optional_child(error.map(|err| error_message(&err.to_string()))), + ) +} -- 2.47.3 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel