Пример #1
0
        public async Task <long> GetMonthCallsAsync(string key, DateTime date)
        {
            var apiKey = GetKey(key);

            var counters = await usageTracker.GetForMonthAsync(apiKey, date);

            return(counters.GetInt64(CounterTotalCalls));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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();
        }
Пример #5
0
        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);
            }));
        }
Пример #6
0
        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);
            }));
        }