use crate::config::models::defaults::default_true;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OpenTelemetryConfig {
#[serde(default = "default_enabled")]
pub enabled: bool,
#[serde(default = "default_endpoint")]
pub endpoint: String,
#[serde(default = "default_service_name")]
pub service_name: String,
pub service_version: Option<String>,
pub environment: Option<String>,
#[serde(default)]
pub resource_attributes: HashMap<String, String>,
#[serde(default = "default_true")]
pub export_traces: bool,
#[serde(default = "default_true")]
pub export_metrics: bool,
#[serde(default = "default_batch_interval")]
pub batch_interval_ms: u64,
#[serde(default = "default_batch_size")]
pub max_batch_size: usize,
#[serde(default = "default_timeout")]
pub timeout_ms: u64,
#[serde(default = "default_sampling_ratio")]
pub sampling_ratio: f64,
#[serde(default)]
pub headers: HashMap<String, String>,
}
fn default_enabled() -> bool {
true
}
fn default_endpoint() -> String {
"http://localhost:4317".to_string()
}
fn default_service_name() -> String {
"litellm-gateway".to_string()
}
fn default_batch_interval() -> u64 {
5000
}
fn default_batch_size() -> usize {
512
}
fn default_timeout() -> u64 {
10000
}
fn default_sampling_ratio() -> f64 {
1.0
}
impl Default for OpenTelemetryConfig {
fn default() -> Self {
Self {
enabled: default_enabled(),
endpoint: default_endpoint(),
service_name: default_service_name(),
service_version: None,
environment: None,
resource_attributes: HashMap::new(),
export_traces: true,
export_metrics: true,
batch_interval_ms: default_batch_interval(),
max_batch_size: default_batch_size(),
timeout_ms: default_timeout(),
sampling_ratio: default_sampling_ratio(),
headers: HashMap::new(),
}
}
}