Add ssh initialization events (#18831)

Joseph T. Lyons created

Release Notes:

- N/A

Change summary

crates/client/src/telemetry.rs            |  6 +++---
crates/recent_projects/src/dev_servers.rs | 17 ++++++++++++++++-
crates/workspace/src/workspace.rs         |  6 ++++++
crates/zed/src/main.rs                    |  2 ++
4 files changed, 27 insertions(+), 4 deletions(-)

Detailed changes

crates/client/src/telemetry.rs 🔗

@@ -485,7 +485,7 @@ impl Telemetry {
         worktree_id: WorktreeId,
         updated_entries_set: &UpdatedEntriesSet,
     ) {
-        let project_names: Vec<String> = {
+        let project_type_names: Vec<String> = {
             let mut state = self.state.lock();
             state
                 .worktree_id_map
@@ -521,8 +521,8 @@ impl Telemetry {
         };
 
         // Done on purpose to avoid calling `self.state.lock()` multiple times
-        for project_name in project_names {
-            self.report_app_event(format!("open {} project", project_name));
+        for project_type_name in project_type_names {
+            self.report_app_event(format!("open {} project", project_type_name));
         }
     }
 

crates/recent_projects/src/dev_servers.rs 🔗

@@ -279,6 +279,13 @@ impl DevServerProjects {
             match connection.await {
                 Some(_) => this
                     .update(&mut cx, |this, cx| {
+                        let _ = this.workspace.update(cx, |workspace, _| {
+                            workspace
+                                .client()
+                                .telemetry()
+                                .report_app_event("create ssh server".to_string())
+                        });
+
                         this.add_ssh_server(connection_options, cx);
                         this.mode = Mode::Default(None);
                         cx.notify()
@@ -422,7 +429,15 @@ impl DevServerProjects {
                         );
 
                         cx.new_view(|cx| {
-                            Workspace::new(None, project.clone(), app_state.clone(), cx)
+                            let workspace =
+                                Workspace::new(None, project.clone(), app_state.clone(), cx);
+
+                            workspace
+                                .client()
+                                .telemetry()
+                                .report_app_event("create ssh project".to_string());
+
+                            workspace
                         })
                     })
                     .log_err();

crates/workspace/src/workspace.rs 🔗

@@ -5575,6 +5575,12 @@ pub fn open_ssh_project(
             cx.replace_root_view(|cx| {
                 let mut workspace =
                     Workspace::new(Some(workspace_id), project, app_state.clone(), cx);
+
+                workspace
+                    .client()
+                    .telemetry()
+                    .report_app_event("open ssh project".to_string());
+
                 workspace.set_serialized_ssh_project(serialized_ssh_project);
                 workspace
             });

crates/zed/src/main.rs 🔗

@@ -528,6 +528,8 @@ fn main() {
             session_id,
             cx,
         );
+
+        // We should rename these in the future to `first app open`, `first app open for release channel`, and `app open`
         if let (Some(system_id), Some(installation_id)) = (&system_id, &installation_id) {
             match (&system_id, &installation_id) {
                 (IdType::New(_), IdType::New(_)) => {