use std::path::PathBuf;
use opentelemetry_sdk::{
logs::SdkLoggerProvider, metrics::SdkMeterProvider, trace::SdkTracerProvider,
};
#[derive(Debug, Default, Clone)]
pub struct TelemetryConfig {
pub version: Option<String>,
pub environment: Option<String>,
pub otlp_url: String,
pub enable_metering: bool,
}
#[derive(Debug, Default, Clone)]
pub struct TracingConfig {
pub service_name: String,
pub otlp: Option<TelemetryConfig>,
pub no_log_to_stdout: bool,
#[cfg(not(target_os = "windows"))]
pub log_to_syslog: bool,
pub log_to_file: Option<(PathBuf, String)>,
pub rust_log: Option<String>,
pub with_ansi_colors: bool,
}
#[derive(Default)]
pub struct TelemetryGuards {
pub(crate) tracer_provider: Option<SdkTracerProvider>,
pub(crate) logger_provider: Option<SdkLoggerProvider>,
pub(crate) meter_provider: Option<SdkMeterProvider>,
}
impl TelemetryGuards {
pub fn shutdown(self) {
if let Some(tp) = self.tracer_provider {
let _ = tp.shutdown();
}
if let Some(lp) = self.logger_provider {
let _ = lp.shutdown();
}
if let Some(mp) = self.meter_provider {
let _ = mp.shutdown();
}
}
pub fn meter(&self, scope: &'static str) -> opentelemetry::metrics::Meter {
opentelemetry::global::meter(scope)
}
}
#[derive(Default)]
pub struct LoggingGuards {
pub(crate) _tracer_provider: Option<SdkTracerProvider>,
pub(crate) _meter_provider: Option<SdkMeterProvider>,
#[cfg(not(target_arch = "wasm32"))]
pub(crate) _rolling_appender_guard: Option<tracing_appender::non_blocking::WorkerGuard>,
}
impl Drop for LoggingGuards {
fn drop(&mut self) {
if let Some(tp) = self._tracer_provider.take() {
let _ = tp.shutdown();
}
if let Some(mp) = self._meter_provider.take() {
let _ = mp.shutdown();
}
}
}