tor_config_shared/
opentelemetry.rs1use amplify::Getters;
4use derive_deftly::Deftly;
5use serde::{Deserialize, Serialize};
6use std::time::Duration;
7use tor_config::derive::prelude::*;
8use tor_config_path::CfgPath;
9
10#[derive(Debug, Clone, Deftly, Eq, PartialEq, Serialize, Deserialize, Getters)]
12#[derive_deftly(TorConfig)]
13pub struct OpentelemetryConfig {
14 #[deftly(tor_config(default))]
16 file: Option<OpentelemetryFileExporterConfig>,
17 #[deftly(tor_config(default))]
19 http: Option<OpentelemetryHttpExporterConfig>,
20}
21
22#[derive(Debug, Clone, Deftly, Eq, PartialEq, Serialize, Deserialize, Getters)]
24#[derive_deftly(TorConfig)]
25#[deftly(tor_config(no_default_trait))]
26pub struct OpentelemetryHttpExporterConfig {
27 #[deftly(tor_config(no_default))]
31 endpoint: String,
32 #[deftly(tor_config(sub_builder))]
34 batch: OpentelemetryBatchConfig,
35 #[deftly(tor_config(default = "opentelemetry_otlp::OTEL_EXPORTER_OTLP_TIMEOUT_DEFAULT"))]
40 timeout: Duration,
41 }
44
45#[derive(Debug, Clone, Deftly, Eq, PartialEq, Serialize, Deserialize, Getters)]
47#[derive_deftly(TorConfig)]
48#[deftly(tor_config(no_default_trait))]
49pub struct OpentelemetryFileExporterConfig {
50 #[deftly(tor_config(no_default))]
52 path: CfgPath,
53 #[deftly(tor_config(sub_builder))]
55 batch: OpentelemetryBatchConfig,
56}
57
58#[derive(Debug, Clone, Deftly, Eq, PartialEq, Serialize, Deserialize, Getters)]
62#[derive_deftly(TorConfig)]
63pub struct OpentelemetryBatchConfig {
64 #[deftly(tor_config(default))]
66 max_queue_size: Option<usize>,
67 #[deftly(tor_config(default))]
69 max_export_batch_size: Option<usize>,
70 #[deftly(tor_config(default = "Duration::from_secs(5)"))]
72 scheduled_delay: Duration,
73}
74
75impl From<OpentelemetryBatchConfig> for opentelemetry_sdk::trace::BatchConfig {
76 fn from(config: OpentelemetryBatchConfig) -> opentelemetry_sdk::trace::BatchConfig {
77 let batch_config = opentelemetry_sdk::trace::BatchConfigBuilder::default();
78
79 let batch_config = if let Some(max_queue_size) = config.max_queue_size {
80 batch_config.with_max_queue_size(max_queue_size)
81 } else {
82 batch_config
83 };
84
85 let batch_config = if let Some(max_export_batch_size) = config.max_export_batch_size {
86 batch_config.with_max_export_batch_size(max_export_batch_size)
87 } else {
88 batch_config
89 };
90
91 let batch_config = batch_config.with_scheduled_delay(config.scheduled_delay);
92
93 batch_config.build()
94 }
95}