file-folder-helper/Helpers/HelperLogMerge.cs
Mike Phares 5fe51ef645 nuget bump
2023-11-02
2023-11-08
net8.0
editorconfig
NuGet NuSpec
Kanban
2023-11-14 07:54:34 -07:00

71 lines
3.1 KiB
C#

using System.Globalization;
namespace File_Folder_Helper.Helpers;
internal static class HelperLogMerge
{
internal static void LogMerge(string argsZero)
{
int hour;
string day;
string logFile;
FileInfo fileInfo;
string[] segments;
string checkDirectory;
List<string> lines = [];
string format = "yyyyMMdd";
List<string> moveFiles = [];
string segment1 = string.Empty;
string sourceFileNameWithoutExtension;
DateTime dateTime = DateTime.Now.AddMinutes(2);
string[] sourceFiles = Directory.GetFiles(argsZero, "*.log", SearchOption.TopDirectoryOnly);
Dictionary<string, Dictionary<int, string[]>> keyValuePairs = [];
foreach (string sourceFile in sourceFiles)
{
sourceFileNameWithoutExtension = Path.GetFileNameWithoutExtension(sourceFile);
if (sourceFileNameWithoutExtension.Split('-').Length > 2)
continue;
if (sourceFileNameWithoutExtension.StartsWith(dateTime.ToString(format)))
continue;
fileInfo = new FileInfo(sourceFile);
if (fileInfo.Length == 0)
moveFiles.Add(sourceFile);
day = sourceFileNameWithoutExtension[..8];
if (!keyValuePairs.ContainsKey(day))
keyValuePairs.Add(day, []);
if (sourceFileNameWithoutExtension.Substring(8, 1) == "_")
continue;
segments = sourceFileNameWithoutExtension.Split('_');
if (!string.IsNullOrEmpty(segment1) && segment1 != segments[1])
continue;
segment1 = segments[1];
hour = int.Parse(sourceFileNameWithoutExtension.Substring(8, 2));
if (keyValuePairs[day].TryGetValue(hour, out _))
continue;
keyValuePairs[day].Add(hour, File.ReadAllLines(sourceFile));
moveFiles.Add(sourceFile);
}
if (!string.IsNullOrEmpty(segment1))
{
foreach (KeyValuePair<string, Dictionary<int, string[]>> keyValuePair in keyValuePairs)
{
lines.Clear();
dateTime = DateTime.ParseExact(keyValuePair.Key, format, CultureInfo.InvariantCulture);
foreach (KeyValuePair<int, string[]> item in keyValuePair.Value.OrderBy(l => l.Key))
lines.AddRange(item.Value);
logFile = Path.Combine(argsZero, $"{dateTime:yyyy-MM-dd}_{segment1}.log");
File.WriteAllLines(logFile, lines);
if (dateTime.Hour == 0 && dateTime.Minute == 0 && dateTime.Second == 0 && dateTime.Millisecond == 0)
_ = dateTime.AddHours(23).AddMinutes(59).AddSeconds(59);
File.SetLastWriteTime(logFile, dateTime);
}
checkDirectory = Path.Combine(argsZero, "_ Merged");
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
foreach (string moveFile in moveFiles.Distinct())
File.Move(moveFile, Path.Combine(checkDirectory, Path.GetFileName(moveFile)));
}
}
}