/// <inheritdoc /> public IReservoirSnapshot GetSnapshot() { return(new WavefrontHistogramSnapshot( wavefrontHistogram.GetSnapshot(), WavefrontHistogramImpl.Serialize(wavefrontHistogram.FlushDistributions()) )); }
public void TestSnapshot() { var currentTime = DateTime.UtcNow; long clockMillis() => DateTimeUtils.UnixTimeMilliseconds(currentTime); var powHistogram = CreatePowHistogram(clockMillis); var rangeHistogram = CreateRangeHistogram(clockMillis); var multiThreadedHistogram = CreateMultiThreadedHistogram(clockMillis); var emptyHistogram = new WavefrontHistogramImpl(clockMillis); currentTime = currentTime.AddMinutes(1); var powSnapshot = powHistogram.GetSnapshot(); var rangeSnapshot = rangeHistogram.GetSnapshot(); var multiThreadedSnapshot = multiThreadedHistogram.GetSnapshot(); var emptySnapshot = emptyHistogram.GetSnapshot(); // Test snapshot for the pow histogram Assert.Equal(9, powSnapshot.Count); Assert.Equal(100000, powSnapshot.Max); Assert.Equal(13457.9, powSnapshot.Mean, 1); Assert.Equal(0.1, powSnapshot.Min); Assert.Equal(7, powSnapshot.Size); Assert.Equal(121121.1, powSnapshot.Sum); Assert.Equal( PowDict.SelectMany(entry => Enumerable.Repeat(entry.Key, entry.Value)), powSnapshot.Values ); Assert.Equal(100, powSnapshot.GetValue(0.5d)); // Test snapshot for the range histogram Assert.Equal(1000, rangeSnapshot.Count); Assert.Equal(1000, rangeSnapshot.Max); Assert.Equal(500.5, rangeSnapshot.Mean); Assert.Equal(1, rangeSnapshot.Min); Assert.Equal(288.6749902572095, rangeSnapshot.StdDev, 0); Assert.Equal(500500, rangeSnapshot.Sum); Assert.InRange(rangeSnapshot.GetValue(0.5d), 490.5, 510.5); Assert.InRange(rangeSnapshot.GetValue(0.75d), 745.5, 755.5); Assert.InRange(rangeSnapshot.GetValue(0.95d), 949, 952); Assert.InRange(rangeSnapshot.GetValue(0.98d), 980, 981); Assert.InRange(rangeSnapshot.GetValue(0.99d), 990, 991); Assert.InRange(rangeSnapshot.GetValue(0.999d), 999, 1000); // Test snapshot for multi-threaded histogram Assert.Equal(100, multiThreadedSnapshot.Count); Assert.Equal(28.86607004772212, multiThreadedSnapshot.StdDev, 0); Assert.Equal(5050, multiThreadedSnapshot.Sum); Assert.Equal(100, multiThreadedSnapshot.GetValue(0.999d), 1); // Test snapshot for empty histogram Assert.Equal(0, emptySnapshot.StdDev); }