This includes the following data:
- Where we spawned the session from (gutter, scenario list, custom form
filled by the user)
- Which debug adapter was used
- Which dock the debugger is in
Closes #ISSUE
Release Notes:
- debugger: Added telemetry for new session experience that includes
data about:
- How a session was spawned (gutter, scenario list or custom form)
- Which debug adapter was used
- Which dock the debugger is in
---------
Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>
69 lines
1.7 KiB
Rust
69 lines
1.7 KiB
Rust
pub mod adapters;
|
|
pub mod client;
|
|
pub mod debugger_settings;
|
|
pub mod inline_value;
|
|
pub mod proto_conversions;
|
|
mod registry;
|
|
pub mod transport;
|
|
|
|
use std::net::Ipv4Addr;
|
|
|
|
pub use dap_types::*;
|
|
use debugger_settings::DebuggerSettings;
|
|
use gpui::App;
|
|
pub use registry::{DapLocator, DapRegistry};
|
|
use serde::Serialize;
|
|
use settings::Settings;
|
|
pub use task::DebugRequest;
|
|
|
|
pub type ScopeId = u64;
|
|
pub type VariableReference = u64;
|
|
pub type StackFrameId = u64;
|
|
|
|
#[cfg(any(test, feature = "test-support"))]
|
|
pub use adapters::FakeAdapter;
|
|
use task::{DebugScenario, TcpArgumentsTemplate};
|
|
|
|
pub async fn configure_tcp_connection(
|
|
tcp_connection: TcpArgumentsTemplate,
|
|
) -> anyhow::Result<(Ipv4Addr, u16, Option<u64>)> {
|
|
let host = tcp_connection.host();
|
|
let timeout = tcp_connection.timeout;
|
|
|
|
let port = if let Some(port) = tcp_connection.port {
|
|
port
|
|
} else {
|
|
transport::TcpTransport::port(&tcp_connection).await?
|
|
};
|
|
|
|
Ok((host, port, timeout))
|
|
}
|
|
|
|
#[derive(Clone, Copy, Serialize)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum TelemetrySpawnLocation {
|
|
Gutter,
|
|
ScenarioList,
|
|
Custom,
|
|
}
|
|
|
|
pub fn send_telemetry(scenario: &DebugScenario, location: TelemetrySpawnLocation, cx: &App) {
|
|
let Some(adapter) = cx.global::<DapRegistry>().adapter(&scenario.adapter) else {
|
|
return;
|
|
};
|
|
let kind = adapter
|
|
.validate_config(&scenario.config)
|
|
.ok()
|
|
.map(serde_json::to_value)
|
|
.and_then(Result::ok);
|
|
let dock = DebuggerSettings::get_global(cx).dock;
|
|
telemetry::event!(
|
|
"Debugger Session Started",
|
|
spawn_location = location,
|
|
with_build_task = scenario.build.is_some(),
|
|
kind = kind,
|
|
adapter = scenario.adapter.as_ref(),
|
|
dock_position = dock,
|
|
);
|
|
}
|