From 7ca6b9c74d8b403ae04eddf49a9416eb7736f6b1 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Thu, 4 May 2017 19:49:48 +0200 Subject: [PATCH] Monthly call usage. --- .../UsageTracking/BackgroundUsageTracker.cs | 12 +++++++ .../UsageTracking/IUsageTracker.cs | 2 ++ .../BackgroundUsageTrackerTests.cs | 34 +++++++++++++++++-- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs b/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs index 6cbefe0c8..4bee1df6a 100644 --- a/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs +++ b/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs @@ -121,5 +121,17 @@ namespace Squidex.Infrastructure.UsageTracking return result; } + + public async Task GetMonthlyCalls(string key, DateTime date) + { + ThrowIfDisposed(); + + var dateFrom = new DateTime(date.Year, date.Month, 1); + var dateTo = dateFrom.AddMonths(1).AddDays(-1); + + var originalUsages = await usageStore.FindAsync(key, dateFrom, dateTo); + + return originalUsages.Sum(x => x.TotalCount); + } } } diff --git a/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs b/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs index 13015f7e1..da4a8f45e 100644 --- a/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs +++ b/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs @@ -16,6 +16,8 @@ namespace Squidex.Infrastructure.UsageTracking { Task TrackAsync(string key, long elapsedMs); + Task GetMonthlyCalls(string key, DateTime date); + Task> FindAsync(string key, DateTime fromDate, DateTime toDate); } } diff --git a/tests/Squidex.Infrastructure.Tests/UsageTracking/BackgroundUsageTrackerTests.cs b/tests/Squidex.Infrastructure.Tests/UsageTracking/BackgroundUsageTrackerTests.cs index 6467f3223..07b96411f 100644 --- a/tests/Squidex.Infrastructure.Tests/UsageTracking/BackgroundUsageTrackerTests.cs +++ b/tests/Squidex.Infrastructure.Tests/UsageTracking/BackgroundUsageTrackerTests.cs @@ -43,14 +43,42 @@ namespace Squidex.Infrastructure.UsageTracking return Assert.ThrowsAsync(() => sut.FindAsync("key1", DateTime.Today, DateTime.Today.AddDays(1))); } - + + [Fact] + public Task Should_throw_if_querying_montly_usage_on_disposed_object() + { + sut.Dispose(); + + return Assert.ThrowsAsync(() => sut.GetMonthlyCalls("key1", DateTime.Today)); + } + + [Fact] + public async Task Should_sum_up_when_getting_monthly_calls() + { + var date = new DateTime(2016, 1, 15); + + IReadOnlyList originalData = new List + { + new StoredUsage(date.AddDays(1), 10, 15), + new StoredUsage(date.AddDays(3), 13, 18), + new StoredUsage(date.AddDays(5), 15, 20), + new StoredUsage(date.AddDays(7), 17, 22) + }; + + usageStore.Setup(x => x.FindAsync("key", new DateTime(2016, 1, 1), new DateTime(2016, 1, 31))).Returns(Task.FromResult(originalData)); + + var result = await sut.GetMonthlyCalls("key", date); + + Assert.Equal(55, result); + } + [Fact] public async Task Should_fill_missing_days() { var dateFrom = DateTime.Today; var dateTo = DateTime.Today.AddDays(7); - IReadOnlyList originalDate = new List + IReadOnlyList originalData = new List { new StoredUsage(dateFrom.AddDays(1), 10, 15), new StoredUsage(dateFrom.AddDays(3), 13, 18), @@ -58,7 +86,7 @@ namespace Squidex.Infrastructure.UsageTracking new StoredUsage(dateFrom.AddDays(7), 17, 22) }; - usageStore.Setup(x => x.FindAsync("key", dateFrom, dateTo)).Returns(Task.FromResult(originalDate)); + usageStore.Setup(x => x.FindAsync("key", dateFrom, dateTo)).Returns(Task.FromResult(originalData)); var result = await sut.FindAsync("key", dateFrom, dateTo);