diff --git a/services/Archival/FilterLists.Archival.Application/ConfigurationExtensions.cs b/services/Archival/FilterLists.Archival.Application/ConfigurationExtensions.cs index 269d1a55c..e2fc58e27 100644 --- a/services/Archival/FilterLists.Archival.Application/ConfigurationExtensions.cs +++ b/services/Archival/FilterLists.Archival.Application/ConfigurationExtensions.cs @@ -1,6 +1,7 @@ using FilterLists.Archival.Application.Commands; using FilterLists.Archival.Infrastructure; using FilterLists.Archival.Infrastructure.Scheduling; +using Hangfire; using MediatR; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.Configuration; @@ -31,6 +32,7 @@ public static void UseApplication(this IApplicationBuilder app) private static void ScheduleArchival() { #if DEBUG + JobStorage.Current?.GetMonitoringApi()?.PurgeJobs(); new EnqueueArchiveAllLists.Command().EnqueueBackgroundJob(); #else new EnqueueArchiveAllLists.Command().AddOrUpdateRecurringJob(Hangfire.Cron.Daily); diff --git a/services/Archival/FilterLists.Archival.Infrastructure/Scheduling/HangfireExtensions.cs b/services/Archival/FilterLists.Archival.Infrastructure/Scheduling/HangfireExtensions.cs new file mode 100644 index 000000000..cb93fd1c9 --- /dev/null +++ b/services/Archival/FilterLists.Archival.Infrastructure/Scheduling/HangfireExtensions.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Hangfire; +using Hangfire.Storage; + +namespace FilterLists.Archival.Infrastructure.Scheduling +{ + public static class HangfireExtensions + { + // https://github.com/HangfireIO/Hangfire/issues/394#issuecomment-179924221 + public static void PurgeJobs(this IMonitoringApi monitoringApi) + { + var toDelete = new List(); + foreach (var queue in monitoringApi.Queues()) + { + for (var i = 0; i < Math.Ceiling(queue.Length / 1000d); i++) + { + toDelete.AddRange(monitoringApi.EnqueuedJobs(queue.Name, 1000 * i, 1000).Select(x => x.Key)); + } + } + + foreach (var jobId in toDelete) + { + BackgroundJob.Delete(jobId); + } + } + } +}