From e1f78b7735c09fa55fa5c9121a7df861fb40620f Mon Sep 17 00:00:00 2001 From: igor04091968 Date: Tue, 2 Jun 2026 19:15:17 +0300 Subject: [PATCH] fix(detmir): stabilize rust health gates --- adk-rust/crates/aw-rus-healthd/src/main.rs | 2 +- adk-rust/crates/check-aw-data/src/main.rs | 4 +-- adk-rust/crates/dlp-health-check/src/main.rs | 31 +++++++++++++++++-- .../hayabusa-tools/src/bin/autoprocess.rs | 10 ++++-- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/adk-rust/crates/aw-rus-healthd/src/main.rs b/adk-rust/crates/aw-rus-healthd/src/main.rs index 233b4c3..af0c75d 100644 --- a/adk-rust/crates/aw-rus-healthd/src/main.rs +++ b/adk-rust/crates/aw-rus-healthd/src/main.rs @@ -307,7 +307,7 @@ fn latest_bucket_event(client: &Client, api_base: &str, bucket_id: &str) -> Resu .filter(|item| item.is_object()) .cloned() .collect::>(); - objects.sort_by(|left, right| event_effective_ts(right).cmp(&event_effective_ts(left))); + objects.sort_by_key(|item| std::cmp::Reverse(event_effective_ts(item))); Ok(objects.into_iter().next()) } diff --git a/adk-rust/crates/check-aw-data/src/main.rs b/adk-rust/crates/check-aw-data/src/main.rs index 7455e14..c8e60dd 100644 --- a/adk-rust/crates/check-aw-data/src/main.rs +++ b/adk-rust/crates/check-aw-data/src/main.rs @@ -227,7 +227,7 @@ fn read_context( .pointer("/data/active") .and_then(Value::as_bool) .unwrap_or(false); - if age >= 0 && age < 900 && !active { + if (0..900).contains(&age) && !active { state.host_inactive = true; } } @@ -248,7 +248,7 @@ fn read_context( .and_then(Value::as_array) .map(Vec::len) .unwrap_or(0); - if age >= 0 && age < 300 && status == "ok" && problems == 0 { + if (0..300).contains(&age) && status == "ok" && problems == 0 { state.guard_healthy = true; } } diff --git a/adk-rust/crates/dlp-health-check/src/main.rs b/adk-rust/crates/dlp-health-check/src/main.rs index 588dfd7..4e216ec 100644 --- a/adk-rust/crates/dlp-health-check/src/main.rs +++ b/adk-rust/crates/dlp-health-check/src/main.rs @@ -755,6 +755,15 @@ fn counter_delta( } } +fn transport_counter_key(prefix: &str, bucket_id: &str, data: &Value, metric: &str) -> String { + format!( + "{prefix}:{bucket_id}:{}:{}:{}:{metric}", + value_str(data.get("hostname")), + int_or_zero(data.get("sessionId")), + value_str(data.get("username")) + ) +} + #[derive(Clone, Copy)] struct RuntimeThresholds { sample_limit: i64, @@ -858,7 +867,7 @@ fn check_file_operations_runtime( let send_failures = int_or_zero(health_data.get("sendFailures")); let (previous, delta) = counter_delta( counter_state.as_deref_mut(), - &format!("file-operations:{bucket_id}:sendFailures"), + &transport_counter_key("file-operations", bucket_id, health_data, "sendFailures"), send_failures, ); let health_item = json!({ @@ -996,7 +1005,7 @@ fn check_endpoint_self_test_metrics( let send_failures = int_or_zero(data.get("sendFailures")); let (previous, delta) = counter_delta( counter_state.as_deref_mut(), - &format!("endpoint-self-test:{bucket_id}:sendFailures"), + &transport_counter_key("endpoint-self-test", &bucket_id, data, "sendFailures"), send_failures, ); let item = json!({ @@ -1501,6 +1510,24 @@ mod tests { assert_eq!(counter_delta(Some(&mut state), "k", 1), (Some(13), 0)); } + #[test] + fn transport_counter_key_separates_sessions() { + let data = json!({ + "hostname": "SHARKON2025", + "sessionId": 4, + "username": "USER4" + }); + assert_eq!( + transport_counter_key( + "file-operations", + "aw-file-operations_SHARKON2025", + &data, + "sendFailures" + ), + "file-operations:aw-file-operations_SHARKON2025:SHARKON2025:4:USER4:sendFailures" + ); + } + #[test] fn text_excerpt_truncates_like_python() { let text = json!("one two three"); diff --git a/adk-rust/crates/hayabusa-tools/src/bin/autoprocess.rs b/adk-rust/crates/hayabusa-tools/src/bin/autoprocess.rs index 015083b..2af8641 100644 --- a/adk-rust/crates/hayabusa-tools/src/bin/autoprocess.rs +++ b/adk-rust/crates/hayabusa-tools/src/bin/autoprocess.rs @@ -151,12 +151,18 @@ fn process_one(zip_path: &Path) -> Result { } archive_sidecars(&report_dir, &sidecars)?; archive_drop_package(&report_dir, zip_path)?; - if sidecars.case_id.is_some() && !Path::new(CASE_ALERT).is_file() { + if let Some(case_id) = sidecars.case_id { + if Path::new(CASE_ALERT).is_file() { + return Ok(ProcessResult { + latest_intake: latest, + case_alert, + }); + } run_checked( Path::new(LINKER), &[ "--case-id".to_string(), - sidecars.case_id.unwrap().to_string(), + case_id.to_string(), "--mode".to_string(), mode, "--link-source".to_string(),