Ejemplo n.º 1
0
        public void ShouldFlushOnDispose()
        {
            var clock = new DummyClock("11:00:00.000");
            var sink  = new DictionarySink();

            using (var e = new MetricsCollector(sink, clock, oneSecond, TimeSpan.FromSeconds(5), false))
            {
                clock.Set("12:00:01.500");

                // 10000 events per second for 10 virtual seconds, using 3 threads
                var options = new ParallelOptions {
                    MaxDegreeOfParallelism = 5
                };
                for (int i = 0; i < 10; i++)
                {
                    Parallel.For(0, 10000, options, (j, s) =>
                    {
                        e.IncrementCounter($"myevent-{Thread.CurrentThread.ManagedThreadId}");
                    });
                    clock.Advance(oneSecond);
                }
            }

            // Dispose method on event collect ensures all events are flushed immediately
            Assert.Equal(100000, sink.Counters.Values.Sum());
        }
Ejemplo n.º 2
0
        public void ShouldNotCrashWhenEventRecordAfterDisposed()
        {
            var sink = new DictionarySink();
            var e    = new MetricsCollector(sink, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5));

            e.IncrementCounter("myCounter");
            e.Dispose();
            Assert.Single(sink.Counters);

            e.IncrementCounter("myCounter");
        }
Ejemplo n.º 3
0
        public void ShouldCountEventsFromMultipleThreads()
        {
            var sink = new DictionarySink();

            using (var e = new MetricsCollector(sink, TimeSpan.FromMilliseconds(100), TimeSpan.FromMilliseconds(200)))
            {
                var options = new ParallelOptions {
                    MaxDegreeOfParallelism = 5
                };
                Parallel.For(0, 100000, options, (j, s) =>
                {
                    e.IncrementCounter($"mycounter-{Thread.CurrentThread.ManagedThreadId}");
                });
            }
            Assert.Equal(100000, sink.Counters.Values.Sum());
        }
Ejemplo n.º 4
0
        public void HistogramTimingTest()
        {
            var sink          = new DictionarySink();
            var clock         = new DummyClock("12:00:00.000");
            var windowSize    = TimeSpan.FromSeconds(1);
            var flushInterval = TimeSpan.FromSeconds(1);
            var metrics       = new MetricsCollector(sink, clock, windowSize, flushInterval, false);

            metrics.RegisterThresholds("h", new[] { 0, 10, 20 });
            metrics.RegisterThresholds("g", new[] { 30, 40 });

            var window1From = clock.Current.RoundDown(windowSize);
            var window1To   = window1From + windowSize;

            metrics.IncrementBucket("h", 0);
            clock.Advance(windowSize);
            sink.Buckets[new Metric("h", window1From, window1From + windowSize)][(0, 10)].Should().Be(1);
Ejemplo n.º 5
0
        public void Tests()
        {
            var sink          = new DictionarySink();
            var clock         = new DummyClock("12:00:00");
            var windowSize    = TimeSpan.FromSeconds(1);
            var flushInterval = TimeSpan.FromSeconds(5);

            var metrics = new MetricsCollector(sink, clock, windowSize, flushInterval, false);

            using (metrics.Profile("session1", "block1"))
            {
                Thread.Sleep(20);
            }

            for (int i = 0; i < 100; i++)
            {
                metrics.StartInterval("session1", "block2");
                metrics.EndInterval("session1", "block2");
            }
        }
Ejemplo n.º 6
0
        public void EventShouldFlushAtMultiplesOf5000ms()
        {
            var clock = new DummyClock("11:00:00.000");

            var sink = new DictionarySink();

            using (var e = new MetricsCollector(sink, clock, oneSecond, TimeSpan.FromSeconds(5), false))
            {
                clock.Set("12:00:04.000");
                e.IncrementCounter("myevent");

                // should not fire event yet
                clock.Set("12:00:04.999");
                Assert.Empty(sink.Counters);

                clock.Set("12:00:05.000");

                // should now fire event on another thread and then return
                Assert.Single(sink.Counters);
            }
        }