HelperMetrologyFiles.SortAndDelete

HelperEventLog.ClearEventLogs
This commit is contained in:
2024-01-26 14:13:55 -07:00
parent 58c4b9e487
commit e0f591e987
11 changed files with 276 additions and 13 deletions

34
Helpers/HelperEventLog.cs Normal file
View File

@ -0,0 +1,34 @@
using File_Watcher.Models;
using System.Diagnostics;
namespace File_Watcher.Helpers;
internal static partial class HelperEventLog
{
internal static bool ClearEventLogs(AppSettings appSettings, ILogger<Worker> logger)
{
if (Directory.Exists(appSettings.WatchDirectory))
{
#pragma warning disable CA1416
using (EventLog eventLog = new("Security", Environment.MachineName))
eventLog.Clear();
logger.LogInformation("{logName} log cleared.", "Security");
foreach (EventLog eventLog in EventLog.GetEventLogs())
{
try
{
eventLog.Clear();
eventLog.Dispose();
logger.LogInformation("{logName} log cleared.", eventLog.LogDisplayName);
}
catch (Exception ex)
{ logger.LogInformation("Error: {logName} - {message}.", eventLog.LogDisplayName, ex.Message); }
}
#pragma warning restore CA1416
logger.LogCritical("{Company}", appSettings.Company);
}
return true;
}
}

View File

@ -0,0 +1,109 @@
using File_Watcher.Models;
using System.Globalization;
namespace File_Watcher.Helpers;
internal static partial class HelperMetrologyFiles
{
private static void Sort(MetrologyConfiguration metrologyConfiguration, ILogger<Worker> logger, Calendar calendar)
{
bool check;
string lines;
int weekOfYear;
string[] files;
string checkFile;
string directory;
FileInfo fileInfo;
string checkDirectory;
DateTime dateTime = DateTime.Now;
foreach (string sourceDirectory in metrologyConfiguration.SourceDirectories)
{
files = Directory.GetFiles(sourceDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
check = false;
fileInfo = new(file);
if (fileInfo.LastWriteTime > dateTime)
continue;
directory = Path.GetDirectoryName(file) ?? throw new Exception();
for (int i = 0; i < metrologyConfiguration.DirectoriesBack; i++)
directory = Path.GetDirectoryName(directory) ?? throw new Exception();
weekOfYear = calendar.GetWeekOfYear(fileInfo.LastWriteTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
for (int i = 1; i < 3; i++)
{
if (check)
break;
lines = i switch
{
1 => fileInfo.Name,
2 => File.ReadAllText(file),
_ => throw new NotImplementedException()
};
foreach (string hardcodedValue in metrologyConfiguration.HardcodedValues)
{
if (!lines.Contains(hardcodedValue))
continue;
checkDirectory = Path.Combine(directory, $"{fileInfo.LastWriteTime:yyyy}_Week_{weekOfYear:00}", fileInfo.LastWriteTime.ToString("yyyy-MM-dd"), hardcodedValue);
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
checkFile = Path.Combine(checkDirectory, Path.GetFileName(file));
if (File.Exists(checkFile) || !File.Exists(file))
continue;
try
{ File.Move(file, checkFile); }
catch (Exception) { }
check = true;
break;
}
}
}
logger.LogInformation("{sourceDirectory}", sourceDirectory);
}
}
private static void Delete(MetrologyConfiguration metrologyConfiguration, ILogger<Worker> logger, Calendar calendar)
{
string directory;
DateTime dateTime;
string[] directories;
DirectoryInfo directoryInfo;
string yearWeekFormat = "yyyy_Week_00";
DateTime deleteBefore = DateTime.Now.AddDays(-7 * metrologyConfiguration.DeleteOlderThanWeeks);
foreach (string sourceDirectory in metrologyConfiguration.SourceDirectories)
{
directory = sourceDirectory;
for (int i = 0; i < metrologyConfiguration.DirectoriesBack; i++)
directory = Path.GetDirectoryName(directory) ?? throw new Exception();
directories = Directory.GetDirectories(directory, "*", SearchOption.TopDirectoryOnly);
foreach (string weekOfYearDirectory in directories)
{
directoryInfo = new(weekOfYearDirectory);
if (directoryInfo.Name.Length != yearWeekFormat.Length)
continue;
if (!int.TryParse(directoryInfo.Name[..4], out int year))
continue;
if (!int.TryParse(directoryInfo.Name[^2..], out int week))
continue;
dateTime = new(year, 1, 1);
dateTime = dateTime.AddDays(week * 7).AddSeconds(-1);
if (directoryInfo.LastWriteTime != dateTime)
Directory.SetLastWriteTime(directoryInfo.FullName, dateTime);
if (dateTime > deleteBefore)
continue;
Directory.Delete(weekOfYearDirectory, recursive: true);
}
logger.LogInformation("{sourceDirectory}", sourceDirectory);
}
}
internal static bool SortAndDelete(AppSettings appSettings, ILogger<Worker> logger)
{
CultureInfo cultureInfo = new("en-US");
Calendar calendar = cultureInfo.Calendar;
Sort(appSettings.MetrologyConfiguration, logger, calendar);
Delete(appSettings.MetrologyConfiguration, logger, calendar);
return true;
}
}

View File

@ -1,4 +1,5 @@
using File_Watcher.Models;
using System.Globalization;
using System.Text.RegularExpressions;
namespace File_Watcher.Helpers;
@ -12,9 +13,13 @@ internal static partial class HelperStratus
private static void TryMoveFile(AppSettings appSettings, string checkFile)
{
string line;
string weekYearDirectory;
List<string> collection = [];
DateTime dateTime = DateTime.Now;
Calendar calendar = new CultureInfo("en-US").Calendar;
char start = appSettings.StratusConfiguration.FileDelimiterPattern[0];
string[] lines = !File.Exists(checkFile) ? [] : File.ReadAllLines(checkFile);
string weekOfYear = calendar.GetWeekOfYear(dateTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
for (int i = 0; i < lines.Length; i++)
{
line = lines[i];
@ -23,7 +28,10 @@ internal static partial class HelperStratus
continue;
if (!Regex.Match(line, appSettings.StratusConfiguration.FileDelimiterPattern).Success)
continue;
File.WriteAllLines(Path.Combine(appSettings.WatchDirectory, $"{DateTime.Now.Ticks}.txt"), collection);
weekYearDirectory = Path.Combine(appSettings.WatchDirectory, $"{dateTime.Year}_Week_{weekOfYear}");
if (!Directory.Exists(weekYearDirectory))
_ = Directory.CreateDirectory(weekYearDirectory);
File.WriteAllLines(Path.Combine(weekYearDirectory, $"{dateTime.Ticks}.txt"), collection);
collection.Clear();
for (int j = i + 1; j < lines.Length; j++)
collection.Add(lines[j]);
@ -35,11 +43,14 @@ internal static partial class HelperStratus
internal static bool MoveFile(AppSettings appSettings, ILogger<Worker> logger)
{
string file = Path.Combine(appSettings.WatchDirectory, appSettings.StratusConfiguration.WatchFile);
string checkFile = Path.Combine(appSettings.WatchDirectory, appSettings.StratusConfiguration.WatchFile);
try
{ TryMoveFile(appSettings, file); }
{ TryMoveFile(appSettings, checkFile); }
catch (Exception ex)
{ logger.LogError(ex, "Inner loop error!"); }
{
logger.LogError(ex, "Inner loop error!");
Thread.Sleep(appSettings.MillisecondsDelay * 5);
}
return true;
}