fleetforge_telemetry/
lib.rs1pub mod analytics;
4pub mod audit;
5pub mod context;
6pub mod exporters;
7pub mod metrics;
8pub mod otel;
9pub mod telemetry_core;
10
11pub const TRUST_ATTRIBUTE_KEYS: &[&str] = &[
13 "trust.attestation_ids",
14 "trust.attestation_id",
15 "trust.subject",
16 "trust.policy_decision_id",
17 "trust.capability_token_id",
18];
19
20use anyhow::Result;
21use opentelemetry_sdk::propagation::TraceContextPropagator;
22use tracing_subscriber::{
23 layer::SubscriberExt,
24 util::{SubscriberInitExt, TryInitError},
25 EnvFilter, Registry,
26};
27
28pub struct TelemetryGuard;
30
31impl TelemetryGuard {
32 pub fn init(service_name: &str) -> Result<Self> {
34 init_telemetry(service_name)
35 }
36
37 pub fn init_default(service_name: &str) -> Result<Self> {
39 Self::init(service_name)
40 }
41}
42
43pub fn init_telemetry(service_name: &str) -> Result<TelemetryGuard> {
45 crate::otel::set_text_map_propagator(TraceContextPropagator::new());
46
47 let telemetry_layer = crate::telemetry_core::otlp::build_layers(service_name)?;
48 let fmt_layer = tracing_subscriber::fmt::layer().with_target(true);
49 let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
50
51 let subscriber = Registry::default()
52 .with(env_filter)
53 .with(fmt_layer)
54 .with(telemetry_layer);
55
56 if let Err(err) = subscriber.try_init() {
57 let err: TryInitError = err;
58 eprintln!("tracing subscriber init: {err}");
59 }
60
61 Ok(TelemetryGuard)
62}
63
64impl Drop for TelemetryGuard {
65 fn drop(&mut self) {
66 crate::otel::shutdown_tracer_provider();
67 }
68}