/// <summary> /// Adds a value to the time series. /// </summary> /// <param name="value">Metric value.</param> public void Track(double value) { SimpleMetricStatisticsAggregator aggregator = this.manager.GetStatisticsAggregator(this); aggregator.Track(value); this.ForwardToProcessors(value); }
/// <summary> /// Generates telemetry object based on the metric aggregator. /// </summary> /// <param name="metric">Metric definition.</param> /// <param name="statistics">Metric aggregator statistics calculated for a period of time.</param> /// <returns>Metric telemetry object resulting from aggregation.</returns> private static MetricTelemetry CreateAggregatedMetricTelemetry(Metric metric, SimpleMetricStatisticsAggregator statistics) { var telemetry = new MetricTelemetry( metric.Name, statistics.Count, statistics.Sum, statistics.Min, statistics.Max, statistics.StandardDeviation); if (metric.Dimensions != null) { foreach (KeyValuePair <string, string> property in metric.Dimensions) { #if !NETSTANDARD1_6 if (string.Compare(property.Key, FirstChanceExceptionStatisticsTelemetryModule.OperationNameTag, StringComparison.Ordinal) == 0) { if (string.IsNullOrEmpty(property.Value) == false) { telemetry.Context.Operation.Name = property.Value; } } else #endif { telemetry.Properties.Add(property); } } } // add a header allowing to distinguish metrics // built using metric manager from other metrics telemetry.Context.GetInternalContext().SdkVersion = sdkVersionPropertyValue; return(telemetry); }