From 5a2cf4caf1bccfa970891c147bafa3f500c2f276 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sat, 30 Jan 2021 13:09:37 -0600 Subject: [PATCH] =?UTF-8?q?feat(archival):=20=E2=9C=A8=20in=20DEBUG,=20pur?= =?UTF-8?q?ge=20existing=20queue=20on=20startup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref https://github.com/HangfireIO/Hangfire/issues/394#issuecomment-179924221 --- .../ConfigurationExtensions.cs | 2 ++ .../Scheduling/HangfireExtensions.cs | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 services/Archival/FilterLists.Archival.Infrastructure/Scheduling/HangfireExtensions.cs 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); + } + } + } +}