From a086956b483b4875470457e3eda1707b5bc4692a Mon Sep 17 00:00:00 2001 From: brotoskyj Date: Thu, 18 Dec 2025 10:14:58 -0500 Subject: [PATCH] Features - Optional Policy Name in Execution Histories closes #48 --- airlock_libs/Cargo.lock | 2 +- airlock_libs/Cargo.toml | 2 +- airlock_libs/pyproject.toml | 2 +- airlock_libs/src/services.rs | 31 +++++++++++++++++++++---------- requirements.txt | 2 +- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/airlock_libs/Cargo.lock b/airlock_libs/Cargo.lock index 391d9b4..d263687 100644 --- a/airlock_libs/Cargo.lock +++ b/airlock_libs/Cargo.lock @@ -26,7 +26,7 @@ dependencies = [ [[package]] name = "airlock_libs" -version = "6.2.0" +version = "7.0.0" dependencies = [ "chrono", "crossbeam", diff --git a/airlock_libs/Cargo.toml b/airlock_libs/Cargo.toml index 888c19c..2e6b4f0 100644 --- a/airlock_libs/Cargo.toml +++ b/airlock_libs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "airlock_libs" -version = "6.2.0" +version = "7.0.0" edition = "2024" [dependencies] diff --git a/airlock_libs/pyproject.toml b/airlock_libs/pyproject.toml index 1c2fcd2..95fce4f 100644 --- a/airlock_libs/pyproject.toml +++ b/airlock_libs/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "airlock_libs" -version = "6.2.0" +version = "7.0.0" description = "Airlock Digital API Wrapper" readme = "README.md" license = { text = "AGPL-3.0-only" } diff --git a/airlock_libs/src/services.rs b/airlock_libs/src/services.rs index db5392a..b03f2a4 100644 --- a/airlock_libs/src/services.rs +++ b/airlock_libs/src/services.rs @@ -75,9 +75,8 @@ pub fn pull_policy_exec_histories( .set_draw_target(ProgressDrawTarget::stderr()); progress_bar.lock().unwrap().set_style( ProgressStyle::default_bar() - .template("Total Completion: {spinner:.green} [{elapsed_precise}] [{bar:40.green/cyan}] {pos}/{len} - Current Policy: {msg}") - .unwrap() - .progress_chars("#> ") + .template("Total - Policy Name: {msg}: {spinner:.green} [{elapsed_precise}] [{bar:40.green/blue}] {pos}/{len}") + .unwrap().progress_chars("≫>›") ); let client: Client = tracer.in_span("Building HTTP Client", |cx| { let client_result: Result = build_client(headers); @@ -111,7 +110,6 @@ pub fn pull_policy_exec_histories( Local::now().naive_local() - chrono::Duration::days(days); let (tx, rx) = unbounded::>(); let pb_clone = progress_bar.clone(); - pb_clone.lock().unwrap().set_message(policy_names.clone()); thread::spawn(move || { let mut seen: HashMap<(String, String, String), Group> = if writeable_filepath.exists() { @@ -183,11 +181,17 @@ pub fn pull_policy_exec_histories( .lock() .unwrap() .enable_steady_tick(std::time::Duration::from_millis(100)); + pb_clone + .lock() + .unwrap() + .set_message(policy_names.clone().unwrap_or("Statistics".to_string())); let span: opentelemetry::trace::SpanRef<'_> = cx.span(); span.set_attribute(KeyValue::new("Days", days.to_string())); span.set_attribute(KeyValue::new( "Policy Name", - policy_names.clone().unwrap_or_default(), + policy_names + .clone() + .unwrap_or("Statistics Monitoring".to_string()), )); loop { let execution_histories = tracer.in_span(checkpoint_number.to_string(), |cx| { @@ -269,11 +273,18 @@ async fn history_logging( policy_names: &Option, client: &Client, ) -> ApiResponse { - let payload = json!({ - "type": exec_types, - "checkpoint": checkpoint_number, - "policy": policy_names.as_ref().map(|p| vec![p]), - }); + let policy_json = match policy_names { + Some(name) => format!(r#"[ "{}" ]"#, name), // JSON array with one element + None => "[]".to_string(), // Empty JSON array + }; + let payload = format!( + r#"{{ + "type": {}, + "checkpoint": "{}", + "policy": {} + }}"#, + exec_types, checkpoint_number, policy_json + ); let res: Result = client .post(format!("{}/v1/logging/exechistories", base_url)) .json(&payload) diff --git a/requirements.txt b/requirements.txt index aa04ed4..5304f64 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,4 +23,4 @@ pyperclip==1.11.0 # Custom/Private packages --extra-index-url https://git.racooncity.org/api/packages/brotoskyj/pypi/simple/ -airlock_libs==6.2.0 \ No newline at end of file +airlock_libs==7.0.0 \ No newline at end of file