internal async Task CleanupAsync(IStatisticalDataAggregator aggregator, TimeResolution resolution, DateTime startTime, CancellationToken cancel) { var retentionPeriods = aggregator.RetentionPeriods; if (resolution == TimeResolution.Minute) { var recordsRetentionTime = startTime.AddMinutes(-retentionPeriods.Momentary); //_logger.LogTrace($"Cleaning up records for {aggregator.DataType}, resolution {resolution}, starttime {startTime}, retention time {recordsRetentionTime}"); await _statDataProvider.CleanupRecordsAsync(aggregator.DataType, recordsRetentionTime, cancel) .ConfigureAwait(false); } DateTime retentionTime; switch (resolution) { case TimeResolution.Minute: retentionTime = startTime.AddHours(-retentionPeriods.Minutely); break; case TimeResolution.Hour: retentionTime = startTime.AddDays(-retentionPeriods.Hourly); break; case TimeResolution.Day: retentionTime = startTime.AddMonths(-retentionPeriods.Daily); break; case TimeResolution.Month: retentionTime = startTime.AddYears(-retentionPeriods.Monthly); break; default: throw new ArgumentOutOfRangeException(nameof(resolution), resolution, null); } //_logger.LogTrace($"Cleaning up aggregations for {aggregator.DataType}, resolution {resolution}, starttime {startTime}"); await _statDataProvider.CleanupAggregationsAsync(aggregator.DataType, resolution, retentionTime, cancel) .ConfigureAwait(false); }
private async Task <bool> TryProcessAggregationsAsync(IStatisticalDataAggregator aggregator, DateTime startTime, DateTime endTimeExclusive, TimeResolution targetResolution, CancellationToken cancel) { var resolution = targetResolution - 1; if (resolution < 0) { return(false); } var aggregations = (await _statDataProvider.LoadAggregatedUsageAsync(aggregator.DataType, resolution, startTime, endTimeExclusive, cancel)) .ToArray(); if (aggregations.Length == 0) { return(false); } //_logger.LogTrace($"Summarizing aggregations for {aggregator.DataType}, resolution: {targetResolution}, count: {aggregations.Length}"); aggregator.Summarize(aggregations); return(true); }