Add InfinityQSProjectConfiguration and related email functionality
This commit is contained in:
@ -20,7 +20,7 @@
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="8.0.1" />
|
||||
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="23.7.0" />
|
||||
<PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="8.0.19" />
|
||||
<PackageReference Include="runtime.win-x64.Microsoft.DotNet.ILCompiler" Version="8.0.20" />
|
||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="8.0.16" />
|
||||
<PackageReference Include="System.IO.Ports" Version="8.0.0" />
|
||||
|
100
Helpers/InfinityQSProjectHelper.cs
Normal file
100
Helpers/InfinityQSProjectHelper.cs
Normal file
@ -0,0 +1,100 @@
|
||||
using File_Watcher.Models;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Net.Mail;
|
||||
|
||||
namespace File_Watcher.Helpers;
|
||||
|
||||
internal static partial class InfinityQSProjectHelper
|
||||
{
|
||||
private record Record(ReadOnlyCollection<string> FilteredLines,
|
||||
DateTime LastWriteTimeUtc,
|
||||
string Path);
|
||||
|
||||
private static long _LastReview;
|
||||
private static readonly Dictionary<string, Record> _KeyValuePairs = [];
|
||||
|
||||
internal static bool SendEmail(AppSettings appSettings, ILogger<Worker> logger)
|
||||
{
|
||||
InfinityQSProjectConfiguration configuration = appSettings.InfinityQSProjectConfiguration;
|
||||
ReadOnlyDictionary<string, Record> keyValuePairs = GetKeyValuePairs(logger, configuration);
|
||||
SendEmail(logger, configuration, keyValuePairs);
|
||||
_LastReview = DateTime.UtcNow.Ticks;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static ReadOnlyDictionary<string, Record> GetKeyValuePairs(ILogger<Worker> logger, InfinityQSProjectConfiguration configuration)
|
||||
{
|
||||
bool check;
|
||||
Record record;
|
||||
string[] lines;
|
||||
FileInfo fileInfo;
|
||||
List<string> filtered = [];
|
||||
Dictionary<string, Record> results = [];
|
||||
string[] files = Directory.GetFiles(configuration.SourceDirectory, configuration.SearchPattern, SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
{
|
||||
check = false;
|
||||
filtered.Clear();
|
||||
fileInfo = new(file);
|
||||
if (fileInfo.LastWriteTimeUtc.Ticks < _LastReview)
|
||||
{
|
||||
logger.LogDebug("Old File:{file}", file);
|
||||
continue;
|
||||
}
|
||||
if (_KeyValuePairs.ContainsKey(fileInfo.FullName))
|
||||
{
|
||||
logger.LogDebug("Verified File:{file}", file);
|
||||
continue;
|
||||
}
|
||||
lines = File.ReadAllLines(fileInfo.FullName);
|
||||
foreach (string line in lines)
|
||||
{
|
||||
if (!check && line.Contains(configuration.Search))
|
||||
{
|
||||
check = true;
|
||||
continue;
|
||||
}
|
||||
if (check)
|
||||
{
|
||||
if (line.StartsWith(configuration.Search[0]))
|
||||
break;
|
||||
filtered.Add(line);
|
||||
}
|
||||
}
|
||||
record = new(FilteredLines: filtered.AsReadOnly(),
|
||||
LastWriteTimeUtc: fileInfo.LastWriteTimeUtc,
|
||||
Path: fileInfo.FullName);
|
||||
results.Add(fileInfo.FullName, record);
|
||||
}
|
||||
return results.AsReadOnly();
|
||||
}
|
||||
|
||||
private static void SendEmail(ILogger<Worker> logger, InfinityQSProjectConfiguration configuration, ReadOnlyDictionary<string, Record> keyValuePairs)
|
||||
{
|
||||
string body;
|
||||
foreach (KeyValuePair<string, Record> keyValuePair in keyValuePairs)
|
||||
{
|
||||
logger.LogDebug("File:{file}", keyValuePair.Key);
|
||||
body = $"InfinityQS Project Change Detected{Environment.NewLine}File:{keyValuePair.Key}{Environment.NewLine}LastWriteTimeUtc:{keyValuePair.Value:O}{Environment.NewLine}{string.Join(Environment.NewLine, keyValuePair.Value.FilteredLines)}";
|
||||
logger.LogWarning("SendEmail:{body}", body);
|
||||
SendEmail(configuration.From, configuration.To, configuration.SimpleMailTransferProtocolServer, configuration.Subject, body);
|
||||
}
|
||||
}
|
||||
|
||||
private static void SendEmail(string from, string to, string simpleMailTransferProtocolServer, string subject, string body)
|
||||
{
|
||||
SmtpClient smtpClient = new(simpleMailTransferProtocolServer);
|
||||
MailMessage mailMessage = new()
|
||||
{
|
||||
From = new MailAddress(from),
|
||||
Subject = subject,
|
||||
Body = body,
|
||||
Priority = MailPriority.High
|
||||
};
|
||||
mailMessage.To.Add(new MailAddress(to));
|
||||
smtpClient.Send(mailMessage);
|
||||
smtpClient.Dispose();
|
||||
mailMessage.Dispose();
|
||||
}
|
||||
|
||||
}
|
@ -13,6 +13,7 @@ public record AppSettings(CamstarOracleConfiguration CamstarOracleConfiguration,
|
||||
EDADatabaseConfiguration EDADatabaseConfiguration,
|
||||
FileWatcherConfiguration FileWatcherConfiguration,
|
||||
InfinityQSConfiguration InfinityQSConfiguration,
|
||||
InfinityQSProjectConfiguration InfinityQSProjectConfiguration,
|
||||
IsoConfiguration IsoConfiguration,
|
||||
MetadataSettings MetadataSettings,
|
||||
MetrologyConfiguration MetrologyConfiguration,
|
||||
@ -40,6 +41,7 @@ public record AppSettings(CamstarOracleConfiguration CamstarOracleConfiguration,
|
||||
EDADatabaseConfiguration? edaDatabaseConfiguration = configurationRoot.GetSection(nameof(EDADatabaseConfiguration)).Get<EDADatabaseConfiguration>();
|
||||
FileWatcherConfiguration? fileWatcherConfiguration = configurationRoot.GetSection(nameof(FileWatcherConfiguration)).Get<FileWatcherConfiguration>();
|
||||
InfinityQSConfiguration? infinityQSConfiguration = configurationRoot.GetSection(nameof(InfinityQSConfiguration)).Get<InfinityQSConfiguration>();
|
||||
InfinityQSProjectConfiguration? infinityQSProjectConfiguration = configurationRoot.GetSection(nameof(InfinityQSProjectConfiguration)).Get<InfinityQSProjectConfiguration>();
|
||||
IsoConfiguration? isoConfiguration = configurationRoot.GetSection(nameof(IsoConfiguration)).Get<IsoConfiguration>();
|
||||
MetadataSettings? metadataSettings = configurationRoot.GetSection(nameof(MetadataSettings)).Get<MetadataSettings>();
|
||||
MetrologyConfiguration? metrologyConfiguration = configurationRoot.GetSection(nameof(MetrologyConfiguration)).Get<MetrologyConfiguration>();
|
||||
@ -62,6 +64,7 @@ public record AppSettings(CamstarOracleConfiguration CamstarOracleConfiguration,
|
||||
|| edaDatabaseConfiguration is null
|
||||
|| fileWatcherConfiguration is null
|
||||
|| infinityQSConfiguration is null
|
||||
|| infinityQSProjectConfiguration is null
|
||||
|| isoConfiguration is null
|
||||
|| metadataSettings is null
|
||||
|| metrologyConfiguration is null
|
||||
@ -96,6 +99,7 @@ public record AppSettings(CamstarOracleConfiguration CamstarOracleConfiguration,
|
||||
edaDatabaseConfiguration,
|
||||
fileWatcherConfiguration,
|
||||
infinityQSConfiguration,
|
||||
infinityQSProjectConfiguration,
|
||||
isoConfiguration,
|
||||
metadataSettings,
|
||||
metrologyConfiguration,
|
||||
|
27
Models/InfinityQSProjectConfiguration.cs
Normal file
27
Models/InfinityQSProjectConfiguration.cs
Normal file
@ -0,0 +1,27 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace File_Watcher.Models;
|
||||
|
||||
public record InfinityQSProjectConfiguration(string From,
|
||||
string Search,
|
||||
string SearchPattern,
|
||||
string SimpleMailTransferProtocolServer,
|
||||
string SourceDirectory,
|
||||
string Subject,
|
||||
string To)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, InfinityQSProjectConfigurationSourceGenerationContext.Default.InfinityQSProjectConfiguration);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(InfinityQSProjectConfiguration))]
|
||||
internal partial class InfinityQSProjectConfigurationSourceGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
@ -89,6 +89,7 @@ public partial class Worker : BackgroundService
|
||||
nameof(Helpers.HelperWaferCounter) => Helpers.HelperWaferCounter.MoveFile(_AppSettings, _Logger),
|
||||
nameof(Helpers.HelperSerial) => Helpers.HelperSerial.ReadWrite(_AppSettings, _Logger, cancellationToken),
|
||||
nameof(Helpers.HelperMetrologyFiles) => Helpers.HelperMetrologyFiles.SortAndDelete(_AppSettings, _Logger),
|
||||
nameof(Helpers.InfinityQSProjectHelper) => Helpers.InfinityQSProjectHelper.SendEmail(_AppSettings, _Logger),
|
||||
nameof(Helpers.NationalInstrumentsHelper) => Helpers.NationalInstrumentsHelper.WriteData(_AppSettings, _Logger),
|
||||
nameof(Helpers.DeterministicHashCodeHelper) => Helpers.DeterministicHashCodeHelper.WindowsWork(_AppSettings, _Logger),
|
||||
nameof(Helpers.TransmissionControlProtocolHelper) => Helpers.TransmissionControlProtocolHelper.ReadWrite(_AppSettings, _Logger),
|
||||
|
Reference in New Issue
Block a user