SECS/GEM log-to-trace (Day-Helper-2025-07-10)
java-script-object-notation-to-reactor (Day-Helper-2025-07-09) Dynamic extension for (Day-Helper-2025-07-01)
This commit is contained in:
98
ADO2025/PI6/Helper-2025-07-10.cs
Normal file
98
ADO2025/PI6/Helper-2025-07-10.cs
Normal file
@ -0,0 +1,98 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace File_Folder_Helper.ADO2025.PI6;
|
||||
|
||||
internal static partial class Helper20250710 {
|
||||
|
||||
[GeneratedRegex(@"^(?<stream>S[0-9]{1,2})(?<function>F[0-9]{1,2}) W-Bit=(?<wait>[01])")]
|
||||
private static partial Regex StreamFunction();
|
||||
|
||||
internal static void StripLog(ILogger<Worker> logger, List<string> args) {
|
||||
logger.LogInformation(args[0]);
|
||||
logger.LogInformation(args[1]);
|
||||
logger.LogInformation(args[2]);
|
||||
logger.LogInformation(args[3]);
|
||||
string[] segments;
|
||||
string searchPattern = args[3];
|
||||
string directoryPattern = args[2];
|
||||
string sourceDirectory = Path.GetFullPath(args[0].Split('~')[0]);
|
||||
string[] directories = Directory.GetDirectories(sourceDirectory, directoryPattern, SearchOption.TopDirectoryOnly);
|
||||
LogToTrace(logger, sourceDirectory, searchPattern, directories.AsReadOnly());
|
||||
Helpers.HelperDeleteEmptyDirectories.DeleteEmptyDirectories(logger, sourceDirectory);
|
||||
}
|
||||
|
||||
private static void LogToTrace(ILogger<Worker> logger, string sourceDirectory, string searchPattern, ReadOnlyCollection<string> directories) {
|
||||
string text;
|
||||
string[] lines;
|
||||
string[] files;
|
||||
string checkFile;
|
||||
FileInfo fileInfo;
|
||||
string directoryName;
|
||||
const string extension = ".trc";
|
||||
foreach (string directory in directories) {
|
||||
files = Directory.GetFiles(directory, searchPattern, SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files) {
|
||||
fileInfo = new(file);
|
||||
if (fileInfo.LastWriteTime > DateTime.Now.AddSeconds(-5)) {
|
||||
continue;
|
||||
}
|
||||
directoryName = Path.GetFileName(fileInfo.DirectoryName);
|
||||
checkFile = Path.Combine(directoryName, $"{fileInfo.Name}{extension}");
|
||||
if (File.Exists(checkFile)) {
|
||||
continue;
|
||||
}
|
||||
lines = File.ReadAllLines(fileInfo.FullName);
|
||||
LogToTrace(logger, fileInfo, lines, checkFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void LogToTrace(ILogger<Worker> logger, FileInfo fileInfo, string[] lines, string checkFile) {
|
||||
string line;
|
||||
Match match;
|
||||
string body;
|
||||
string[] segments;
|
||||
string previousLine;
|
||||
List<string> log = [];
|
||||
for (int i = 1; i < lines.Length - 1; i++) {
|
||||
line = lines[i];
|
||||
if (!line.StartsWith('S')) {
|
||||
continue;
|
||||
}
|
||||
match = StreamFunction().Match(line);
|
||||
if (!match.Success) {
|
||||
continue;
|
||||
}
|
||||
segments = lines[i - 1].Split(" ");
|
||||
if (segments.Length < 2) {
|
||||
continue;
|
||||
}
|
||||
if (!segments[0].Contains(' ')) {
|
||||
continue;
|
||||
}
|
||||
body = GetBody(lines, i, segments[0].Split(' '));
|
||||
log.Add($"{segments[0]} {line} ~ {body}");
|
||||
}
|
||||
if (log.Count > 0) {
|
||||
File.WriteAllText(checkFile, string.Join(Environment.NewLine, log));
|
||||
File.SetLastWriteTime(checkFile, fileInfo.LastWriteTime);
|
||||
logger.LogInformation("<{checkFile}> was written", checkFile);
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetBody(string[] lines, int i, string[] segments) {
|
||||
string result;
|
||||
List<string> results = [];
|
||||
for (int j = i + 1; j < lines.Length; j++) {
|
||||
if (lines[j].StartsWith(segments[0]))
|
||||
break;
|
||||
results.Add(lines[j].Trim());
|
||||
}
|
||||
result = string.Join('_', results);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user