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 6528A1FF16B for ; Tue, 26 Aug 2025 15:51:52 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EC2D934D72; Tue, 26 Aug 2025 15:51:40 +0200 (CEST) From: Lukas Wagner To: pdm-devel@lists.proxmox.com Date: Tue, 26 Aug 2025 15:51:15 +0200 Message-ID: <20250826135119.336510-21-l.wagner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250826135119.336510-1-l.wagner@proxmox.com> References: <20250826135119.336510-1-l.wagner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1756216282082 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.026 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 v7 20/24] cli: add commands for metric-collection trigger and status 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" This adds new commands to the proxmox-datacenter-client CLI tool, namely - trigger metric collection - show status of the last metric collection Signed-off-by: Lukas Wagner Reviewed-by: Maximiliano Sandoval Reviewed-by: Dominik Csapak Tested-by: Dominik Csapak --- Notes: Changes since v1: - update-settings -> 'settings update' - show-settings -> 'settings show' New in v2. cli/client/Cargo.toml | 1 + cli/client/src/main.rs | 2 + cli/client/src/metric_collection.rs | 70 +++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 cli/client/src/metric_collection.rs diff --git a/cli/client/Cargo.toml b/cli/client/Cargo.toml index 3de3bf3f..c2aac874 100644 --- a/cli/client/Cargo.toml +++ b/cli/client/Cargo.toml @@ -46,6 +46,7 @@ proxmox-rrd-api-types.workspace = true proxmox-schema = { workspace = true, features = [ "api-macro" ] } proxmox-section-config.workspace = true proxmox-sys.workspace = true +proxmox-time.workspace = true proxmox-tfa = { workspace = true, features = [ "types" ] } # for the pve API types: diff --git a/cli/client/src/main.rs b/cli/client/src/main.rs index b1cc2ad5..27fd3744 100644 --- a/cli/client/src/main.rs +++ b/cli/client/src/main.rs @@ -17,6 +17,7 @@ pub mod env; pub mod acl; pub mod config; +pub mod metric_collection; pub mod pbs; pub mod pve; pub mod remotes; @@ -96,6 +97,7 @@ fn main_do() -> Result<(), Error> { ) .insert("acl", acl::cli()) .insert("login", CliCommand::new(&API_METHOD_LOGIN)) + .insert("metric-collection", metric_collection::cli()) .insert("pbs", pbs::cli()) .insert("pve", pve::cli()) .insert("remote", remotes::cli()) diff --git a/cli/client/src/metric_collection.rs b/cli/client/src/metric_collection.rs new file mode 100644 index 00000000..e9dbd804 --- /dev/null +++ b/cli/client/src/metric_collection.rs @@ -0,0 +1,70 @@ +use anyhow::Error; +use pdm_api_types::remotes::REMOTE_ID_SCHEMA; +use proxmox_router::cli::{ + format_and_print_result, CliCommand, CliCommandMap, CommandLineInterface, OutputFormat, +}; +use proxmox_schema::api; + +use crate::{client, env}; + +pub fn cli() -> CommandLineInterface { + CliCommandMap::new() + .insert( + "trigger", + CliCommand::new(&API_METHOD_TRIGGER_METRIC_COLLECTION), + ) + .insert( + "status", + CliCommand::new(&API_METHOD_METRIC_COLLECTION_STATUS), + ) + .into() +} + +#[api( + input: { + properties: { + remote: { + schema: REMOTE_ID_SCHEMA, + optional: true, + }, + } + } +)] +/// Trigger metric collection. If a remote is passed, only this remote will be collected, otherwise +/// all. +async fn trigger_metric_collection(remote: Option) -> Result<(), Error> { + client()? + .trigger_metric_collection(remote.as_deref()) + .await?; + Ok(()) +} + +#[api] +/// Show metric collection status. +async fn metric_collection_status() -> Result<(), Error> { + let result = client()?.get_metric_collection_status().await?; + + let output_format = env().format_args.output_format; + if output_format == OutputFormat::Text { + for remote_status in result { + let timestamp = if let Some(last_collection) = remote_status.last_collection { + proxmox_time::strftime_local("%a, %d %b %Y %T %z", last_collection)? + } else { + "never".into() + }; + + let status = if let Some(err) = &remote_status.error { + err + } else { + "ok" + }; + + println!("{}: {status}", remote_status.remote); + println!(" last successful: {timestamp}"); + println!(); + } + } else { + format_and_print_result(&result, &output_format.to_string()); + } + Ok(()) +} -- 2.47.2 _______________________________________________ pdm-devel mailing list pdm-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel