HelperMetrologyFiles.SortAndDelete
HelperEventLog.ClearEventLogs
This commit is contained in:
34
Helpers/HelperEventLog.cs
Normal file
34
Helpers/HelperEventLog.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
109
Helpers/HelperMetrologyFiles.cs
Normal file
109
Helpers/HelperMetrologyFiles.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user