Skip to content

Commit c041177

Browse files
Move to manifest based event source (#7164)
1 parent d4425db commit c041177

17 files changed

Lines changed: 466 additions & 689 deletions

src/NuGet.Core/Microsoft.Build.NuGetSdkResolver/GlobalJsonReader.cs

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@
66
using System;
77
using System.Collections.Concurrent;
88
using System.Collections.Generic;
9-
using System.Diagnostics.Tracing;
109
using System.Globalization;
1110
using System.IO;
1211
using System.Runtime.CompilerServices;
1312
using Microsoft.Build.Framework;
1413
using Newtonsoft.Json;
15-
using NuGet.Common;
1614

1715
namespace Microsoft.Build.NuGetSdkResolver
1816
{
@@ -242,7 +240,7 @@ private Dictionary<string, string> ParseMSBuildSdkVersions(string globalJsonPath
242240
// Load the file as a string and check if it has an msbuild-sdks section. Parsing the contents requires Newtonsoft.Json.dll to be loaded which can be expensive
243241
string json;
244242

245-
if (NuGetEventSource.IsEnabled) TraceEvents.GlobalJsonReadStart(globalJsonPath, sdkResolverContext);
243+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.GlobalJsonReadStart(globalJsonPath, sdkResolverContext.ProjectFilePath, sdkResolverContext.SolutionFilePath);
246244

247245
try
248246
{
@@ -281,40 +279,8 @@ private Dictionary<string, string> ParseMSBuildSdkVersions(string globalJsonPath
281279
}
282280
finally
283281
{
284-
if (NuGetEventSource.IsEnabled) TraceEvents.GlobalJsonReadStop(globalJsonPath, sdkResolverContext);
282+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.GlobalJsonReadStop(globalJsonPath, sdkResolverContext.ProjectFilePath, sdkResolverContext.SolutionFilePath);
285283
}
286284
}
287-
288-
private static class TraceEvents
289-
{
290-
private const string EventNameGlobalJsonRead = "SdkResolver/GlobalJsonRead";
291-
292-
public static void GlobalJsonReadStart(string globalJsonPath, SdkResolverContext sdkResolverContext)
293-
{
294-
var eventOptions = new EventSourceOptions
295-
{
296-
ActivityOptions = EventActivityOptions.Detachable,
297-
Keywords = NuGetEventSource.Keywords.SdkResolver | NuGetEventSource.Keywords.Performance,
298-
Opcode = EventOpcode.Start
299-
};
300-
301-
NuGetEventSource.Instance.Write(EventNameGlobalJsonRead, eventOptions, new GlobalJsonReadEventData(globalJsonPath, sdkResolverContext.ProjectFilePath, sdkResolverContext.SolutionFilePath));
302-
}
303-
304-
public static void GlobalJsonReadStop(string globalJsonPath, SdkResolverContext sdkResolverContext)
305-
{
306-
var eventOptions = new EventSourceOptions
307-
{
308-
ActivityOptions = EventActivityOptions.Detachable,
309-
Keywords = NuGetEventSource.Keywords.SdkResolver | NuGetEventSource.Keywords.Performance,
310-
Opcode = EventOpcode.Stop
311-
};
312-
313-
NuGetEventSource.Instance.Write(EventNameGlobalJsonRead, eventOptions, new GlobalJsonReadEventData(globalJsonPath, sdkResolverContext.ProjectFilePath, sdkResolverContext.SolutionFilePath));
314-
}
315-
316-
[EventData]
317-
private record struct GlobalJsonReadEventData(string Path, string ProjectFullPath, string SolutionFullPath);
318-
}
319285
}
320286
}

src/NuGet.Core/Microsoft.Build.NuGetSdkResolver/NuGetSdkLogger.cs

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
using System;
55
using System.Collections.Generic;
6-
using System.Diagnostics.Tracing;
76
using System.Threading.Tasks;
87
using Microsoft.Build.Framework;
98
using NuGet.Common;
@@ -56,46 +55,55 @@ public NuGetSdkLogger(SdkLogger sdkLogger)
5655
/// <inheritdoc cref="ILogger.Log(NuGet.Common.LogLevel, string)" />
5756
public void Log(LogLevel level, string data)
5857
{
59-
EventLevel eventLevel = EventLevel.LogAlways;
60-
6158
switch (level)
6259
{
6360
case LogLevel.Debug:
6461
case LogLevel.Verbose:
6562
// Debug and Verbose verbosity in NuGet maps to a low importance message in MSBuild
6663
_sdkLogger.LogMessage(data, MessageImportance.Low);
67-
68-
eventLevel = EventLevel.Verbose;
6964
break;
7065

7166
case LogLevel.Information:
7267
// Information verbosity in NuGet maps to a normal importance message in MSBuild
7368
_sdkLogger.LogMessage(data, MessageImportance.Normal);
74-
75-
eventLevel = EventLevel.Informational;
7669
break;
7770

7871
case LogLevel.Minimal:
7972
// Minimal verbosity in NuGet maps to a high importance message in MSBuild
8073
_sdkLogger.LogMessage(data, MessageImportance.High);
81-
82-
eventLevel = EventLevel.LogAlways;
8374
break;
8475

8576
case LogLevel.Warning:
8677
_warnings.Add(data);
87-
88-
eventLevel = EventLevel.Warning;
8978
break;
9079

9180
case LogLevel.Error:
9281
_errors.Add(data);
93-
94-
eventLevel = EventLevel.Error;
9582
break;
9683
}
9784

98-
if (NuGetEventSource.IsEnabled) TraceEvents.LogMessage(eventLevel, level, data);
85+
if (SdkResolverEventSource.Instance.IsEnabled())
86+
{
87+
switch (level)
88+
{
89+
case LogLevel.Debug:
90+
case LogLevel.Verbose:
91+
SdkResolverEventSource.Instance.LogMessageVerbose((int)level, data);
92+
break;
93+
case LogLevel.Information:
94+
SdkResolverEventSource.Instance.LogMessageInformational((int)level, data);
95+
break;
96+
case LogLevel.Minimal:
97+
SdkResolverEventSource.Instance.LogMessageAlways((int)level, data);
98+
break;
99+
case LogLevel.Warning:
100+
SdkResolverEventSource.Instance.LogMessageWarning((int)level, data);
101+
break;
102+
case LogLevel.Error:
103+
SdkResolverEventSource.Instance.LogMessageError((int)level, data);
104+
break;
105+
}
106+
}
99107
}
100108

101109
/// <inheritdoc cref="ILogger.LogAsync(ILogMessage)" />
@@ -137,22 +145,5 @@ public Task LogAsync(ILogMessage message)
137145

138146
/// <inheritdoc cref="ILogger.LogWarning(string)" />
139147
public void LogWarning(string data) => Log(LogLevel.Warning, data);
140-
141-
private static class TraceEvents
142-
{
143-
public static void LogMessage(EventLevel eventLevel, LogLevel level, string message)
144-
{
145-
var eventOptions = new EventSourceOptions
146-
{
147-
Level = eventLevel,
148-
Keywords = NuGetEventSource.Keywords.Logging,
149-
};
150-
151-
NuGetEventSource.Instance.Write("SdkResolver/LogMessage", eventOptions, new LogMessageEventData(level, message));
152-
}
153-
154-
[EventData]
155-
private record struct LogMessageEventData(LogLevel Level, string Message);
156-
}
157148
}
158149
}

src/NuGet.Core/Microsoft.Build.NuGetSdkResolver/NuGetSdkResolver.cs

Lines changed: 8 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
using System;
77
using System.Collections.Generic;
8-
using System.Diagnostics.Tracing;
98
using System.Globalization;
109
using System.IO;
1110
using System.Linq;
@@ -88,7 +87,7 @@ public override SdkResult Resolve(SdkReference sdkReference, SdkResolverContext
8887
return factory.IndicateFailure(errors: new List<string>() { Strings.Error_DisabledSdkResolver }, warnings: null);
8988
}
9089

91-
if (NuGetEventSource.IsEnabled) TraceEvents.ResolveStart(sdkReference);
90+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.ResolveStart(sdkReference.Name, sdkReference.Version);
9291

9392
try
9493
{
@@ -108,7 +107,7 @@ public override SdkResult Resolve(SdkReference sdkReference, SdkResolverContext
108107
}
109108
finally
110109
{
111-
if (NuGetEventSource.IsEnabled) TraceEvents.ResolveStop(sdkReference);
110+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.ResolveStop(sdkReference.Name, sdkReference.Version);
112111
}
113112
}
114113

@@ -159,13 +158,13 @@ public static SdkResult GetSdkResult(SdkReference sdk, object nuGetVersion, SdkR
159158
// Cast the NuGet version since the caller does not want to consume NuGet classes directly
160159
var parsedSdkVersion = (NuGetVersion)nuGetVersion;
161160

162-
if (NuGetEventSource.IsEnabled) TraceEvents.GetResultStart(sdk.Name, parsedSdkVersion.OriginalVersion);
161+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.GetResultStart(sdk.Name, parsedSdkVersion.OriginalVersion);
163162

164163
SdkResult result = null;
165164

166165
try
167166
{
168-
if (NuGetEventSource.IsEnabled) TraceEvents.LoadSettingsStart();
167+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.LoadSettingsStart();
169168

170169
// Load NuGet settings and a path resolver
171170
ISettings settings;
@@ -183,7 +182,7 @@ public static SdkResult GetSdkResult(SdkReference sdk, object nuGetVersion, SdkR
183182
}
184183
finally
185184
{
186-
if (NuGetEventSource.IsEnabled) TraceEvents.LoadSettingsStop();
185+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.LoadSettingsStop();
187186
}
188187

189188
var fallbackPackagePathResolver = new FallbackPackagePathResolver(NuGetPathContext.Create(settings));
@@ -201,7 +200,7 @@ public static SdkResult GetSdkResult(SdkReference sdk, object nuGetVersion, SdkR
201200
X509TrustStore.InitializeForDotNetSdk(logger);
202201
#endif
203202

204-
if (NuGetEventSource.IsEnabled) TraceEvents.RestorePackageStart(libraryIdentity);
203+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.RestorePackageStart(libraryIdentity.Name, libraryIdentity.Version.OriginalVersion);
205204

206205
// Asynchronously run the restore without a commit which find the package on configured feeds, download, and unzip it without generating any other files
207206
// This must be run in its own task because legacy project system evaluates projects on the UI thread which can cause RunWithoutCommit() to deadlock
@@ -213,7 +212,7 @@ public static SdkResult GetSdkResult(SdkReference sdk, object nuGetVersion, SdkR
213212

214213
var results = restoreTask.Result;
215214

216-
if (NuGetEventSource.IsEnabled) TraceEvents.RestorePackageStop(libraryIdentity);
215+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.RestorePackageStop(libraryIdentity.Name, libraryIdentity.Version.OriginalVersion);
217216

218217
fallbackPackagePathResolver = new FallbackPackagePathResolver(NuGetPathContext.Create(settings));
219218

@@ -266,7 +265,7 @@ public static SdkResult GetSdkResult(SdkReference sdk, object nuGetVersion, SdkR
266265
}
267266
finally
268267
{
269-
if (NuGetEventSource.IsEnabled) TraceEvents.GetResultStop(sdk.Name, parsedSdkVersion.OriginalVersion, result);
268+
if (SdkResolverEventSource.Instance.IsEnabled()) SdkResolverEventSource.Instance.GetResultStop(sdk.Name, parsedSdkVersion.OriginalVersion, result?.Path, result == null ? 0 : (result.Success ? 1 : 0));
270269
}
271270
}
272271

@@ -317,121 +316,5 @@ private static bool TryGetMSBuildSdkPackageInfo(FallbackPackagePathResolver fall
317316
return true;
318317
}
319318
}
320-
321-
private static class TraceEvents
322-
{
323-
private const string EventNameGetResult = "SdkResolver/GetResult";
324-
private const string EventNameLoadSettings = "SdkResolver/LoadSettings";
325-
private const string EventNameResolve = "SdkResolver/Resolve";
326-
private const string EventNameRestorePackage = "SdkResolver/RestorePackage";
327-
328-
public static void GetResultStart(string id, string version)
329-
{
330-
var eventOptions = new EventSourceOptions
331-
{
332-
ActivityOptions = EventActivityOptions.Detachable,
333-
Keywords = NuGetEventSource.Keywords.Performance | NuGetEventSource.Keywords.SdkResolver,
334-
Opcode = EventOpcode.Start
335-
};
336-
337-
NuGetEventSource.Instance.Write(EventNameGetResult, eventOptions, new GetResultStartEventData(id, version));
338-
}
339-
340-
public static void GetResultStop(string id, string version, SdkResult result)
341-
{
342-
var eventOptions = new EventSourceOptions
343-
{
344-
ActivityOptions = EventActivityOptions.Detachable,
345-
Keywords = NuGetEventSource.Keywords.Performance | NuGetEventSource.Keywords.SdkResolver,
346-
Opcode = EventOpcode.Stop
347-
};
348-
349-
NuGetEventSource.Instance.Write(EventNameGetResult, eventOptions, new GetResultStopEventData(id, version, InstallPath: result?.Path, Success: result == null ? false : result.Success));
350-
}
351-
352-
public static void LoadSettingsStart()
353-
{
354-
var eventOptions = new EventSourceOptions
355-
{
356-
ActivityOptions = EventActivityOptions.Detachable,
357-
Keywords = NuGetEventSource.Keywords.Performance | NuGetEventSource.Keywords.SdkResolver,
358-
Opcode = EventOpcode.Start
359-
};
360-
361-
NuGetEventSource.Instance.Write(EventNameLoadSettings, eventOptions);
362-
}
363-
364-
public static void LoadSettingsStop()
365-
{
366-
var eventOptions = new EventSourceOptions
367-
{
368-
ActivityOptions = EventActivityOptions.Detachable,
369-
Keywords = NuGetEventSource.Keywords.Performance | NuGetEventSource.Keywords.SdkResolver,
370-
Opcode = EventOpcode.Stop
371-
};
372-
373-
NuGetEventSource.Instance.Write(EventNameLoadSettings, eventOptions);
374-
}
375-
376-
public static void ResolveStart(SdkReference sdkReference)
377-
{
378-
var eventOptions = new EventSourceOptions
379-
{
380-
ActivityOptions = EventActivityOptions.Detachable,
381-
Keywords = NuGetEventSource.Keywords.SdkResolver | NuGetEventSource.Keywords.Performance,
382-
Opcode = EventOpcode.Start
383-
};
384-
385-
NuGetEventSource.Instance.Write(EventNameResolve, eventOptions, new ResolveEventData(sdkReference.Name, sdkReference.Version));
386-
}
387-
388-
public static void ResolveStop(SdkReference sdkReference)
389-
{
390-
var eventData = new EventSourceOptions
391-
{
392-
ActivityOptions = EventActivityOptions.Detachable,
393-
Keywords = NuGetEventSource.Keywords.SdkResolver | NuGetEventSource.Keywords.Performance,
394-
Opcode = EventOpcode.Stop
395-
};
396-
397-
NuGetEventSource.Instance.Write(EventNameResolve, eventData, new ResolveEventData(sdkReference.Name, sdkReference.Version));
398-
}
399-
400-
public static void RestorePackageStart(LibraryIdentity libraryIdentity)
401-
{
402-
var eventOptions = new EventSourceOptions
403-
{
404-
ActivityOptions = EventActivityOptions.Detachable,
405-
Keywords = NuGetEventSource.Keywords.Performance | NuGetEventSource.Keywords.SdkResolver,
406-
Opcode = EventOpcode.Start
407-
};
408-
409-
NuGetEventSource.Instance.Write(EventNameRestorePackage, eventOptions, new RestorePackageEventData(libraryIdentity.Name, libraryIdentity.Version.OriginalVersion));
410-
}
411-
412-
public static void RestorePackageStop(LibraryIdentity libraryIdentity)
413-
{
414-
var eventOptions = new EventSourceOptions
415-
{
416-
ActivityOptions = EventActivityOptions.Detachable,
417-
Keywords = NuGetEventSource.Keywords.Performance | NuGetEventSource.Keywords.SdkResolver,
418-
Opcode = EventOpcode.Stop
419-
};
420-
421-
NuGetEventSource.Instance.Write(EventNameRestorePackage, eventOptions, new RestorePackageEventData(libraryIdentity.Name, libraryIdentity.Version.OriginalVersion));
422-
}
423-
424-
[EventData]
425-
private record struct GetResultStartEventData(string Id, string Version);
426-
427-
[EventData]
428-
private record struct GetResultStopEventData(string Id, string Version, string InstallPath, bool Success);
429-
430-
[EventData]
431-
private record struct ResolveEventData(string Name, string Version);
432-
433-
[EventData]
434-
private record struct RestorePackageEventData(string Id, string Version);
435-
}
436319
}
437320
}

0 commit comments

Comments
 (0)