From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pdm-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id C6C0D1FF172 for <inbox@lore.proxmox.com>; Wed, 16 Apr 2025 14:57:22 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E6B5D37018; Wed, 16 Apr 2025 14:57:20 +0200 (CEST) From: Lukas Wagner <l.wagner@proxmox.com> To: pdm-devel@lists.proxmox.com Date: Wed, 16 Apr 2025 14:56:40 +0200 Message-Id: <20250416125642.291552-25-l.wagner@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250416125642.291552-1-l.wagner@proxmox.com> References: <20250416125642.291552-1-l.wagner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.016 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 proxmox-datacenter-manager v3 24/26] metric collection: factor out handle_tick and handle_control_message fns X-BeenThere: pdm-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Datacenter Manager development discussion <pdm-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pdm-devel/> List-Post: <mailto:pdm-devel@lists.proxmox.com> List-Help: <mailto:pdm-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel>, <mailto:pdm-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Datacenter Manager development discussion <pdm-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pdm-devel-bounces@lists.proxmox.com Sender: "pdm-devel" <pdm-devel-bounces@lists.proxmox.com> No functional changes, just moving some code into seperate methods for better readability. Suggested-by: Wolfgang Bumiller <w.bumiller@proxmox.com> Signed-off-by: Lukas Wagner <l.wagner@proxmox.com> Reviewed-by: Maximiliano Sandoval <m.sandoval@proxmox.com> --- Notes: New in v2. .../src/metric_collection/collection_task.rs | 88 ++++++++++--------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/server/src/metric_collection/collection_task.rs b/server/src/metric_collection/collection_task.rs index d34f3027..d13701e1 100644 --- a/server/src/metric_collection/collection_task.rs +++ b/server/src/metric_collection/collection_task.rs @@ -90,48 +90,12 @@ impl MetricCollectionTask { _ = timer.tick() => { // Reload settings in case they have changed in the meanwhile self.settings = Self::get_settings_or_default(); - - log::debug!("starting metric collection from all remotes - triggered by timer"); - - if let Some(remotes) = Self::load_remote_config() { - self.cleanup_removed_remotes_from_state(&remotes); - - let now = Instant::now(); - let to_fetch = remotes.order.as_slice(); - self.fetch_remotes(&remotes, to_fetch).await; - let elapsed = now.elapsed(); - - if let Err(err) = self.metric_data_tx.send( - RrdStoreRequest::CollectionStats { - timestamp: proxmox_time::epoch_i64(), - stats: CollectionStats { - // TODO: use as_millis_f64 once stabilized - total_time: elapsed.as_secs_f64() * 1000. - } - }).await { - log::error!("could not send collection stats to rrd task: {err}"); - } - } + self.handle_tick().await; } - - val = self.control_message_rx.recv() => { - // Reload settings in case they have changed in the meanwhile + Some(message) = self.control_message_rx.recv() => { + // Reload settings in case they have changed in the meanwhile. self.settings = Self::get_settings_or_default(); - match val { - Some(ControlMsg::CollectSingleRemote(remote)) => { - if let Some(remotes) = Self::load_remote_config() { - log::debug!("starting metric collection for remote '{remote}'- triggered by control message"); - self.fetch_remotes(&remotes, &[remote]).await; - } - } - Some(ControlMsg::CollectAllRemotes) => { - if let Some(remotes) = Self::load_remote_config() { - log::debug!("starting metric collection from all remotes - triggered by control message"); - self.fetch_remotes(&remotes, &remotes.order).await; - } - } - _ => {}, - } + self.handle_control_message(message).await; } } @@ -154,6 +118,50 @@ impl MetricCollectionTask { } } + /// Handle a timer tick. + async fn handle_tick(&mut self) { + log::debug!("starting metric collection from all remotes - triggered by timer"); + + if let Some(remotes) = Self::load_remote_config() { + self.cleanup_removed_remotes_from_state(&remotes); + + let now = Instant::now(); + let to_fetch = remotes.order.as_slice(); + self.fetch_remotes(&remotes, to_fetch).await; + let elapsed = now.elapsed(); + + if let Err(err) = self + .metric_data_tx + .send(RrdStoreRequest::CollectionStats { + timestamp: proxmox_time::epoch_i64(), + stats: CollectionStats { + // TODO: use as_millis_f64 once stabilized + total_time: elapsed.as_secs_f64() * 1000., + }, + }) + .await + { + log::error!("could not send collection stats to rrd task: {err}"); + } + } + } + + /// Handle a control message for force-triggered collection. + async fn handle_control_message(&mut self, message: ControlMsg) { + if let Some(remotes) = Self::load_remote_config() { + match message { + ControlMsg::CollectSingleRemote(remote) => { + log::debug!("starting metric collection for remote '{remote}'- triggered by control message"); + self.fetch_remotes(&remotes, &[remote]).await; + } + ControlMsg::CollectAllRemotes => { + log::debug!("starting metric collection from all remotes - triggered by control message"); + self.fetch_remotes(&remotes, &remotes.order).await; + } + } + } + } + fn cleanup_removed_remotes_from_state(&mut self, remotes: &SectionConfigData<Remote>) { self.state.retain(|remote| remotes.get(remote).is_some()); } -- 2.39.5 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel