Skip to content

Commit 88afef4

Browse files
committed
feat: remember original log level as indication we are currently collecting
1 parent 0b1fc79 commit 88afef4

File tree

1 file changed

+20
-17
lines changed
  • datadog-tracer-flare/src

1 file changed

+20
-17
lines changed

datadog-tracer-flare/src/lib.rs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
pub mod error;
1010
pub mod zip;
1111

12-
use std::sync::atomic::{AtomicBool, Ordering};
12+
use std::sync::Mutex;
1313

1414
use datadog_remote_config::{
1515
config::agent_task::AgentTaskFile, file_storage::RawFile, RemoteConfigData,
1616
};
17+
use ddcommon::MutexExt;
1718

1819
#[cfg(feature = "listener")]
1920
use {
@@ -55,7 +56,8 @@ use crate::error::FlareError;
5556
pub struct TracerFlareManager {
5657
pub agent_url: String,
5758
pub language: String,
58-
pub collecting: AtomicBool,
59+
// Option Some-ness tracks whether we are currently collecting metrics
60+
pub original_log_level: Mutex<Option<LogLevel>>,
5961
/// As a featured option so we can use the component with no Listener
6062
#[cfg(feature = "listener")]
6163
pub listener: Option<Listener>,
@@ -66,7 +68,7 @@ impl Default for TracerFlareManager {
6668
TracerFlareManager {
6769
agent_url: hyper::Uri::default().to_string(),
6870
language: "rust".to_string(),
69-
collecting: AtomicBool::new(false),
71+
original_log_level: Mutex::new(None),
7072
#[cfg(feature = "listener")]
7173
listener: None,
7274
}
@@ -182,14 +184,15 @@ impl TracerFlareManager {
182184
data: &RemoteConfigData,
183185
) -> Result<ReturnAction, FlareError> {
184186
let action = data.try_into();
185-
if let Ok(ReturnAction::Set(_)) = action {
186-
if self.collecting.load(Ordering::Relaxed) {
187+
if let Ok(ReturnAction::Set(log_level)) = action {
188+
// If we are already collecting
189+
if self.original_log_level.lock_or_panic().is_some() {
187190
return Ok(ReturnAction::None);
188191
}
189-
self.collecting.store(true, Ordering::Relaxed);
192+
*self.original_log_level.lock_or_panic() = Some(log_level);
190193
} else if Ok(ReturnAction::None) != action {
191194
// If action is Send, Unset or an error, we need to stop collecting
192-
self.collecting.store(false, Ordering::Relaxed);
195+
*self.original_log_level.lock_or_panic() = None;
193196
}
194197
action
195198
}
@@ -215,7 +218,7 @@ impl TracerFlareManager {
215218
Ok(data) => self.handle_remote_config_data(data),
216219
Err(e) => {
217220
// If encounter an error we need to stop collecting
218-
self.collecting.store(false, Ordering::Relaxed);
221+
*self.original_log_level.lock_or_panic() = None;
219222
Err(FlareError::ParsingError(e.to_string()))
220223
}
221224
}
@@ -224,7 +227,7 @@ impl TracerFlareManager {
224227

225228
/// Enum that holds the different log levels possible
226229
/// Do not change the order of the variants because we rely on Ord
227-
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
230+
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
228231
pub enum LogLevel {
229232
Trace,
230233
Debug,
@@ -456,10 +459,10 @@ pub async fn run_remote_config_listener(
456459
}
457460
}
458461

459-
if let ReturnAction::Set(_) = state {
460-
tracer_flare.collecting.store(true, Ordering::Relaxed);
462+
if let ReturnAction::Set(log_level) = state {
463+
*tracer_flare.original_log_level.lock_or_panic() = Some(log_level);
461464
} else if let ReturnAction::Send(_) = state {
462-
tracer_flare.collecting.store(false, Ordering::Relaxed);
465+
*tracer_flare.original_log_level.lock_or_panic() = None;
463466
}
464467

465468
Ok(state)
@@ -477,7 +480,7 @@ mod tests {
477480
file_storage::ParsedFileStorage,
478481
RemoteConfigPath, RemoteConfigProduct, RemoteConfigSource,
479482
};
480-
use std::sync::atomic::Ordering;
483+
use ddcommon::MutexExt;
481484
use std::{num::NonZeroU64, sync::Arc};
482485

483486
#[test]
@@ -663,19 +666,19 @@ mod tests {
663666
.unwrap();
664667

665668
// First AGENT_CONFIG
666-
assert!(!tracer_flare.collecting.load(Ordering::Relaxed));
669+
assert!(tracer_flare.original_log_level.lock_or_panic().is_none());
667670
let result = tracer_flare
668671
.handle_remote_config_file(agent_config_file.clone())
669672
.unwrap();
670673
assert_eq!(result, ReturnAction::Set(LogLevel::Info));
671-
assert!(tracer_flare.collecting.load(Ordering::Relaxed));
674+
assert!(tracer_flare.original_log_level.lock_or_panic().is_some());
672675

673676
// Second AGENT_CONFIG
674677
let result = tracer_flare
675678
.handle_remote_config_file(agent_config_file)
676679
.unwrap();
677680
assert_eq!(result, ReturnAction::None);
678-
assert!(tracer_flare.collecting.load(Ordering::Relaxed));
681+
assert!(tracer_flare.original_log_level.lock_or_panic().is_some());
679682

680683
// Non-None actions stop collecting
681684
let error_file = storage
@@ -692,7 +695,7 @@ mod tests {
692695
.unwrap();
693696

694697
let _ = tracer_flare.handle_remote_config_file(error_file);
695-
assert!(!tracer_flare.collecting.load(Ordering::Relaxed));
698+
assert!(tracer_flare.original_log_level.lock_or_panic().is_none());
696699
}
697700

698701
#[test]

0 commit comments

Comments
 (0)