2019-01-13 12:54:44 -07:00
using System ;
2016-10-28 22:40:15 -07:00
using System.Collections.Generic ;
using System.Linq ;
using System.Threading ;
using System.Threading.Tasks ;
using MediaBrowser.Common.Configuration ;
using MediaBrowser.Model.IO ;
using MediaBrowser.Model.Tasks ;
2017-08-15 23:43:41 -07:00
namespace Emby.Server.Implementations.ScheduledTasks.Tasks
2016-10-28 22:40:15 -07:00
{
/// <summary>
/// Deletes old log files
/// </summary>
public class DeleteLogFileTask : IScheduledTask , IConfigurableScheduledTask
{
/// <summary>
/// Gets or sets the configuration manager.
/// </summary>
/// <value>The configuration manager.</value>
private IConfigurationManager ConfigurationManager { get ; set ; }
private readonly IFileSystem _fileSystem ;
/// <summary>
/// Initializes a new instance of the <see cref="DeleteLogFileTask" /> class.
/// </summary>
/// <param name="configurationManager">The configuration manager.</param>
public DeleteLogFileTask ( IConfigurationManager configurationManager , IFileSystem fileSystem )
{
ConfigurationManager = configurationManager ;
_fileSystem = fileSystem ;
}
/// <summary>
/// Creates the triggers that define when the task will run
/// </summary>
/// <returns>IEnumerable{BaseTaskTrigger}.</returns>
public IEnumerable < TaskTriggerInfo > GetDefaultTriggers ( )
{
2019-01-07 16:27:46 -07:00
return new [ ] {
2016-10-28 22:40:15 -07:00
// Every so often
new TaskTriggerInfo { Type = TaskTriggerInfo . TriggerInterval , IntervalTicks = TimeSpan . FromHours ( 24 ) . Ticks }
} ;
}
/// <summary>
/// Returns the task to be executed
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <param name="progress">The progress.</param>
/// <returns>Task.</returns>
public Task Execute ( CancellationToken cancellationToken , IProgress < double > progress )
{
// Delete log files more than n days old
var minDateModified = DateTime . UtcNow . AddDays ( - ConfigurationManager . CommonConfiguration . LogFileRetentionDays ) ;
2019-01-02 12:12:24 -07:00
// Only delete the .txt log files, the *.log files created by serilog get managed by itself
var filesToDelete = _fileSystem . GetFiles ( ConfigurationManager . CommonApplicationPaths . LogDirectoryPath , new [ ] { ".txt" } , true , true )
2016-10-28 22:40:15 -07:00
. Where ( f = > _fileSystem . GetLastWriteTimeUtc ( f ) < minDateModified )
. ToList ( ) ;
var index = 0 ;
foreach ( var file in filesToDelete )
{
2019-01-13 12:22:24 -07:00
double percent = index / ( double ) filesToDelete . Count ;
2016-10-28 22:40:15 -07:00
progress . Report ( 100 * percent ) ;
cancellationToken . ThrowIfCancellationRequested ( ) ;
_fileSystem . DeleteFile ( file . FullName ) ;
index + + ;
}
progress . Report ( 100 ) ;
2018-09-12 10:26:21 -07:00
return Task . CompletedTask ;
2016-10-28 22:40:15 -07:00
}
2019-01-06 13:50:43 -07:00
public string Name = > "Log file cleanup" ;
2016-10-28 22:40:15 -07:00
2019-01-06 13:50:43 -07:00
public string Description = > string . Format ( "Deletes log files that are more than {0} days old." , ConfigurationManager . CommonConfiguration . LogFileRetentionDays ) ;
2016-10-28 22:40:15 -07:00
2019-01-06 13:50:43 -07:00
public string Category = > "Maintenance" ;
2016-10-28 22:40:15 -07:00
2019-01-30 23:20:34 -07:00
public string Key = > "CleanLogFiles" ;
public bool IsHidden = > false ;
2016-10-28 22:40:15 -07:00
2019-01-06 13:50:43 -07:00
public bool IsEnabled = > true ;
2016-10-28 22:40:15 -07:00
2019-01-06 13:50:43 -07:00
public bool IsLogged = > true ;
2016-10-28 22:40:15 -07:00
}
}