pub mod rpc;
use anyhow::Result;
use opentelemetry::trace::TracerProvider as _;
use opentelemetry_sdk::trace::SdkTracerProvider;
use tracing::Subscriber;
use tracing_subscriber::Layer;
use crate::cli::validator::parser::tracing::CustomFilter;
use crate::cnf::{TELEMETRY_DISABLE_TRACING, TELEMETRY_PROVIDER};
use crate::telemetry::OTEL_DEFAULT_RESOURCE;
pub fn new<S>(filter: CustomFilter) -> Result<Option<Box<dyn Layer<S> + Send + Sync>>>
where
S: Subscriber + for<'a> tracing_subscriber::registry::LookupSpan<'a> + Send + Sync,
{
match TELEMETRY_PROVIDER.trim() {
s if s.eq_ignore_ascii_case("otlp") && !*TELEMETRY_DISABLE_TRACING => {
let span_exporter = opentelemetry_otlp::SpanExporter::builder().with_tonic().build()?;
let batch_processor =
opentelemetry_sdk::trace::BatchSpanProcessor::builder(span_exporter).build();
let provider = SdkTracerProvider::builder()
.with_span_processor(batch_processor)
.with_resource(OTEL_DEFAULT_RESOURCE.clone())
.build();
opentelemetry::global::set_tracer_provider(provider.clone());
Ok(Some(
tracing_opentelemetry::layer()
.with_tracer(provider.tracer("surealdb"))
.with_filter(filter.env())
.with_filter(filter.span_filter::<S>())
.boxed(),
))
}
_ => Ok(None),
}
}