use super::OtelMetrics;
const DEFAULT_METER_NAME: &str = "a2a.server";
#[derive(Debug, Clone)]
pub struct OtelMetricsBuilder {
meter_name: &'static str,
}
impl Default for OtelMetricsBuilder {
fn default() -> Self {
Self {
meter_name: DEFAULT_METER_NAME,
}
}
}
impl OtelMetricsBuilder {
#[must_use]
pub fn new() -> Self {
Self::default()
}
#[must_use]
pub const fn meter_name(mut self, name: &'static str) -> Self {
self.meter_name = name;
self
}
#[must_use]
pub fn build(self) -> OtelMetrics {
let meter = opentelemetry::global::meter(self.meter_name);
OtelMetrics::from_meter(&meter)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn builder_default_meter_name() {
let metrics = OtelMetricsBuilder::new().build();
let debug = format!("{metrics:?}");
assert!(debug.contains("OtelMetrics"));
}
#[test]
fn builder_custom_meter_name() {
let metrics = OtelMetricsBuilder::new().meter_name("custom.meter").build();
let debug = format!("{metrics:?}");
assert!(debug.contains("OtelMetrics"));
}
}