use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum OtelProtocol {
#[default]
Grpc,
Http,
}
impl OtelProtocol {
#[must_use]
pub fn default_endpoint(self) -> &'static str {
match self {
Self::Grpc => "http://localhost:4317",
Self::Http => "http://localhost:4318",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
pub struct OtelMetricsConfig {
pub endpoint: String,
pub protocol: OtelProtocol,
pub service_name: String,
pub headers: HashMap<String, String>,
pub resource_attributes: HashMap<String, String>,
pub export_interval_secs: u64,
}
impl Default for OtelMetricsConfig {
fn default() -> Self {
Self {
endpoint: OtelProtocol::Grpc.default_endpoint().to_string(),
protocol: OtelProtocol::default(),
service_name: String::new(),
headers: HashMap::new(),
resource_attributes: HashMap::new(),
export_interval_secs: 60,
}
}
}