From 5344296c9a6343192f5e3fe88e8b02d49be47152 Mon Sep 17 00:00:00 2001 From: "Joseph T. Lyons" Date: Sat, 6 Jan 2024 20:27:30 -0500 Subject: [PATCH] Remove immediate flush mode Allow flush method to be called publicly. This is a better, simpler solution, that allows for better control over flushing. --- crates/client/src/telemetry.rs | 27 ++++++++++++++------------- crates/welcome/src/welcome.rs | 20 +++++++------------- crates/workspace/src/workspace.rs | 4 +--- crates/zed/src/main.rs | 12 +++++------- 4 files changed, 27 insertions(+), 36 deletions(-) diff --git a/crates/client/src/telemetry.rs b/crates/client/src/telemetry.rs index 076ac15710dc99ff697a9618eaee6570492535ef..d0a92b681d5da6f1257ad3eb6adc34f5a595aab9 100644 --- a/crates/client/src/telemetry.rs +++ b/crates/client/src/telemetry.rs @@ -193,7 +193,8 @@ impl Telemetry { // TestAppContext ends up calling this function on shutdown and it panics when trying to find the TelemetrySettings #[cfg(not(any(test, feature = "test-support")))] fn shutdown_telemetry(self: &Arc) -> impl Future { - self.report_app_event("close", true); + self.report_app_event("close"); + self.flush_clickhouse_events(); Task::ready(()) } @@ -283,7 +284,7 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, false) + self.report_clickhouse_event(event) } pub fn report_copilot_event( @@ -299,7 +300,7 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, false) + self.report_clickhouse_event(event) } pub fn report_assistant_event( @@ -315,7 +316,7 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, false) + self.report_clickhouse_event(event) } pub fn report_call_event( @@ -331,7 +332,7 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, false) + self.report_clickhouse_event(event) } pub fn report_cpu_event(self: &Arc, usage_as_percentage: f32, core_count: u32) { @@ -341,7 +342,7 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, false) + self.report_clickhouse_event(event) } pub fn report_memory_event( @@ -355,16 +356,16 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, false) + self.report_clickhouse_event(event) } - pub fn report_app_event(self: &Arc, operation: &'static str, immediate_flush: bool) { + pub fn report_app_event(self: &Arc, operation: &'static str) { let event = ClickhouseEvent::App { operation, milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, immediate_flush) + self.report_clickhouse_event(event) } pub fn report_setting_event(self: &Arc, setting: &'static str, value: String) { @@ -374,7 +375,7 @@ impl Telemetry { milliseconds_since_first_event: self.milliseconds_since_first_event(), }; - self.report_clickhouse_event(event, false) + self.report_clickhouse_event(event) } fn milliseconds_since_first_event(&self) -> i64 { @@ -391,7 +392,7 @@ impl Telemetry { } } - fn report_clickhouse_event(self: &Arc, event: ClickhouseEvent, immediate_flush: bool) { + fn report_clickhouse_event(self: &Arc, event: ClickhouseEvent) { let mut state = self.state.lock(); if !state.settings.metrics { @@ -404,7 +405,7 @@ impl Telemetry { .push(ClickhouseEventWrapper { signed_in, event }); if state.installation_id.is_some() { - if immediate_flush || state.clickhouse_events_queue.len() >= MAX_QUEUE_LEN { + if state.clickhouse_events_queue.len() >= MAX_QUEUE_LEN { drop(state); self.flush_clickhouse_events(); } else { @@ -430,7 +431,7 @@ impl Telemetry { self.state.lock().is_staff } - fn flush_clickhouse_events(self: &Arc) { + pub fn flush_clickhouse_events(self: &Arc) { let mut state = self.state.lock(); state.first_event_datetime = None; let mut events = mem::take(&mut state.clickhouse_events_queue); diff --git a/crates/welcome/src/welcome.rs b/crates/welcome/src/welcome.rs index 1c0b7472085767ee835d2b2c1171be3a7631e0a9..3d89810679218e69b1aa88941c67326ed667b055 100644 --- a/crates/welcome/src/welcome.rs +++ b/crates/welcome/src/welcome.rs @@ -86,7 +86,7 @@ impl Render for WelcomePage { .full_width() .on_click(cx.listener(|this, _, cx| { this.telemetry - .report_app_event("welcome page button: theme", false); + .report_app_event("welcome page button: theme"); this.workspace .update(cx, |workspace, cx| { theme_selector::toggle( @@ -103,7 +103,7 @@ impl Render for WelcomePage { .full_width() .on_click(cx.listener(|this, _, cx| { this.telemetry - .report_app_event("welcome page button: keymap", false); + .report_app_event("welcome page button: keymap"); this.workspace .update(cx, |workspace, cx| { base_keymap_picker::toggle( @@ -119,10 +119,8 @@ impl Render for WelcomePage { Button::new("install-cli", "Install the CLI") .full_width() .on_click(cx.listener(|this, _, cx| { - this.telemetry.report_app_event( - "welcome page button: install cli", - false, - ); + this.telemetry + .report_app_event("welcome page button: install cli"); cx.app_mut() .spawn( |cx| async move { install_cli::install_cli(&cx).await }, @@ -153,10 +151,8 @@ impl Render for WelcomePage { ) .on_click(cx.listener( move |this, selection, cx| { - this.telemetry.report_app_event( - "welcome page button: vim", - false, - ); + this.telemetry + .report_app_event("welcome page button: vim"); this.update_settings::( selection, cx, @@ -183,7 +179,6 @@ impl Render for WelcomePage { move |this, selection, cx| { this.telemetry.report_app_event( "welcome page button: user telemetry", - false, ); this.update_settings::( selection, @@ -222,7 +217,6 @@ impl Render for WelcomePage { move |this, selection, cx| { this.telemetry.report_app_event( "welcome page button: crash diagnostics", - false, ); this.update_settings::( selection, @@ -254,7 +248,7 @@ impl WelcomePage { pub fn new(workspace: &Workspace, cx: &mut ViewContext) -> View { let this = cx.new_view(|cx| { cx.on_release(|this: &mut Self, _, _| { - this.telemetry.report_app_event("close welcome page", false); + this.telemetry.report_app_event("close welcome page"); }) .detach(); diff --git a/crates/workspace/src/workspace.rs b/crates/workspace/src/workspace.rs index 653f777084228d06e272bc8e26575352da866a4b..967e76efd65dd049c0213720266f24d40af88df0 100644 --- a/crates/workspace/src/workspace.rs +++ b/crates/workspace/src/workspace.rs @@ -1258,9 +1258,7 @@ impl Workspace { } pub fn open(&mut self, _: &Open, cx: &mut ViewContext) { - self.client() - .telemetry() - .report_app_event("open project", false); + self.client().telemetry().report_app_event("open project"); let paths = cx.prompt_for_paths(PathPromptOptions { files: true, directories: true, diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 22436e10a973d676e80c641f704f416ccd8d17c5..ff07af03bd85838f59522f56364eb04689e36adc 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -175,13 +175,11 @@ fn main() { telemetry.start(installation_id, session_id, cx); telemetry.report_setting_event("theme", cx.theme().name.to_string()); telemetry.report_setting_event("keymap", BaseKeymap::get_global(cx).to_string()); - telemetry.report_app_event( - match existing_installation_id_found { - Some(false) => "first open", - _ => "open", - }, - true, - ); + telemetry.report_app_event(match existing_installation_id_found { + Some(false) => "first open", + _ => "open", + }); + telemetry.flush_clickhouse_events(); let app_state = Arc::new(AppState { languages: languages.clone(),