From 9c054f207ec175a52374f056eaf4ae259d3aab66 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Thu, 6 Mar 2025 10:56:28 -0700 Subject: [PATCH] Git telemetry (#26222) Release Notes: - git: Adds telemetry to git actions --- Cargo.lock | 1 + crates/client/src/telemetry.rs | 2 ++ crates/git_ui/Cargo.toml | 1 + crates/git_ui/src/commit_modal.rs | 2 ++ crates/git_ui/src/git_panel.rs | 9 +++++++++ crates/git_ui/src/project_diff.rs | 8 ++++++++ crates/telemetry/src/telemetry.rs | 2 ++ 7 files changed, 25 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 17caa759afa323e5ef1d989f17c8c3396fce6342..e85020e9bcc8c2f1b32916b331bfa02474b21613 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5470,6 +5470,7 @@ dependencies = [ "settings", "smallvec", "strum", + "telemetry", "theme", "time", "ui", diff --git a/crates/client/src/telemetry.rs b/crates/client/src/telemetry.rs index 309779049e82f8b03fff9e9c91b96d8da1c061d6..731412c8188827f2c87373a1dcc312069bdd4610 100644 --- a/crates/client/src/telemetry.rs +++ b/crates/client/src/telemetry.rs @@ -418,6 +418,8 @@ impl Telemetry { fn report_event(self: &Arc, event: Event) { let mut state = self.state.lock(); + // RUST_LOG=telemetry=trace to debug telemetry events + log::trace!(target: "telemetry", "{:?}", event); if !state.settings.metrics { return; diff --git a/crates/git_ui/Cargo.toml b/crates/git_ui/Cargo.toml index aa95e78879737932c397141ac37ec258761d9448..56c3bdc9e4a26e0523534c43046823fb4f853e8c 100644 --- a/crates/git_ui/Cargo.toml +++ b/crates/git_ui/Cargo.toml @@ -48,6 +48,7 @@ serde_json.workspace = true settings.workspace = true smallvec.workspace = true strum.workspace = true +telemetry.workspace = true theme.workspace = true time.workspace = true ui.workspace = true diff --git a/crates/git_ui/src/commit_modal.rs b/crates/git_ui/src/commit_modal.rs index 37541a0c844464d619bfb4ca1a762c722a2a42db..ea8583e689b5221db8bca3b1b19f0c069e2be851 100644 --- a/crates/git_ui/src/commit_modal.rs +++ b/crates/git_ui/src/commit_modal.rs @@ -301,6 +301,7 @@ impl CommitModal { }) .disabled(!can_commit) .on_click(cx.listener(move |this, _: &ClickEvent, window, cx| { + telemetry::event!("Git Committed", source = "Git Modal"); this.git_panel .update(cx, |git_panel, cx| git_panel.commit_changes(window, cx)); cx.emit(DismissEvent); @@ -334,6 +335,7 @@ impl CommitModal { } fn commit(&mut self, _: &git::Commit, window: &mut Window, cx: &mut Context) { + telemetry::event!("Git Committed", source = "Git Modal"); self.git_panel .update(cx, |git_panel, cx| git_panel.commit_changes(window, cx)); cx.emit(DismissEvent); diff --git a/crates/git_ui/src/git_panel.rs b/crates/git_ui/src/git_panel.rs index 631ee643231e3c2d2c0d7623deedb830e9257f01..7512f2bdc0f97599e442106675c8f2117910fd3e 100644 --- a/crates/git_ui/src/git_panel.rs +++ b/crates/git_ui/src/git_panel.rs @@ -1177,6 +1177,7 @@ impl GitPanel { .focus_handle(cx) .contains_focused(window, cx) { + telemetry::event!("Git Committed", source = "Git Panel"); self.commit_changes(window, cx) } else { cx.propagate(); @@ -1275,6 +1276,7 @@ impl GitPanel { let Some(repo) = self.active_repository.clone() else { return; }; + telemetry::event!("Git Uncommitted"); let confirmation = self.check_for_pushed_commits(window, cx); let prior_head = self.load_commit_details("HEAD", cx); @@ -1477,6 +1479,7 @@ index 1234567..abcdef0 100644 let Some(repo) = self.active_repository.clone() else { return; }; + telemetry::event!("Git Fetched"); let guard = self.start_remote_operation(); let askpass = self.askpass_delegate("git fetch", window, cx); cx.spawn(|this, mut cx| async move { @@ -1512,6 +1515,7 @@ index 1234567..abcdef0 100644 let Some(branch) = repo.read(cx).current_branch() else { return; }; + telemetry::event!("Git Pulled"); let branch = branch.clone(); let remote = self.get_current_remote(window, cx); cx.spawn_in(window, move |this, mut cx| async move { @@ -1566,6 +1570,7 @@ index 1234567..abcdef0 100644 let Some(branch) = repo.read(cx).current_branch() else { return; }; + telemetry::event!("Git Pushed"); let branch = branch.clone(); let options = if force_push { PushOptions::Force @@ -2276,6 +2281,10 @@ index 1234567..abcdef0 100644 .disabled(!can_commit || self.modal_open) .on_click({ cx.listener(move |this, _: &ClickEvent, window, cx| { + telemetry::event!( + "Git Committed", + source = "Git Panel" + ); this.commit_changes(window, cx) }) }), diff --git a/crates/git_ui/src/project_diff.rs b/crates/git_ui/src/project_diff.rs index fa9e1c56322e011560568bdafe2cd9a5ee23bb66..81fb36321bad6c75633e1d37b4b2f1f9fe540c70 100644 --- a/crates/git_ui/src/project_diff.rs +++ b/crates/git_ui/src/project_diff.rs @@ -90,6 +90,14 @@ impl ProjectDiff { window: &mut Window, cx: &mut Context, ) { + telemetry::event!( + "Git Diff Opened", + source = if entry.is_some() { + "Git Panel" + } else { + "Action" + } + ); let project_diff = if let Some(existing) = workspace.item_of_type::(cx) { workspace.activate_item(&existing, true, true, window, cx); existing diff --git a/crates/telemetry/src/telemetry.rs b/crates/telemetry/src/telemetry.rs index 9fb05543a984ebe613946fef790df9aa6aba6d40..f8f7d5851e66a94452cf3461487fbc1718735e44 100644 --- a/crates/telemetry/src/telemetry.rs +++ b/crates/telemetry/src/telemetry.rs @@ -15,6 +15,8 @@ pub use telemetry_events::FlexibleEvent as Event; /// telemetry::event!("Keymap Changed", version = "1.0.0"); /// telemetry::event!("Documentation Viewed", url, source = "Extension Upsell"); /// ``` +/// +/// If you want to debug logging in development, export `RUST_LOG=telemetry=trace` #[macro_export] macro_rules! event { ($name:expr) => {{