Sonarr/src/NzbDrone.Core/Housekeeping/HousekeepingService.cs

61 lines
1.8 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using NLog;
2014-05-16 14:35:41 +00:00
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Core.Lifecycle;
using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Core.Housekeeping
{
public class HousekeepingService : IExecute<HousekeepingCommand>, IHandleAsync<ApplicationStartedEvent>
{
private readonly IEnumerable<IHousekeepingTask> _housekeepers;
private readonly Logger _logger;
private readonly IDatabase _mainDb;
2014-05-16 14:35:41 +00:00
public HousekeepingService(IEnumerable<IHousekeepingTask> housekeepers, IDatabase mainDb, Logger logger)
{
_housekeepers = housekeepers;
_logger = logger;
_mainDb = mainDb;
}
private void Clean()
{
_logger.Info("Running housecleaning tasks");
foreach (var housekeeper in _housekeepers)
{
try
{
housekeeper.Clean();
}
catch (Exception ex)
{
_logger.ErrorException("Error running housekeeping task: " + housekeeper.GetType().FullName, ex);
}
}
2014-05-16 14:35:41 +00:00
//Only Vaccuum the DB in production
if (RuntimeInfoBase.IsProduction)
2014-05-16 14:35:41 +00:00
{
// Vacuuming the log db isn't needed since that's done hourly at the TrimLogCommand.
_logger.Debug("Compressing main database after housekeeping");
_mainDb.Vacuum();
}
}
public void Execute(HousekeepingCommand message)
{
Clean();
}
public void HandleAsync(ApplicationStartedEvent message)
{
Clean();
}
}
}