DeleteOldLogFilesAndDeleteEmptyDirectories

Log bug
Wafer Counter
trigger:  - master
This commit is contained in:
Mike Phares 2023-10-01 11:07:36 -07:00
parent b1e63df70b
commit 219fdda4ec
11 changed files with 176 additions and 63 deletions

4
.gitignore vendored
View File

@ -326,4 +326,6 @@ ASALocalRun/
*.nvuser *.nvuser
# MFractors (Xamarin productivity tool) working folder # MFractors (Xamarin productivity tool) working folder
.mfractor/ .mfractor/
.vscode/Helper/**

60
.vscode/tasks.json vendored
View File

@ -127,6 +127,66 @@
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s V Helpers", "command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s V Helpers",
"problemMatcher": [] "problemMatcher": []
}, },
{
"label": "File-Folder-Helper AOT s H MET08ANLYSDIFAAST230",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08ANLYSDIFAAST230\\Source\\MET08ANLYSDIFAAST230'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H MET08DDUPSFS6420",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08DDUPSFS6420\\Source\\MET08DDUPSFS6420'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H MET08DDUPSP1TBI",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08DDUPSP1TBI\\Source\\MET08DDUPSP1TBI'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H MET08RESIHGCV",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08RESIHGCV\\Source\\MET08RESIHGCV'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H MET08RESIMAPCDE",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08RESIMAPCDE\\Source\\MET08RESIMAPCDE'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H MET08RESISRP2100",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08RESISRP2100\\Source\\MET08RESISRP2100'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H MET08THFTIRQS408M",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08THFTIRQS408M\\Source\\MET08THFTIRQS408M'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H MET08THFTIRSTRATUS",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\Metrology\\Run Data Repository\\MET08THFTIRSTRATUS\\Source\\MET08THFTIRSTRATUS'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s H WaferCounter",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s H '\\\\messa01ec.ec.local\\apps\\WaferCounter\\BackupFiles'",
"problemMatcher": []
},
{
"label": "File-Folder-Helper AOT s F Staging _Logs",
"type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s F '\\\\messv02ecc1.ec.local\\EC_EAFLog\\Staging\\_ Logs'",
"problemMatcher": []
},
{ {
"label": "Kanbn Console", "label": "Kanbn Console",
"type": "npm", "type": "npm",

View File

@ -1,3 +1,4 @@
using Microsoft.Extensions.Logging;
using System.Globalization; using System.Globalization;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -77,7 +78,7 @@ internal static partial class HelperCreateNoteFiles
return result; return result;
} }
private static void CleanExistingFiles(string directory, long ticks) private static void CleanExistingFiles(ILogger<Worker> logger, string directory, long ticks)
{ {
string check; string check;
string[] lines; string[] lines;
@ -121,7 +122,7 @@ internal static partial class HelperCreateNoteFiles
continue; continue;
File.Move(file, checkFile); File.Move(file, checkFile);
} }
_ = HelperDeleteEmptyDirectories.DeleteEmptyDirectories(directory); HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, directory);
} }
private static void CreateDailyNotes(string argsZero, long ticks) private static void CreateDailyNotes(string argsZero, long ticks)
@ -272,11 +273,11 @@ internal static partial class HelperCreateNoteFiles
} }
} }
internal static void CreateNoteFiles(string argsZero) internal static void CreateNoteFiles(ILogger<Worker> logger, string argsZero)
{ {
long ticks = DateTime.Now.Ticks; long ticks = DateTime.Now.Ticks;
List<string> importFiles = new(); List<string> importFiles = new();
CleanExistingFiles(argsZero, ticks); CleanExistingFiles(logger, argsZero, ticks);
importFiles.AddRange(Directory.GetFiles(argsZero, "*.csv", SearchOption.TopDirectoryOnly)); importFiles.AddRange(Directory.GetFiles(argsZero, "*.csv", SearchOption.TopDirectoryOnly));
importFiles.AddRange(Directory.GetFiles(argsZero, "*.tsv", SearchOption.TopDirectoryOnly)); importFiles.AddRange(Directory.GetFiles(argsZero, "*.tsv", SearchOption.TopDirectoryOnly));
if (importFiles.Count == 0) if (importFiles.Count == 0)

View File

@ -1,43 +1,86 @@
using Microsoft.Extensions.Logging;
namespace File_Folder_Helper.Helpers; namespace File_Folder_Helper.Helpers;
internal static class HelperDeleteEmptyDirectories internal static class HelperDeleteEmptyDirectories
{ {
internal static bool DeleteEmptyDirectories(string rootDirectory) private static void DeleteOldLogFilesAndDeleteEmptyDirectories(long? ticks, string? searchPattern, string checkDirectory, List<string> deletedDirectories)
{ {
bool result; string[] files;
if (!Directory.Exists(rootDirectory)) FileInfo fileInfo;
result = false; string[] directories = Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly);
else if (ticks is not null && !string.IsNullOrEmpty(searchPattern))
{ {
string[] files; files = Directory.GetFiles(checkDirectory, searchPattern, SearchOption.TopDirectoryOnly);
string[] directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string file in files)
if (directories.Length > 0)
files = Array.Empty<string>();
else
files = Directory.GetFiles(rootDirectory, "*", SearchOption.AllDirectories);
if (directories.Length == 0 && files.Length == 0)
{ {
result = true; fileInfo = new(file);
Directory.Delete(rootDirectory); if (fileInfo.LastWriteTime.Ticks > ticks)
} continue;
else File.Delete(file);
{
result = false;
foreach (string directory in directories)
{
result = DeleteEmptyDirectories(directory);
if (result)
result = DeleteEmptyDirectories(directory);
}
if (files is null)
{
directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly);
result = directories.Length == 0;
}
} }
} }
return result; if (directories.Length > 0)
files = Array.Empty<string>();
else
files = Directory.GetFiles(checkDirectory, "*", SearchOption.TopDirectoryOnly);
if (directories.Length == 0 && files.Length == 0)
{
try
{ Directory.Delete(checkDirectory); }
catch (UnauthorizedAccessException)
{
new DirectoryInfo(checkDirectory).Attributes = FileAttributes.Normal;
Directory.Delete(checkDirectory);
}
deletedDirectories.Add(checkDirectory);
}
else
{
List<string> check = new();
foreach (string directory in directories)
{
DeleteOldLogFilesAndDeleteEmptyDirectories(ticks, searchPattern, directory, check);
deletedDirectories.AddRange(check);
if (check.Count > 0 && Directory.Exists(directory))
DeleteOldLogFilesAndDeleteEmptyDirectories(ticks, searchPattern, directory, deletedDirectories);
}
}
}
private static void DeleteOldLogFilesAndDeleteEmptyDirectories(ILogger<Worker> logger, long? ticks, string? searchPattern, string rootDirectory)
{
List<string> check = new();
List<string> directories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly).ToList();
directories.Add(rootDirectory);
foreach (string directory in directories)
{
logger.LogInformation("{directoryName}", Path.GetFileName(directory));
for (int i = 1; i < 50; i++)
{
if (!Directory.Exists(directory))
break;
check.Clear();
DeleteOldLogFilesAndDeleteEmptyDirectories(ticks, searchPattern, directory, check);
if (check.Count == 0)
break;
}
}
}
internal static void DeleteEmptyDirectories(ILogger<Worker> logger, string rootDirectory)
{
long? ticks = null;
string? searchPattern = null;
DeleteOldLogFilesAndDeleteEmptyDirectories(logger, ticks, searchPattern, rootDirectory);
}
internal static void DeleteOldLogFilesAndDeleteEmptyDirectories(ILogger<Worker> logger, string rootDirectory)
{
long ticks = DateTime.Now.AddHours(-120).Ticks;
DeleteOldLogFilesAndDeleteEmptyDirectories(logger, ticks, "*.log", rootDirectory);
DeleteOldLogFilesAndDeleteEmptyDirectories(logger, ticks, "*.log.*", rootDirectory);
} }
} }

View File

@ -37,6 +37,8 @@ internal static class HelperHardcodedFileSearchAndSort
"SP101", "SP101",
"SPV01", "SPV01",
"SRP", "SRP",
"WC6Inch",
"WC8Inch",
"Bio-Rad" "Bio-Rad"
}; };
string[] files = Directory.GetFiles(sourceDirectory, "*", searchOption); string[] files = Directory.GetFiles(sourceDirectory, "*", searchOption);

View File

@ -1137,11 +1137,17 @@ internal static partial class HelperMarkdown
{ {
if (string.IsNullOrEmpty(input.StartAt) || string.IsNullOrEmpty(input.Destination)) if (string.IsNullOrEmpty(input.StartAt) || string.IsNullOrEmpty(input.Destination))
throw new NotSupportedException(); throw new NotSupportedException();
ReadOnlyDictionary<string, List<Card>> columnsToCards = GetColumnsToCards(input, relativeToCollection); ReadOnlyDictionary<string, List<Card>> columnsToCards;
if (columnsToCards.Count > 0) string jsonFile = Path.Combine(input.Destination, $"{nameof(columnsToCards)}.json");
if (File.Exists(jsonFile))
File.Delete(jsonFile);
columnsToCards = GetColumnsToCards(input, relativeToCollection);
if (columnsToCards.Count == 0)
File.WriteAllText(jsonFile, "{}");
else
{ {
string json = JsonSerializer.Serialize(columnsToCards, ColumnsAndCardsSourceGenerationContext.Default.ReadOnlyDictionaryStringListCard); string json = JsonSerializer.Serialize(columnsToCards, ColumnsAndCardsSourceGenerationContext.Default.ReadOnlyDictionaryStringListCard);
File.WriteAllText(Path.Combine(input.Destination, $"{nameof(columnsToCards)}.json"), json); File.WriteAllText(jsonFile, json);
} }
} }

View File

@ -1,3 +1,5 @@
using Microsoft.Extensions.Logging;
namespace File_Folder_Helper.Helpers; namespace File_Folder_Helper.Helpers;
internal static class HelperTooLong internal static class HelperTooLong
@ -88,7 +90,7 @@ internal static class HelperTooLong
} }
} }
internal static void UpdateDateVerifyAndGetTicksDirectories(Models.AppSettings appSettings, string directory) internal static void UpdateDateVerifyAndGetTicksDirectories(ILogger<Worker> logger, Models.AppSettings appSettings, string directory)
{ {
string ticksDirectoryName; string ticksDirectoryName;
DirectoryInfo directoryInfo; DirectoryInfo directoryInfo;
@ -107,8 +109,7 @@ internal static class HelperTooLong
Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks)); Directory.SetLastWriteTime(ticksDirectory, new DateTime(directoryTicks));
} }
MaybeMoveFiles(appSettings, ticksDirectories); MaybeMoveFiles(appSettings, ticksDirectories);
for (int i = 1; i < 10; i++) HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, directory);
_ = HelperDeleteEmptyDirectories.DeleteEmptyDirectories(directory);
} }
} }

View File

@ -11,7 +11,7 @@ internal static partial class HelperZipFilesByDate
[GeneratedRegex("[a-zA-Z0-9]{1,}")] [GeneratedRegex("[a-zA-Z0-9]{1,}")]
private static partial Regex LowerAlphaAlphaAndNumber(); private static partial Regex LowerAlphaAlphaAndNumber();
private static bool SetDateFromZipEntry(ILogger log, string[] zipFiles, string keyFile, string keyFileB, string keyFileC) private static bool SetDateFromZipEntry(ILogger<Worker> logger, string[] zipFiles, string keyFile, string keyFileB, string keyFileC)
{ {
bool result = false; bool result = false;
string[] files; string[] files;
@ -81,7 +81,7 @@ internal static partial class HelperZipFilesByDate
} }
catch (Exception) catch (Exception)
{ {
log.LogInformation("<{zipFile}> is invalid!", zipFile); logger.LogInformation("<{zipFile}> is invalid!", zipFile);
checkFile = string.Concat(zipFile, ".err"); checkFile = string.Concat(zipFile, ".err");
for (int e = 0; e < short.MaxValue; e++) for (int e = 0; e < short.MaxValue; e++)
{ {
@ -91,12 +91,12 @@ internal static partial class HelperZipFilesByDate
} }
try try
{ File.Move(zipFile, checkFile); } { File.Move(zipFile, checkFile); }
catch (Exception) { log.LogInformation("<{zipFile}> couldn't be moved!", zipFile); } catch (Exception) { logger.LogInformation("<{zipFile}> couldn't be moved!", zipFile); }
} }
return result; return result;
} }
internal static bool ZipFilesByDate(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.TopDirectoryOnly, string dayFormat = "") internal static bool ZipFilesByDate(ILogger<Worker> logger, string sourceDirectory, SearchOption searchOption = SearchOption.TopDirectoryOnly, string dayFormat = "")
{ {
bool result = false; bool result = false;
string key; string key;
@ -230,17 +230,17 @@ internal static partial class HelperZipFilesByDate
} }
if (topDirectory != sourceDirectory) if (topDirectory != sourceDirectory)
try try
{ _ = HelperDeleteEmptyDirectories.DeleteEmptyDirectories(topDirectory); } { HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, topDirectory); }
catch (Exception) { } catch (Exception) { }
log.LogInformation("{topDirectory}", topDirectory); logger.LogInformation("{topDirectory}", topDirectory);
} }
return result; return result;
} }
internal static bool SetDateFromZipEntryForNuspec(ILogger log, string[] files) => internal static bool SetDateFromZipEntryForNuspec(ILogger<Worker> logger, string[] files) =>
SetDateFromZipEntry(log, files, ".nuspec", "icon", "readme"); SetDateFromZipEntry(logger, files, ".nuspec", "icon", "readme");
internal static bool SetDateFromZipEntry(ILogger log, string sourceDirectory, SearchOption searchOption = SearchOption.AllDirectories) internal static bool SetDateFromZipEntry(ILogger<Worker> logger, string sourceDirectory, SearchOption searchOption = SearchOption.AllDirectories)
{ {
bool result = false; bool result = false;
bool loop; bool loop;
@ -260,7 +260,7 @@ internal static partial class HelperZipFilesByDate
_ => throw new NotSupportedException() _ => throw new NotSupportedException()
}; };
zipFiles = Directory.GetFiles(sourceDirectory, searchPattern, searchOption); zipFiles = Directory.GetFiles(sourceDirectory, searchPattern, searchOption);
loop = SetDateFromZipEntry(log, zipFiles, keyFile, keyFileB, keyFileC); loop = SetDateFromZipEntry(logger, zipFiles, keyFile, keyFileB, keyFileC);
if (loop && !result) if (loop && !result)
result = true; result = true;
} }

View File

@ -22,7 +22,7 @@ internal class Program
_ = builder.Services.AddHostedService<Worker>(); _ = builder.Services.AddHostedService<Worker>();
using IHost host = builder.Build(); using IHost host = builder.Build();
ILogger<Program> logger = host.Services.GetRequiredService<ILogger<Program>>(); ILogger<Program> logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogCritical("appSettings.Company", appSettings.Company); logger.LogCritical("{appSettings.Company}", appSettings.Company);
host.Run(); host.Run();
} }

View File

@ -1,5 +1,5 @@
trigger: trigger:
- Development - master
jobs: jobs:
- job: apc_trend - job: apc_trend
displayName: Copy common .gitconfig displayName: Copy common .gitconfig

View File

@ -30,7 +30,6 @@ public class Worker : BackgroundService
ConsoleKey.B, ConsoleKey.B,
ConsoleKey.C, ConsoleKey.C,
ConsoleKey.D, ConsoleKey.D,
ConsoleKey.E,
ConsoleKey.F, ConsoleKey.F,
ConsoleKey.G, ConsoleKey.G,
ConsoleKey.H, ConsoleKey.H,
@ -96,8 +95,8 @@ public class Worker : BackgroundService
_Logger.LogInformation("C) Clipboard (Top Directory Only),"); _Logger.LogInformation("C) Clipboard (Top Directory Only),");
_Logger.LogInformation("D) Clipboard (All Directories),"); _Logger.LogInformation("D) Clipboard (All Directories),");
// E // E
// F _Logger.LogInformation("F) Find and delete all *.log.* files then empty directories,");
_Logger.LogInformation("G) Genealogical Data Communication"); _Logger.LogInformation("G) Genealogical Data Communication,");
_Logger.LogInformation("H) Hardcoded file search and sort,"); _Logger.LogInformation("H) Hardcoded file search and sort,");
_Logger.LogInformation("I) Ignore case and rename files to lowercase,"); _Logger.LogInformation("I) Ignore case and rename files to lowercase,");
_Logger.LogInformation("J) Set Date from Json Entry,"); _Logger.LogInformation("J) Set Date from Json Entry,");
@ -129,6 +128,9 @@ public class Worker : BackgroundService
case ConsoleKey.D: case ConsoleKey.D:
Helpers.HelperSaveOrCopyContents.SaveOrCopyContents(_Logger, _Args[0], consoleKey); Helpers.HelperSaveOrCopyContents.SaveOrCopyContents(_Logger, _Args[0], consoleKey);
break; break;
case ConsoleKey.F:
Helpers.HelperDeleteEmptyDirectories.DeleteOldLogFilesAndDeleteEmptyDirectories(_Logger, _Args[0]);
break;
case ConsoleKey.G: case ConsoleKey.G:
Helpers.HelperGenealogicalDataCommunication.FileSystemToGenealogicalDataCommunication(_AppSettings, _Logger, _Args); Helpers.HelperGenealogicalDataCommunication.FileSystemToGenealogicalDataCommunication(_AppSettings, _Logger, _Args);
break; break;
@ -148,7 +150,7 @@ public class Worker : BackgroundService
Helpers.HelperLogMerge.LogMerge(_Args[0]); Helpers.HelperLogMerge.LogMerge(_Args[0]);
break; break;
case ConsoleKey.N: case ConsoleKey.N:
Helpers.HelperCreateNoteFiles.CreateNoteFiles(_Args[0]); Helpers.HelperCreateNoteFiles.CreateNoteFiles(_Logger, _Args[0]);
break; break;
case ConsoleKey.M: case ConsoleKey.M:
if (_Args[0].EndsWith(".kanbn") && Directory.Exists(_Args[0])) if (_Args[0].EndsWith(".kanbn") && Directory.Exists(_Args[0]))
@ -169,7 +171,7 @@ public class Worker : BackgroundService
_ = Helpers.HelperZipFilesByDate.SetDateFromZipEntry(_Logger, _Args[0]); _ = Helpers.HelperZipFilesByDate.SetDateFromZipEntry(_Logger, _Args[0]);
break; break;
case ConsoleKey.T: case ConsoleKey.T:
Helpers.HelperTooLong.UpdateDateVerifyAndGetTicksDirectories(_AppSettings, _Args[0]); Helpers.HelperTooLong.UpdateDateVerifyAndGetTicksDirectories(_Logger, _AppSettings, _Args[0]);
// Helpers.HelperTooLong.TooLong(_Args[0], delete: false); // Helpers.HelperTooLong.TooLong(_Args[0], delete: false);
// Helpers.HelperTooLong.TooLong(_Args[0], delete: true); // Helpers.HelperTooLong.TooLong(_Args[0], delete: true);
break; break;
@ -189,11 +191,7 @@ public class Worker : BackgroundService
switch (consoleKey) switch (consoleKey)
{ {
case ConsoleKey.Delete: case ConsoleKey.Delete:
for (int j = 1; j < 6; j++) Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(_Logger, _Args[0]);
{
if (!Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(_Args[0]))
break;
}
break; break;
default: default:
throw new Exception(); throw new Exception();