using System; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.DependencyInjection; using Oqtane.Models; using Oqtane.Repository; using Oqtane.Shared; namespace Oqtane.Infrastructure { public class PurgeJob : HostedServiceBase { // JobType = "Oqtane.Infrastructure.PurgeJob, Oqtane.Server" public PurgeJob(IServiceScopeFactory serviceScopeFactory) : base(serviceScopeFactory) { Name = "Purge Job"; Frequency = "d"; // daily Interval = 1; StartDate = DateTime.ParseExact("03:00", "H:mm", null, System.Globalization.DateTimeStyles.AssumeLocal).ToUniversalTime(); // 3 AM IsEnabled = true; } // job is executed for each tenant in installation public override string ExecuteJob(IServiceProvider provider) { string log = ""; // get services var siteRepository = provider.GetRequiredService(); var settingRepository = provider.GetRequiredService(); var logRepository = provider.GetRequiredService(); var visitorRepository = provider.GetRequiredService(); var notificationRepository = provider.GetRequiredService(); var urlMappingRepository = provider.GetRequiredService(); var siteTaskRepository = provider.GetRequiredService(); // iterate through sites for current tenant List sites = siteRepository.GetSites().ToList(); foreach (Site site in sites.Where(item => !item.IsDeleted)) { log += "
Processing Site: " + site.Name + "
"; int count; // get site settings var settings = settingRepository.GetSettings(EntityNames.Site, site.SiteId, EntityNames.Host, -1); // purge event log var retention = int.Parse(settingRepository.GetSettingValue(settings, "LogRetention", "30")); // 30 day default try { count = logRepository.DeleteLogs(site.SiteId, retention); log += count.ToString() + " Events Purged
"; } catch (Exception ex) { log += $"Error Purging Events - {ex.Message}
"; } // purge visitors if (site.VisitorTracking) { retention = int.Parse(settingRepository.GetSettingValue(settings, "VisitorRetention", "30")); // 30 day default try { count = visitorRepository.DeleteVisitors(site.SiteId, retention); log += count.ToString() + " Visitors Purged
"; } catch (Exception ex) { log += $"Error Purging Visitors - {ex.Message}
"; } } // purge notifications retention = int.Parse(settingRepository.GetSettingValue(settings, "NotificationRetention", "30")); // 30 day default try { count = notificationRepository.DeleteNotifications(site.SiteId, retention); log += count.ToString() + " Notifications Purged
"; } catch (Exception ex) { log += $"Error Purging Notifications - {ex.Message}
"; } // purge broken urls retention = int.Parse(settingRepository.GetSettingValue(settings, "UrlMappingRetention", "30")); // 30 day default try { count = urlMappingRepository.DeleteUrlMappings(site.SiteId, retention); log += count.ToString() + " Broken Urls Purged
"; } catch (Exception ex) { log += $"Error Purging Broken Urls - {ex.Message}
"; } // purge completed site tasks retention = 30; // 30 day default try { count = siteTaskRepository.DeleteSiteTasks(site.SiteId, retention); log += count.ToString() + " Completed Tasks Purged
"; } catch (Exception ex) { log += $"Error Purging Completed Site Tasks - {ex.Message}
"; } } return log; } } }