From a5fd66558f81fdfef87bce16eaee7114c97d24ab Mon Sep 17 00:00:00 2001 From: Dustin Campbell Date: Thu, 10 Nov 2022 12:31:56 -0800 Subject: [PATCH] Clean up some MS.AspNetCore.Razor.Common code --- eng/Versions.props | 1 + .../KeyValuePairExtensions.cs | 7 +- .../Microsoft.AspNetCore.Razor.Common.csproj | 2 +- .../Telemetry/ITelemetryReporter.cs | 11 +- .../Telemetry/TelemetryReporter.cs | 112 +++++++++--------- .../RazorLanguageServer.cs | 1 - 6 files changed, 64 insertions(+), 70 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index bb0ceca2ca..f05d8b94a0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -86,6 +86,7 @@ 6.0.0 + 6.0.0 6.0.0 6.0.0 6.0.0 diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/KeyValuePairExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/KeyValuePairExtensions.cs index 41725dfae6..d742b3506b 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/KeyValuePairExtensions.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/KeyValuePairExtensions.cs @@ -1,9 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT license. See License.txt in the project root for license information. -using System; using System.Collections.Generic; -using System.Text; namespace Microsoft.AspNetCore.Razor.Common; @@ -13,8 +11,9 @@ internal static class KeyValuePairExtensions /// Deconstructs a into out variables. Provides support /// for assignment like /// - /// var (k,v) = kvp; + /// var (k,v) = kvp; /// /// - public static void Deconstruct(this KeyValuePair kvp, out TKey key, out TValue value) => (key, value) = (kvp.Key, kvp.Value); + public static void Deconstruct(this KeyValuePair kvp, out TKey key, out TValue value) + => (key, value) = (kvp.Key, kvp.Value); } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Microsoft.AspNetCore.Razor.Common.csproj b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Microsoft.AspNetCore.Razor.Common.csproj index bc882d229f..39cea52b92 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Microsoft.AspNetCore.Razor.Common.csproj +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Microsoft.AspNetCore.Razor.Common.csproj @@ -21,7 +21,7 @@ - + diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/ITelemetryReporter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/ITelemetryReporter.cs index fd1de93b4b..e5493653a7 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/ITelemetryReporter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/ITelemetryReporter.cs @@ -4,11 +4,10 @@ using System.Collections.Immutable; using Microsoft.VisualStudio.Telemetry; -namespace Microsoft.AspNetCore.Razor.Common.Telemetry +namespace Microsoft.AspNetCore.Razor.Common.Telemetry; + +internal interface ITelemetryReporter { - internal interface ITelemetryReporter - { - void ReportEvent(string name, TelemetrySeverity severity); - void ReportEvent(string name, TelemetrySeverity severity, ImmutableDictionary values); - } + void ReportEvent(string name, TelemetrySeverity severity); + void ReportEvent(string name, TelemetrySeverity severity, ImmutableDictionary values); } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/TelemetryReporter.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/TelemetryReporter.cs index ddd18bb660..e82d389eb2 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/TelemetryReporter.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.Common/Telemetry/TelemetryReporter.cs @@ -3,78 +3,74 @@ using System; using System.Collections.Immutable; +using System.Composition; using System.Linq; -using System.Text; -using Microsoft.AspNetCore.Razor.Common; -using Microsoft.AspNetCore.Razor.Common.Telemetry; using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.Telemetry; -using System.Composition; -namespace Microsoft.AspNetCore.Razor.LanguageServer.Telemetry +namespace Microsoft.AspNetCore.Razor.Common.Telemetry; + +[Shared] +[Export(typeof(ITelemetryReporter))] +internal class TelemetryReporter : ITelemetryReporter { - [Shared] - [Export(typeof(ITelemetryReporter))] - internal class TelemetryReporter : ITelemetryReporter + private readonly ImmutableArray _telemetrySessions; + private readonly ILogger? _logger; + + [ImportingConstructor] + public TelemetryReporter([Import(AllowDefault = true)] ILoggerFactory? loggerFactory = null) + : this(ImmutableArray.Create(TelemetryService.DefaultSession), loggerFactory) { - private readonly ImmutableArray _telemetrySessions; - private readonly ILogger? _logger; + } - [ImportingConstructor] - public TelemetryReporter([Import(AllowDefault = true)]ILoggerFactory? loggerFactory = null) - : this(ImmutableArray.Create(TelemetryService.DefaultSession), loggerFactory) + public TelemetryReporter(ImmutableArray telemetrySessions, ILoggerFactory? loggerFactory) + { + _telemetrySessions = telemetrySessions; + _logger = loggerFactory?.CreateLogger(); + } + + public void ReportEvent(string name, TelemetrySeverity severity) + { + var telemetryEvent = new TelemetryEvent(GetTelemetryName(name), severity); + Report(telemetryEvent); + } + + public void ReportEvent(string name, TelemetrySeverity severity, ImmutableDictionary values) + { + var telemetryEvent = new TelemetryEvent(GetTelemetryName(name), severity); + foreach (var (propertyName, propertyValue) in values) { + telemetryEvent.Properties.Add(GetPropertyName(propertyName), new TelemetryComplexProperty(propertyValue)); } - public TelemetryReporter(ImmutableArray telemetrySessions, ILoggerFactory? loggerFactory) + Report(telemetryEvent); + } + + private static string GetTelemetryName(string name) => "razor/" + name; + private static string GetPropertyName(string name) => "razor." + name; + + private void Report(TelemetryEvent telemetryEvent) + { + try { - _telemetrySessions = telemetrySessions; - _logger = loggerFactory?.CreateLogger(); - } - - public void ReportEvent(string name, TelemetrySeverity severity) - { - var telemetryEvent = new TelemetryEvent(GetTelemetryName(name), severity); - Report(telemetryEvent); - } - - public void ReportEvent(string name, TelemetrySeverity severity, ImmutableDictionary values) - { - var telemetryEvent = new TelemetryEvent(GetTelemetryName(name), severity); - foreach (var (propertyName, propertyValue) in values) - { - telemetryEvent.Properties.Add(GetPropertyName(propertyName), new TelemetryComplexProperty(propertyValue)); - } - - Report(telemetryEvent); - } - - private static string GetTelemetryName(string name) => "razor/" + name; - private static string GetPropertyName(string name) => "razor." + name; - - private void Report(TelemetryEvent telemetryEvent) - { - try - { #if !DEBUG - foreach (var session in _telemetrySessions) - { - session.PostEvent(telemetryEvent); - } -#else - // In debug we only log to normal logging. This makes it much easier to add and debug telemetry events - // before we're ready to send them to the cloud - var name = telemetryEvent.Name; - var propertyString = string.Join(",", telemetryEvent.Properties.Select(kvp => $"[ {kvp.Key}:{kvp.Value} ]")); - _logger?.LogTrace("Telemetry Event: {name} \n Properties: {propertyString}\n", name, propertyString); -#endif - } - catch (Exception e) + foreach (var session in _telemetrySessions) { - // No need to do anything here. We failed to report telemetry - // which isn't good, but not catastrophic for a user - _logger?.LogError(e, "Failed logging telemetry event"); + session.PostEvent(telemetryEvent); } +#else + // In debug we only log to normal logging. This makes it much easier to add and debug telemetry events + // before we're ready to send them to the cloud + var name = telemetryEvent.Name; + var propertyString = string.Join(",", telemetryEvent.Properties.Select(kvp => $"[ {kvp.Key}:{kvp.Value} ]")); + _logger?.LogTrace("Telemetry Event: {name} \n Properties: {propertyString}\n", name, propertyString); +#endif + } + catch (Exception e) + { + // No need to do anything here. We failed to report telemetry + // which isn't good, but not catastrophic for a user + _logger?.LogError(e, "Failed logging telemetry event"); } } } diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServer.cs index f14ba85d4f..6be54cb57a 100644 --- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServer.cs +++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServer.cs @@ -17,7 +17,6 @@ using Microsoft.AspNetCore.Razor.LanguageServer.Implementation; using Microsoft.AspNetCore.Razor.LanguageServer.LinkedEditingRange; using Microsoft.AspNetCore.Razor.LanguageServer.Refactoring; using Microsoft.AspNetCore.Razor.LanguageServer.SignatureHelp; -using Microsoft.AspNetCore.Razor.LanguageServer.Telemetry; using Microsoft.AspNetCore.Razor.LanguageServer.WrapWithTag; using Microsoft.CodeAnalysis.Razor; using Microsoft.CodeAnalysis.Razor.Workspaces;