Skip to main content

aster/telemetry/
config.rs

1//! 遥测配置
2
3use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6/// 默认上报间隔(毫秒)
7pub const DEFAULT_UPLOAD_INTERVAL: u64 = 3600000; // 1 hour
8
9/// 默认批量大小
10pub const DEFAULT_BATCH_SIZE: usize = 100;
11
12/// 最大事件数
13pub const MAX_EVENTS: usize = 10000;
14
15/// 最大队列大小
16pub const MAX_QUEUE_SIZE: usize = 1000;
17
18/// 遥测配置
19#[derive(Debug, Clone, Serialize, Deserialize)]
20pub struct TelemetryConfig {
21    /// 是否启用
22    pub enabled: bool,
23    /// 是否启用错误报告
24    pub error_reporting: bool,
25    /// 是否启用性能追踪
26    pub performance_tracking: bool,
27    /// 是否启用批量上报
28    pub batch_upload: bool,
29    /// 上报间隔(毫秒)
30    pub upload_interval: u64,
31    /// 批量大小
32    pub max_batch_size: usize,
33    /// 上报端点
34    #[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
52/// 检查环境变量是否禁用遥测
53pub 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
62/// 获取遥测目录
63pub fn get_telemetry_dir() -> PathBuf {
64    dirs::home_dir()
65        .unwrap_or_else(|| PathBuf::from("."))
66        .join(".aster")
67        .join("telemetry")
68}
69
70/// 获取指标文件路径
71pub fn get_metrics_file() -> PathBuf {
72    get_telemetry_dir().join("metrics.json")
73}
74
75/// 获取事件文件路径
76pub fn get_events_file() -> PathBuf {
77    get_telemetry_dir().join("events.jsonl")
78}
79
80/// 获取错误文件路径
81pub fn get_errors_file() -> PathBuf {
82    get_telemetry_dir().join("errors.jsonl")
83}
84
85/// 获取性能文件路径
86pub fn get_performance_file() -> PathBuf {
87    get_telemetry_dir().join("performance.jsonl")
88}
89
90/// 获取队列文件路径
91pub fn get_queue_file() -> PathBuf {
92    get_telemetry_dir().join("queue.jsonl")
93}
94
95/// 获取匿名 ID 文件路径
96pub fn get_anonymous_id_file() -> PathBuf {
97    get_telemetry_dir().join("anonymous_id")
98}
99
100/// 获取配置文件路径
101pub fn get_config_file() -> PathBuf {
102    get_telemetry_dir().join("config.json")
103}