Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions src/Cli/dotnet/Commands/Run/RunTelemetry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,13 @@ public static void TrackRunEvent(
{
["app_type"] = isFileBased ? "file_based" : "project_based",
["project_id"] = projectIdentifier,
["sdk_count"] = sdkCount.ToString(),
["package_reference_count"] = packageReferenceCount.ToString(),
["project_reference_count"] = projectReferenceCount.ToString(),
};

var measurements = new Dictionary<string, double>
{
["sdk_count"] = sdkCount,
["package_reference_count"] = packageReferenceCount,
["project_reference_count"] = projectReferenceCount,
};

// Launch profile telemetry
Expand All @@ -75,7 +79,7 @@ public static void TrackRunEvent(
// File-based app specific telemetry
if (isFileBased)
{
properties["additional_properties_count"] = additionalPropertiesCount.ToString();
measurements["additional_properties_count"] = additionalPropertiesCount;
if (usedMSBuild.HasValue)
{
properties["used_msbuild"] = usedMSBuild.Value ? "true" : "false";
Expand All @@ -86,7 +90,7 @@ public static void TrackRunEvent(
}
}

TelemetryEventEntry.TrackEvent(RunEventName, properties, measurements: null);
TelemetryEventEntry.TrackEvent(RunEventName, properties, measurements);
}

/// <summary>
Expand Down Expand Up @@ -234,4 +238,4 @@ private static bool IsDefaultProfile(string? profileName)
// The default profile name at this point is "(Default)"
return profileName.Equals("(Default)", StringComparison.OrdinalIgnoreCase);
}
}
}
38 changes: 22 additions & 16 deletions test/dotnet.Tests/CommandTests/Run/RunTelemetryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,9 @@ public void TrackRunEvent_FileBasedApp_SendsCorrectTelemetry()
{
// Arrange
var events = new List<(string? eventName, IDictionary<string, string?>? properties, IDictionary<string, double>? measurements)>();

void handler(object? sender, InstrumentationEventArgs args) => events.Add((args.EventName, args.Properties, args.Measurements));

TelemetryEventEntry.EntryPosted += handler;

try
Expand All @@ -172,18 +172,21 @@ public void TrackRunEvent_FileBasedApp_SendsCorrectTelemetry()
var eventData = events[0];
eventData.eventName.Should().Be("run");
eventData.properties.Should().NotBeNull();

eventData.measurements.Should().NotBeNull();

var props = eventData.properties!;
props["app_type"].Should().Be("file_based");
props["project_id"].Should().Be("test-hash");
props["sdk_count"].Should().Be("2");
props["package_reference_count"].Should().Be("3");
props["project_reference_count"].Should().Be("1");
props["additional_properties_count"].Should().Be("2");
props["used_msbuild"].Should().Be("true");
props["used_roslyn_compiler"].Should().Be("false");
props["launch_profile_requested"].Should().Be("explicit");
props["launch_profile_is_default"].Should().Be("true");

var measurements = eventData.measurements!;
measurements["sdk_count"].Should().Be(2);
measurements["package_reference_count"].Should().Be(3);
measurements["project_reference_count"].Should().Be(1);
measurements["additional_properties_count"].Should().Be(2);
}
finally
{
Expand All @@ -197,9 +200,9 @@ public void TrackRunEvent_ProjectBasedApp_SendsCorrectTelemetry()
{
// Arrange
var events = new List<(string? eventName, IDictionary<string, string?>? properties, IDictionary<string, double>? measurements)>();

void handler(object? sender, InstrumentationEventArgs args) => events.Add((args.EventName, args.Properties, args.Measurements));

TelemetryEventEntry.EntryPosted += handler;

try
Expand All @@ -220,17 +223,20 @@ public void TrackRunEvent_ProjectBasedApp_SendsCorrectTelemetry()
var eventData = events[0];
eventData.eventName.Should().Be("run");
eventData.properties.Should().NotBeNull();

eventData.measurements.Should().NotBeNull();

var props = eventData.properties!;
props["app_type"].Should().Be("project_based");
props["project_id"].Should().Be("project-hash");
props["sdk_count"].Should().Be("1");
props["package_reference_count"].Should().Be("5");
props["project_reference_count"].Should().Be("2");
props["launch_profile_requested"].Should().Be("none");
props.Should().NotContainKey("additional_properties_count");
props.Should().NotContainKey("used_msbuild");
props.Should().NotContainKey("used_roslyn_compiler");

var measurements = eventData.measurements!;
measurements["sdk_count"].Should().Be(1);
measurements["package_reference_count"].Should().Be(5);
measurements["project_reference_count"].Should().Be(2);
measurements.Should().NotContainKey("additional_properties_count");
}
finally
{
Expand All @@ -244,9 +250,9 @@ public void TrackRunEvent_WithDefaultLaunchProfile_MarksTelemetryCorrectly()
{
// Arrange
var events = new List<(string? eventName, IDictionary<string, string?>? properties, IDictionary<string, double>? measurements)>();

void handler(object? sender, InstrumentationEventArgs args) => events.Add((args.EventName, args.Properties, args.Measurements));

TelemetryEventEntry.EntryPosted += handler;

var launchSettings = new ProjectLaunchSettingsModel
Expand Down
Loading