From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 4C05F752E5 for ; Wed, 13 Oct 2021 10:24:58 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 0C04CE519 for ; Wed, 13 Oct 2021 10:24:58 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 5D7FBE4CF for ; Wed, 13 Oct 2021 10:24:56 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 3673045DCC; Wed, 13 Oct 2021 10:24:56 +0200 (CEST) From: Dietmar Maurer To: pbs-devel@lists.proxmox.com Date: Wed, 13 Oct 2021 10:24:40 +0200 Message-Id: <20211013082452.619406-4-dietmar@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211013082452.619406-1-dietmar@proxmox.com> References: <20211013082452.619406-1-dietmar@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.552 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% 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. [proxmox-backup-proxy.rs] Subject: [pbs-devel] [PATCH proxmox-backup 03/15] proxmox-backup-proxy: use tokio::task::spawn_blocking instead of block_in_place X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Oct 2021 08:24:58 -0000 --- src/bin/proxmox-backup-proxy.rs | 119 ++++++++++++++++---------------- 1 file changed, 61 insertions(+), 58 deletions(-) diff --git a/src/bin/proxmox-backup-proxy.rs b/src/bin/proxmox-backup-proxy.rs index 66d81bdb..0f0f6f59 100644 --- a/src/bin/proxmox-backup-proxy.rs +++ b/src/bin/proxmox-backup-proxy.rs @@ -920,82 +920,85 @@ fn rrd_update_derive(name: &str, value: f64) { } async fn generate_host_stats() { + match tokio::task::spawn_blocking(generate_host_stats_sync).await { + Ok(()) => (), + Err(err) => log::error!("generate_host_stats paniced: {}", err), + } +} + +fn generate_host_stats_sync() { use proxmox::sys::linux::procfs::{ read_meminfo, read_proc_stat, read_proc_net_dev, read_loadavg}; - pbs_runtime::block_in_place(move || { - - match read_proc_stat() { - Ok(stat) => { - rrd_update_gauge("host/cpu", stat.cpu); - rrd_update_gauge("host/iowait", stat.iowait_percent); - } - Err(err) => { - eprintln!("read_proc_stat failed - {}", err); - } + match read_proc_stat() { + Ok(stat) => { + rrd_update_gauge("host/cpu", stat.cpu); + rrd_update_gauge("host/iowait", stat.iowait_percent); + } + Err(err) => { + eprintln!("read_proc_stat failed - {}", err); } + } - match read_meminfo() { - Ok(meminfo) => { - rrd_update_gauge("host/memtotal", meminfo.memtotal as f64); - rrd_update_gauge("host/memused", meminfo.memused as f64); - rrd_update_gauge("host/swaptotal", meminfo.swaptotal as f64); - rrd_update_gauge("host/swapused", meminfo.swapused as f64); - } - Err(err) => { - eprintln!("read_meminfo failed - {}", err); - } + match read_meminfo() { + Ok(meminfo) => { + rrd_update_gauge("host/memtotal", meminfo.memtotal as f64); + rrd_update_gauge("host/memused", meminfo.memused as f64); + rrd_update_gauge("host/swaptotal", meminfo.swaptotal as f64); + rrd_update_gauge("host/swapused", meminfo.swapused as f64); } + Err(err) => { + eprintln!("read_meminfo failed - {}", err); + } + } - match read_proc_net_dev() { - Ok(netdev) => { - use pbs_config::network::is_physical_nic; - let mut netin = 0; - let mut netout = 0; - for item in netdev { - if !is_physical_nic(&item.device) { continue; } - netin += item.receive; - netout += item.send; - } - rrd_update_derive("host/netin", netin as f64); - rrd_update_derive("host/netout", netout as f64); - } - Err(err) => { - eprintln!("read_prox_net_dev failed - {}", err); + match read_proc_net_dev() { + Ok(netdev) => { + use pbs_config::network::is_physical_nic; + let mut netin = 0; + let mut netout = 0; + for item in netdev { + if !is_physical_nic(&item.device) { continue; } + netin += item.receive; + netout += item.send; } + rrd_update_derive("host/netin", netin as f64); + rrd_update_derive("host/netout", netout as f64); + } + Err(err) => { + eprintln!("read_prox_net_dev failed - {}", err); } + } - match read_loadavg() { - Ok(loadavg) => { - rrd_update_gauge("host/loadavg", loadavg.0 as f64); - } - Err(err) => { - eprintln!("read_loadavg failed - {}", err); - } + match read_loadavg() { + Ok(loadavg) => { + rrd_update_gauge("host/loadavg", loadavg.0 as f64); + } + Err(err) => { + eprintln!("read_loadavg failed - {}", err); } + } - let disk_manager = DiskManage::new(); + let disk_manager = DiskManage::new(); - gather_disk_stats(disk_manager.clone(), Path::new("/"), "host"); + gather_disk_stats(disk_manager.clone(), Path::new("/"), "host"); - match pbs_config::datastore::config() { - Ok((config, _)) => { - let datastore_list: Vec = - config.convert_to_typed_array("datastore").unwrap_or_default(); + match pbs_config::datastore::config() { + Ok((config, _)) => { + let datastore_list: Vec = + config.convert_to_typed_array("datastore").unwrap_or_default(); - for config in datastore_list { + for config in datastore_list { - let rrd_prefix = format!("datastore/{}", config.name); - let path = std::path::Path::new(&config.path); - gather_disk_stats(disk_manager.clone(), path, &rrd_prefix); - } - } - Err(err) => { - eprintln!("read datastore config failed - {}", err); + let rrd_prefix = format!("datastore/{}", config.name); + let path = std::path::Path::new(&config.path); + gather_disk_stats(disk_manager.clone(), path, &rrd_prefix); } } - - }); + Err(err) => { + eprintln!("read datastore config failed - {}", err); + } + } } fn check_schedule(worker_type: &str, event_str: &str, id: &str) -> bool { -- 2.30.2