mod client;
mod transport;
use once_cell::sync::OnceCell;
use runmat_config::TelemetryConfig as RuntimeTelemetryConfig;
use runmat_core::TelemetrySink;
use std::sync::Arc;
pub use runmat_telemetry::{ProviderSnapshot, RuntimeExecutionCounters, TelemetryRunKind};
use self::client::TelemetryClient;
static CLIENT: OnceCell<Arc<TelemetryClient>> = OnceCell::new();
pub fn init(config: &RuntimeTelemetryConfig) {
if !config.enabled {
return;
}
let options = client::TelemetryOptions::from(config);
if !options.enabled {
return;
}
let client = Arc::new(TelemetryClient::new(options));
let _ = CLIENT.set(client);
}
pub fn sink() -> Option<Arc<dyn TelemetrySink>> {
CLIENT
.get()
.map(|client| client.clone() as Arc<dyn TelemetrySink>)
}
pub fn shutdown() {
if let Some(client) = CLIENT.get() {
client.shutdown();
}
}
pub fn capture_provider_snapshot() -> Option<ProviderSnapshot> {
runmat_accelerate_api::provider().map(|provider| ProviderSnapshot {
device: provider.device_info_struct(),
telemetry: provider.telemetry_snapshot(),
})
}
pub fn telemetry_client_id() -> Option<String> {
transport::stable_client_id()
}