FixAntenna/Tools/TestUtils/LogsCleaner.cs (112 lines of code) (raw):

// Copyright (c) 2021 EPAM Systems // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using Epam.FixAntenna.NetCore.Common.Logging; namespace Epam.FixAntenna.TestUtils { internal class LogsCleaner { private readonly ILog _log; public LogsCleaner() { _log = LogFactory.GetLog(GetType()); } public virtual void Clean() { var logDir = new DirectoryInfo("./logs"); if (!logDir.Exists) { return; } var logFiles = logDir.GetFileSystemInfos().Where(x => ShouldBeCleaned(x.Name)).ToList(); if (!logFiles.Any()) { return; } var deletedFiles = 0; var skipped = new StringBuilder("Skipped: "); var skipFilesNames = false; foreach (var logFile in logFiles) { try { logFile.Delete(); deletedFiles++; } catch (Exception) { if (skipFilesNames) { skipped.Append(", "); } skipFilesNames = true; skipped.Append(logFile.Name); } } _log.Debug("Successfully deleted " + (deletedFiles + 1) + " of " + logFiles.Count + " files"); } public virtual bool Clean(string dir) { var logDir = new DirectoryInfo(dir); if (!logDir.Exists) { return true; } var logFiles = logDir.GetFileSystemInfos().Where(x => ShouldBeCleaned(x.Name)).ToList(); if (logFiles.Any()) { var deletedFilesList = new List<FileSystemInfo>(); var deletedFiles = 0; foreach (var logFile in logFiles) { try { logFile.Delete(); deletedFiles++; deletedFilesList.Add(logFile); } catch (Exception) { // ignored } } _log.Debug("Successfully deleted " + deletedFiles + " of " + logFiles.Count + " files in " + dir); if (deletedFiles != logFiles.Count) { var sb = new StringBuilder(); foreach (var f in deletedFilesList) { sb.Append(f.Name).Append("\t"); } _log.Info("Skipped: " + sb.ToString() + " in " + dir); return false; } } else { _log.Debug("No filed to delete in " + dir); } return true; } private bool ShouldBeCleaned(string name) { return Regex.IsMatch(name, ".*\\.que.*") || Regex.IsMatch(name, ".*\\.seq.*") || Regex.IsMatch(name, ".*\\.in$") || Regex.IsMatch(name, ".*\\.out$") || Regex.IsMatch(name, ".*\\.log$") || Regex.IsMatch(name, ".*\\.outq$") || Regex.IsMatch(name, ".*\\.idx$") || Regex.IsMatch(name, ".*\\.[0-9]{1,5}$") || Regex.IsMatch(name, ".*\\.properties$"); } public static bool ClearDefaultLogs() { var logsCleaner = new LogsCleaner(); return logsCleaner.Clean("./logs") && logsCleaner.Clean("./logs/backup"); } } }