use super::{TracingConfig, TracingFormat};
pub struct TelemetryGuard {
_private: (),
}
impl Drop for TelemetryGuard {
fn drop(&mut self) {
tracing::info!("shutting down telemetry");
}
}
pub fn init_tracing(_config: TracingConfig) -> TelemetryGuard {
TelemetryGuard { _private: () }
}
pub fn init_tracing_from_env() -> TelemetryGuard {
let format = std::env::var("ATTUNED_LOG_FORMAT")
.map(|s| match s.to_lowercase().as_str() {
"json" => TracingFormat::Json,
"compact" => TracingFormat::Compact,
_ => TracingFormat::Pretty,
})
.unwrap_or_default();
let level = std::env::var("ATTUNED_LOG_LEVEL").unwrap_or_else(|_| "info".to_string());
let service_name =
std::env::var("ATTUNED_SERVICE_NAME").unwrap_or_else(|_| "attuned".to_string());
let config = TracingConfig {
format,
level,
service_name,
..Default::default()
};
init_tracing(config)
}
#[derive(Default)]
pub struct TelemetryBuilder {
tracing: Option<TracingConfig>,
#[allow(dead_code)]
otel: Option<super::OtelConfig>,
#[allow(dead_code)]
metrics_enabled: bool,
}
impl TelemetryBuilder {
pub fn new() -> Self {
Self::default()
}
pub fn with_tracing(mut self, config: TracingConfig) -> Self {
self.tracing = Some(config);
self
}
pub fn with_opentelemetry(mut self, config: super::OtelConfig) -> Self {
self.otel = Some(config);
self
}
pub fn with_metrics(mut self) -> Self {
self.metrics_enabled = true;
self
}
pub fn init(self) -> TelemetryGuard {
let config = self.tracing.unwrap_or_default();
init_tracing(config)
}
}