public void Flush() { { var metricsCollector = new MemoryMetricTelemetryPipeline(); var manager = new MetricManager(metricsCollector); manager.Flush(); Assert.AreEqual(0, metricsCollector.Count); TestUtil.CompleteDefaultAggregationCycle(manager); } { var metricsCollector = new MemoryMetricTelemetryPipeline(); var manager = new MetricManager(metricsCollector); IMetricSeriesConfiguration measurementConfig = new MetricSeriesConfigurationForMeasurement(restrictToUInt32Values: false); MetricSeries series1 = manager.CreateNewSeries("Test Metrics", "Measurement 1", measurementConfig); MetricSeries series2 = manager.CreateNewSeries("Test Metrics", "Measurement 2", measurementConfig); series1.TrackValue(1); series1.TrackValue(1); series1.TrackValue(1); series2.TrackValue(-1); series2.TrackValue(-1); series2.TrackValue(-1); manager.Flush(); Assert.AreEqual(2, metricsCollector.Count); Assert.AreEqual(1, metricsCollector.Where((item) => item.MetricId.Equals("Measurement 1")).Count()); Assert.AreEqual("Test Metrics", (metricsCollector.First((item) => item.MetricId.Equals("Measurement 1"))).MetricNamespace); Assert.AreEqual(3, (metricsCollector.First((item) => item.MetricId.Equals("Measurement 1"))).Data["Count"]); Assert.AreEqual(3.0, (metricsCollector.First((item) => item.MetricId.Equals("Measurement 1"))).Data["Sum"]); Assert.AreEqual(1, metricsCollector.Where((item) => item.MetricId.Equals("Measurement 2")).Count()); Assert.AreEqual("Test Metrics", (metricsCollector.First((item) => item.MetricId.Equals("Measurement 2"))).MetricNamespace); Assert.AreEqual(3, (metricsCollector.First((item) => item.MetricId.Equals("Measurement 2"))).Data["Count"]); Assert.AreEqual(-3.0, (metricsCollector.First((item) => item.MetricId.Equals("Measurement 2"))).Data["Sum"]); metricsCollector.Clear(); Assert.AreEqual(0, metricsCollector.Count); manager.Flush(); Assert.AreEqual(0, metricsCollector.Count); TestUtil.CompleteDefaultAggregationCycle(manager); } }
public void TrackValueDouble() { DateTimeOffset startTS = DateTimeOffset.Now; var aggregateCollector = new MemoryMetricTelemetryPipeline(); var manager = new MetricManager(aggregateCollector); IMetricSeriesConfiguration config = new MetricSeriesConfigurationForMeasurement(restrictToUInt32Values: false); MetricSeries series = manager.CreateNewSeries("ns", "Foo Bar", config); Thread.Sleep(1500); series.TrackValue(0.4); series.TrackValue(0.8); series.TrackValue(-0.04); Assert.AreEqual(0, aggregateCollector.Count); manager.Flush(); Assert.AreEqual(1, aggregateCollector.Count); DateTimeOffset endTSRounded = DateTimeOffset.Now; endTSRounded = new DateTimeOffset(endTSRounded.Year, endTSRounded.Month, endTSRounded.Day, endTSRounded.Hour, endTSRounded.Minute, endTSRounded.Second, 0, endTSRounded.Offset); TestUtil.ValidateNumericAggregateValues(aggregateCollector[0], ns: "ns", name: "Foo Bar", count: 3, sum: 1.16, max: 0.8, min: -0.04, stdDev: 0.343058142140496, aggKindMoniker: "Microsoft.Azure.Measurement"); // Timestamp checks have to be approximate, since we have no possibilityt to get exact timetamps snapped internally. // The following might break sometimes! // There is a little chance that second boundary is crossed between startTS and the aggregation timestamps are snapped. // rerun the test if it happens. Assert.AreEqual( new DateTimeOffset(startTS.Year, startTS.Month, startTS.Day, startTS.Hour, startTS.Minute, startTS.Second, 0, startTS.Offset), aggregateCollector[0].AggregationPeriodStart); const int millisecsTollerance = 50; long durationMs = (long)aggregateCollector[0].AggregationPeriodDuration.TotalMilliseconds; Assert.IsTrue(Math.Abs(durationMs - (endTSRounded - aggregateCollector[0].AggregationPeriodStart).TotalMilliseconds) < millisecsTollerance); Assert.AreEqual(1, aggregateCollector.Count); aggregateCollector.Clear(); Assert.AreEqual(0, aggregateCollector.Count); manager.Flush(); Assert.AreEqual(0, aggregateCollector.Count); TestUtil.CompleteDefaultAggregationCycle(manager); }