diff --git a/CHANGELOG.md b/CHANGELOG.md index f29c37116e..69fc821e25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,9 @@ This changelog will be used to generate documentation on [release notes page](http://azure.microsoft.com/documentation/articles/app-insights-release-notes-dotnet/). ## Version 2.8.0 -- [Perf Improvement - Use TimeSpan instead of String for durations to avoid conversions.](https://github.com/Microsoft/ApplicationInsights-dotnet/issues/927) +- Perf Improvements + https://github.com/Microsoft/ApplicationInsights-dotnet/issues/927 + https://github.com/Microsoft/ApplicationInsights-dotnet/issues/930 ## Version 2.8.0-beta2 - [TelemetryProcessors (sampling, autocollectedmetricaggregator), TelemetryChannel (ServerTelemetryChannel) added automatically to the default ApplicationInsights.config are moved under the default telemetry sink.](https://github.com/Microsoft/ApplicationInsights-dotnet/issues/907) diff --git a/src/Microsoft.ApplicationInsights/DataContracts/DependencyTelemetry.cs b/src/Microsoft.ApplicationInsights/DataContracts/DependencyTelemetry.cs index 0d9e6dee4c..66bbd15f7c 100644 --- a/src/Microsoft.ApplicationInsights/DataContracts/DependencyTelemetry.cs +++ b/src/Microsoft.ApplicationInsights/DataContracts/DependencyTelemetry.cs @@ -9,7 +9,7 @@ namespace Microsoft.ApplicationInsights.DataContracts using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.Extensibility.Implementation; using Microsoft.ApplicationInsights.Extensibility.Implementation.External; - + using Microsoft.ApplicationInsights.Extensibility.Implementation.Metrics; using static System.Threading.LazyInitializer; /// @@ -254,8 +254,16 @@ public override bool? Success /// Learn more /// public override IDictionary Properties - { - get { return this.InternalData.properties; } + { + get + { + if (!string.IsNullOrEmpty(this.MetricExtractorInfo) && !this.InternalData.properties.ContainsKey(MetricTerms.Extraction.ProcessedByExtractors.Moniker.Key)) + { + this.InternalData.properties[MetricTerms.Extraction.ProcessedByExtractors.Moniker.Key] = this.MetricExtractorInfo; + } + + return this.InternalData.properties; + } } /// @@ -295,6 +303,15 @@ public string DependencyKind set { this.samplingPercentage = value; } } + /// + /// Gets or sets the MetricExtractorInfo. + /// + internal string MetricExtractorInfo + { + get; + set; + } + /// /// Gets the dependency operation details, if any. /// diff --git a/src/Microsoft.ApplicationInsights/DataContracts/RequestTelemetry.cs b/src/Microsoft.ApplicationInsights/DataContracts/RequestTelemetry.cs index 9915575db4..047287afcd 100644 --- a/src/Microsoft.ApplicationInsights/DataContracts/RequestTelemetry.cs +++ b/src/Microsoft.ApplicationInsights/DataContracts/RequestTelemetry.cs @@ -7,6 +7,7 @@ using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.Extensibility.Implementation; using Microsoft.ApplicationInsights.Extensibility.Implementation.External; + using Microsoft.ApplicationInsights.Extensibility.Implementation.Metrics; /// /// Encapsulates information about a web request handled by the application. @@ -165,7 +166,15 @@ public override TimeSpan Duration /// public override IDictionary Properties { - get { return this.Data.properties; } + get + { + if (!string.IsNullOrEmpty(this.MetricExtractorInfo) && !this.Data.properties.ContainsKey(MetricTerms.Extraction.ProcessedByExtractors.Moniker.Key)) + { + this.Data.properties[MetricTerms.Extraction.ProcessedByExtractors.Moniker.Key] = this.MetricExtractorInfo; + } + + return this.Data.properties; + } } /// @@ -226,6 +235,15 @@ public string Source set { this.Data.source = value; } } + /// + /// Gets or sets the MetricExtractorInfo. + /// + internal string MetricExtractorInfo + { + get; + set; + } + /// /// Deeply clones a object. /// diff --git a/src/Microsoft.ApplicationInsights/Metrics/Extensibility/AutocollectedMetricsExtraction/AutocollectedMetricsExtractor.cs b/src/Microsoft.ApplicationInsights/Metrics/Extensibility/AutocollectedMetricsExtraction/AutocollectedMetricsExtractor.cs index 96877d42fa..24602337ea 100644 --- a/src/Microsoft.ApplicationInsights/Metrics/Extensibility/AutocollectedMetricsExtraction/AutocollectedMetricsExtractor.cs +++ b/src/Microsoft.ApplicationInsights/Metrics/Extensibility/AutocollectedMetricsExtraction/AutocollectedMetricsExtractor.cs @@ -190,30 +190,31 @@ private static string GetExtractorInfo(ISpecificAutocollectedMetricsExtractor ex /// The telemetry item to be tagged. /// The string to be added to the item's properties. private static void AddExtractorInfo(ITelemetry item, string extractorInfo) - { - var itemWithProperties = item as ISupportProperties; - if (itemWithProperties == null) + { + if (item is RequestTelemetry) { - return; + var req = item as RequestTelemetry; + req.MetricExtractorInfo = ExtractionPipelineInfo(req.MetricExtractorInfo, extractorInfo); } + else if (item is DependencyTelemetry) + { + var dep = item as DependencyTelemetry; + dep.MetricExtractorInfo = ExtractionPipelineInfo(dep.MetricExtractorInfo, extractorInfo); + } + } - string extractionPipelineInfo; - bool hasPrevInfo = itemWithProperties.Properties.TryGetValue(MetricTerms.Extraction.ProcessedByExtractors.Moniker.Key, out extractionPipelineInfo); - - if (false == hasPrevInfo) + private static string ExtractionPipelineInfo(string extractionPipelineInfo, string extractorInfo) + { + if (extractionPipelineInfo?.Length > 0) { - extractionPipelineInfo = String.Empty; + extractionPipelineInfo = extractionPipelineInfo + "; "; } else { - if (extractionPipelineInfo.Length > 0) - { - extractionPipelineInfo = extractionPipelineInfo + "; "; - } + extractionPipelineInfo = String.Empty; } - - extractionPipelineInfo = extractionPipelineInfo + extractorInfo; - itemWithProperties.Properties[MetricTerms.Extraction.ProcessedByExtractors.Moniker.Key] = extractionPipelineInfo; + + return extractionPipelineInfo + extractorInfo; } ///