Include `is_staff` boolean in in-app feedback

Joseph T. Lyons created

Change summary

crates/client/src/client.rs            | 4 ++++
crates/client/src/telemetry.rs         | 7 +++++++
crates/feedback/src/feedback_editor.rs | 3 +++
3 files changed, 14 insertions(+)

Detailed changes

crates/client/src/client.rs 🔗

@@ -1324,6 +1324,10 @@ impl Client {
     pub fn metrics_id(&self) -> Option<Arc<str>> {
         self.telemetry.metrics_id()
     }
+
+    pub fn is_staff(&self) -> Option<bool> {
+        self.telemetry.is_staff()
+    }
 }
 
 impl WeakSubscriber {

crates/client/src/telemetry.rs 🔗

@@ -40,6 +40,7 @@ struct TelemetryState {
     next_event_id: usize,
     flush_task: Option<Task<()>>,
     log_file: Option<NamedTempFile>,
+    is_staff: Option<bool>,
 }
 
 const MIXPANEL_EVENTS_URL: &'static str = "https://api.mixpanel.com/track";
@@ -125,6 +126,7 @@ impl Telemetry {
                 flush_task: Default::default(),
                 next_event_id: 0,
                 log_file: None,
+                is_staff: None,
             }),
         });
 
@@ -202,6 +204,7 @@ impl Telemetry {
         let device_id = state.device_id.clone();
         let metrics_id: Option<Arc<str>> = metrics_id.map(|id| id.into());
         state.metrics_id = metrics_id.clone();
+        state.is_staff = Some(is_staff);
         drop(state);
 
         if let Some((token, device_id)) = MIXPANEL_TOKEN.as_ref().zip(device_id) {
@@ -282,6 +285,10 @@ impl Telemetry {
         self.state.lock().metrics_id.clone()
     }
 
+    pub fn is_staff(self: &Arc<Self>) -> Option<bool> {
+        self.state.lock().is_staff
+    }
+
     fn flush(self: &Arc<Self>) {
         let mut state = self.state.lock();
         let mut events = mem::take(&mut state.queue);

crates/feedback/src/feedback_editor.rs 🔗

@@ -96,6 +96,7 @@ struct FeedbackRequestBody<'a> {
     feedback_text: &'a str,
     metrics_id: Option<Arc<str>>,
     system_specs: SystemSpecs,
+    is_staff: bool,
     token: &'a str,
 }
 
@@ -205,12 +206,14 @@ impl FeedbackEditor {
         let feedback_endpoint = format!("{}/api/feedback", *ZED_SERVER_URL);
 
         let metrics_id = zed_client.metrics_id();
+        let is_staff = zed_client.is_staff();
         let http_client = zed_client.http_client();
 
         let request = FeedbackRequestBody {
             feedback_text: &feedback_text,
             metrics_id,
             system_specs,
+            is_staff: is_staff.unwrap_or(false),
             token: ZED_SECRET_CLIENT_TOKEN,
         };