Implement TimeProvider injection for deterministic timestamps across various services and modules

This commit is contained in:
master
2026-01-11 10:12:12 +02:00
parent 7f7eb8b228
commit f6ef1ef337
10 changed files with 54 additions and 18 deletions

View File

@@ -48,19 +48,22 @@ public sealed class KpiCollector : IKpiCollector
private readonly IVerdictRepository _verdictRepo;
private readonly IReplayRepository _replayRepo;
private readonly ILogger<KpiCollector> _logger;
private readonly TimeProvider _timeProvider;
public KpiCollector(
IKpiRepository repository,
IFindingRepository findingRepo,
IVerdictRepository verdictRepo,
IReplayRepository replayRepo,
ILogger<KpiCollector> logger)
ILogger<KpiCollector> logger,
TimeProvider? timeProvider = null)
{
_repository = repository;
_findingRepo = findingRepo;
_verdictRepo = verdictRepo;
_replayRepo = replayRepo;
_logger = logger;
_timeProvider = timeProvider ?? TimeProvider.System;
}
/// <inheritdoc />
@@ -200,7 +203,7 @@ public sealed class KpiCollector : IKpiCollector
BreachesByEnvironment = breaches,
OverridesGranted = overrides.Count,
AvgOverrideAgeDays = overrides.Any()
? (decimal)overrides.Average(o => (DateTimeOffset.UtcNow - o.GrantedAt).TotalDays)
? (decimal)overrides.Average(o => (_timeProvider.GetUtcNow() - o.GrantedAt).TotalDays)
: 0
};
}