2013-09-18 05:28:05 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using NLog;
|
2013-10-11 03:34:06 +00:00
|
|
|
|
using NzbDrone.Core.Lifecycle;
|
2013-09-18 05:28:05 +00:00
|
|
|
|
using NzbDrone.Core.Messaging.Commands;
|
2013-10-11 03:34:06 +00:00
|
|
|
|
using NzbDrone.Core.Messaging.Events;
|
2014-04-12 15:00:08 +00:00
|
|
|
|
using NzbDrone.Core.Datastore;
|
2013-09-18 05:28:05 +00:00
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Housekeeping
|
|
|
|
|
{
|
2015-01-16 00:30:09 +00:00
|
|
|
|
public class HousekeepingService : IExecute<HousekeepingCommand>,
|
|
|
|
|
IHandleAsync<ApplicationStartedEvent>
|
2013-09-18 05:28:05 +00:00
|
|
|
|
{
|
|
|
|
|
private readonly IEnumerable<IHousekeepingTask> _housekeepers;
|
|
|
|
|
private readonly Logger _logger;
|
2015-05-03 19:46:21 +00:00
|
|
|
|
private readonly IMainDatabase _mainDb;
|
2013-09-18 05:28:05 +00:00
|
|
|
|
|
2015-05-03 19:46:21 +00:00
|
|
|
|
public HousekeepingService(IEnumerable<IHousekeepingTask> housekeepers, IMainDatabase mainDb, Logger logger)
|
2013-09-18 05:28:05 +00:00
|
|
|
|
{
|
|
|
|
|
_housekeepers = housekeepers;
|
|
|
|
|
_logger = logger;
|
2014-04-12 15:00:08 +00:00
|
|
|
|
_mainDb = mainDb;
|
2013-09-18 05:28:05 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-10-11 03:34:06 +00:00
|
|
|
|
private void Clean()
|
2013-09-18 05:28:05 +00:00
|
|
|
|
{
|
|
|
|
|
_logger.Info("Running housecleaning tasks");
|
|
|
|
|
|
|
|
|
|
foreach (var housekeeper in _housekeepers)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2015-01-02 18:57:51 +00:00
|
|
|
|
_logger.Debug("Starting {0}", housekeeper.GetType().Name);
|
2013-09-18 05:28:05 +00:00
|
|
|
|
housekeeper.Clean();
|
2015-01-02 18:57:51 +00:00
|
|
|
|
_logger.Debug("Completed {0}", housekeeper.GetType().Name);
|
|
|
|
|
|
2013-09-18 05:28:05 +00:00
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
2015-01-02 18:57:51 +00:00
|
|
|
|
_logger.ErrorException("Error running housekeeping task: " + housekeeper.GetType().Name, ex);
|
2013-09-18 05:28:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2014-04-12 15:00:08 +00:00
|
|
|
|
|
2015-01-16 00:30:09 +00:00
|
|
|
|
// Vacuuming the log db isn't needed since that's done in a separate housekeeping task
|
2015-01-02 18:57:51 +00:00
|
|
|
|
_logger.Debug("Compressing main database after housekeeping");
|
|
|
|
|
_mainDb.Vacuum();
|
2013-09-18 05:28:05 +00:00
|
|
|
|
}
|
2013-10-11 03:34:06 +00:00
|
|
|
|
|
|
|
|
|
public void Execute(HousekeepingCommand message)
|
|
|
|
|
{
|
|
|
|
|
Clean();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void HandleAsync(ApplicationStartedEvent message)
|
|
|
|
|
{
|
|
|
|
|
Clean();
|
|
|
|
|
}
|
2013-09-18 05:28:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|