public async Task CanIncrementCounter() { var metrics = new InMemoryMetricsClient(); await metrics.CounterAsync("c1"); Assert.Equal(1, metrics.GetCount("c1")); await metrics.CounterAsync("c1", 5); Assert.Equal(6, metrics.GetCount("c1")); var counter = metrics.Counters["c1"]; Assert.True(counter.Rate > 400); await metrics.GaugeAsync("g1", 2.534); Assert.Equal(2.534, metrics.GetGaugeValue("g1")); await metrics.TimerAsync("t1", 50788); var stats = metrics.GetMetricStats(); Assert.Equal(1, stats.Timings.Count); metrics.DisplayStats(_writer); }
public virtual async Task CanRunMultipleQueueJobs() { const int jobCount = 5; const int workItemCount = 100; var metrics = new InMemoryMetricsClient(); metrics.StartDisplayingStats(TimeSpan.FromSeconds(1), _writer); var queues = new List<IQueue<SampleQueueWorkItem>>(); for (int i = 0; i < jobCount; i++) { var q = GetSampleWorkItemQueue(retries: 3, retryDelay: TimeSpan.FromSeconds(1)); await q.DeleteQueueAsync(); q.AttachBehavior(new MetricsQueueBehavior<SampleQueueWorkItem>(metrics, "test")); queues.Add(q); } var enqueueTask = Run.InParallel(workItemCount, async index => { var queue = queues[RandomData.GetInt(0, jobCount - 1)]; await queue.EnqueueAsync(new SampleQueueWorkItem { Created = DateTime.Now, Path = RandomData.GetString() }); }); var cancellationTokenSource = new CancellationTokenSource(); await Run.InParallel(jobCount, async index => { var queue = queues[index - 1]; var job = new SampleQueueJob(queue, metrics); await job.RunUntilEmptyAsync(cancellationTokenSource.Token); cancellationTokenSource.Cancel(); }); await enqueueTask; var queueStats = new List<QueueStats>(); for (int i = 0; i < queues.Count; i++) { var stats = await queues[i].GetQueueStatsAsync(); Logger.Info().Message($"Queue#{i}: Working: {stats.Working} Completed: {stats.Completed} Abandoned: {stats.Abandoned} Error: {stats.Errors} Deadletter: {stats.Deadletter}").Write(); queueStats.Add(stats); } metrics.DisplayStats(_writer); Assert.Equal(metrics.GetCount("completed"), queueStats.Sum(s => s.Completed)); Assert.InRange(queueStats.Sum(s => s.Completed), 0, workItemCount); }