enhance purge job to trim broken urls based on retention policy

This commit is contained in:
sbwalker
2025-02-09 13:02:07 -05:00
parent 4f4258d532
commit ed353461da
5 changed files with 62 additions and 3 deletions

View File

@ -32,6 +32,7 @@ namespace Oqtane.Infrastructure
var logRepository = provider.GetRequiredService<ILogRepository>();
var visitorRepository = provider.GetRequiredService<IVisitorRepository>();
var notificationRepository = provider.GetRequiredService<INotificationRepository>();
var urlMappingRepository = provider.GetRequiredService<IUrlMappingRepository>();
var installationManager = provider.GetRequiredService<IInstallationManager>();
// iterate through sites for current tenant
@ -95,6 +96,22 @@ namespace Oqtane.Infrastructure
{
log += $"Error Purging Notifications - {ex.Message}<br />";
}
// purge broken urls
retention = 30; // 30 days
if (settings.ContainsKey("UrlMappingRetention") && !string.IsNullOrEmpty(settings["UrlMappingRetention"]))
{
retention = int.Parse(settings["UrlMappingRetention"]);
}
try
{
count = urlMappingRepository.DeleteUrlMappings(site.SiteId, retention);
log += count.ToString() + " Broken Urls Purged<br />";
}
catch (Exception ex)
{
log += $"Error Purging Broken Urls - {ex.Message}<br />";
}
}
// register assemblies

View File

@ -13,5 +13,6 @@ namespace Oqtane.Repository
UrlMapping GetUrlMapping(int urlMappingId, bool tracking);
UrlMapping GetUrlMapping(int siteId, string url);
void DeleteUrlMapping(int urlMappingId);
int DeleteUrlMappings(int siteId, int age);
}
}

View File

@ -101,5 +101,24 @@ namespace Oqtane.Repository
db.UrlMapping.Remove(urlMapping);
db.SaveChanges();
}
public int DeleteUrlMappings(int siteId, int age)
{
using var db = _dbContextFactory.CreateDbContext();
// delete notifications in batches of 100 records
var count = 0;
var purgedate = DateTime.UtcNow.AddDays(-age);
var urlMappings = db.UrlMapping.Where(item => item.SiteId == siteId && string.IsNullOrEmpty(item.MappedUrl) && item.RequestedOn < purgedate)
.OrderBy(item => item.RequestedOn).Take(100).ToList();
while (urlMappings.Count > 0)
{
count += urlMappings.Count;
db.UrlMapping.RemoveRange(urlMappings);
db.SaveChanges();
urlMappings = db.UrlMapping.Where(item => item.SiteId == siteId && string.IsNullOrEmpty(item.MappedUrl) && item.RequestedOn < purgedate)
.OrderBy(item => item.RequestedOn).Take(100).ToList();
}
return count;
}
}
}