mcp_stdio_proxy/server/
telemetry.rs1use anyhow::Result;
2use opentelemetry::global;
3use opentelemetry_sdk::trace::{RandomIdGenerator, Sampler, SdkTracerProvider};
4
5pub fn init_tracer_provider(_service_name: &str, _service_version: &str) -> Result<()> {
9 let tracer_provider = SdkTracerProvider::builder()
11 .with_sampler(Sampler::AlwaysOn)
12 .with_id_generator(RandomIdGenerator::default())
13 .build();
14
15 global::set_tracer_provider(tracer_provider);
17
18 Ok(())
19}
20
21pub fn create_telemetry_layer() -> impl tracing_subscriber::Layer<tracing_subscriber::Registry> {
26 tracing_opentelemetry::layer()
27}
28
29pub fn log_service_info(service_name: &str, service_version: &str) -> Result<()> {
33 tracing::info!(
34 service_name = %service_name,
35 service_version = %service_version,
36 "Service started with OpenTelemetry tracing enabled"
37 );
38 Ok(())
39}
40
41pub fn shutdown_telemetry() {
43 tracing::info!("Shutting down OpenTelemetry");
44 }
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_log_service_info() {
54 let result = log_service_info("test-service", "0.1.0");
55 assert!(result.is_ok());
56
57 shutdown_telemetry();
59 }
60}