Skip to content

Commit d2ac6b0

Browse files
authored
Merge branch 'main' into test/issue-500
2 parents 26ce577 + 1b74614 commit d2ac6b0

13 files changed

Lines changed: 463 additions & 40 deletions

File tree

crates/pet-core/src/telemetry/mod.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ use inaccurate_python_info::InaccuratePythonEnvironmentInfo;
55
use missing_conda_info::MissingCondaEnvironments;
66
use missing_poetry_info::MissingPoetryEnvironments;
77
use refresh_performance::RefreshPerformance;
8+
use refresh_progress::RefreshProgress;
89
use serde::{Deserialize, Serialize};
910

1011
pub mod inaccurate_python_info;
1112
pub mod missing_conda_info;
1213
pub mod missing_poetry_info;
1314
pub mod refresh_performance;
15+
pub mod refresh_progress;
1416

1517
pub type NumberOfCustomSearchPaths = u32;
1618

@@ -38,6 +40,8 @@ pub enum TelemetryEvent {
3840
MissingPoetryEnvironments(MissingPoetryEnvironments),
3941
/// Telemetry with metrics for finding all environments as a result of refresh.
4042
RefreshPerformance(RefreshPerformance),
43+
/// Progress through a refresh operation, including per-locator timing.
44+
RefreshProgress(RefreshProgress),
4145
}
4246

4347
pub fn get_telemetry_event_name(event: &TelemetryEvent) -> &'static str {
@@ -57,5 +61,6 @@ pub fn get_telemetry_event_name(event: &TelemetryEvent) -> &'static str {
5761
TelemetryEvent::MissingCondaEnvironments(_) => "MissingCondaEnvironments",
5862
TelemetryEvent::MissingPoetryEnvironments(_) => "MissingPoetryEnvironments",
5963
TelemetryEvent::RefreshPerformance(_) => "RefreshPerformance",
64+
TelemetryEvent::RefreshProgress(_) => "RefreshProgress",
6065
}
6166
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
use serde::{Deserialize, Serialize};
5+
6+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7+
#[serde(rename_all = "camelCase")]
8+
pub enum RefreshProgressPhase {
9+
Locators,
10+
Path,
11+
GlobalVirtualEnvs,
12+
Workspaces,
13+
}
14+
15+
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
16+
#[serde(rename_all = "camelCase")]
17+
pub enum RefreshProgressStatus {
18+
Started,
19+
Completed,
20+
}
21+
22+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
23+
#[serde(rename_all = "camelCase")]
24+
pub struct RefreshProgress {
25+
pub refresh_id: u64,
26+
pub phase: RefreshProgressPhase,
27+
pub status: RefreshProgressStatus,
28+
pub elapsed_ms: u128,
29+
#[serde(skip_serializing_if = "Option::is_none")]
30+
pub phase_elapsed_ms: Option<u128>,
31+
#[serde(skip_serializing_if = "Option::is_none")]
32+
pub locator_name: Option<String>,
33+
#[serde(skip_serializing_if = "Option::is_none")]
34+
pub locator_elapsed_ms: Option<u128>,
35+
}

crates/pet-reporter/src/jsonrpc.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,43 @@ mod tests {
173173
assert_eq!(value["data"]["refreshPerformance"]["total"], json!(10));
174174
}
175175

176+
#[test]
177+
fn refresh_progress_serializes_privacy_safe_fields() {
178+
use pet_core::telemetry::refresh_progress::{
179+
RefreshProgress, RefreshProgressPhase, RefreshProgressStatus,
180+
};
181+
182+
let event = TelemetryEvent::RefreshProgress(RefreshProgress {
183+
refresh_id: 42,
184+
phase: RefreshProgressPhase::Locators,
185+
status: RefreshProgressStatus::Completed,
186+
elapsed_ms: 15,
187+
phase_elapsed_ms: None,
188+
locator_name: Some("Conda".to_string()),
189+
locator_elapsed_ms: Some(10),
190+
});
191+
let payload = TelemetryData {
192+
event: get_telemetry_event_name(&event).to_string(),
193+
data: event,
194+
};
195+
196+
assert_eq!(
197+
serde_json::to_value(payload).unwrap(),
198+
json!({
199+
"event": "RefreshProgress",
200+
"data": {
201+
"refreshProgress": {
202+
"refreshId": 42,
203+
"phase": "locators",
204+
"status": "completed",
205+
"elapsedMs": 15,
206+
"locatorName": "Conda",
207+
"locatorElapsedMs": 10
208+
}
209+
}
210+
})
211+
);
212+
}
176213
#[test]
177214
fn log_payload_uses_camel_case_fields_and_level_renames() {
178215
let payload = Log {

0 commit comments

Comments
 (0)