Send installation id with crashes (#11032)

This will let us prioritize crashes that affect many users.

Release Notes:

- N/A
This commit is contained in:
Conrad Irwin 2024-04-25 21:07:06 -06:00 committed by GitHub
parent a4ad3bcc08
commit d9d509a2bb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 5 deletions

View File

@ -136,6 +136,13 @@ pub async fn post_crash(
.get("x-zed-panicked-on") .get("x-zed-panicked-on")
.and_then(|h| h.to_str().ok()) .and_then(|h| h.to_str().ok())
.and_then(|s| s.parse().ok()); .and_then(|s| s.parse().ok());
let installation_id = headers
.get("x-zed-installation-id")
.and_then(|h| h.to_str().ok())
.map(|s| s.to_string())
.unwrap_or_default();
let mut recent_panic = None; let mut recent_panic = None;
if let Some(recent_panic_on) = recent_panic_on { if let Some(recent_panic_on) = recent_panic_on {
@ -160,6 +167,7 @@ pub async fn post_crash(
os_version = %report.header.os_version, os_version = %report.header.os_version,
bundle_id = %report.header.bundle_id, bundle_id = %report.header.bundle_id,
incident_id = %report.header.incident_id, incident_id = %report.header.incident_id,
installation_id = %installation_id,
description = %description, description = %description,
backtrace = %summary, backtrace = %summary,
"crash report"); "crash report");

View File

@ -145,6 +145,13 @@ fn init_headless(dev_server_token: DevServerToken) {
); );
handle_settings_file_changes(user_settings_file_rx, cx); handle_settings_file_changes(user_settings_file_rx, cx);
let (installation_id, _) = cx
.background_executor()
.block(installation_id())
.ok()
.unzip();
upload_panics_and_crashes(client.http_client(), installation_id, cx);
headless::init( headless::init(
client.clone(), client.clone(),
headless::AppState { headless::AppState {
@ -323,7 +330,7 @@ fn init_ui(args: Args) {
.detach(); .detach();
let telemetry = client.telemetry(); let telemetry = client.telemetry();
telemetry.start(installation_id, session_id, cx); telemetry.start(installation_id.clone(), session_id, cx);
telemetry.report_setting_event("theme", cx.theme().name.to_string()); telemetry.report_setting_event("theme", cx.theme().name.to_string());
telemetry.report_setting_event("keymap", BaseKeymap::get_global(cx).to_string()); telemetry.report_setting_event("keymap", BaseKeymap::get_global(cx).to_string());
telemetry.report_app_event( telemetry.report_app_event(
@ -378,8 +385,7 @@ fn init_ui(args: Args) {
cx.set_menus(app_menus()); cx.set_menus(app_menus());
initialize_workspace(app_state.clone(), cx); initialize_workspace(app_state.clone(), cx);
// todo(linux): unblock this upload_panics_and_crashes(client.http_client(), installation_id, cx);
upload_panics_and_crashes(client.http_client(), cx);
cx.activate(true); cx.activate(true);
@ -824,7 +830,11 @@ fn init_panic_hook(app: &App, installation_id: Option<String>, session_id: Strin
})); }));
} }
fn upload_panics_and_crashes(http: Arc<HttpClientWithUrl>, cx: &mut AppContext) { fn upload_panics_and_crashes(
http: Arc<HttpClientWithUrl>,
installation_id: Option<String>,
cx: &mut AppContext,
) {
let telemetry_settings = *client::TelemetrySettings::get_global(cx); let telemetry_settings = *client::TelemetrySettings::get_global(cx);
cx.background_executor() cx.background_executor()
.spawn(async move { .spawn(async move {
@ -832,7 +842,7 @@ fn upload_panics_and_crashes(http: Arc<HttpClientWithUrl>, cx: &mut AppContext)
.await .await
.log_err() .log_err()
.flatten(); .flatten();
upload_previous_crashes(http, most_recent_panic, telemetry_settings) upload_previous_crashes(http, most_recent_panic, installation_id, telemetry_settings)
.await .await
.log_err() .log_err()
}) })
@ -915,6 +925,7 @@ static LAST_CRASH_UPLOADED: &'static str = "LAST_CRASH_UPLOADED";
async fn upload_previous_crashes( async fn upload_previous_crashes(
http: Arc<HttpClientWithUrl>, http: Arc<HttpClientWithUrl>,
most_recent_panic: Option<(i64, String)>, most_recent_panic: Option<(i64, String)>,
installation_id: Option<String>,
telemetry_settings: client::TelemetrySettings, telemetry_settings: client::TelemetrySettings,
) -> Result<()> { ) -> Result<()> {
if !telemetry_settings.diagnostics { if !telemetry_settings.diagnostics {
@ -964,6 +975,9 @@ async fn upload_previous_crashes(
.header("x-zed-panicked-on", format!("{}", panicked_on)) .header("x-zed-panicked-on", format!("{}", panicked_on))
.header("x-zed-panic", payload) .header("x-zed-panic", payload)
} }
if let Some(installation_id) = installation_id.as_ref() {
request = request.header("x-zed-installation-id", installation_id);
}
let request = request.body(body.into())?; let request = request.body(body.into())?;