pub const PREFIX_TRACES: &[u8] = b"OTLP";
pub const PREFIX_METRICS: &[u8] = b"MTRC";
pub const PREFIX_LOGS: &[u8] = b"LOGS";
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ConnectionState {
Disconnected,
Connecting,
Connected,
Reconnecting,
Failed,
}
#[derive(Debug, Clone)]
pub struct ReconnectionConfig {
pub initial_delay_ms: u64,
pub max_delay_ms: u64,
pub backoff_multiplier: f64,
pub jitter_factor: f64,
pub max_retries: Option<u64>, pub max_pending_messages: usize,
}
impl Default for ReconnectionConfig {
fn default() -> Self {
Self {
initial_delay_ms: 1000,
max_delay_ms: 30000,
backoff_multiplier: 2.0,
jitter_factor: 0.3,
max_retries: None,
max_pending_messages: 1000,
}
}
}
impl ReconnectionConfig {
pub fn effective_initial_delay_ms(&self) -> u64 {
self.initial_delay_ms.max(1)
}
}
#[derive(Debug, Clone, Default)]
pub struct OtelConfig {
pub enabled: Option<bool>,
pub service_name: Option<String>,
pub service_version: Option<String>,
pub service_namespace: Option<String>,
pub service_instance_id: Option<String>,
pub engine_ws_url: Option<String>,
pub metrics_enabled: Option<bool>,
pub metrics_export_interval_ms: Option<u64>,
pub reconnection_config: Option<ReconnectionConfig>,
pub shutdown_timeout_ms: Option<u64>,
pub channel_capacity: Option<usize>,
pub logs_enabled: Option<bool>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_reconnection_config_defaults() {
let config = ReconnectionConfig::default();
assert_eq!(config.initial_delay_ms, 1000);
assert_eq!(config.max_delay_ms, 30000);
assert_eq!(config.backoff_multiplier, 2.0);
assert_eq!(config.jitter_factor, 0.3);
assert_eq!(config.max_retries, None);
assert_eq!(config.max_pending_messages, 1000);
}
#[test]
fn test_otel_config_defaults() {
let config = OtelConfig::default();
assert!(config.enabled.is_none());
assert!(config.service_name.is_none());
assert!(config.engine_ws_url.is_none());
assert!(config.metrics_enabled.is_none());
assert!(config.reconnection_config.is_none());
}
#[test]
fn test_reconnection_config_zero_delay_clamped() {
let config = ReconnectionConfig {
initial_delay_ms: 0,
..Default::default()
};
assert_eq!(config.effective_initial_delay_ms(), 1);
}
}