aster/telemetry/
config.rs1use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6pub const DEFAULT_UPLOAD_INTERVAL: u64 = 3600000; pub const DEFAULT_BATCH_SIZE: usize = 100;
11
12pub const MAX_EVENTS: usize = 10000;
14
15pub const MAX_QUEUE_SIZE: usize = 1000;
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct TelemetryConfig {
21 pub enabled: bool,
23 pub error_reporting: bool,
25 pub performance_tracking: bool,
27 pub batch_upload: bool,
29 pub upload_interval: u64,
31 pub max_batch_size: usize,
33 #[serde(default)]
35 pub endpoint: Option<String>,
36}
37
38impl Default for TelemetryConfig {
39 fn default() -> Self {
40 Self {
41 enabled: !is_telemetry_disabled(),
42 error_reporting: false,
43 performance_tracking: true,
44 batch_upload: false,
45 upload_interval: DEFAULT_UPLOAD_INTERVAL,
46 max_batch_size: DEFAULT_BATCH_SIZE,
47 endpoint: None,
48 }
49 }
50}
51
52pub fn is_telemetry_disabled() -> bool {
54 std::env::var("ASTER_DISABLE_TELEMETRY")
55 .map(|v| v == "1" || v == "true")
56 .unwrap_or(false)
57 || std::env::var("DISABLE_TELEMETRY")
58 .map(|v| v == "1" || v == "true")
59 .unwrap_or(false)
60}
61
62pub fn get_telemetry_dir() -> PathBuf {
64 dirs::home_dir()
65 .unwrap_or_else(|| PathBuf::from("."))
66 .join(".aster")
67 .join("telemetry")
68}
69
70pub fn get_metrics_file() -> PathBuf {
72 get_telemetry_dir().join("metrics.json")
73}
74
75pub fn get_events_file() -> PathBuf {
77 get_telemetry_dir().join("events.jsonl")
78}
79
80pub fn get_errors_file() -> PathBuf {
82 get_telemetry_dir().join("errors.jsonl")
83}
84
85pub fn get_performance_file() -> PathBuf {
87 get_telemetry_dir().join("performance.jsonl")
88}
89
90pub fn get_queue_file() -> PathBuf {
92 get_telemetry_dir().join("queue.jsonl")
93}
94
95pub fn get_anonymous_id_file() -> PathBuf {
97 get_telemetry_dir().join("anonymous_id")
98}
99
100pub fn get_config_file() -> PathBuf {
102 get_telemetry_dir().join("config.json")
103}