use clap::ValueEnum;
use serde::{Deserialize, Serialize};
use super::defaults::default_true;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct TelemetryConfig {
#[serde(default = "default_true")]
pub enabled: bool,
#[serde(default)]
pub show_payloads: bool,
pub http_endpoint: Option<String>,
pub udp_endpoint: Option<String>,
#[serde(default = "default_telemetry_queue")]
pub queue_size: usize,
#[serde(default)]
pub sync_mode: bool,
#[serde(default)]
pub drain_mode: TelemetryDrainMode,
#[serde(default = "default_telemetry_drain_timeout_ms")]
pub drain_timeout_ms: u64,
#[serde(default = "default_true")]
pub require_ingestion_key: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ValueEnum, Default)]
#[serde(rename_all = "kebab-case")]
pub enum TelemetryDrainMode {
None,
#[default]
All,
}
impl Default for TelemetryConfig {
fn default() -> Self {
Self {
enabled: true,
show_payloads: false,
http_endpoint: None,
udp_endpoint: Some("udp.telemetry.runmat.com:7846".to_string()),
queue_size: default_telemetry_queue(),
sync_mode: false,
drain_mode: TelemetryDrainMode::All,
drain_timeout_ms: default_telemetry_drain_timeout_ms(),
require_ingestion_key: true,
}
}
}
pub(crate) fn default_telemetry_queue() -> usize {
256
}
pub(crate) fn default_telemetry_drain_timeout_ms() -> u64 {
50
}