autoagents-telemetry 0.3.6

Agent Framework for Building Autonomous Agents
Documentation
use opentelemetry::metrics::{Counter, Histogram, MeterProvider as _};
use opentelemetry_sdk::metrics::SdkMeterProvider;

/// Metric instruments used by the event mapper.
pub(crate) struct TelemetryMetrics {
    pub(crate) tasks_total: Counter<u64>,
    pub(crate) tool_calls_total: Counter<u64>,
    pub(crate) errors_total: Counter<u64>,
    pub(crate) task_duration: Histogram<f64>,
    pub(crate) turn_duration: Histogram<f64>,
    pub(crate) tool_duration: Histogram<f64>,
}

impl TelemetryMetrics {
    pub(crate) fn new(provider: &SdkMeterProvider) -> Self {
        let meter = provider.meter("autoagents.telemetry");

        Self {
            tasks_total: meter.u64_counter("autoagents.tasks.total").build(),
            tool_calls_total: meter.u64_counter("autoagents.tool_calls.total").build(),
            errors_total: meter.u64_counter("autoagents.errors.total").build(),
            task_duration: meter
                .f64_histogram("autoagents.task.duration.seconds")
                .with_unit("s")
                .build(),
            turn_duration: meter
                .f64_histogram("autoagents.turn.duration.seconds")
                .with_unit("s")
                .build(),
            tool_duration: meter
                .f64_histogram("autoagents.tool.duration.seconds")
                .with_unit("s")
                .build(),
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_metrics_build_and_record() {
        let provider = SdkMeterProvider::default();
        let metrics = TelemetryMetrics::new(&provider);
        metrics.tasks_total.add(1, &[]);
        metrics.tool_calls_total.add(2, &[]);
        metrics.errors_total.add(0, &[]);
        metrics.task_duration.record(0.5, &[]);
        metrics.turn_duration.record(1.0, &[]);
        metrics.tool_duration.record(0.25, &[]);
    }
}