diff --git a/Cargo.lock b/Cargo.lock index 8fd29e39..7dc9e21a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "ProxyAgentExt" -version = "1.0.41" +version = "1.0.42" dependencies = [ "clap", "ctor", @@ -172,7 +172,7 @@ dependencies = [ [[package]] name = "azure-proxy-agent" -version = "1.0.41" +version = "1.0.42" dependencies = [ "aya", "bitflags", @@ -925,7 +925,7 @@ dependencies = [ [[package]] name = "proxy_agent_setup" -version = "1.0.41" +version = "1.0.42" dependencies = [ "clap", "proxy_agent_shared", @@ -937,7 +937,7 @@ dependencies = [ [[package]] name = "proxy_agent_shared" -version = "1.0.41" +version = "1.0.42" dependencies = [ "chrono", "concurrent-queue", diff --git a/proxy_agent/Cargo.toml b/proxy_agent/Cargo.toml index 17b93293..60d8bb2f 100644 --- a/proxy_agent/Cargo.toml +++ b/proxy_agent/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "azure-proxy-agent" -version = "1.0.41" # always 3-number version +version = "1.0.42" # always 3-number version edition = "2021" build = "build.rs" readme = "README.md" diff --git a/proxy_agent/src/key_keeper.rs b/proxy_agent/src/key_keeper.rs index 1c090d1d..3f289bde 100644 --- a/proxy_agent/src/key_keeper.rs +++ b/proxy_agent/src/key_keeper.rs @@ -215,6 +215,7 @@ impl KeyKeeper { let mut provision_start_time = Instant::now(); let mut redirect_policy_updated = false; + let mut previous_key_status_message: Option = None; loop { if !first_iteration { let current_state = match self @@ -260,8 +261,24 @@ impl KeyKeeper { continue; } }; - self.update_status_message(format!("Got key status successfully: {status}."), true) - .await; + let key_status_message = format!("Got key status successfully: {status}."); + if !Self::should_emit_key_status_event( + previous_key_status_message.as_ref(), + &key_status_message, + ) { + // Keep unchanged key status as verbose log only to avoid event spam. + logger::write(key_status_message); + } else { + // Emit event only when the key status payload changes. + event_logger::write_event( + LoggerLevel::Warn, + key_status_message.clone(), + "poll_secure_channel_status", + "key_keeper", + logger::AGENT_LOGGER_KEY, + ); + previous_key_status_message = Some(key_status_message); + } self.update_access_control_rules(&status).await; @@ -682,7 +699,9 @@ impl KeyKeeper { true } Err(e) => { - logger::write_warning(format!("Failed to attest the key: {e:?}")); + // attest failed, update status message, and let it retry in next iteration + self.update_status_message(format!("Failed to attest the key: {e:?}"), true) + .await; false } } @@ -814,6 +833,13 @@ impl KeyKeeper { } } + fn should_emit_key_status_event( + previous_message: Option<&String>, + current_message: &str, + ) -> bool { + previous_message.is_none_or(|previous| previous != current_message) + } + fn store_local_key(key_dir: &Path, key: &Key, encrypted: bool) -> Result<()> { let guid = key.guid.to_string(); let mut key_file = key_dir.to_path_buf().join(guid); @@ -975,8 +1001,8 @@ impl KeyKeeper { #[cfg(test)] mod tests { use super::key::Key; + use super::KeyKeeper; use crate::key_keeper; - use crate::key_keeper::KeyKeeper; use proxy_agent_shared::misc_helpers; use proxy_agent_shared::server_mock; use std::env; @@ -1108,4 +1134,26 @@ mod tests { // clean up and ignore the clean up errors _ = fs::remove_dir_all(&temp_test_path); } + + #[test] + fn should_emit_key_status_event_tests() { + let current_message = "Got key status successfully: status-a."; + assert!( + KeyKeeper::should_emit_key_status_event(None, current_message), + "Should emit event when previous message is None." + ); + + let previous_message = "Got key status successfully: status-a.".to_string(); + assert!( + !KeyKeeper::should_emit_key_status_event(Some(&previous_message), &previous_message,), + "Should not emit event when previous message is the same as current message." + ); + + let previous_message = "Got key status successfully: status-a.".to_string(); + let current_message = "Got key status successfully: status-b."; + assert!( + KeyKeeper::should_emit_key_status_event(Some(&previous_message), current_message,), + "Should emit event when previous message is different from current message." + ); + } } diff --git a/proxy_agent_extension/Cargo.toml b/proxy_agent_extension/Cargo.toml index a358815a..3bccea47 100644 --- a/proxy_agent_extension/Cargo.toml +++ b/proxy_agent_extension/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ProxyAgentExt" -version = "1.0.41" # always 3-number version +version = "1.0.42" # always 3-number version edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/proxy_agent_setup/Cargo.toml b/proxy_agent_setup/Cargo.toml index c2e8b913..4b81903a 100644 --- a/proxy_agent_setup/Cargo.toml +++ b/proxy_agent_setup/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "proxy_agent_setup" -version = "1.0.41" +version = "1.0.42" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/proxy_agent_shared/Cargo.toml b/proxy_agent_shared/Cargo.toml index e3b48a0b..1b185ffb 100644 --- a/proxy_agent_shared/Cargo.toml +++ b/proxy_agent_shared/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "proxy_agent_shared" -version = "1.0.41" +version = "1.0.42" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html