diff --git a/.vscode/.UserSecrets/file-watcher.json b/.vscode/.UserSecrets/file-watcher.json
new file mode 100644
index 0000000..cbf5f64
--- /dev/null
+++ b/.vscode/.UserSecrets/file-watcher.json
@@ -0,0 +1,142 @@
+{
+ "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"
+ },
+ "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/.UserSecrets/secrets.json b/.vscode/.UserSecrets/secrets.json
new file mode 100644
index 0000000..71b4494
--- /dev/null
+++ b/.vscode/.UserSecrets/secrets.json
@@ -0,0 +1,51 @@
+{
+ "_Application": "File-Watcher",
+ "_UserSecretsId": "6062c774-99a9-4f4a-b42d-a9cb7fcbd8be",
+ "BuildNumber": "1234",
+ "ConfigurationDirectoryNames": [
+ "Microsoft",
+ "UserSecrets",
+ "6062c774-99a9-4f4a-b42d-a9cb7fcbd8be"
+ ],
+ "ConfigurationSpecialFolder": 26,
+ "ConfigurationFileName": "file-watcher.json",
+ "Company": "Infineon Technologies Americas Corp.",
+ "GitCommitSeven": "asdf",
+ "HelperX": "HelperTCP",
+ "HelperXX": "HelperNuget",
+ "HelperXXX": "HelperEAFLog",
+ "HelperXXXX": "HelperSerial",
+ "HelperXXXXX": "HelperCompass",
+ "Helper": "HelperStratus",
+ "HelperXXXXXXX": "HelperEventLog",
+ "HelperXXXXXXXX": "HelperInfinityQS",
+ "HelperXXXXXXXXX": "HelperWaferCounter",
+ "HelperXXXXXXXXXX": "HelperEAFProgramData",
+ "HelperXXXXXXXXXXX": "HelperMetrologyFiles",
+ "Logging:Console:FormatterName": "simple",
+ "Logging:Console:FormatterOptions:IncludeScopes": "True",
+ "Logging:Console:FormatterOptions:SingleLine": "True",
+ "Logging:Console:FormatterOptions:TimestampFormat": "HH:mm:ss ",
+ "Logging:Console:FormatterOptions:UseUtcTimestamp": "True",
+ "Logging:Console:LogLevel:Default": "Information",
+ "Logging:Console:LogLevel:Microsoft": "Warning",
+ "Logging:Console:LogLevel:Microsoft.Hosting.Lifetime": "Information",
+ "Logging:Debug:FormatterName": "simple",
+ "Logging:Debug:FormatterOptions:IncludeScopes": "True",
+ "Logging:Debug:FormatterOptions:SingleLine": "True",
+ "Logging:Debug:FormatterOptions:TimestampFormat": "HH:mm:ss ",
+ "Logging:Debug:FormatterOptions:UseUtcTimestamp": "True",
+ "Logging:Debug:LogLevel:Default": "Warning",
+ "Logging:Debug:LogLevel:Microsoft": "Information",
+ "Logging:Debug:LogLevel:Microsoft.Hosting.Lifetime": "Debug",
+ "Logging:EventLog:LogLevel:Default": "Warning",
+ "Logging:EventSource:LogLevel:Default": "Warning",
+ "Logging:LogLevel:Default": "Debug",
+ "Logging:LogLevel:Microsoft": "Information",
+ "Logging:LogLevel:Microsoft.Hosting.Lifetime": "Debug",
+ "MillisecondsDelay": 54000,
+ "URLs": "http://localhost:5003;",
+ "WatchDirectory": "D:/Tmp/Phares/Event-Log",
+ "WatchDirectoryXX": "D:/EAF/EAF Instances",
+ "WatchDirectoryXXX": "C:/software/WaferCounter/V203"
+}
\ No newline at end of file
diff --git a/.vscode/mklink.md b/.vscode/mklink.md
new file mode 100644
index 0000000..63e8ef0
--- /dev/null
+++ b/.vscode/mklink.md
@@ -0,0 +1,5 @@
+# mklink
+
+```bash Wed Jul 24 2024 08:28:01 GMT-0700 (Mountain Standard Time)
+mklink /J "L:\DevOps\Mesa_FI\File-Watcher\.vscode\.UserSecrets" "C:\Users\phares\AppData\Roaming\Microsoft\UserSecrets\6062c774-99a9-4f4a-b42d-a9cb7fcbd8be"
+```
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 58d4b91..4375b57 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -71,16 +71,15 @@
],
"problemMatcher": "$msCompile"
},
- {
- "label": "File-Folder-Helper AOT s V Helpers",
- "type": "shell",
- "command": "L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net8.0/win-x64/publish/File-Folder-Helper.exe s V Helpers",
- "problemMatcher": []
- },
{
"label": "File-Folder-Helper AOT s X Sort",
"type": "shell",
- "command": "L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net8.0/win-x64/publish/File-Folder-Helper.exe s X 'L:/DevOps/Mesa_FI/File-Watcher' Day-Helper-2024-01-08 'L:/DevOps/Mesa_FI/File-Watcher/Helpers'",
+ "command": "L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net8.0/win-x64/publish/File-Folder-Helper.exe",
+ "args": [
+ "s",
+ "X",
+ "L:/DevOps/Mesa_FI/File-Watcher' Day-Helper-2024-01-08 'L:/DevOps/Mesa_FI/File-Watcher/Helpers"
+ ],
"problemMatcher": []
}
]
diff --git a/File-Watcher.csproj b/File-Watcher.csproj
index 9e373b8..920cfce 100644
--- a/File-Watcher.csproj
+++ b/File-Watcher.csproj
@@ -10,15 +10,15 @@
6062c774-99a9-4f4a-b42d-a9cb7fcbd8be
-
+
-
-
+
+
-
+
diff --git a/File-Watcher.yaml b/File-Watcher.yaml
new file mode 100644
index 0000000..ce2f296
--- /dev/null
+++ b/File-Watcher.yaml
@@ -0,0 +1,45 @@
+trigger:
+ branches:
+ include:
+ - main
+pool:
+ name: eaf
+ demands: eaf-ems-pc
+variables:
+ buildConfiguration: "Release"
+ ASPNETCORE_ENVIRONMENT: "Production"
+jobs:
+ - job: BuildTestPublish
+ steps:
+ - script: |
+ echo repo: $(Build.Repository.Name)
+ echo buildId: $(Build.BuildId)
+ echo build configuration: $(BuildConfiguration)
+ displayName: "Echo Check"
+
+ - task: DotNetCoreCLI@2
+ displayName: "dotnet build"
+ inputs:
+ command: "build"
+ configuration: $(BuildConfiguration)
+
+ - task: DotNetCoreCLI@2
+ displayName: "dotnet test"
+ inputs:
+ command: "test"
+ arguments: "-c $(BuildConfiguration)"
+ publishTestResults: true
+ projects: MesaProveInTests
+
+ - task: DotNetCoreCLI@2
+ displayName: "dotnet publish"
+ inputs:
+ command: "publish"
+ publishWebProjects: true
+ arguments: "-c $(BuildConfiguration) -o $(Build.ArtifactStagingDirectory) -r win-x64 /p:EnvironmentName=$(ASPNETCORE_ENVIRONMENT)"
+
+ - task: CopyFiles@2
+ displayName: "Copy Files"
+ inputs:
+ SourceFolder: "$(Build.ArtifactStagingDirectory)"
+ TargetFolder: 'D:\$(Build.Repository.Name)\$(Build.BuildId)\$(BuildConfiguration)'
\ No newline at end of file
diff --git a/Helpers/HelperStratus.cs b/Helpers/HelperStratus.cs
index 1bd29a1..7d5b39b 100644
--- a/Helpers/HelperStratus.cs
+++ b/Helpers/HelperStratus.cs
@@ -13,13 +13,14 @@ internal static partial class HelperStratus
private static void TryMoveFile(AppSettings appSettings, string checkFile)
{
string line;
+ string checkDirectory;
string weekYearDirectory;
List collection = [];
- DateTime dateTime = DateTime.Now;
+ FileInfo fileInfo = new(checkFile);
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");
+ string[] lines = !fileInfo.Exists ? [] : File.ReadAllLines(checkFile);
+ string weekOfYear = calendar.GetWeekOfYear(fileInfo.CreationTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
for (int i = 0; i < lines.Length; i++)
{
line = lines[i];
@@ -28,10 +29,11 @@ internal static partial class HelperStratus
continue;
if (!Regex.Match(line, appSettings.StratusConfiguration.FileDelimiterPattern).Success)
continue;
- 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);
+ weekYearDirectory = Path.Combine(appSettings.WatchDirectory, $"{fileInfo.CreationTime.Year}_Week_{weekOfYear}");
+ checkDirectory = Path.Combine(weekYearDirectory, fileInfo.CreationTime.ToString("yyyy-MM-dd"));
+ if (!Directory.Exists(checkDirectory))
+ _ = Directory.CreateDirectory(checkDirectory);
+ File.WriteAllLines(Path.Combine(checkDirectory, $"{fileInfo.CreationTime.Ticks}.txt"), collection);
collection.Clear();
for (int j = i + 1; j < lines.Length; j++)
collection.Add(lines[j]);
@@ -41,8 +43,44 @@ internal static partial class HelperStratus
}
}
+ private static void TryArchiveFilesFramework(string sourceDirectory, string pattern, string archiveDirectory, int days)
+ {
+ string checkFile;
+ FileInfo fileInfo;
+ string weekOfYear;
+ string checkDirectory;
+ string[] directorySegments;
+ DateTime dateTime = DateTime.Now.AddDays(-days);
+ Calendar calendar = new CultureInfo("en-US").Calendar;
+ string[] sourceDirectorySegments = sourceDirectory.Split(Path.DirectorySeparatorChar);
+ string[] files = Directory.GetFiles(sourceDirectory, pattern, SearchOption.AllDirectories);
+ if (sourceDirectorySegments.Length < 2)
+ throw new Exception("Can't be root drive!");
+ foreach (string file in files)
+ {
+ fileInfo = new FileInfo(file);
+ if (string.IsNullOrEmpty(fileInfo.DirectoryName) || fileInfo.LastWriteTime > dateTime)
+ continue;
+ directorySegments = fileInfo.DirectoryName.Split(Path.DirectorySeparatorChar);
+ if (directorySegments.Length < sourceDirectorySegments.Length)
+ continue;
+ weekOfYear = $"{fileInfo.CreationTime.Year}_Week_{calendar.GetWeekOfYear(fileInfo.CreationTime, CalendarWeekRule.FirstDay, DayOfWeek.Sunday):00}";
+ checkDirectory = string.Concat(archiveDirectory, Path.DirectorySeparatorChar, weekOfYear);
+ for (int i = sourceDirectorySegments.Length; i < directorySegments.Length; i++)
+ checkDirectory = string.Concat(checkDirectory, Path.DirectorySeparatorChar, directorySegments[i]);
+ checkDirectory = string.Concat(checkDirectory, Path.DirectorySeparatorChar, fileInfo.CreationTime.ToString("yyyy-MM-dd"));
+ if (!Directory.Exists(checkDirectory))
+ _ = Directory.CreateDirectory(checkDirectory);
+ checkFile = Path.Combine(checkDirectory, fileInfo.Name);
+ if (File.Exists(checkFile))
+ continue;
+ File.Move(fileInfo.FullName, checkFile);
+ }
+ }
+
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);
try
{ TryMoveFile(appSettings, checkFile); }
@@ -51,6 +89,19 @@ internal static partial class HelperStratus
logger.LogError(ex, "Inner loop error!");
Thread.Sleep(appSettings.MillisecondsDelay * 5);
}
+ Console.WriteLine("Hello");
+ int days = appSettings.StratusConfiguration.Days;
+ string sourceDirectory = appSettings.WatchDirectory;
+ int millisecondsDelay = appSettings.MillisecondsDelay;
+ string pattern = appSettings.StratusConfiguration.FileDelimiterPattern;
+ string archiveDirectory = Path.GetFullPath(appSettings.StratusConfiguration.Destination);
+ try
+ { TryArchiveFilesFramework(sourceDirectory, pattern, archiveDirectory, days); }
+ catch (Exception ex)
+ {
+ logger.LogError(ex, "Inner loop error!");
+ Thread.Sleep(millisecondsDelay * 5);
+ }
return true;
}
diff --git a/Models/StratusConfiguration.cs b/Models/StratusConfiguration.cs
index 41bdeb2..a0401a0 100644
--- a/Models/StratusConfiguration.cs
+++ b/Models/StratusConfiguration.cs
@@ -3,7 +3,8 @@ using System.Text.Json.Serialization;
namespace File_Watcher.Models;
-public record StratusConfiguration(string Destination,
+public record StratusConfiguration(int Days,
+ string Destination,
string FileDelimiterPattern,
string WatchFile)
{