From 4e6504af7e9bcb9b058bef1baaccbc09f68e094b Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Wed, 5 Mar 2025 16:50:02 -0700 Subject: [PATCH] Switch multilevel app settings Removed gpcl6win64 and LincPDFC just from proj file Removed package.json to clean out publish directory --- .vscode/.UserSecrets/file-watcher.json | 195 ------------------------- .vscode/settings.json | 10 ++ File-Watcher.csproj | 26 +--- Helpers/HelperCompass.cs | 2 +- Helpers/HelperEAFLog.cs | 4 +- Helpers/HelperEDADatabase.cs | 13 +- Helpers/HelperEventLog.cs | 4 +- Helpers/HelperInfinityQS.cs | 20 ++- Helpers/HelperStratus.cs | 10 +- Helpers/HelperTCP.cs | 4 +- Helpers/HelperWaferCounter.cs | 4 +- Models/AppSettings.cs | 76 +++++++++- Models/Binder/.editorconfig | 2 - Models/Binder/AppSettings.cs | 150 ------------------- Models/FileWatcherConfiguration.cs | 24 +++ Program.cs | 14 +- Worker.cs | 24 +-- package-lock.json | 35 ----- package.json | 10 -- 19 files changed, 161 insertions(+), 466 deletions(-) delete mode 100644 .vscode/.UserSecrets/file-watcher.json delete mode 100644 Models/Binder/.editorconfig delete mode 100644 Models/Binder/AppSettings.cs create mode 100644 Models/FileWatcherConfiguration.cs delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/.vscode/.UserSecrets/file-watcher.json b/.vscode/.UserSecrets/file-watcher.json deleted file mode 100644 index 046ffc1..0000000 --- a/.vscode/.UserSecrets/file-watcher.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "CamstarOracleConfiguration": { - "DateFormat": "yyyy-MM-dd HH:mm:ss:fff", - "DirectoryX": "C:/Users/ECUSLEOCamstarTsvc/AppData/Local/IFXApps/WinLog/Logs", - "Directory": "D:/Tmp/Phares/WinLog/Logs", - "LogFilter": "Camstar", - "MessageFilters": [ - "Connection Dead", - "not connected to ORACLE" - ], - "MillisecondsDelay": 90000, - "MonitorApplicationResource": "LEO_CAMSTAR_ORACLE_P21_COUNT", - "MonitorApplicationSite": "auc", - "RollingMinutes": 998877123 - }, - "CompassConfiguration": { - "Destination": "\\\\10.95.1.211\\Share\\RawData\\TRENDLOG", - "HoursBack": 4, - "MonthPattern": "MMM", - "Pattern": "*.csv", - "Source": "C:/Alerton/Compass/1.0/CLIMATEC/archive/trendlog", - "TriggerAppendage": ".trg", - "YearPattern": "yyyy" - }, - "DriveConfiguration": { - "Letter": "s", - "Password": "zjtaxxwdEnJ/9tfXQFdj6TKiKBAmpCHWjdi6XYrflw4=", - "Share": "\\\\10.95.1.211\\Share", - "Use": true, - "User": "infineon\\ECMESEAF" - }, - "EAFLogConfiguration": { - "SearchPattern": "*.log*" - }, - "EAFProgramDataConfiguration": { - "Destination": "\\\\messa08ec.infineon.com\\d$\\ProgramData\\EC_Characterization_Si\\RawData", - "Source": "D:/ProgramData/EC_Characterization_Si/RawData" - }, - "EDADatabaseConfiguration": { - "CSharpDateTimeFormat": "yyyy-MM-dd_hh:mm:ss tt", - "FileShare": "\\\\mesfs.infineon.com\\EC_EDA", - "Name": "Staging", - "OracleDateTimeFormat": "yyyy-MM-dd_hh:mi:ss AM", - "Password": "8vIs2nEZPkcdBUfXX0hHlA==", - "TNS": "(description=(address_list=(address=(protocol=tcp)(host=fimess-db.mes.infineon.com)(port=7001)))(connect_data=(sid=fimess)))", - "TNSX": "(description=(address_list=(address=(protocol=tcp)(host=fimesp-db.mes.infineon.com)(port=7002)))(connect_data=(sid=fimesp)))", - "UserName": "edastag" - }, - "IsoConfiguration": { - "DestinationDirectory": "D:/EAF/drssdv702.eu.infineon.com-eafdev-DeliveredPackages-IFX.EAF Kernel SEMI/v2.57.0.0", - "SourceDirectory": "\\\\eafdev.drs.infineon.com\\eafdev\\DeliveredPackages\\IFX.EAF Kernel SEMI\\v2.57.0.0\\EAF v2.57.0.0 API\\complete_with_adaptations" - }, - "InfinityQSConfiguration": { - "ConnectionStringX": "Data Source=messad1001\\test1,59583;Initial Catalog=LSL2SQL;Persist Security Info=True;User ID=srpadmin;Password=0okm9ijn;", - "ConnectionStringXX": "Data Source=messqlec1.infineon.com\\PROD1,53959;Initial Catalog=Metrology;User ID=metrology_rouser;Password=Metrologyrouser2024!;", - "ConnectionStringXXX": "Data Source=messqlec1.infineon.com\\PROD1,53959;Initial Catalog=IRMNSPC;User ID=IRMNSPC;Password=dsaf;", - "ConnectionString": "Data Source=messqlec1.infineon.com\\PROD1,53959;Initial Catalog=IRMNSPC;Integrated Security=True;", - "DestinationDirectory": "L:/File-Watcher/Helper/InfinityQS", - "SubGroupTime": 1727177147, - "TestsFile": "L:/File-Watcher/Helper/InfinityQS/.json", - "Tests": [ - { - "Name": "Bin2", - "Value": 1655396897 - }, - { - "Name": "Thresh", - "Value": 1655396909 - }, - { - "Name": "GradeStdDev", - "Value": 1656695902 - }, - { - "Name": "HgCV Res Average", - "Value": 1228920625 - }, - { - "Name": "3mm Edge % from R/2", - "Value": 1423499546 - }, - { - "Name": "Average Sum of Defects", - "Value": 1125073605 - } - ] - }, - "MetrologyConfiguration": { - "DeleteOlderThanWeeks": 16, - "DirectoriesBack": 2, - "HardcodedValues": [ - "BIORAD2", - "BIORAD3", - "BIORAD4", - "BIORAD5", - "CDE2", - "CDE3", - "CDE4", - "CDE5", - "CDE6", - "HGCV1", - "HGCV2", - "HGCV3", - "TENCOR1", - "TENCOR2", - "TENCOR3", - "SP101", - "SPV01", - "SRP", - "WC6Inch", - "WC8Inch", - "Bio-Rad" - ], - "SourceDirectories": [ - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08ANLYSDIFAAST230\\Source\\MET08ANLYSDIFAAST230", - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08DDUPSFS6420\\Source\\MET08DDUPSFS6420", - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08DDUPSP1TBI\\Source\\MET08DDUPSP1TBI", - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08RESIHGCV\\Source\\MET08RESIHGCV", - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08RESIMAPCDE\\Source\\MET08RESIMAPCDE", - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08RESISRP2100\\Source\\MET08RESISRP2100", - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08THFTIRQS408M\\Source\\MET08THFTIRQS408M", - "\\\\messa01ec.infineon.com\\apps\\Metrology\\Run Data Repository\\MET08THFTIRSTRATUS\\Source\\MET08THFTIRSTRATUS" - ] - }, - "NugetConfiguration": { - "Destination": "L:/File-Watcher/Helper/Nuget/Packages", - "KeyFileExtension": ".nuspec", - "KeyFileExtensionB": "icon", - "KeyFileExtensionC": "readme", - "RenameToLower": true, - "SearchPattern": "*.nupkg", - "Source": "C:/Users/phares/.nuget/packages" - }, - "SerialConfiguration": { - "Destination": "L:/DevOps/MESA_FI/File-Watcher/.vscode", - "GhostPCLFileName": "gpcl6win64.exe", - "LincPDFCFileName": "LincPDFC.exe", - "PortName": "COM37" - }, - "StratusConfiguration": { - "Days": 4, - "Destination": "D:/Tmp", - "DestinationX": "\\\\10.95.1.211\\Share\\RawData\\BIORAD4", - "FileDelimiterPattern": "Mean [0-9.]*, STDD [0-9.]*", - "WatchFile": "DataBiorad.txt" - }, - "TransmissionControlProtocolConfiguration": { - "Destination": "L:/DevOps/MESA_FI/File-Watcher/.vscode", - "GhostPCLFileName": "gpcl6win64.exe", - "IPAddress": "COM37", - "IPAddresses": { - "10.95.154.19": [ - "EPP-WEST", - "6INCH", - "WC6INCH3" - ], - "10.95.154.43": [ - "FQA", - "6INCH", - "WC6INCH1" - ], - "10.95.154.44": [ - "MU", - "6INCH", - "WC6INCH2" - ], - "10.95.154.46": [ - "EPP-EAST", - "6INCH", - "WC6INCH4" - ], - "10.95.154.47": [ - "FQA", - "8INCH", - "WC8INCH1" - ], - "10.95.154.48": [ - "MU", - "8INCH", - "WC8INCH2" - ], - "10.95.154.49": [ - "EPP-WEST", - "8INCH", - "WC8INCH3" - ] - }, - "Port": 950, - "Server": false - }, - "WaferCounterConfiguration": { - "Destination": "\\\\mestsa01ec.infineon.com\\apps\\WaferCounter\\V203", - "MatchPath": false - } -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index a816981..0a66f88 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,19 +15,29 @@ "Camstar", "CHIL", "DEAT", + "DEVICEHEIGHTPOINTS", + "DEVICEWIDTHPOINTS", "endianness", "FAMC", "FAMS", + "FIXEDMEDIA", "GIVN", + "gpcl", + "Hmmssfff", "HUSB", "INDI", "Infineon", "Kanban", "kanbn", "Kofax", + "linc", + "Linc", + "NOPAUSE", "NSFX", "OBJE", "onenote", + "PDFC", + "pdfwrite", "PDSF", "pged", "Phares", diff --git a/File-Watcher.csproj b/File-Watcher.csproj index d2f67d5..18f5f72 100644 --- a/File-Watcher.csproj +++ b/File-Watcher.csproj @@ -18,30 +18,10 @@ - - + + - - - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - + \ No newline at end of file diff --git a/Helpers/HelperCompass.cs b/Helpers/HelperCompass.cs index ae0e0e1..c7a9a62 100644 --- a/Helpers/HelperCompass.cs +++ b/Helpers/HelperCompass.cs @@ -29,7 +29,7 @@ internal class HelperCompass if (string.IsNullOrEmpty(appSettings.DriveConfiguration.Password)) decrypted = string.Empty; else - decrypted = RijndaelEncryption.Decrypt(appSettings.DriveConfiguration.Password, appSettings.Company); + decrypted = RijndaelEncryption.Decrypt(appSettings.DriveConfiguration.Password, appSettings.FileWatcherConfiguration.Company); arguments = $"use {appSettings.DriveConfiguration.Letter}: \"{appSettings.DriveConfiguration.Share}\" /p:yes /user:{appSettings.DriveConfiguration.User} {decrypted}"; _ = stringBuilder.Clear(); segments = arguments.Split(' '); diff --git a/Helpers/HelperEAFLog.cs b/Helpers/HelperEAFLog.cs index ac30c2c..c3568cf 100644 --- a/Helpers/HelperEAFLog.cs +++ b/Helpers/HelperEAFLog.cs @@ -7,8 +7,8 @@ internal static partial class HelperEAFLog internal static bool DeleteFiles(AppSettings appSettings, ILogger logger) { - string[] files = Directory.GetFiles(appSettings.WatchDirectory, appSettings.EAFLogConfiguration.SearchPattern, SearchOption.AllDirectories); - logger.LogInformation("After {MillisecondsDelay} with search pattern '{SearchPattern}' found {files}", appSettings.MillisecondsDelay, appSettings.EAFLogConfiguration.SearchPattern, files.Length); + string[] files = Directory.GetFiles(appSettings.FileWatcherConfiguration.WatchDirectory, appSettings.EAFLogConfiguration.SearchPattern, SearchOption.AllDirectories); + logger.LogInformation("After {MillisecondsDelay} with search pattern '{SearchPattern}' found {files}", appSettings.FileWatcherConfiguration.MillisecondsDelay, appSettings.EAFLogConfiguration.SearchPattern, files.Length); foreach (string file in files) { if (file.EndsWith(".dll")) diff --git a/Helpers/HelperEDADatabase.cs b/Helpers/HelperEDADatabase.cs index 6d4f572..cd96cc5 100644 --- a/Helpers/HelperEDADatabase.cs +++ b/Helpers/HelperEDADatabase.cs @@ -1,9 +1,7 @@ using File_Watcher.Helpers.EDA; using File_Watcher.Models; -using System.Globalization; using System.Text; using System.Text.Json; -using System.Text.RegularExpressions; using System.Xml; using System.Xml.Serialization; @@ -12,12 +10,8 @@ namespace File_Watcher.Helpers; internal static partial class HelperEDADatabase { - private static Calendar? _Calendar; private static string? _EDADataCollectionPlansLastRun; - [GeneratedRegex("[a-zA-Z0-9]{1,}")] - private static partial Regex RegexAZ09(); - private static Stream ToStream(string @this) { MemoryStream? stream = new(); @@ -207,7 +201,7 @@ internal static partial class HelperEDADatabase } } - private static void DataCollectionPlans(AppSettings appSettings, ILogger logger, Calendar calendar, CancellationToken cancellationToken) + private static void DataCollectionPlans(AppSettings appSettings, ILogger logger, CancellationToken cancellationToken) { int fieldCount; object @object; @@ -219,7 +213,7 @@ internal static partial class HelperEDADatabase Array objectTypes = Enum.GetValues(typeof(ModuleInstanceTypeName)); #pragma warning restore IL3050 Dictionary>>> rows = []; - string decrypted = RijndaelEncryption.Decrypt(appSettings.EDADatabaseConfiguration.Password, appSettings.Company); + string decrypted = RijndaelEncryption.Decrypt(appSettings.EDADatabaseConfiguration.Password, appSettings.FileWatcherConfiguration.Company); string connectionString = $"Data Source={appSettings.EDADatabaseConfiguration.TNS}; User Id={appSettings.EDADatabaseConfiguration.UserName}; Password={decrypted};"; rows.Add(appSettings.EDADatabaseConfiguration.Name, []); foreach (ModuleInstanceTypeName objectType in objectTypes) @@ -278,8 +272,7 @@ internal static partial class HelperEDADatabase internal static bool SaveDataCollectionPlans(AppSettings appSettings, ILogger logger, CancellationToken cancellationToken) { - _Calendar ??= new CultureInfo("en-US").Calendar; - DataCollectionPlans(appSettings, logger, _Calendar, cancellationToken); + DataCollectionPlans(appSettings, logger, cancellationToken); return true; } diff --git a/Helpers/HelperEventLog.cs b/Helpers/HelperEventLog.cs index 3f9cc28..9ac54f5 100644 --- a/Helpers/HelperEventLog.cs +++ b/Helpers/HelperEventLog.cs @@ -8,7 +8,7 @@ internal static partial class HelperEventLog internal static bool ClearEventLogs(AppSettings appSettings, ILogger logger) { - if (Directory.Exists(appSettings.WatchDirectory)) + if (Directory.Exists(appSettings.FileWatcherConfiguration.WatchDirectory)) { #pragma warning disable CA1416 using (EventLog eventLog = new("Security", Environment.MachineName)) @@ -26,7 +26,7 @@ internal static partial class HelperEventLog { logger.LogInformation("Error: {logName} - {message}.", eventLog.LogDisplayName, ex.Message); } } #pragma warning restore CA1416 - logger.LogCritical("{Company}", appSettings.Company); + logger.LogCritical("{Company}", appSettings.FileWatcherConfiguration.Company); } return true; } diff --git a/Helpers/HelperInfinityQS.cs b/Helpers/HelperInfinityQS.cs index 606bce2..07f82e6 100644 --- a/Helpers/HelperInfinityQS.cs +++ b/Helpers/HelperInfinityQS.cs @@ -6,10 +6,23 @@ namespace File_Watcher.Helpers; internal static partial class HelperInfinityQS { + private static void KillExisting(string processName) + { + Process[] processes = Process.GetProcessesByName(processName); + foreach (Process process in processes) + { + try + { process.Kill(); } + catch (Exception) { } + } + } + private static void RunMI() { #pragma warning disable CA1416 - ProcessStartInfo processStartInfo = new("iispcmi.exe") + string processName = "iispcmi.exe"; + KillExisting(processName); + ProcessStartInfo processStartInfo = new(processName) { Domain = "Infineon", UseShellExecute = false, @@ -17,14 +30,15 @@ internal static partial class HelperInfinityQS PasswordInClearText = "j(1(P%xB=g}3w9db", WorkingDirectory = "C:/Program Files (x86)/InfinityQS International/ProFicient/Applications" }; + TimeSpan timeSpan = new(DateTime.Now.AddDays(7).Ticks - DateTime.Now.Ticks); Process process = Process.Start(processStartInfo) ?? throw new NullReferenceException(nameof(Process)); - process.WaitForExit(); + _ = process.WaitForExit((int)timeSpan.TotalMilliseconds); #pragma warning restore CA1416 } internal static bool Select(AppSettings appSettings, ILogger logger) { - logger.LogInformation(appSettings.Company); + logger.LogInformation(appSettings.FileWatcherConfiguration.Company); RunMI(); return true; } diff --git a/Helpers/HelperStratus.cs b/Helpers/HelperStratus.cs index 7d5b39b..684d8ed 100644 --- a/Helpers/HelperStratus.cs +++ b/Helpers/HelperStratus.cs @@ -29,7 +29,7 @@ internal static partial class HelperStratus continue; if (!Regex.Match(line, appSettings.StratusConfiguration.FileDelimiterPattern).Success) continue; - weekYearDirectory = Path.Combine(appSettings.WatchDirectory, $"{fileInfo.CreationTime.Year}_Week_{weekOfYear}"); + weekYearDirectory = Path.Combine(appSettings.FileWatcherConfiguration.WatchDirectory, $"{fileInfo.CreationTime.Year}_Week_{weekOfYear}"); checkDirectory = Path.Combine(weekYearDirectory, fileInfo.CreationTime.ToString("yyyy-MM-dd")); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); @@ -81,19 +81,19 @@ internal static partial class HelperStratus internal static bool MoveFile(AppSettings appSettings, ILogger logger) { // http://10.95.154.10:8081/2023_Week_45/2023-11-08/a.txt - string checkFile = Path.Combine(appSettings.WatchDirectory, appSettings.StratusConfiguration.WatchFile); + string checkFile = Path.Combine(appSettings.FileWatcherConfiguration.WatchDirectory, appSettings.StratusConfiguration.WatchFile); try { TryMoveFile(appSettings, checkFile); } catch (Exception ex) { logger.LogError(ex, "Inner loop error!"); - Thread.Sleep(appSettings.MillisecondsDelay * 5); + Thread.Sleep(appSettings.FileWatcherConfiguration.MillisecondsDelay * 5); } Console.WriteLine("Hello"); int days = appSettings.StratusConfiguration.Days; - string sourceDirectory = appSettings.WatchDirectory; - int millisecondsDelay = appSettings.MillisecondsDelay; string pattern = appSettings.StratusConfiguration.FileDelimiterPattern; + string sourceDirectory = appSettings.FileWatcherConfiguration.WatchDirectory; + int millisecondsDelay = appSettings.FileWatcherConfiguration.MillisecondsDelay; string archiveDirectory = Path.GetFullPath(appSettings.StratusConfiguration.Destination); try { TryArchiveFilesFramework(sourceDirectory, pattern, archiveDirectory, days); } diff --git a/Helpers/HelperTCP.cs b/Helpers/HelperTCP.cs index fd1b221..169d1ff 100644 --- a/Helpers/HelperTCP.cs +++ b/Helpers/HelperTCP.cs @@ -99,7 +99,7 @@ internal static partial class HelperTCP { List results = []; byte[] bytes = new byte[1024]; - string directory = Path.Combine(transmissionControlProtocolConfiguration.Destination, transmissionControlProtocolConfiguration.IPAddress); + string directory = Path.GetFullPath(Path.Combine(transmissionControlProtocolConfiguration.Destination, transmissionControlProtocolConfiguration.IPAddress)); if (!Directory.Exists(directory)) _ = Directory.CreateDirectory(directory); do @@ -110,7 +110,7 @@ internal static partial class HelperTCP } while (networkStream.DataAvailable); if (results.Count > 0) - File.WriteAllBytes(string.Concat(directory, $"-{DateTime.Now.Ticks}{directory[^1]}.raw"), results.ToArray()); + File.WriteAllBytes(Path.Combine(directory, $"{DateTime.Now.Ticks}{directory[^1]}.raw"), results.ToArray()); } internal static bool ReadWrite(AppSettings appSettings, ILogger logger) diff --git a/Helpers/HelperWaferCounter.cs b/Helpers/HelperWaferCounter.cs index 545933c..9a64507 100644 --- a/Helpers/HelperWaferCounter.cs +++ b/Helpers/HelperWaferCounter.cs @@ -11,7 +11,7 @@ internal static partial class HelperWaferCounter string checkFile; FileInfo fileInfo; string checkDirectory; - string[] directories = Directory.GetDirectories(appSettings.WatchDirectory, "*", SearchOption.TopDirectoryOnly); + string[] directories = Directory.GetDirectories(appSettings.FileWatcherConfiguration.WatchDirectory, "*", SearchOption.TopDirectoryOnly); foreach (string directory in directories) { checkDirectory = !appSettings.WaferCounterConfiguration.MatchPath ? appSettings.WaferCounterConfiguration.Destination : Path.Combine(appSettings.WaferCounterConfiguration.Destination, Path.GetFileName(directory)); @@ -23,7 +23,7 @@ internal static partial class HelperWaferCounter foreach (string file in files) { fileInfo = new(file); - if (new TimeSpan(DateTime.Now.Ticks - fileInfo.LastWriteTime.Ticks).TotalMilliseconds < appSettings.MillisecondsDelay) + if (new TimeSpan(DateTime.Now.Ticks - fileInfo.LastWriteTime.Ticks).TotalMilliseconds < appSettings.FileWatcherConfiguration.MillisecondsDelay) continue; checkFile = Path.Combine(checkDirectory, Path.GetFileName(file)); if (File.Exists(checkFile)) diff --git a/Models/AppSettings.cs b/Models/AppSettings.cs index 6fbe22e..b4db9f3 100644 --- a/Models/AppSettings.cs +++ b/Models/AppSettings.cs @@ -8,6 +8,7 @@ public record AppSettings(CamstarOracleConfiguration CamstarOracleConfiguration, DriveConfiguration DriveConfiguration, EAFLogConfiguration EAFLogConfiguration, EDADatabaseConfiguration EDADatabaseConfiguration, + FileWatcherConfiguration FileWatcherConfiguration, InfinityQSConfiguration InfinityQSConfiguration, IsoConfiguration IsoConfiguration, MetrologyConfiguration MetrologyConfiguration, @@ -15,13 +16,7 @@ public record AppSettings(CamstarOracleConfiguration CamstarOracleConfiguration, SerialConfiguration SerialConfiguration, StratusConfiguration StratusConfiguration, TransmissionControlProtocolConfiguration TransmissionControlProtocolConfiguration, - WaferCounterConfiguration WaferCounterConfiguration, - string BuildNumber, - string Company, - string GitCommitSeven, - string Helper, - int MillisecondsDelay, - string WatchDirectory) + WaferCounterConfiguration WaferCounterConfiguration) { public override string ToString() @@ -30,6 +25,73 @@ public record AppSettings(CamstarOracleConfiguration CamstarOracleConfiguration, return result; } + private static void Verify(AppSettings _) + { } + + public static AppSettings Get(IConfigurationRoot configurationRoot) + { + AppSettings result; +#pragma warning disable IL3050, IL2026 + CamstarOracleConfiguration? camstarOracleConfiguration = configurationRoot.GetSection(nameof(CamstarOracleConfiguration)).Get(); + CompassConfiguration? compassConfiguration = configurationRoot.GetSection(nameof(CompassConfiguration)).Get(); + DriveConfiguration? driveConfiguration = configurationRoot.GetSection(nameof(DriveConfiguration)).Get(); + EAFLogConfiguration? eafLogConfiguration = configurationRoot.GetSection(nameof(EAFLogConfiguration)).Get(); + EDADatabaseConfiguration? edaDatabaseConfiguration = configurationRoot.GetSection(nameof(EDADatabaseConfiguration)).Get(); + FileWatcherConfiguration? fileWatcherConfiguration = configurationRoot.GetSection(nameof(FileWatcherConfiguration)).Get(); + InfinityQSConfiguration? infinityQSConfiguration = configurationRoot.GetSection(nameof(InfinityQSConfiguration)).Get(); + IsoConfiguration? isoConfiguration = configurationRoot.GetSection(nameof(IsoConfiguration)).Get(); + MetrologyConfiguration? metrologyConfiguration = configurationRoot.GetSection(nameof(MetrologyConfiguration)).Get(); + NugetConfiguration? nugetConfiguration = configurationRoot.GetSection(nameof(NugetConfiguration)).Get(); + SerialConfiguration? serialConfiguration = configurationRoot.GetSection(nameof(SerialConfiguration)).Get(); + StratusConfiguration? stratusConfiguration = configurationRoot.GetSection(nameof(StratusConfiguration)).Get(); + TransmissionControlProtocolConfiguration? transmissionControlProtocolConfiguration = configurationRoot.GetSection(nameof(TransmissionControlProtocolConfiguration)).Get(); + WaferCounterConfiguration? waferCounterConfiguration = configurationRoot.GetSection(nameof(WaferCounterConfiguration)).Get(); +#pragma warning restore IL3050, IL2026 + if (camstarOracleConfiguration is null + || compassConfiguration is null + || driveConfiguration is null + || eafLogConfiguration is null + || edaDatabaseConfiguration is null + || fileWatcherConfiguration is null + || infinityQSConfiguration is null + || isoConfiguration is null + || metrologyConfiguration is null + || nugetConfiguration is null + || serialConfiguration is null + || stratusConfiguration is null + || transmissionControlProtocolConfiguration is null + || waferCounterConfiguration is null + || fileWatcherConfiguration?.Company is null) + { + List paths = []; + foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) + { + if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) + continue; + if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) + continue; + paths.Add(physicalFileProvider.Root); + } + throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}"); + } + result = new(camstarOracleConfiguration, + compassConfiguration, + driveConfiguration, + eafLogConfiguration, + edaDatabaseConfiguration, + fileWatcherConfiguration, + infinityQSConfiguration, + isoConfiguration, + metrologyConfiguration, + nugetConfiguration, + serialConfiguration, + stratusConfiguration, + transmissionControlProtocolConfiguration, + waferCounterConfiguration); + Verify(result); + return result; + } + } [JsonSourceGenerationOptions(WriteIndented = true)] diff --git a/Models/Binder/.editorconfig b/Models/Binder/.editorconfig deleted file mode 100644 index 1c444cd..0000000 --- a/Models/Binder/.editorconfig +++ /dev/null @@ -1,2 +0,0 @@ -[*.cs] -csharp_preserve_single_line_statements = true \ No newline at end of file diff --git a/Models/Binder/AppSettings.cs b/Models/Binder/AppSettings.cs deleted file mode 100644 index e49dc0e..0000000 --- a/Models/Binder/AppSettings.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace File_Watcher.Models.Binder; - -public class AppSettings -{ - - public string? BuildNumber { get; set; } - public string[]? ConfigurationDirectoryNames { get; set; } - public int? ConfigurationSpecialFolder { get; set; } - public string? ConfigurationFileName { get; set; } - public string? Company { get; set; } - public string? GitCommitSeven { get; set; } - public string? Helper { get; set; } - public int? MillisecondsDelay { get; set; } - public string? WatchDirectory { get; set; } - - public override string ToString() - { - string result = JsonSerializer.Serialize(this, BinderAppSettingsSourceGenerationContext.Default.AppSettings); - return result; - } - - private static void PreVerify(IConfigurationRoot configurationRoot, AppSettings? appSettings) - { - if (appSettings?.BuildNumber is null) - { - List paths = []; - foreach (IConfigurationProvider configurationProvider in configurationRoot.Providers) - { - if (configurationProvider is not Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider jsonConfigurationProvider) - continue; - if (jsonConfigurationProvider.Source.FileProvider is not Microsoft.Extensions.FileProviders.PhysicalFileProvider physicalFileProvider) - continue; - paths.Add(physicalFileProvider.Root); - } - throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}"); - } - } - - private static void Verify(AppSettings _) - { - } - - private static Models.AppSettings Get(AppSettings? appSettings, - CamstarOracleConfiguration camstarOracleConfiguration, - CompassConfiguration compassConfiguration, - DriveConfiguration driveConfiguration, - EAFLogConfiguration eafLogConfiguration, - EDADatabaseConfiguration edaDatabaseConfiguration, - InfinityQSConfiguration infinityQSConfiguration, - IsoConfiguration isoConfiguration, - MetrologyConfiguration metrologyConfiguration, - NugetConfiguration nugetConfiguration, - SerialConfiguration serialConfiguration, - StratusConfiguration stratusConfiguration, - TransmissionControlProtocolConfiguration transmissionControlProtocolConfiguration, - WaferCounterConfiguration waferCounterConfiguration) - { - Models.AppSettings result; - if (appSettings is null) throw new NullReferenceException(nameof(appSettings)); - if (appSettings.BuildNumber is null) throw new NullReferenceException(nameof(BuildNumber)); - if (appSettings.Company is null) throw new NullReferenceException(nameof(Company)); - if (appSettings.GitCommitSeven is null) throw new NullReferenceException(nameof(GitCommitSeven)); - if (appSettings.Helper is null) throw new NullReferenceException(nameof(Helper)); - if (appSettings.MillisecondsDelay is null) throw new NullReferenceException(nameof(MillisecondsDelay)); - if (appSettings.WatchDirectory is null) throw new NullReferenceException(nameof(WatchDirectory)); - Verify(appSettings); - result = new(camstarOracleConfiguration, - compassConfiguration, - driveConfiguration, - eafLogConfiguration, - edaDatabaseConfiguration, - infinityQSConfiguration, - isoConfiguration, - metrologyConfiguration, - nugetConfiguration, - serialConfiguration, - stratusConfiguration, - transmissionControlProtocolConfiguration, - waferCounterConfiguration, - appSettings.BuildNumber, - appSettings.Company, - appSettings.GitCommitSeven, - appSettings.Helper, - appSettings.MillisecondsDelay.Value, - appSettings.WatchDirectory); - return result; - } - - private static Models.AppSettings Get(AppSettings? appSettings) - { - Models.AppSettings? results; - string? json; - if (appSettings is null || appSettings.ConfigurationFileName is null) - throw new NotSupportedException($"{nameof(appSettings.ConfigurationFileName)} must be set!"); - string jsonFile = Path.Combine(AppContext.BaseDirectory, appSettings.ConfigurationFileName); - if (File.Exists(jsonFile)) - json = File.ReadAllText(jsonFile); - else - { - json = null; - string applicationData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); - List collection = [applicationData]; - if (appSettings?.ConfigurationDirectoryNames is not null) - collection.AddRange(appSettings.ConfigurationDirectoryNames); - if (appSettings?.ConfigurationFileName is not null) - collection.Add(appSettings.ConfigurationFileName); - jsonFile = Path.Combine(collection.ToArray()); - } - if (string.IsNullOrEmpty(json) && File.Exists(jsonFile)) - json = File.ReadAllText(jsonFile); - results = (string.IsNullOrEmpty(json) ? null : results = JsonSerializer.Deserialize(json, AppSettingsSourceGenerationContext.Default.AppSettings)) ?? - throw new NullReferenceException(nameof(Models.AppSettings)); - results = Get(appSettings, - results.CamstarOracleConfiguration, - results.CompassConfiguration, - results.DriveConfiguration, - results.EAFLogConfiguration, - results.EDADatabaseConfiguration, - results.InfinityQSConfiguration, - results.IsoConfiguration, - results.MetrologyConfiguration, - results.NugetConfiguration, - results.SerialConfiguration, - results.StratusConfiguration, - results.TransmissionControlProtocolConfiguration, - results.WaferCounterConfiguration); - return results; - } - - public static Models.AppSettings Get(IConfigurationRoot configurationRoot) - { - Models.AppSettings result; -#pragma warning disable IL3050, IL2026 - AppSettings? appSettings = configurationRoot.Get(); -#pragma warning restore IL3050, IL2026 - PreVerify(configurationRoot, appSettings); - result = Get(appSettings); - return result; - } - -} - -[JsonSourceGenerationOptions(WriteIndented = true)] -[JsonSerializable(typeof(AppSettings))] -internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext -{ -} \ No newline at end of file diff --git a/Models/FileWatcherConfiguration.cs b/Models/FileWatcherConfiguration.cs new file mode 100644 index 0000000..ba29db9 --- /dev/null +++ b/Models/FileWatcherConfiguration.cs @@ -0,0 +1,24 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace File_Watcher.Models; + +public record FileWatcherConfiguration(string Company, + string Helper, + int MillisecondsDelay, + string WatchDirectory) +{ + + public override string ToString() + { + string result = JsonSerializer.Serialize(this, FileWatcherConfigurationSourceGenerationContext.Default.FileWatcherConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(FileWatcherConfiguration))] +internal partial class FileWatcherConfigurationSourceGenerationContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/Program.cs b/Program.cs index 2d8bd32..3740d23 100644 --- a/Program.cs +++ b/Program.cs @@ -14,12 +14,16 @@ public class Program WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args); #pragma warning restore IL3050 _ = webApplicationBuilder.Configuration.AddUserSecrets(); - AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration); - if (string.IsNullOrEmpty(appSettings.Company)) + AppSettings appSettings = AppSettings.Get(webApplicationBuilder.Configuration); + if (string.IsNullOrEmpty(appSettings.FileWatcherConfiguration.Company)) throw new Exception("Company name must have a value!"); try { - List collection = []; + List collection = + [ + $"BuildNumber:{webApplicationBuilder.Configuration.GetValue("BuildNumber")};", + $"GitCommitSeven:{webApplicationBuilder.Configuration.GetValue("GitCommitSeven")};" + ]; _ = webApplicationBuilder.Services.AddHttpClient(); _ = webApplicationBuilder.Services.AddHostedService(); _ = webApplicationBuilder.Services.AddSingleton(collection); @@ -38,13 +42,13 @@ public class Program } using WebApplication webApplication = webApplicationBuilder.Build(); logger = webApplication.Services.GetRequiredService>(); - if (string.IsNullOrEmpty(appSettings.Company)) + if (string.IsNullOrEmpty(appSettings.FileWatcherConfiguration.Company)) { Environment.ExitCode = -1; _ = webApplication.StopAsync(); } logger.LogInformation("Starting Web Application"); - logger.LogCritical("{Company}", appSettings.Company); + logger.LogCritical("{Company}", appSettings.FileWatcherConfiguration.Company); await webApplication.RunAsync(); } catch (Exception ex) diff --git a/Worker.cs b/Worker.cs index 06ae561..e2c20b0 100644 --- a/Worker.cs +++ b/Worker.cs @@ -15,7 +15,7 @@ public partial class Worker : BackgroundService public override Task StopAsync(CancellationToken cancellationToken) { - if (_AppSettings.Helper == nameof(Helpers.HelperCamstarOracle)) + if (_AppSettings.FileWatcherConfiguration.Helper == nameof(Helpers.HelperCamstarOracle)) Helpers.HelperCamstarOracle.Heartbeat(_AppSettings, _HttpClientFactory, _Logger, Infineon.Monitoring.MonA.State.Down, cancellationToken); return base.StopAsync(cancellationToken); } @@ -25,7 +25,7 @@ public partial class Worker : BackgroundService _Logger = logger; _AppSettings = appSettings; _HttpClientFactory = httpClientFactory; - logger.LogInformation("{buildNumber}-{gitCommitSeven}", _AppSettings.BuildNumber, _AppSettings.GitCommitSeven); + logger.LogInformation(string.Join(Environment.NewLine, collection)); try { logger.LogInformation("<{folder}>", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); } catch (Exception) { } @@ -35,18 +35,18 @@ public partial class Worker : BackgroundService private void BodyInner(CancellationToken cancellationToken) { - _Logger.LogInformation("A) Next execute will be at {date}", DateTime.Now.AddMilliseconds(_AppSettings.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt")); + _Logger.LogInformation("A) Next execute will be at {date}", DateTime.Now.AddMilliseconds(_AppSettings.FileWatcherConfiguration.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt")); if (_First is null || _First.Value) { _First = false; - if (_AppSettings.Helper == nameof(Helpers.HelperCamstarOracle)) + if (_AppSettings.FileWatcherConfiguration.Helper == nameof(Helpers.HelperCamstarOracle)) Helpers.HelperCamstarOracle.Heartbeat(_AppSettings, _HttpClientFactory, _Logger, Infineon.Monitoring.MonA.State.Up, cancellationToken); } - if (!Directory.Exists(_AppSettings.WatchDirectory)) - _ = Directory.CreateDirectory(_AppSettings.WatchDirectory); + if (!Directory.Exists(_AppSettings.FileWatcherConfiguration.WatchDirectory)) + _ = Directory.CreateDirectory(_AppSettings.FileWatcherConfiguration.WatchDirectory); else { - _ = _AppSettings.Helper switch + _ = _AppSettings.FileWatcherConfiguration.Helper switch { nameof(Helpers.HelperNuget) => Helpers.HelperNuget.Sync(_AppSettings, _Logger), nameof(Helpers.HelperTCP) => Helpers.HelperTCP.ReadWrite(_AppSettings, _Logger), @@ -64,28 +64,28 @@ public partial class Worker : BackgroundService _ => throw new NotSupportedException() }; } - _Logger.LogInformation("B) Next execute will be at {date}", DateTime.Now.AddMilliseconds(_AppSettings.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt")); + _Logger.LogInformation("B) Next execute will be at {date}", DateTime.Now.AddMilliseconds(_AppSettings.FileWatcherConfiguration.MillisecondsDelay).ToString("yyyy-MM-dd hh:mm:ss.fff tt")); } private async Task Body(CancellationToken cancellationToken) { if (!_IsWindowsService) { - _Logger.LogInformation("Set break point and skip to run {_AppSettings.Helper}!", _AppSettings.Helper); - throw new EvaluateException($"Set break point and skip to run {_AppSettings.Helper}!"); + _Logger.LogInformation("Set break point and skip to run {_AppSettings.FileWatcherConfiguration.Helper}!", _AppSettings.FileWatcherConfiguration.Helper); + throw new EvaluateException($"Set break point and skip to run {_AppSettings.FileWatcherConfiguration.Helper}!"); } if (!_IsWindowsService) { for (int i = 0; i < int.MaxValue; i++) { BodyInner(cancellationToken); - Thread.Sleep(_AppSettings.MillisecondsDelay); + Thread.Sleep(_AppSettings.FileWatcherConfiguration.MillisecondsDelay); } } while (_IsWindowsService && !cancellationToken.IsCancellationRequested) { BodyInner(cancellationToken); - await Task.Delay(_AppSettings.MillisecondsDelay, cancellationToken); + await Task.Delay(_AppSettings.FileWatcherConfiguration.MillisecondsDelay, cancellationToken); } } diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 1380eab..0000000 --- a/package-lock.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "File-Watcher", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "devDependencies": { - "prettier": "3.0.0" - } - }, - "node_modules/prettier": { - "version": "3.0.0", - "resolved": "http://localhost:4873/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - } - }, - "dependencies": { - "prettier": { - "version": "3.0.0", - "resolved": "http://localhost:4873/prettier/-/prettier-3.0.0.tgz", - "integrity": "sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==", - "dev": true - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index b7f882a..0000000 --- a/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "scripts": { - "prettier.check": "prettier . --check", - "prettier.write": "prettier . --write", - "garbage-collect": "git gc" - }, - "devDependencies": { - "prettier": "3.0.0" - } -} \ No newline at end of file