Skip to content

Commit

Permalink
apply feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
JanProvaznik committed Jan 13, 2025
1 parent 49467bb commit 62af4f0
Show file tree
Hide file tree
Showing 11 changed files with 111 additions and 108 deletions.
32 changes: 16 additions & 16 deletions src/Build.UnitTests/BackEnd/KnownTelemetry_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,19 @@ public void BuildTelemetryConstructedHasNoProperties()
{
BuildTelemetry buildTelemetry = new BuildTelemetry();

buildTelemetry.DisplayVersion.ShouldBeNull();
buildTelemetry.BuildEngineDisplayVersion.ShouldBeNull();
buildTelemetry.EventName.ShouldBe("build");
buildTelemetry.FinishedAt.ShouldBeNull();
buildTelemetry.FrameworkName.ShouldBeNull();
buildTelemetry.Host.ShouldBeNull();
buildTelemetry.InitialServerState.ShouldBeNull();
buildTelemetry.BuildEngineFrameworkName.ShouldBeNull();
buildTelemetry.BuildEngineHost.ShouldBeNull();
buildTelemetry.InitialMSBuildServerState.ShouldBeNull();
buildTelemetry.InnerStartAt.ShouldBeNull();
buildTelemetry.Project.ShouldBeNull();
buildTelemetry.ProjectPath.ShouldBeNull();
buildTelemetry.ServerFallbackReason.ShouldBeNull();
buildTelemetry.StartAt.ShouldBeNull();
buildTelemetry.Success.ShouldBeNull();
buildTelemetry.Target.ShouldBeNull();
buildTelemetry.Version.ShouldBeNull();
buildTelemetry.BuildSuccess.ShouldBeNull();
buildTelemetry.BuildTarget.ShouldBeNull();
buildTelemetry.BuildEngineVersion.ShouldBeNull();

buildTelemetry.GetProperties().ShouldBeEmpty();
}
Expand All @@ -61,18 +61,18 @@ public void BuildTelemetryCreateProperProperties()
DateTime innerStartAt = new DateTime(2023, 01, 02, 10, 20, 30);
DateTime finishedAt = new DateTime(2023, 12, 13, 14, 15, 16);

buildTelemetry.DisplayVersion = "Some Display Version";
buildTelemetry.BuildEngineDisplayVersion = "Some Display Version";
buildTelemetry.FinishedAt = finishedAt;
buildTelemetry.FrameworkName = "new .NET";
buildTelemetry.Host = "Host description";
buildTelemetry.InitialServerState = "hot";
buildTelemetry.BuildEngineFrameworkName = "new .NET";
buildTelemetry.BuildEngineHost = "Host description";
buildTelemetry.InitialMSBuildServerState = "hot";
buildTelemetry.InnerStartAt = innerStartAt;
buildTelemetry.Project = @"C:\\dev\\theProject";
buildTelemetry.ProjectPath = @"C:\\dev\\theProject";
buildTelemetry.ServerFallbackReason = "busy";
buildTelemetry.StartAt = startAt;
buildTelemetry.Success = true;
buildTelemetry.Target = "clean";
buildTelemetry.Version = new Version(1, 2, 3, 4);
buildTelemetry.BuildSuccess = true;
buildTelemetry.BuildTarget = "clean";
buildTelemetry.BuildEngineVersion = new Version(1, 2, 3, 4);

var properties = buildTelemetry.GetProperties();

Expand Down
14 changes: 7 additions & 7 deletions src/Build/BackEnd/BuildManager/BuildManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -911,8 +911,8 @@ private BuildSubmissionBase<TRequestData, TResultData> PendBuildRequest<TRequest
{
// Project graph can have multiple entry points, for purposes of identifying event for same build project,
// we believe that including only one entry point will provide enough precision.
_buildTelemetry.Project ??= requestData.EntryProjectsFullPath.FirstOrDefault();
_buildTelemetry.Target ??= string.Join(",", requestData.TargetNames);
_buildTelemetry.ProjectPath ??= requestData.EntryProjectsFullPath.FirstOrDefault();
_buildTelemetry.BuildTarget ??= string.Join(",", requestData.TargetNames);
}

_buildSubmissions.Add(newSubmission.SubmissionId, newSubmission);
Expand Down Expand Up @@ -1056,10 +1056,10 @@ public void EndBuild()
if (_buildTelemetry != null)
{
_buildTelemetry.FinishedAt = DateTime.UtcNow;
_buildTelemetry.Success = _overallBuildSuccess;
_buildTelemetry.Version = ProjectCollection.Version;
_buildTelemetry.DisplayVersion = ProjectCollection.DisplayVersion;
_buildTelemetry.FrameworkName = NativeMethodsShared.FrameworkName;
_buildTelemetry.BuildSuccess = _overallBuildSuccess;
_buildTelemetry.BuildEngineVersion = ProjectCollection.Version;
_buildTelemetry.BuildEngineDisplayVersion = ProjectCollection.DisplayVersion;
_buildTelemetry.BuildEngineFrameworkName = NativeMethodsShared.FrameworkName;

string? host = null;
if (BuildEnvironmentState.s_runningInVisualStudio)
Expand All @@ -1074,7 +1074,7 @@ public void EndBuild()
{
host = "VSCode";
}
_buildTelemetry.Host = host;
_buildTelemetry.BuildEngineHost = host;

_buildTelemetry.BuildCheckEnabled = _buildParameters!.IsBuildCheckEnabled;
var sacState = NativeMethodsShared.GetSACState();
Expand Down
4 changes: 2 additions & 2 deletions src/Build/BackEnd/Client/MSBuildClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public MSBuildClientExitResult Execute(CancellationToken cancellationToken)
bool serverIsAlreadyRunning = ServerIsRunning();
if (KnownTelemetry.PartialBuildTelemetry != null)
{
KnownTelemetry.PartialBuildTelemetry.InitialServerState = serverIsAlreadyRunning ? "hot" : "cold";
KnownTelemetry.PartialBuildTelemetry.InitialMSBuildServerState = serverIsAlreadyRunning ? "hot" : "cold";
}
if (!serverIsAlreadyRunning)
{
Expand Down Expand Up @@ -521,7 +521,7 @@ private ServerNodeBuildCommand GetServerNodeBuildCommand()
? null
: new PartialBuildTelemetry(
startedAt: KnownTelemetry.PartialBuildTelemetry.StartAt.GetValueOrDefault(),
initialServerState: KnownTelemetry.PartialBuildTelemetry.InitialServerState,
initialServerState: KnownTelemetry.PartialBuildTelemetry.InitialMSBuildServerState,
serverFallbackReason: KnownTelemetry.PartialBuildTelemetry.ServerFallbackReason);

return new ServerNodeBuildCommand(
Expand Down
2 changes: 1 addition & 1 deletion src/Build/BackEnd/Node/OutOfProcServerNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ private void HandleServerNodeBuildCommand(ServerNodeBuildCommand command)
BuildTelemetry buildTelemetry = KnownTelemetry.PartialBuildTelemetry ??= new BuildTelemetry();

buildTelemetry.StartAt = command.PartialBuildTelemetry.StartedAt;
buildTelemetry.InitialServerState = command.PartialBuildTelemetry.InitialServerState;
buildTelemetry.InitialMSBuildServerState = command.PartialBuildTelemetry.InitialServerState;
buildTelemetry.ServerFallbackReason = command.PartialBuildTelemetry.ServerFallbackReason;
}

Expand Down
3 changes: 3 additions & 0 deletions src/Framework/Microsoft.Build.Framework.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@
<Compile Include="..\Shared\IMSBuildElementLocation.cs">
<Link>Shared\IMSBuildElementLocation.cs</Link>
</Compile>
<Compile Include="..\Shared\ConversionUtilities.cs">
<Link>Shared\ConversionUtilities.cs</Link>
</Compile>
</ItemGroup>

<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETFramework'">
Expand Down
32 changes: 20 additions & 12 deletions src/Framework/Telemetry/ActivityExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#if NETFRAMEWORK
extern alias clientext; // for Microsoft.VisualStudio.OpenTelemetry.ClientExtensions

using clientext::Microsoft.VisualStudio.OpenTelemetry.ClientExtensions;
using clientext::Microsoft.VisualStudio.OpenTelemetry.ClientExtensions.Exporters;
#else
using System.Security.Cryptography;
using System.Text;
#endif
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;



namespace Microsoft.Build.Framework.Telemetry
{

/// <summary>
/// Extension methods for <see cref="Activity"/>. usage in VS OpenTelemetry.
/// </summary>
internal static class ActivityExtensions
{
/// <summary>
/// Add tags to the activity from a <see cref="IActivityTelemetryDataHolder"/>.
/// </summary>
public static Activity WithTags(this Activity activity, IActivityTelemetryDataHolder dataHolder)
{
activity.WithTags(dataHolder.GetActivityProperties());
return activity;
}

/// <summary>
/// Add tags to the activity from a list of TelemetryItems.
/// </summary>
public static Activity WithTags(this Activity activity, IList<TelemetryItem> tags)
{
foreach (var tag in tags)
Expand All @@ -38,14 +38,19 @@ public static Activity WithTags(this Activity activity, IList<TelemetryItem> tag
}
return activity;
}

/// <summary>
/// Add a tag to the activity from a <see cref="TelemetryItem"/>.
/// </summary>
public static Activity WithTag(this Activity activity, TelemetryItem item)
{
object value = item.Hashed ? GetHashed(item.Value) : item.Value;
activity.SetTag($"{TelemetryConstants.PropertyPrefix}{item.Name}", value);
return activity;
}

/// <summary>
/// Set the start time of the activity.
/// </summary>
public static Activity WithStartTime(this Activity activity, DateTime? startTime)
{
if (startTime.HasValue)
Expand All @@ -55,10 +60,13 @@ public static Activity WithStartTime(this Activity activity, DateTime? startTime
return activity;
}

/// <summary>
/// Depending on the platform, hash the value using an available mechanism.
/// </summary>
private static object GetHashed(object value)
{
#if NETFRAMEWORK
return new clientext::Microsoft.VisualStudio.Telemetry.TelemetryHashedProperty(value);
return new clientext::Microsoft.VisualStudio.Telemetry.TelemetryHashedProperty(value);
#else
return Sha256Hasher.Hash(value.ToString() ?? "");
#endif
Expand Down
Loading

0 comments on commit 62af4f0

Please sign in to comment.