stakpak_shared/
telemetry.rs1use serde::Serialize;
7use std::fmt;
8
9const TELEMETRY_ENDPOINT: &str = "https://apiv2.stakpak.dev/v1/telemetry";
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
12pub enum TelemetryEvent {
13 FirstOpen,
14 UserPrompted,
15 InitCommandCalled,
16}
17
18impl fmt::Display for TelemetryEvent {
19 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20 match self {
21 TelemetryEvent::FirstOpen => write!(f, "FirstOpen"),
22 TelemetryEvent::UserPrompted => write!(f, "UserPrompted"),
23 TelemetryEvent::InitCommandCalled => write!(f, "InitCommandCalled"),
24 }
25 }
26}
27
28#[derive(Serialize)]
29struct TelemetryPayload {
30 event: String,
31 machine_name: String,
32 provider: String,
33 user_id: String,
34}
35
36pub fn capture_event(
37 anonymous_id: &str,
38 machine_name: Option<&str>,
39 enabled: bool,
40 event: TelemetryEvent,
41) {
42 if !enabled {
43 return;
44 }
45
46 let payload = TelemetryPayload {
47 event: event.to_string(),
48 machine_name: machine_name.unwrap_or("").to_string(),
49 provider: "Local".to_string(),
50 user_id: anonymous_id.to_string(),
51 };
52
53 tokio::spawn(async move {
54 let client = match crate::tls_client::create_tls_client(
55 crate::tls_client::TlsClientConfig::default(),
56 ) {
57 Ok(c) => c,
58 Err(_) => return,
59 };
60 let _ = client.post(TELEMETRY_ENDPOINT).json(&payload).send().await;
61 });
62}