diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs index 1da98f36aa..fb676fe288 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs @@ -40,5 +40,9 @@ namespace Volo.Abp.AuditLogging bool? hasException = null, HttpStatusCode? httpStatusCode = null, CancellationToken cancellationToken = default); + + Task> GetAverageExecutionDurationPerDayAsync( + DateTime startDate, + DateTime endDate); } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index c60dfcc4d7..4564a6d7ae 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -122,6 +122,18 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore .WhereIf(minExecutionDuration != null && minExecutionDuration.Value > 0, auditLog => auditLog.ExecutionDuration >= minExecutionDuration); } + public async Task> GetAverageExecutionDurationPerDayAsync(DateTime startDate, DateTime endDate) + { + var result = await DbSet.AsNoTracking() + .Where(a => a.ExecutionTime < endDate.AddDays(1) && a.ExecutionTime > startDate) + .OrderBy(t => t.ExecutionTime) + .GroupBy(t => new { t.ExecutionTime.Date }) + .Select(g => new { Day = g.Min(t => t.ExecutionTime), avgExecutionTime = g.Average(t => t.ExecutionDuration) }) + .ToListAsync(); + + return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); + } + public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index cead3fa2a9..1f090f81f2 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -120,5 +120,18 @@ namespace Volo.Abp.AuditLogging.MongoDB .WhereIf(maxDuration != null && maxDuration > 0, auditLog => auditLog.ExecutionDuration <= maxDuration) .WhereIf(minDuration != null && minDuration > 0, auditLog => auditLog.ExecutionDuration >= minDuration); } + + + public async Task> GetAverageExecutionDurationPerDayAsync(DateTime startDate, DateTime endDate) + { + var result = await GetMongoQueryable() + .Where(a => a.ExecutionTime < endDate.AddDays(1) && a.ExecutionTime > startDate) + .OrderBy(t => t.ExecutionTime) + .GroupBy(t => new { t.ExecutionTime.Date }) + .Select(g => new { Day = g.Min(t => t.ExecutionTime), avgExecutionTime = g.Average(t => t.ExecutionDuration) }) + .ToListAsync(); + + return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); + } } }