/// <summary> /// Deletes or adds to the SpaceSaved.zip file /// </summary> /// <param name="summary">A <see cref="SpaceOptimizationSummary"/> object of record transaction for directory</param> /// <param name="daysOld">Number of days before deleting from zip</param> /// <returns>A string of any failed files that need to be archived of deleted</returns> private string DeleteOldArchivedFiles(SpaceOptimizationSummary summary, int daysOld) { StringBuilder sb = new StringBuilder(); //go through all the files and try to delete them from zip one //at a time foreach (ArchiveDto item in GetAllArchivedFilesThatAreTooOld(daysOld)) { try { summary.FilesOptimized.Add(DoSpaceSavingAction(item)); } catch (Exception e) { Log.Error(e.Message); sb.AppendNewLine(e.Message); } } return(sb.ToString()); }
/// <summary> /// Deletes or adds to the SpaceSaved.zip files /// </summary> /// <param name="summary">A <see cref="SpaceOptimizationSummary"/> object of record transaction for directory</param> /// <param name="path">Actual directory</param> /// <returns>A string of any failed files that need to be archived of deleted</returns> private string DeleteOldArchivedFiles(SpaceOptimizationSummary summary, string path) { StringBuilder sb = new StringBuilder(); //go through all the files and try to delete them from zip one //at a time foreach (FileInfo item in GetAllFilesThatNeedToBeArchivedOrDeleted(path)) { try { summary.FilesOptimized.Add(DoSpaceSavingAction(item)); } catch (Exception e) { Log.Error(e.Message); sb.AppendNewLine(e.Message); } } return(sb.ToString()); }
/// <summary> /// Iterate through all prescribed directories and look to optimeze by either deleting or /// archiveing/zipping files /// </summary> /// <param name="healthCheckParameters">parameters that include size of file before archiving and directories to work on</param> /// <returns> object</returns> public override HealthMonitorResult DoHealthCheck(IEnumerable <BoundsLimit> healthCheckParameters) { const string maxDays = "maxDays"; const string maxSize = "maxSize"; HealthMonitorResult result = new HealthMonitorResult(Name, HealthType, ResultStatus.Information); string[] spaceOptimizeCheckParams = new[] { maxDays, maxSize }; BoundsLimit[] checkParameters = healthCheckParameters as BoundsLimit[] ?? healthCheckParameters.ToArray(); EnsureAllParametersArePresent(spaceOptimizeCheckParams, checkParameters); int daysOld = int.Parse(checkParameters.Single(x => x.Name.Equals(maxDays)).Value); long fileSize = long.Parse(checkParameters.Single(x => x.Name.Equals(maxSize)).Value); spaceOptimizationService.MaxDays = daysOld; spaceOptimizationService.MaxSize = fileSize; BoundsLimit boundsLimit = checkParameters.FirstOrDefault(x => x.Name.ToLower().Equals(ServiceTimeoutMillisecondsParameter.ToLower())); if (boundsLimit != null) { int serviceTimeoutMilliseconds = int.Parse(boundsLimit.Value); ServiceTimeout = TimeSpan.FromMilliseconds(serviceTimeoutMilliseconds); } //the list of folder(s) to work on are of type 'folder' List <string> directories = checkParameters.Where(x => x.Type.Equals("folder")) .Select(y => y.Value) .ToList(); ServiceController[] services = checkParameters.Where(x => x.Type.Equals("service")) .Select(y => new ServiceController(y.Value)) .ToArray(); HealthMonitorResult resultToStop = StopServices(services); result.MessageBuilder.AppendNewLine(resultToStop.MessageBuilder.ToString()); List <SpaceOptimizationSummary> optimizations = new List <SpaceOptimizationSummary>(); //iterete through directories foreach (string path in directories) { try { DirectoryInfo directory = new DirectoryInfo(path); archiveService.ArchiveFileName = Path.Combine(path, ZIP_FILE_NAME); SpaceOptimizationSummary summary = new SpaceOptimizationSummary(DateTime.Now, new List <FileOptimized>(), path, directory.GetCurrentSizeExceptFiles(".zip")); result.MessageBuilder.AppendNewLine(DeleteOldArchivedFiles(summary, daysOld)); result.MessageBuilder.AppendNewLine(DeleteOldArchivedFiles(summary, path)); summary.CurrentSize = directory.GetCurrentSizeExceptFiles(".zip"); result.MessageBuilder.AppendNewLine(summary.ToString()); optimizations.Add(summary); } catch (Exception e) { result.MessageBuilder.AppendNewLine(e.ToLogString()); result.Status = ResultStatus.Warning; } } HealthMonitorResult resultToStart = StartServices(services); result.MessageBuilder.AppendNewLine(resultToStart.MessageBuilder.ToString()); string spaceSavedMessage = string.Format(SystemConstants.TOTAL_FILE_SIZE_MSG, FileSizeUtils.FileSizeDescription(optimizations.Sum(x => x.SpaceSaved))); result.MessageBuilder.AppendNewLine(spaceSavedMessage); return(result); }