Add is_via_ssh field to edit events (#18867)

Joseph T. Lyons created

Release Notes:

- N/A

Change summary

crates/client/src/telemetry.rs                  | 3 ++-
crates/collab/src/api/events.rs                 | 2 ++
crates/editor/src/editor.rs                     | 9 +++++++--
crates/telemetry_events/src/telemetry_events.rs | 4 +++-
crates/terminal_view/src/terminal_element.rs    | 6 +++---
5 files changed, 17 insertions(+), 7 deletions(-)

Detailed changes

crates/client/src/telemetry.rs 🔗

@@ -458,7 +458,7 @@ impl Telemetry {
         }))
     }
 
-    pub fn log_edit_event(self: &Arc<Self>, environment: &'static str) {
+    pub fn log_edit_event(self: &Arc<Self>, environment: &'static str, is_via_ssh: bool) {
         let mut state = self.state.lock();
         let period_data = state.event_coalescer.log_event(environment);
         drop(state);
@@ -467,6 +467,7 @@ impl Telemetry {
             let event = Event::Edit(EditEvent {
                 duration: end.timestamp_millis() - start.timestamp_millis(),
                 environment: environment.to_string(),
+                is_via_ssh,
             });
 
             self.report_event(event);

crates/collab/src/api/events.rs 🔗

@@ -1263,6 +1263,7 @@ pub struct EditEventRow {
     period_start: i64,
     period_end: i64,
     environment: String,
+    is_via_ssh: bool,
 }
 
 impl EditEventRow {
@@ -1296,6 +1297,7 @@ impl EditEventRow {
             period_start: period_start.timestamp_millis(),
             period_end: period_end.timestamp_millis(),
             environment: event.environment,
+            is_via_ssh: event.is_via_ssh,
         }
     }
 }

crates/editor/src/editor.rs 🔗

@@ -12146,9 +12146,14 @@ impl Editor {
                 }
 
                 let Some(project) = &self.project else { return };
-                let telemetry = project.read(cx).client().telemetry().clone();
+                let (telemetry, is_via_ssh) = {
+                    let project = project.read(cx);
+                    let telemetry = project.client().telemetry().clone();
+                    let is_via_ssh = project.is_via_ssh();
+                    (telemetry, is_via_ssh)
+                };
                 refresh_linked_ranges(self, cx);
-                telemetry.log_edit_event("editor");
+                telemetry.log_edit_event("editor", is_via_ssh);
             }
             multi_buffer::Event::ExcerptsAdded {
                 buffer,

crates/telemetry_events/src/telemetry_events.rs 🔗

@@ -116,7 +116,7 @@ pub struct EditorEvent {
     pub copilot_enabled: bool,
     /// Whether the user has copilot enabled for the language of the file opened or saved
     pub copilot_enabled_for_language: bool,
-    /// Whether the client is editing a local file or a remote file via SSH
+    /// Whether the client is opening/saving a local file or a remote file via SSH
     pub is_via_ssh: bool,
 }
 
@@ -174,6 +174,8 @@ pub struct ActionEvent {
 pub struct EditEvent {
     pub duration: i64,
     pub environment: String,
+    /// Whether the edits occurred locally or remotely via SSH
+    pub is_via_ssh: bool,
 }
 
 #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]

crates/terminal_view/src/terminal_element.rs 🔗

@@ -1019,9 +1019,9 @@ impl InputHandler for TerminalInputHandler {
         self.workspace
             .update(cx, |this, cx| {
                 cx.invalidate_character_coordinates();
-
-                let telemetry = this.project().read(cx).client().telemetry().clone();
-                telemetry.log_edit_event("terminal");
+                let project = this.project().read(cx);
+                let telemetry = project.client().telemetry().clone();
+                telemetry.log_edit_event("terminal", project.is_via_ssh());
             })
             .ok();
     }