attuned_core/telemetry/
setup.rs1use super::{TracingConfig, TracingFormat};
6
7pub struct TelemetryGuard {
9 _private: (),
10}
11
12impl Drop for TelemetryGuard {
13 fn drop(&mut self) {
14 tracing::info!("shutting down telemetry");
16 }
17}
18
19pub fn init_tracing(_config: TracingConfig) -> TelemetryGuard {
35 TelemetryGuard { _private: () }
38}
39
40pub fn init_tracing_from_env() -> TelemetryGuard {
47 let format = std::env::var("ATTUNED_LOG_FORMAT")
48 .map(|s| match s.to_lowercase().as_str() {
49 "json" => TracingFormat::Json,
50 "compact" => TracingFormat::Compact,
51 _ => TracingFormat::Pretty,
52 })
53 .unwrap_or_default();
54
55 let level = std::env::var("ATTUNED_LOG_LEVEL").unwrap_or_else(|_| "info".to_string());
56
57 let service_name =
58 std::env::var("ATTUNED_SERVICE_NAME").unwrap_or_else(|_| "attuned".to_string());
59
60 let config = TracingConfig {
61 format,
62 level,
63 service_name,
64 ..Default::default()
65 };
66
67 init_tracing(config)
68}
69
70#[derive(Default)]
72pub struct TelemetryBuilder {
73 tracing: Option<TracingConfig>,
74 #[allow(dead_code)]
75 otel: Option<super::OtelConfig>,
76 #[allow(dead_code)]
77 metrics_enabled: bool,
78}
79
80impl TelemetryBuilder {
81 pub fn new() -> Self {
83 Self::default()
84 }
85
86 pub fn with_tracing(mut self, config: TracingConfig) -> Self {
88 self.tracing = Some(config);
89 self
90 }
91
92 pub fn with_opentelemetry(mut self, config: super::OtelConfig) -> Self {
94 self.otel = Some(config);
95 self
96 }
97
98 pub fn with_metrics(mut self) -> Self {
100 self.metrics_enabled = true;
101 self
102 }
103
104 pub fn init(self) -> TelemetryGuard {
106 let config = self.tracing.unwrap_or_default();
107 init_tracing(config)
108 }
109}