From f4c78d3f4000b3cdf5376d60170286d7cf8470f8 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Sat, 6 Jan 2024 23:27:23 -0500 Subject: [PATCH] Remove "clickhouse" from telemetry code The client sends events to our end point, and the endpoint is what determines what analytics database is used to store the data. The client should be generic and not mention the name of the service being proxied to through our server. --- crates/client/src/client.rs | 2 +- crates/client/src/telemetry.rs | 81 ++++++++++++++++------------------ crates/zed/src/main.rs | 2 +- 3 files changed, 41 insertions(+), 44 deletions(-) diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index 1451039b3a207bfdee0bb64ed973dcd7d34f4a82..b07dddc006d607720412e68203b8445d8c026a1e 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -45,7 +45,7 @@ use util::http::HttpClient; use util::{ResultExt, TryFutureExt}; pub use rpc::*; -pub use telemetry::ClickhouseEvent; +pub use telemetry::Event; pub use user::*; lazy_static! { diff --git a/crates/client/src/telemetry.rs b/crates/client/src/telemetry.rs index d0a92b681d5da6f1257ad3eb6adc34f5a595aab9..94d8369a698419cb11bc8bddfb12b24145127952 100644 --- a/crates/client/src/telemetry.rs +++ b/crates/client/src/telemetry.rs @@ -28,22 +28,21 @@ struct TelemetryState { release_channel: Option<&'static str>, app_metadata: AppMetadata, architecture: &'static str, - clickhouse_events_queue: Vec, - flush_clickhouse_events_task: Option>, + events_queue: Vec, + flush_events_task: Option>, log_file: Option, is_staff: Option, first_event_datetime: Option>, } -const CLICKHOUSE_EVENTS_URL_PATH: &'static str = "/api/events"; +const EVENTS_URL_PATH: &'static str = "/api/events"; lazy_static! { - static ref CLICKHOUSE_EVENTS_URL: String = - format!("{}{}", *ZED_SERVER_URL, CLICKHOUSE_EVENTS_URL_PATH); + static ref EVENTS_URL: String = format!("{}{}", *ZED_SERVER_URL, EVENTS_URL_PATH); } #[derive(Serialize, Debug)] -struct ClickhouseEventRequestBody { +struct EventRequestBody { token: &'static str, installation_id: Option>, session_id: Option>, @@ -53,14 +52,14 @@ struct ClickhouseEventRequestBody { os_version: Option, architecture: &'static str, release_channel: Option<&'static str>, - events: Vec, + events: Vec, } #[derive(Serialize, Debug)] -struct ClickhouseEventWrapper { +struct EventWrapper { signed_in: bool, #[serde(flatten)] - event: ClickhouseEvent, + event: Event, } #[derive(Serialize, Debug)] @@ -72,7 +71,7 @@ pub enum AssistantKind { #[derive(Serialize, Debug)] #[serde(tag = "type")] -pub enum ClickhouseEvent { +pub enum Event { Editor { operation: &'static str, file_extension: Option, @@ -150,8 +149,8 @@ impl Telemetry { installation_id: None, metrics_id: None, session_id: None, - clickhouse_events_queue: Default::default(), - flush_clickhouse_events_task: Default::default(), + events_queue: Default::default(), + flush_events_task: Default::default(), log_file: None, is_staff: None, first_event_datetime: None, @@ -194,7 +193,7 @@ impl Telemetry { #[cfg(not(any(test, feature = "test-support")))] fn shutdown_telemetry(self: &Arc) -> impl Future { self.report_app_event("close"); - self.flush_clickhouse_events(); + self.flush_events(); Task::ready(()) } @@ -275,7 +274,7 @@ impl Telemetry { copilot_enabled: bool, copilot_enabled_for_language: bool, ) { - let event = ClickhouseEvent::Editor { + let event = Event::Editor { file_extension, vim_mode, operation, @@ -284,7 +283,7 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } pub fn report_copilot_event( @@ -293,14 +292,14 @@ impl Telemetry { suggestion_accepted: bool, file_extension: Option, ) { - let event = ClickhouseEvent::Copilot { + let event = Event::Copilot { suggestion_id, suggestion_accepted, file_extension, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } pub fn report_assistant_event( @@ -309,14 +308,14 @@ impl Telemetry { kind: AssistantKind, model: &'static str, ) { - let event = ClickhouseEvent::Assistant { + let event = Event::Assistant { conversation_id, kind, model, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } pub fn report_call_event( @@ -325,24 +324,24 @@ impl Telemetry { room_id: Option, channel_id: Option, ) { - let event = ClickhouseEvent::Call { + let event = Event::Call { operation, room_id, channel_id, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } pub fn report_cpu_event(self: &Arc, usage_as_percentage: f32, core_count: u32) { - let event = ClickhouseEvent::Cpu { + let event = Event::Cpu { usage_as_percentage, core_count, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } pub fn report_memory_event( @@ -350,32 +349,32 @@ impl Telemetry { memory_in_bytes: u64, virtual_memory_in_bytes: u64, ) { - let event = ClickhouseEvent::Memory { + let event = Event::Memory { memory_in_bytes, virtual_memory_in_bytes, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } pub fn report_app_event(self: &Arc, operation: &'static str) { - let event = ClickhouseEvent::App { + let event = Event::App { operation, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } pub fn report_setting_event(self: &Arc, setting: &'static str, value: String) { - let event = ClickhouseEvent::Setting { + let event = Event::Setting { setting, value, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event) + self.report_event(event) } fn milliseconds_since_first_event(&self) -> i64 { @@ -392,7 +391,7 @@ impl Telemetry { } } - fn report_clickhouse_event(self: &Arc, event: ClickhouseEvent) { + fn report_event(self: &Arc, event: Event) { let mut state = self.state.lock(); if !state.settings.metrics { @@ -400,20 +399,18 @@ impl Telemetry { } let signed_in = state.metrics_id.is_some(); - state - .clickhouse_events_queue - .push(ClickhouseEventWrapper { signed_in, event }); + state.events_queue.push(EventWrapper { signed_in, event }); if state.installation_id.is_some() { - if state.clickhouse_events_queue.len() >= MAX_QUEUE_LEN { + if state.events_queue.len() >= MAX_QUEUE_LEN { drop(state); - self.flush_clickhouse_events(); + self.flush_events(); } else { let this = self.clone(); let executor = self.executor.clone(); - state.flush_clickhouse_events_task = Some(self.executor.spawn(async move { + state.flush_events_task = Some(self.executor.spawn(async move { executor.timer(DEBOUNCE_INTERVAL).await; - this.flush_clickhouse_events(); + this.flush_events(); })); } } @@ -431,11 +428,11 @@ impl Telemetry { self.state.lock().is_staff } - pub fn flush_clickhouse_events(self: &Arc) { + pub fn flush_events(self: &Arc) { let mut state = self.state.lock(); state.first_event_datetime = None; - let mut events = mem::take(&mut state.clickhouse_events_queue); - state.flush_clickhouse_events_task.take(); + let mut events = mem::take(&mut state.events_queue); + state.flush_events_task.take(); drop(state); let this = self.clone(); @@ -456,7 +453,7 @@ impl Telemetry { { let state = this.state.lock(); - let request_body = ClickhouseEventRequestBody { + let request_body = EventRequestBody { token: ZED_SECRET_CLIENT_TOKEN, installation_id: state.installation_id.clone(), session_id: state.session_id.clone(), @@ -480,7 +477,7 @@ impl Telemetry { } this.http_client - .post_json(CLICKHOUSE_EVENTS_URL.as_str(), json_bytes.into()) + .post_json(EVENTS_URL.as_str(), json_bytes.into()) .await?; anyhow::Ok(()) } diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index ff07af03bd85838f59522f56364eb04689e36adc..56109d9c9a532d97de0f8b76101b4057203879e2 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -179,7 +179,7 @@ fn main() { Some(false) => "first open", _ => "open", }); - telemetry.flush_clickhouse_events(); + telemetry.flush_events(); let app_state = Arc::new(AppState { languages: languages.clone(),