public async System.Threading.Tasks.Task Execute(CancellationToken cancellationToken, IProgress <double> progress)
        {
            await System.Threading.Tasks.Task.Run(() =>
            {
                _logger.LogInformation("Playback Reporting Data Trim");

                ReportPlaybackOptions config = _config.GetReportPlaybackOptions();

                int max_data_age = config.MaxDataAge;

                _logger.LogInformation("MaxDataAge : {MaxDataAge}", max_data_age);

                if (max_data_age == -1)
                {
                    _logger.LogInformation("Keep data forever, not doing any data cleanup");
                    return;
                }
                else if (max_data_age == 0)
                {
                    _logger.LogInformation("Removing all data");
                    Repository.DeleteOldData(null);
                }
                else
                {
                    DateTime del_defore = DateTime.Now.AddMonths(max_data_age * -1);
                    Repository.DeleteOldData(del_defore);
                }
            }, cancellationToken);
        }
 public static void SaveReportPlaybackOptions(this IConfigurationManager manager, ReportPlaybackOptions options)
 {
     manager.SaveConfiguration(PlaybackReportingOptionsKey, options);
 }
 public static void SaveReportPlaybackOptions(this IConfigurationManager manager, ReportPlaybackOptions options)
 {
     manager.SaveConfiguration("playback_reporting", options);
 }
示例#4
0
        public string SaveBackup()
        {
            ReportPlaybackOptions config = _config.GetReportPlaybackOptions();

            if (string.IsNullOrEmpty(config.BackupPath))
            {
                return("No backup path set");
            }

            DirectoryInfo fi = new DirectoryInfo(config.BackupPath);

            _logger.LogInformation("Backup Path : {BackupPath} attributes : {Attributes} exists : {Exists}",
                                   config.BackupPath, fi.Attributes, fi.Exists);
            if (fi.Exists == false || (fi.Attributes & FileAttributes.Directory) != FileAttributes.Directory)
            {
                return("Backup path does not exist or is not a directory");
            }

            string raw_data = _repository.ExportRawData();

            String fileName    = "PlaybackReportingBackup-" + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".tsv";
            string backup_file = Path.Combine(fi.FullName, fileName);

            _logger.LogInformation("Backup Path Final : {BackupFile}", backup_file);

            try
            {
                File.WriteAllText(backup_file, raw_data);
            }
            catch (Exception e)
            {
                return(e.Message);
            }

            FileInfo[] files           = fi.GetFiles("PlaybackReportingBackup-*.tsv");
            int        max_files       = config.MaxBackupFiles;
            int        files_to_delete = files.Length - max_files;

            _logger.LogInformation(
                "Backup Files Counts Current: {NumberOfFiles} Max: {MaxFiles} ToDelete {FilesToDelete}", files.Length,
                max_files, files_to_delete);

            if (files_to_delete > 0)
            {
                List <string> file_paths = new List <string>();
                foreach (FileInfo file_info in files)
                {
                    file_paths.Add(file_info.FullName);
                    _logger.LogInformation("Existing Backup Files Before: {FileName}", file_info.Name);
                }
                file_paths.Sort();

                for (int file_index = 0; file_index < files_to_delete; file_index++)
                {
                    FileInfo del_file = new FileInfo(file_paths[file_index]);
                    _logger.LogInformation("Deleting backup file : {FullName}", del_file.FullName);
                    del_file.Delete();
                }
            }

            return("Backup saved : " + fileName);
        }