diff --git a/src/Admin/Jobs/DatabaseExpiredGrantsJob.cs b/src/Admin/Jobs/DatabaseExpiredGrantsJob.cs new file mode 100644 index 0000000000..099c6272bf --- /dev/null +++ b/src/Admin/Jobs/DatabaseExpiredGrantsJob.cs @@ -0,0 +1,27 @@ +using System; +using System.Threading.Tasks; +using Bit.Core.Jobs; +using Bit.Core.Repositories; +using Microsoft.Extensions.Logging; +using Quartz; + +namespace Bit.Admin.Jobs +{ + public class DatabaseExpiredGrantsJob : BaseJob + { + private readonly IMaintenanceRepository _maintenanceRepository; + + public DatabaseExpiredGrantsJob( + IMaintenanceRepository maintenanceRepository, + ILogger logger) + : base(logger) + { + _maintenanceRepository = maintenanceRepository; + } + + protected async override Task ExecuteJobAsync(IJobExecutionContext context) + { + await _maintenanceRepository.DeleteExpiredGrantsAsync(); + } + } +} diff --git a/src/Admin/Jobs/JobsHostedService.cs b/src/Admin/Jobs/JobsHostedService.cs index 3736e3d7f5..bca039a578 100644 --- a/src/Admin/Jobs/JobsHostedService.cs +++ b/src/Admin/Jobs/JobsHostedService.cs @@ -19,6 +19,10 @@ namespace Bit.Admin.Jobs public override async Task StartAsync(CancellationToken cancellationToken) { + var everyFridayAt1145pmTrigger = TriggerBuilder.Create() + .StartNow() + .WithCronSchedule("0 45 23 ? * FRI") + .Build(); var everySaturdayAtMidnightTrigger = TriggerBuilder.Create() .StartNow() .WithCronSchedule("0 0 0 ? * SAT") @@ -30,6 +34,7 @@ namespace Bit.Admin.Jobs Jobs = new List> { + new Tuple(typeof(DatabaseExpiredGrantsJob), everyFridayAt1145pmTrigger), new Tuple(typeof(DatabaseUpdateStatisticsJob), everySaturdayAtMidnightTrigger), new Tuple(typeof(DatabaseRebuildlIndexesJob), everySundayAtMidnightTrigger) }; @@ -41,6 +46,7 @@ namespace Bit.Admin.Jobs { services.AddTransient(); services.AddTransient(); + services.AddTransient(); } } } diff --git a/src/Core/Repositories/IMaintenanceRepository.cs b/src/Core/Repositories/IMaintenanceRepository.cs index 2169f999f6..bacc86fe36 100644 --- a/src/Core/Repositories/IMaintenanceRepository.cs +++ b/src/Core/Repositories/IMaintenanceRepository.cs @@ -6,5 +6,6 @@ namespace Bit.Core.Repositories { Task UpdateStatisticsAsync(); Task RebuildIndexesAsync(); + Task DeleteExpiredGrantsAsync(); } } diff --git a/src/Core/Repositories/SqlServer/MaintenanceRepository.cs b/src/Core/Repositories/SqlServer/MaintenanceRepository.cs index 129e7502cd..9436dbc67e 100644 --- a/src/Core/Repositories/SqlServer/MaintenanceRepository.cs +++ b/src/Core/Repositories/SqlServer/MaintenanceRepository.cs @@ -38,5 +38,16 @@ namespace Bit.Core.Repositories.SqlServer commandTimeout: 86400); } } + + public async Task DeleteExpiredGrantsAsync() + { + using(var connection = new SqlConnection(ConnectionString)) + { + await connection.ExecuteAsync( + "[dbo].[Grant_DeleteExpired]", + commandType: CommandType.StoredProcedure, + commandTimeout: 86400); + } + } } }