pub(crate) mod config;
pub(crate) mod manager;
pub(crate) mod otlp;
pub(crate) mod otlp_sink;
pub(crate) mod prometheus_sink;
pub(crate) use manager::ClientMetricsManager;
use std::sync::Arc;
use std::time::Duration;
use self::otlp_sink::OtlpForwarder;
use self::prometheus_sink::ClientMetricsCollector;
pub(crate) const DEFAULT_TELEMETRY_MAX_BYTES: i32 = 1_048_576;
pub(crate) const PROM_SNAPSHOT_TTL: Duration = Duration::from_mins(5);
pub(crate) struct ClientMetrics {
pub manager: ClientMetricsManager,
pub prometheus: Arc<ClientMetricsCollector>,
pub otlp: OtlpForwarder,
}
impl ClientMetrics {
pub(crate) fn new(telemetry_max_bytes: i32, otlp_endpoint: Option<String>) -> Self {
let otlp = match otlp_endpoint {
Some(ep) => OtlpForwarder::spawn(ep, 256),
None => OtlpForwarder::disabled(),
};
Self {
manager: ClientMetricsManager::new(telemetry_max_bytes),
prometheus: Arc::new(ClientMetricsCollector::new(PROM_SNAPSHOT_TTL)),
otlp,
}
}
}