use opentelemetry::{global, KeyValue};
use opentelemetry_sdk::Resource;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
use crate::config::ObservabilityConfig;
use crate::Result;
pub mod metrics;
pub mod traces;
pub fn init_telemetry(config: &ObservabilityConfig) -> Result<()> {
let _resource = Resource::new(vec![
KeyValue::new("service.name", config.service_name.clone()),
KeyValue::new("service.version", env!("CARGO_PKG_VERSION")),
]);
let env_filter = EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new(&config.log_level));
tracing_subscriber::registry()
.with(env_filter)
.with(tracing_subscriber::fmt::layer().json())
.init();
Ok(())
}
pub fn shutdown_telemetry() {
global::shutdown_tracer_provider();
}
pub mod custom_metrics {
use opentelemetry::metrics::{Counter, Histogram};
pub struct MpiMetrics {
pub event_created: Counter<u64>,
pub event_updated: Counter<u64>,
pub event_deleted: Counter<u64>,
pub event_matched: Counter<u64>,
pub match_score: Histogram<f64>,
pub api_request_duration: Histogram<f64>,
pub search_query_duration: Histogram<f64>,
}
impl MpiMetrics {
pub fn new() -> Self {
todo!("Initialize OpenTelemetry metrics")
}
}
}