public async Task <long> GetMonthCallsAsync(string key, DateTime date) { var apiKey = GetKey(key); var counters = await usageTracker.GetForMonthAsync(apiKey, date); return(counters.GetInt64(CounterTotalCalls)); }
public async Task <long> GetMonthCallsAsync(string key, DateTime date, string?category, CancellationToken ct = default) { var apiKey = GetKey(key); var counters = await usageTracker.GetForMonthAsync(apiKey, date, category, ct); return(counters.GetInt64(CounterTotalCalls)); }
public async Task Should_query_calls_from_tracker() { var counters = new Counters { [ApiUsageTracker.CounterTotalCalls] = 4 }; A.CallTo(() => usageTracker.GetForMonthAsync($"{key}_API", date, category, ct)) .Returns(counters); var result = await sut.GetMonthCallsAsync(key, date, category, ct); Assert.Equal(4, result); }
public async Task Should_cache_monthly_usage() { var counters = new Counters(); A.CallTo(() => inner.GetForMonthAsync(key, date, category)) .Returns(counters); var result1 = await sut.GetForMonthAsync(key, date, category); var result2 = await sut.GetForMonthAsync(key, date, category); Assert.Same(counters, result1); Assert.Same(counters, result2); A.CallTo(() => inner.GetForMonthAsync(key, DateTime.Today, category)) .MustHaveHappenedOnceExactly(); }
public Task <Counters> GetForMonthAsync(string key, DateTime date, string?category) { Guard.NotNull(key, nameof(key)); var cacheKey = string.Join("$", "Usage", nameof(GetForMonthAsync), key, date, category); return(Cache.GetOrCreateAsync(cacheKey, entry => { entry.AbsoluteExpirationRelativeToNow = CacheDuration; return inner.GetForMonthAsync(key, date, category); })); }
public Task <Counters> GetForMonthAsync(string key, DateTime date, string?category) { Guard.NotNull(key, nameof(key)); var cacheKey = $"{typeof(CachingUsageTracker)}_UsageForMonth_{key}_{date}_{category}"; return(cache.GetOrCreateAsync(cacheKey, entry => { entry.AbsoluteExpirationRelativeToNow = CacheDuration; return inner.GetForMonthAsync(key, date, category); })); }