Skip to main content

ferrotunnel_observability/
lib.rs

1pub mod metrics;
2pub mod tracing;
3
4#[cfg(feature = "dashboard")]
5pub mod dashboard;
6
7pub use metrics::{
8    gather_metrics, init_metrics, metrics_enabled, tunnel_metrics, TunnelMetrics, REGISTRY,
9};
10pub use tracing::{init_tracing, shutdown_tracing, TracingConfig};
11
12/// Basic initialization for minimal overhead
13pub fn init_basic_observability(service_name: &str, enable_tracing: bool, enable_metrics: bool) {
14    if enable_metrics {
15        init_metrics();
16    }
17
18    if enable_tracing {
19        let _ = init_tracing(TracingConfig {
20            service_name: service_name.to_string(),
21            otlp_endpoint: std::env::var("OTEL_EXPORTER_OTLP_ENDPOINT").ok(),
22        });
23    } else {
24        init_minimal_logging();
25    }
26}
27
28/// Minimal logging setup without metrics or OpenTelemetry infrastructure
29/// Use this for latency-sensitive deployments where observability overhead matters
30pub fn init_minimal_logging() {
31    use tracing_subscriber::prelude::*;
32    use tracing_subscriber::EnvFilter;
33
34    let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
35    tracing_subscriber::registry()
36        .with(filter)
37        .with(tracing_subscriber::fmt::layer().with_target(false))
38        .init();
39}