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;
}
///