Browse Source

Do not track immediately.

pull/95/head
Sebastian Stehle 8 years ago
parent
commit
9ed42bb6ab
  1. 21
      src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs
  2. 27
      src/Squidex.Infrastructure/UsageTracking/Usage.cs
  3. 3
      tests/Squidex.Infrastructure.Tests/UsageTracking/BackgroundUsageTrackerTests.cs

21
src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs

@ -20,29 +20,12 @@ namespace Squidex.Infrastructure.UsageTracking
{ {
public sealed class BackgroundUsageTracker : DisposableObjectBase, IUsageTracker public sealed class BackgroundUsageTracker : DisposableObjectBase, IUsageTracker
{ {
private const int Intervall = 60 * 1000;
private readonly IUsageStore usageStore; private readonly IUsageStore usageStore;
private readonly ISemanticLog log; private readonly ISemanticLog log;
private readonly CompletionTimer timer; private readonly CompletionTimer timer;
private ConcurrentDictionary<string, Usage> usages = new ConcurrentDictionary<string, Usage>(); private ConcurrentDictionary<string, Usage> usages = new ConcurrentDictionary<string, Usage>();
public sealed class Usage
{
public readonly double Count;
public readonly double ElapsedMs;
public Usage(double elapsed, double count)
{
ElapsedMs = elapsed;
Count = count;
}
public Usage Add(double elapsed, double weight)
{
return new Usage(ElapsedMs + elapsed, Count + weight);
}
}
public BackgroundUsageTracker(IUsageStore usageStore, ISemanticLog log) public BackgroundUsageTracker(IUsageStore usageStore, ISemanticLog log)
{ {
Guard.NotNull(usageStore, nameof(usageStore)); Guard.NotNull(usageStore, nameof(usageStore));
@ -52,7 +35,7 @@ namespace Squidex.Infrastructure.UsageTracking
this.log = log; this.log = log;
timer = new CompletionTimer(60 * 1000, ct => TrackAsync()); timer = new CompletionTimer(Intervall, ct => TrackAsync(), Intervall);
} }
protected override void DisposeObject(bool disposing) protected override void DisposeObject(bool disposing)

27
src/Squidex.Infrastructure/UsageTracking/Usage.cs

@ -0,0 +1,27 @@
// ==========================================================================
// Usage.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
namespace Squidex.Infrastructure.UsageTracking
{
public sealed class Usage
{
public readonly double Count;
public readonly double ElapsedMs;
public Usage(double elapsed, double count)
{
ElapsedMs = elapsed;
Count = count;
}
public Usage Add(double elapsed, double weight)
{
return new Usage(ElapsedMs + elapsed, Count + weight);
}
}
}

3
tests/Squidex.Infrastructure.Tests/UsageTracking/BackgroundUsageTrackerTests.cs

@ -142,9 +142,6 @@ namespace Squidex.Infrastructure.UsageTracking
await sut.TrackAsync("key3", 0.5, 6000); await sut.TrackAsync("key3", 0.5, 6000);
sut.Next(); sut.Next();
await Task.Delay(100);
sut.Dispose(); sut.Dispose();
A.CallTo(() => usageStore.TrackUsagesAsync(today, "key1", 1.0, 1000)).MustHaveHappened(); A.CallTo(() => usageStore.TrackUsagesAsync(today, "key1", 1.0, 1000)).MustHaveHappened();

Loading…
Cancel
Save