scouter_tracing/exporter/
processor.rs1use opentelemetry::baggage::BaggageExt;
2use opentelemetry::trace::Span;
3use opentelemetry::Context;
4use opentelemetry::KeyValue;
5use opentelemetry_sdk::error::OTelSdkResult;
6use opentelemetry_sdk::trace::SpanProcessor;
7use opentelemetry_sdk::trace::{BatchConfig as OTelBatchConfig, BatchConfigBuilder};
8use pyo3::prelude::*;
9use std::time::Duration;
10
11#[derive(Debug)]
13pub(crate) struct EnrichSpanWithBaggageProcessor;
14
15impl SpanProcessor for EnrichSpanWithBaggageProcessor {
16 fn force_flush(&self) -> OTelSdkResult {
17 Ok(())
18 }
19
20 fn shutdown_with_timeout(&self, _timeout: Duration) -> OTelSdkResult {
21 Ok(())
22 }
23
24 fn on_start(&self, span: &mut opentelemetry_sdk::trace::Span, cx: &Context) {
25 for (kk, vv) in cx.baggage().iter() {
26 span.set_attribute(KeyValue::new(kk.clone(), vv.0.clone()));
27 }
28 }
29
30 fn on_end(&self, _span: opentelemetry_sdk::trace::SpanData) {}
31}
32
33#[pyclass]
34#[derive(PartialEq, Clone, Debug)]
35pub struct BatchConfig {
36 pub max_queue_size: usize,
37 pub scheduled_delay: Duration,
38 pub max_export_batch_size: usize,
39}
40
41#[pymethods]
42impl BatchConfig {
43 #[new]
44 #[pyo3(signature = (
45 max_queue_size=2048,
46 scheduled_delay_ms=5000,
47 max_export_batch_size=512,
48 ))]
49 pub fn new(
50 max_queue_size: usize,
51 scheduled_delay_ms: u64,
52 max_export_batch_size: usize,
53 ) -> Self {
54 BatchConfig {
55 max_queue_size,
56 scheduled_delay: Duration::from_millis(scheduled_delay_ms),
57 max_export_batch_size,
58 }
59 }
60}
61
62impl Default for BatchConfig {
63 fn default() -> Self {
64 BatchConfig {
65 max_queue_size: 2048,
66 scheduled_delay: Duration::from_millis(5000),
67 max_export_batch_size: 512,
68 }
69 }
70}
71
72impl BatchConfig {
73 pub fn to_otlp_config(&self) -> OTelBatchConfig {
74 let mut builder = BatchConfigBuilder::default();
75
76 builder = builder
77 .with_scheduled_delay(self.scheduled_delay)
78 .with_max_queue_size(self.max_queue_size)
79 .with_max_export_batch_size(self.max_export_batch_size);
80
81 builder.build()
82 }
83}