예제 #1
0
        public void FetchAllLatencyMetricsSuccessfully()
        {
            //Arrange
            var timers = new ConcurrentDictionary <string, ILatencyTracker>();
            var cache  = new InMemoryMetricsCache(null, timers);

            cache.SetLatency("time_test", 1);
            cache.SetLatency("time_test", 9);
            cache.SetLatency("time_test", 8);
            cache.SetLatency("time_test_2", 8);

            //Act
            var result = cache.FetchAllLatencyTrackersAndClear();

            //Assert
            Assert.IsNotNull(result);
            var result1 = result.First(x => x.Key == "time_test");

            Assert.IsNotNull(result1);
            Assert.AreEqual(1, result1.Value.GetLatency(0));
            Assert.AreEqual(2, result1.Value.GetLatency(6));
            long[] latencies = result1.Value.GetLatencies();
            Assert.AreEqual(3, latencies.Sum());
            var result2 = result.First(x => x.Key == "time_test_2");

            Assert.IsNotNull(result2);
            Assert.AreEqual(1, result2.Value.GetLatency(6));
            Assert.AreEqual(0, timers.Count());
        }
예제 #2
0
        public void FetchAllCountMetricsSuccessfully()
        {
            //Arrange
            var counters = new ConcurrentDictionary <string, Counter>();
            var cache    = new InMemoryMetricsCache(counters);

            cache.IncrementCount("counter_test", 150);
            cache.IncrementCount("counter_test_2", 123);
            cache.IncrementCount("counter_test_2", 1);

            //Act
            var result = cache.FetchAllCountersAndClear();

            //Assert
            Assert.IsNotNull(result);
            var result1 = result.First(x => x.Key == "counter_test");

            Assert.IsNotNull(result1);
            Assert.AreEqual(150, result1.Value.GetDelta());
            var result2 = result.First(x => x.Key == "counter_test_2");

            Assert.IsNotNull(result2);
            Assert.AreEqual(124, result2.Value.GetDelta());
            Assert.AreEqual(0, counters.Count());
        }
예제 #3
0
        public void SendGaugeMetricsSuccessfully()
        {
            //Arrange
            var gauges = new ConcurrentDictionary <string, long>();
            var metricsApiClientMock = new Mock <IMetricsSdkApiClient>();
            var cache      = new InMemoryMetricsCache(null, null, gauges);
            var metricsLog = new InMemoryMetricsLog(metricsApiClientMock.Object, cache, 1);

            //Act
            metricsLog.Gauge("gauge_test", 1234);

            //Assert
            metricsApiClientMock.Verify(x => x.SendGaugeMetrics(It.IsAny <string>()));
        }
예제 #4
0
        public void SendCountMetricsSuccessfully()
        {
            //Arrange
            var counters             = new ConcurrentDictionary <string, Counter>();
            var metricsApiClientMock = new Mock <IMetricsSdkApiClient>();
            var cache      = new InMemoryMetricsCache(counters);
            var metricsLog = new InMemoryMetricsLog(metricsApiClientMock.Object, cache, 1);

            //Act
            metricsLog.Count("counter_test", 150);

            //Assert
            metricsApiClientMock.Verify(x => x.SendCountMetrics(It.IsAny <string>()));
        }
예제 #5
0
        public void SendTimeMetricsSuccessfully()
        {
            //Arrange
            var timers = new ConcurrentDictionary <string, ILatencyTracker>();
            var metricsApiClientMock = new Mock <IMetricsSdkApiClient>();
            var cache      = new InMemoryMetricsCache(null, timers);
            var metricsLog = new InMemoryMetricsLog(metricsApiClientMock.Object, cache, 1, -1);

            //Act
            metricsLog.Time("time_test", 1);

            //Assert
            metricsApiClientMock.Verify(x => x.SendTimeMetrics(It.IsAny <string>()));
        }
예제 #6
0
        public void TimeShouldNotUpdateMetricIfDeltaIsLessThanZero()
        {
            //Arrange
            var timers     = new ConcurrentDictionary <string, ILatencyTracker>();
            var cache      = new InMemoryMetricsCache(null, timers);
            var metricsLog = new InMemoryMetricsLog(null, cache);

            //Act
            metricsLog.Time("time_test", -1);

            //Assert
            ILatencyTracker timer = cache.GetLatencyTracker("time_test");

            Assert.IsNull(timer);
        }
예제 #7
0
        public void CountShouldNotAddMetricIfNoNameSpecified()
        {
            //Arrange
            var counters   = new ConcurrentDictionary <string, Counter>();
            var cache      = new InMemoryMetricsCache(counters);
            var metricsLog = new InMemoryMetricsLog(null, cache);

            //Act
            metricsLog.Count("", 1);

            //Assert
            Counter counter = cache.GetCount("");

            Assert.IsNull(counter);
        }
예제 #8
0
        public void GaugeShouldNotAddMetricIfNoNameSpecified()
        {
            //Arrange
            var gauges     = new ConcurrentDictionary <string, long>();
            var cache      = new InMemoryMetricsCache(null, null, gauges);
            var metricsLog = new InMemoryMetricsLog(null, cache);

            //Act
            metricsLog.Gauge("", 1000);

            //Assert
            long gauge = cache.GetGauge("");

            Assert.AreEqual(0, gauge);
        }
예제 #9
0
        public void GaugeShouldNotUpdateMetricIfDeltaIsLessThanZero()
        {
            //Arrange
            var gauges     = new ConcurrentDictionary <string, long>();
            var cache      = new InMemoryMetricsCache(null, null, gauges);
            var metricsLog = new InMemoryMetricsLog(null, cache);

            //Act
            metricsLog.Gauge("gauge_test", -1);

            //Assert
            long gauge = cache.GetGauge("gauge_test");

            Assert.AreEqual(0, gauge);
        }
예제 #10
0
        public void TimeShouldNotAddMetricIfNoNameSpecified()
        {
            //Arrange
            var timers     = new ConcurrentDictionary <string, ILatencyTracker>();
            var cache      = new InMemoryMetricsCache(null, timers);
            var metricsLog = new InMemoryMetricsLog(null, cache);

            //Act
            metricsLog.Time("", 1000);

            //Assert
            ILatencyTracker timer = cache.GetLatencyTracker("");

            Assert.IsNull(timer);
        }
예제 #11
0
        public void SetGaugeShouldUpdateMetricWhenExisting()
        {
            //Arrange
            var gauges = new ConcurrentDictionary <string, long>();
            var cache  = new InMemoryMetricsCache(null, null, gauges);

            //Act
            cache.SetGauge("gauge_test", 1234);
            cache.SetGauge("gauge_test", 4567);

            //Assert
            long gauge = cache.GetGauge("gauge_test");

            Assert.AreEqual(4567, gauge);
        }
예제 #12
0
        public void SetGaugeShouldAddNewMetricWhenNotExisting()
        {
            //Arrange
            var gauges = new ConcurrentDictionary <string, long>();
            var cache  = new InMemoryMetricsCache(null, null, gauges);

            //Act
            cache.SetGauge("gauge_test", 1234);

            //Assert
            long gauge = cache.GetGauge("gauge_test");

            Assert.IsNotNull(gauge);
            Assert.AreEqual(1234, gauge);
        }
예제 #13
0
        public void IncrementCountShouldUpdateMetricWhenExisting()
        {
            //Arrange
            var counters = new ConcurrentDictionary <string, Counter>();
            var cache    = new InMemoryMetricsCache(counters);

            //Act
            cache.IncrementCount("counter_test", 150);
            cache.IncrementCount("counter_test", 10);

            //Assert
            Counter counter = cache.GetCount("counter_test");

            Assert.AreEqual(2, counter.GetCount());
            Assert.AreEqual(160, counter.GetDelta());
        }
예제 #14
0
        public void IncrementCountShouldAddNewMetricWhenNotExisting()
        {
            //Arrange
            var counters = new ConcurrentDictionary <string, Counter>();
            var cache    = new InMemoryMetricsCache(counters);

            //Act
            cache.IncrementCount("counter_test", 150);

            //Assert
            Counter counter = cache.GetCount("counter_test");

            Assert.IsNotNull(counter);
            Assert.AreEqual(1, counter.GetCount());
            Assert.AreEqual(150, counter.GetDelta());
        }
예제 #15
0
        public void CountShouldNotUpdateMetricIfDeltaIsLessOrEqualThanZero()
        {
            //Arrange
            var counters   = new ConcurrentDictionary <string, Counter>();
            var cache      = new InMemoryMetricsCache(counters);
            var metricsLog = new InMemoryMetricsLog(null, cache);

            //Act
            metricsLog.Count("counter_test", 0);
            metricsLog.Count("counter_test", -1);

            //Assert
            Counter counter = cache.GetCount("counter_test");

            Assert.IsNull(counter);
        }
예제 #16
0
        public void SetLatencyShouldAddNewMetricWhenNotExisting()
        {
            //Arrange
            var timers = new ConcurrentDictionary <string, ILatencyTracker>();
            var cache  = new InMemoryMetricsCache(null, timers);

            //Act
            cache.SetLatency("time_test", 1);

            //Assert
            ILatencyTracker timer = cache.GetLatencyTracker("time_test");

            Assert.IsNotNull(timer);
            Assert.AreEqual(1, timer.GetLatency(0));
            long[] latencies = timer.GetLatencies();
            Assert.AreEqual(1, latencies.Sum());
        }
        public void GaugeSucessfully()
        {
            //Arrange
            var gauges       = new ConcurrentDictionary <string, long>();
            var metricsCache = new InMemoryMetricsCache(null, null, gauges);
            var metricsLog   = new AsyncMetricsLog(null, metricsCache, 10, 3000);

            //Act
            metricsLog.Gauge("gauge_test", 1234);

            //Assert
            Thread.Sleep(2000);
            long gauge = metricsCache.GetGauge("gauge_test");

            Assert.IsNotNull(gauge);
            Assert.AreEqual(1234, gauge);
        }
        public void CountSucessfully()
        {
            //Arrange
            var counters     = new ConcurrentDictionary <string, Counter>();
            var metricsCache = new InMemoryMetricsCache(counters);
            var metricsLog   = new AsyncMetricsLog(null, metricsCache, 10, 3000);

            //Act
            metricsLog.Count("counter_test", 150);

            //Assert
            Thread.Sleep(2000);
            Counter counter = metricsCache.GetCount("counter_test");

            Assert.IsNotNull(counter);
            Assert.AreEqual(1, counter.GetCount());
            Assert.AreEqual(150, counter.GetDelta());
        }
        public void TimeSucessfully()
        {
            //Arrange
            var timers       = new ConcurrentDictionary <string, ILatencyTracker>();
            var metricsCache = new InMemoryMetricsCache(null, timers);
            var metricsLog   = new AsyncMetricsLog(null, metricsCache, 10, 3000);

            //Act
            metricsLog.Time("time_test", 1);

            //Assert
            Thread.Sleep(2000);
            ILatencyTracker timer = metricsCache.GetLatencyTracker("time_test");

            Assert.IsNotNull(timer);
            Assert.AreEqual(1, timer.GetLatency(0));
            long[] latencies = timer.GetLatencies();
            Assert.AreEqual(1, latencies.Sum());
        }
예제 #20
0
        public void TimeShouldUpdateMetricWhenExisting()
        {
            //Arrange
            var timers     = new ConcurrentDictionary <string, ILatencyTracker>();
            var cache      = new InMemoryMetricsCache(null, timers);
            var metricsLog = new InMemoryMetricsLog(null, cache);

            //Act
            metricsLog.Time("time_test", 1);
            metricsLog.Time("time_test", 9);
            metricsLog.Time("time_test", 8);

            //Assert
            ILatencyTracker timer = cache.GetLatencyTracker("time_test");

            Assert.AreEqual(1, timer.GetLatency(0));
            Assert.AreEqual(2, timer.GetLatency(6));
            long[] latencies = timer.GetLatencies();
            Assert.AreEqual(3, latencies.Sum());
        }
예제 #21
0
        public void FetchAllGaugeMetricsSuccessfully()
        {
            //Arrange
            var gauges = new ConcurrentDictionary <string, long>();
            var cache  = new InMemoryMetricsCache(null, null, gauges);

            cache.SetGauge("gauge_test", 1234);
            cache.SetGauge("gauge_test_1", 4567);

            //Act
            var result = cache.FetchAllGaugesAndClear();

            //Assert
            Assert.IsNotNull(result);
            var result1 = result.First(x => x.Key == "gauge_test");

            Assert.IsNotNull(result1);
            Assert.AreEqual(1234, result1.Value);
            var result2 = result.First(x => x.Key == "gauge_test_1");

            Assert.IsNotNull(result2);
            Assert.AreEqual(4567, result2.Value);
            Assert.AreEqual(0, gauges.Count());
        }
예제 #22
0
 private void BuildMetricsLog()
 {
     metricsCache = new InMemoryMetricsCache(new ConcurrentDictionary <string, Counter>(), new ConcurrentDictionary <string, ILatencyTracker>(), new ConcurrentDictionary <string, long>());
     metricsLog   = new AsyncMetricsLog(metricsSdkApiClient, metricsCache, MaxCountCalls, MaxTimeBetweenCalls);
 }