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 2DA901FF164 for ; Fri, 6 Jun 2025 14:10:42 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CEB98C17B; Fri, 6 Jun 2025 14:11:02 +0200 (CEST) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Date: Fri, 6 Jun 2025 14:10:28 +0200 Message-Id: <20250606121028.2595348-4-d.csapak@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250606121028.2595348-1-d.csapak@proxmox.com> References: <20250606121028.2595348-1-d.csapak@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.022 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [node.rs] Subject: [pdm-devel] [PATCH datacenter-manager 3/3] ui: pve: nodes: add rrd time frame selector 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 the user can select the timeframe and aggregation for the rrd graphs also rename 'reload' to 'reload_rrd' and 'Msg::Reload' to 'Msg::ReloadRrd' so we're consistent with the qemu/lxc components. Signed-off-by: Dominik Csapak --- ui/src/pve/node.rs | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/ui/src/pve/node.rs b/ui/src/pve/node.rs index b089f64..b3b002e 100644 --- a/ui/src/pve/node.rs +++ b/ui/src/pve/node.rs @@ -6,8 +6,7 @@ use yew::{ }; use proxmox_human_byte::HumanByte; -use proxmox_rrd_api_types::{RrdMode, RrdTimeframe}; -use proxmox_yew_comp::{RRDGraph, Series}; +use proxmox_yew_comp::{RRDGraph, RRDTimeframe, RRDTimeframeSelector, Series}; use pwt::{ css::{AlignItems, ColorScheme, FlexFit}, prelude::*, @@ -51,10 +50,11 @@ impl Into for NodePanel { } pub enum Msg { - Reload, + ReloadRrd, ReloadStatus, LoadFinished(Result, proxmox_client::Error>), StatusLoadFinished(Result), + UpdateRrdTimeframe(RRDTimeframe), } pub struct NodePanelComp { @@ -65,6 +65,8 @@ pub struct NodePanelComp { mem_total_data: Rc, status: Option, + rrd_time_frame: RRDTimeframe, + last_error: Option, last_status_error: Option, @@ -74,9 +76,9 @@ pub struct NodePanelComp { } impl NodePanelComp { - async fn reload(remote: &str, node: &str) -> Msg { + async fn reload_rrd(remote: &str, node: &str, rrd_time_frame: RRDTimeframe) -> Msg { let res = crate::pdm_client() - .pve_node_rrddata(remote, node, RrdMode::Average, RrdTimeframe::Hour) + .pve_node_rrddata(remote, node, rrd_time_frame.mode, rrd_time_frame.timeframe) .await; Msg::LoadFinished(res) @@ -93,7 +95,7 @@ impl yew::Component for NodePanelComp { type Properties = NodePanel; fn create(ctx: &yew::Context) -> Self { - ctx.link().send_message(Msg::Reload); + ctx.link().send_message(Msg::ReloadRrd); ctx.link().send_message(Msg::ReloadStatus); Self { time_data: Rc::new(Vec::new()), @@ -101,6 +103,7 @@ impl yew::Component for NodePanelComp { load_data: Rc::new(Series::new("", Vec::new())), mem_data: Rc::new(Series::new("", Vec::new())), mem_total_data: Rc::new(Series::new("", Vec::new())), + rrd_time_frame: RRDTimeframe::load(), status: None, last_error: None, last_status_error: None, @@ -112,13 +115,14 @@ impl yew::Component for NodePanelComp { fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { match msg { - Msg::Reload => { + Msg::ReloadRrd => { self._timeout = None; let props = ctx.props(); let remote = props.remote.clone(); let node = props.node.clone(); + let timeframe = self.rrd_time_frame; self.async_pool.send_future(ctx.link().clone(), async move { - Self::reload(&remote, &node).await + Self::reload_rrd(&remote, &node, timeframe).await }); } Msg::ReloadStatus => { @@ -156,12 +160,11 @@ impl yew::Component for NodePanelComp { let link = ctx.link().clone(); self._timeout = Some(gloo_timers::callback::Timeout::new( ctx.props().rrd_interval, - move || link.send_message(Msg::Reload), + move || link.send_message(Msg::ReloadRrd), )) } Err(err) => self.last_error = Some(err), }, - Msg::StatusLoadFinished(res) => { match res { Ok(status) => { @@ -176,6 +179,11 @@ impl yew::Component for NodePanelComp { move || link.send_message(Msg::ReloadStatus), )) } + Msg::UpdateRrdTimeframe(rrd_time_frame) => { + self.rrd_time_frame = rrd_time_frame; + ctx.link().send_message(Msg::ReloadRrd); + return false; + } } true } @@ -194,7 +202,7 @@ impl yew::Component for NodePanelComp { self.mem_total_data = Rc::new(Series::new("", Vec::new())); self.async_pool = AsyncPool::new(); ctx.link() - .send_message_batch(vec![Msg::Reload, Msg::ReloadStatus]); + .send_message_batch(vec![Msg::ReloadRrd, Msg::ReloadStatus]); true } else { false @@ -286,6 +294,9 @@ impl yew::Component for NodePanelComp { Panel::new() .class(FlexFit) .title(title) + .with_tool( + RRDTimeframeSelector::new().on_change(ctx.link().callback(Msg::UpdateRrdTimeframe)), + ) .class(ColorScheme::Neutral) .with_child( // FIXME: add some 'visible' or 'active' property to the progress -- 2.39.5 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel