public void CanIncrementCounter() { var metrics = new InMemoryMetricsClient(); metrics.Counter("c1"); Assert.Equal(1, metrics.GetCount("c1")); metrics.Counter("c1", 5); Assert.Equal(6, metrics.GetCount("c1")); var counter = metrics.Counters["c1"]; Assert.True(counter.Rate > 400); metrics.Gauge("g1", 2.534); Assert.Equal(2.534, metrics.GetGaugeValue("g1")); metrics.Timer("t1", 50788); var stats = metrics.GetMetricStats(); Assert.Equal(1, stats.Timings.Count); metrics.DisplayStats(_writer); }
public async void CanWaitForCounter() { var metrics = new InMemoryMetricsClient(); metrics.StartDisplayingStats(TimeSpan.FromMilliseconds(50), _writer); Task.Run(() => { Thread.Sleep(50); metrics.Counter("Test"); metrics.Counter("Test"); }); var success = await metrics.WaitForCounterAsync("Test", TimeSpan.FromMilliseconds(500), 2); Assert.True(success); Task.Run(() => { Thread.Sleep(50); metrics.Counter("Test"); }); success = await metrics.WaitForCounterAsync("Test", TimeSpan.FromMilliseconds(500)); Assert.True(success); success = await metrics.WaitForCounterAsync("Test", TimeSpan.FromMilliseconds(100)); Assert.False(success); Task.Run(() => { Thread.Sleep(50); metrics.Counter("Test", 2); }); success = await metrics.WaitForCounterAsync("Test", TimeSpan.FromMilliseconds(500), 2); Assert.True(success); success = await metrics.WaitForCounterAsync("Test", () => metrics.CounterAsync("Test"), TimeSpan.FromMilliseconds(500)); Assert.True(success); Task.Run(() => { Thread.Sleep(50); metrics.Counter("Test"); }); success = metrics.WaitForCounter("Test", TimeSpan.FromMilliseconds(500)); Assert.True(success); metrics.DisplayStats(_writer); }
public virtual void MeasureThroughput() { var cacheClient = GetCacheClient(); if (cacheClient == null) return; cacheClient.FlushAll(); const int itemCount = 10000; var metrics = new InMemoryMetricsClient(); for (int i = 0; i < itemCount; i++) { cacheClient.Set("test", 13422); cacheClient.Set("flag", true); Assert.Equal(13422, cacheClient.Get<int>("test")); Assert.Null(cacheClient.Get<int?>("test2")); Assert.True(cacheClient.Get<bool>("flag")); metrics.Counter("work"); } metrics.DisplayStats(_writer); }
public virtual void MeasureSerializerSimpleThroughput() { var cacheClient = GetCacheClient(); if (cacheClient == null) return; cacheClient.FlushAll(); const int itemCount = 10000; var metrics = new InMemoryMetricsClient(); for (int i = 0; i < itemCount; i++) { cacheClient.Set("test", new SimpleModel { Data1 = "Hello", Data2 = 12 }); var model = cacheClient.Get<SimpleModel>("test"); Assert.NotNull(model); Assert.Equal("Hello", model.Data1); Assert.Equal(12, model.Data2); metrics.Counter("work"); } metrics.DisplayStats(_writer); }
public virtual void MeasureSerializerComplexThroughput() { var cacheClient = GetCacheClient(); if (cacheClient == null) return; cacheClient.FlushAll(); const int itemCount = 10000; var metrics = new InMemoryMetricsClient(); for (int i = 0; i < itemCount; i++) { cacheClient.Set("test", new ComplexModel { Data1 = "Hello", Data2 = 12, Data3 = true, Simple = new SimpleModel { Data1 = "hi", Data2 = 13 }, Simples = new List<SimpleModel> { new SimpleModel { Data1 = "hey", Data2 = 45 }, new SimpleModel { Data1 = "next", Data2 = 3423 } }, DictionarySimples = new Dictionary<string, SimpleModel> { { "sdf", new SimpleModel { Data1 = "Sachin" } } } }); var model = cacheClient.Get<ComplexModel>("test"); Assert.NotNull(model); Assert.Equal("Hello", model.Data1); Assert.Equal(12, model.Data2); metrics.Counter("work"); } metrics.DisplayStats(_writer); }
public void MeasureWorkerThroughput() { var queue = GetQueue(retries: 3, workItemTimeout: TimeSpan.FromSeconds(2), retryDelay: TimeSpan.FromSeconds(1)); if (queue == null) return; FlushAll(); using (queue) { queue.DeleteQueue(); const int workItemCount = 1000; for (int i = 0; i < workItemCount; i++) { queue.Enqueue(new SimpleWorkItem { Data = "Hello" }); } Assert.Equal(workItemCount, queue.GetQueueStats().Queued); var countdown = new CountDownLatch(workItemCount); var metrics = new InMemoryMetricsClient(); queue.StartWorking(workItem => { Assert.Equal("Hello", workItem.Value.Data); workItem.Complete(); metrics.Counter("work"); countdown.Signal(); }); countdown.Wait(60 * 1000); metrics.DisplayStats(_output); var stats = queue.GetQueueStats(); Assert.Equal(workItemCount, stats.Dequeued); Assert.Equal(workItemCount, stats.Completed); Assert.Equal(0, stats.Queued); Trace.WriteLine(CountAllKeys()); } }
public void MeasureThroughputWithRandomFailures() { var queue = GetQueue(retries: 3, workItemTimeout: TimeSpan.FromSeconds(2), retryDelay: TimeSpan.Zero); if (queue == null) return; FlushAll(); using (queue) { queue.DeleteQueue(); const int workItemCount = 1000; for (int i = 0; i < workItemCount; i++) { queue.Enqueue(new SimpleWorkItem { Data = "Hello" }); } Assert.Equal(workItemCount, queue.GetQueueStats().Queued); var metrics = new InMemoryMetricsClient(); var workItem = queue.Dequeue(TimeSpan.Zero); while (workItem != null) { Assert.Equal("Hello", workItem.Value.Data); if (RandomData.GetBool(10)) workItem.Abandon(); else workItem.Complete(); metrics.Counter("work"); workItem = queue.Dequeue(TimeSpan.FromMilliseconds(100)); } metrics.DisplayStats(_output); var stats = queue.GetQueueStats(); Assert.True(stats.Dequeued >= workItemCount); Assert.Equal(workItemCount, stats.Completed + stats.Deadletter); Assert.Equal(0, stats.Queued); Trace.WriteLine(CountAllKeys()); } }
public void CanDisplayStatsMultithreaded() { var metrics = new InMemoryMetricsClient(); metrics.StartDisplayingStats(TimeSpan.FromMilliseconds(10), _writer); Parallel.For(0, 100, i => { metrics.Counter("Test"); Thread.Sleep(50); }); }