Compare commits

...

3 Commits

Author SHA1 Message Date
61cbb37001 .net8.0 2024-10-21 11:55:12 -07:00
59db921a65 .editorconfig 2022-11-11 12:29:10 -07:00
94643d7c4d Filter bug fix 2022-11-10 10:36:04 -05:00
10 changed files with 99 additions and 56 deletions

View File

@ -83,6 +83,7 @@ dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant. dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2"); dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary dotnet_diagnostic.IDE0005.severity = warning # Using directive is unnecessary
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049) dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049)
dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter dotnet_diagnostic.IDE0060.severity = warning # IDE0060: Remove unused parameter

1
.vscode/format-report.json vendored Normal file
View File

@ -0,0 +1 @@
[]

6
.vscode/launch.json vendored
View File

@ -10,7 +10,7 @@
"request": "launch", "request": "launch",
"preLaunchTask": "build", "preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path. // If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/bin/Debug/net6.0/win-x64/WinLog.dll", "program": "${workspaceFolder}/bin/Debug/net8.0/win-x64/WinLog.dll",
"args": [], "args": [],
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}",
// For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
@ -25,5 +25,5 @@
] ]
} }
// dotnet publish --configuration Release -o "C:\Users\ECUSLEOCamstarTsvc\AppData\Local\IFXApps\WinLog\bin\Release\net6.0\win-x64\publish" // dotnet publish --configuration Release -o "C:\Users\ECUSLEOCamstarTsvc\AppData\Local\IFXApps\WinLog\bin\Release\net8.0\win-x64\publish"
//sc create "WinLog-5001" start= delayed-auto DisplayName="WinLog-5001" binPath= "C:\Users\ECUSLEOCamstarTsvc\AppData\Local\IFXApps\WinLog\bin\Release\net6.0\win-x64\publish\WinLog.exe" obj= "infineon\ECUSLEOCamstarTsvc" password= ";tS&Yqp$i1(Kp;n" //sc create "WinLog-5001" start= delayed-auto DisplayName="WinLog-5001" binPath= "C:\Users\ECUSLEOCamstarTsvc\AppData\Local\IFXApps\WinLog\bin\Release\net8.0\win-x64\publish\WinLog.exe" obj= "infineon\ECUSLEOCamstarTsvc" password= ";tS&Yqp$i1(Kp;n"

17
.vscode/tasks.json vendored
View File

@ -36,6 +36,23 @@
"${workspaceFolder}/WinLog.csproj" "${workspaceFolder}/WinLog.csproj"
], ],
"problemMatcher": "$msCompile" "problemMatcher": "$msCompile"
},
{
"label": "Publish AOT",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"-r",
"win-x64",
"-c",
"Release",
"-p:PublishAot=true",
"${workspaceFolder}/WinLog.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
} }
] ]
} }

View File

@ -3,35 +3,36 @@ using System.Text.Json.Serialization;
namespace WinLog.Models; namespace WinLog.Models;
public class AppSettings [method: JsonConstructor]
public class AppSettings(string dateFormat,
string directory,
string logFilter,
string[] messageFilters,
string monitorApplicationResource,
string monitorApplicationSite,
int millisecondsDelay,
int rollingMinutes)
{ {
public string DateFormat { init; get; } public string DateFormat { init; get; } = dateFormat;
public string Directory { init; get; } public string Directory { init; get; } = directory;
public string LogFilter { init; get; } public string LogFilter { init; get; } = logFilter;
public string[] MessageFilters { init; get; } public string[] MessageFilters { init; get; } = messageFilters;
public string MonitorApplicationResource { init; get; } public string MonitorApplicationResource { init; get; } = monitorApplicationResource;
public string MonitorApplicationSite { init; get; } public string MonitorApplicationSite { init; get; } = monitorApplicationSite;
public int MillisecondsDelay { init; get; } public int MillisecondsDelay { init; get; } = millisecondsDelay;
public int RollingMinutes { init; get; } public int RollingMinutes { init; get; } = rollingMinutes;
[JsonConstructor]
public AppSettings(string dateFormat, string directory, string logFilter, string[] messageFilters, string monitorApplicationResource, string monitorApplicationSite, int millisecondsDelay, int rollingMinutes)
{
Directory = directory;
LogFilter = logFilter;
DateFormat = dateFormat;
MessageFilters = messageFilters;
MonitorApplicationResource = monitorApplicationResource;
MonitorApplicationSite = monitorApplicationSite;
MillisecondsDelay = millisecondsDelay;
RollingMinutes = rollingMinutes;
}
public override string ToString() public override string ToString()
{ {
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings);
return result; return result;
} }
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext
{
} }

View File

@ -0,0 +1,2 @@
[*.cs]
csharp_preserve_single_line_statements = true

View File

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization;
namespace WinLog.Models.Binder; namespace WinLog.Models.Binder;
@ -21,21 +22,21 @@ public class AppSettings
public override string ToString() public override string ToString()
{ {
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); string result = JsonSerializer.Serialize(this, BinderAppSettingsSourceGenerationContext.Default.AppSettings);
return result; return result;
} }
private static Models.AppSettings Get(AppSettings appSettings) private static Models.AppSettings Get(AppSettings? appSettings)
{ {
Models.AppSettings result; Models.AppSettings result;
if (appSettings.DateFormat is null) throw new NullReferenceException(nameof(DateFormat)); if (appSettings?.DateFormat is null) throw new NullReferenceException(nameof(DateFormat));
if (appSettings.Directory is null) throw new NullReferenceException(nameof(Directory)); if (appSettings?.Directory is null) throw new NullReferenceException(nameof(Directory));
if (appSettings.LogFilter is null) throw new NullReferenceException(nameof(LogFilter)); if (appSettings?.LogFilter is null) throw new NullReferenceException(nameof(LogFilter));
if (appSettings.MessageFilters is null) throw new NullReferenceException(nameof(MessageFilters)); if (appSettings?.MessageFilters is null) throw new NullReferenceException(nameof(MessageFilters));
if (appSettings.MillisecondsDelay is null) throw new NullReferenceException(nameof(MillisecondsDelay)); if (appSettings?.MillisecondsDelay is null) throw new NullReferenceException(nameof(MillisecondsDelay));
if (appSettings.MonitorApplicationResource is null) throw new NullReferenceException(nameof(MonitorApplicationResource)); if (appSettings?.MonitorApplicationResource is null) throw new NullReferenceException(nameof(MonitorApplicationResource));
if (appSettings.MonitorApplicationSite is null) throw new NullReferenceException(nameof(MonitorApplicationSite)); if (appSettings?.MonitorApplicationSite is null) throw new NullReferenceException(nameof(MonitorApplicationSite));
if (appSettings.RollingMinutes is null) throw new NullReferenceException(nameof(RollingMinutes)); if (appSettings?.RollingMinutes is null) throw new NullReferenceException(nameof(RollingMinutes));
result = new(appSettings.DateFormat, appSettings.Directory, appSettings.LogFilter, appSettings.MessageFilters, appSettings.MonitorApplicationResource, appSettings.MonitorApplicationSite, appSettings.MillisecondsDelay.Value, appSettings.RollingMinutes.Value); result = new(appSettings.DateFormat, appSettings.Directory, appSettings.LogFilter, appSettings.MessageFilters, appSettings.MonitorApplicationResource, appSettings.MonitorApplicationSite, appSettings.MillisecondsDelay.Value, appSettings.RollingMinutes.Value);
return result; return result;
} }
@ -43,9 +44,17 @@ public class AppSettings
public static Models.AppSettings Get(IConfiguration configuration) public static Models.AppSettings Get(IConfiguration configuration)
{ {
Models.AppSettings result; Models.AppSettings result;
AppSettings appSettings = configuration.Get<AppSettings>(); #pragma warning disable IL3050, IL2026
AppSettings? appSettings = configuration.Get<AppSettings>();
#pragma warning restore IL3050, IL2026
result = Get(appSettings); result = Get(appSettings);
return result; return result;
} }
}
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(AppSettings))]
internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext
{
} }

View File

@ -1,12 +1,20 @@
using WinLog; using WinLog;
IHost host = Host.CreateDefaultBuilder(args) internal class Program
.ConfigureServices((hostContext, services) => {
{
_ = services.AddSingleton(WinLog.Models.Binder.AppSettings.Get(hostContext.Configuration));
_ = services.AddHostedService<Worker>();
})
.UseWindowsService()
.Build();
await host.RunAsync(); private static async Task Main(string[] args)
{
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
_ = services.AddSingleton(WinLog.Models.Binder.AppSettings.Get(hostContext.Configuration));
_ = services.AddHostedService<Worker>();
})
.UseWindowsService()
.Build();
await host.RunAsync();
}
}

View File

@ -4,13 +4,13 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<RuntimeIdentifier>win-x64</RuntimeIdentifier> <RuntimeIdentifier>win-x64</RuntimeIdentifier>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ServerGarbageCollection>true</ServerGarbageCollection> <ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="appsettings.json"> <None Include="appsettings.json">

View File

@ -9,6 +9,7 @@ public class Worker : BackgroundService
{ {
private int? _LastValue; private int? _LastValue;
private bool? _Heartbeat;
private DateTime? _LastUpload; private DateTime? _LastUpload;
private readonly Calendar _Calendar; private readonly Calendar _Calendar;
private readonly ILogger<Worker> _Logger; private readonly ILogger<Worker> _Logger;
@ -17,6 +18,7 @@ public class Worker : BackgroundService
public Worker(ILogger<Worker> logger, AppSettings appSettings) public Worker(ILogger<Worker> logger, AppSettings appSettings)
{ {
_Logger = logger; _Logger = logger;
_Heartbeat = null;
_AppSettings = appSettings; _AppSettings = appSettings;
_Calendar = new CultureInfo("en-US").Calendar; _Calendar = new CultureInfo("en-US").Calendar;
if (!Directory.Exists(_AppSettings.Directory)) if (!Directory.Exists(_AppSettings.Directory))
@ -27,7 +29,7 @@ public class Worker : BackgroundService
private static List<EventLogEntry> GetOracleEventLogEntries(AppSettings appSettings, DateTime dateTime) private static List<EventLogEntry> GetOracleEventLogEntries(AppSettings appSettings, DateTime dateTime)
{ {
List<EventLogEntry> results = new(); List<EventLogEntry> results = [];
EventLog[] eventLogs = EventLog.GetEventLogs(); EventLog[] eventLogs = EventLog.GetEventLogs();
long ticks = dateTime.AddMinutes(-appSettings.RollingMinutes).Ticks; long ticks = dateTime.AddMinutes(-appSettings.RollingMinutes).Ticks;
foreach (EventLog eventLog in eventLogs) foreach (EventLog eventLog in eventLogs)
@ -40,7 +42,7 @@ public class Worker : BackgroundService
continue; continue;
if (eventLogEntry.TimeGenerated.Ticks < ticks) if (eventLogEntry.TimeGenerated.Ticks < ticks)
continue; continue;
if (appSettings.MessageFilters.Any(l => !eventLogEntry.Message.Contains(l))) if (!appSettings.MessageFilters.Any(l => eventLogEntry.Message.Contains(l)))
continue; continue;
results.Add(eventLogEntry); results.Add(eventLogEntry);
} }
@ -50,7 +52,7 @@ public class Worker : BackgroundService
private static List<(DateTime, string)> GetOracleEventLogEntryMessages(AppSettings appSettings, DateTime dateTime) private static List<(DateTime, string)> GetOracleEventLogEntryMessages(AppSettings appSettings, DateTime dateTime)
{ {
List<(DateTime, string)> results = new(); List<(DateTime, string)> results = [];
List<EventLogEntry> collection = GetOracleEventLogEntries(appSettings, dateTime); List<EventLogEntry> collection = GetOracleEventLogEntries(appSettings, dateTime);
foreach (EventLogEntry eventLogEntry in collection) foreach (EventLogEntry eventLogEntry in collection)
results.Add(new(eventLogEntry.TimeGenerated, eventLogEntry.Message)); results.Add(new(eventLogEntry.TimeGenerated, eventLogEntry.Message));
@ -62,14 +64,16 @@ public class Worker : BackgroundService
public override Task StartAsync(CancellationToken cancellationToken) public override Task StartAsync(CancellationToken cancellationToken)
{ {
MonIn monIn = MonIn.GetInstance(); MonIn monIn = MonIn.GetInstance();
_ = monIn.SendStatus(_AppSettings.MonitorApplicationSite, _AppSettings.MonitorApplicationResource, "Heartbeat", State.Up); string result = monIn.SendStatus(_AppSettings.MonitorApplicationSite, _AppSettings.MonitorApplicationResource, "Heartbeat", State.Ok);
_Heartbeat = !string.IsNullOrEmpty(result);
return base.StartAsync(cancellationToken); return base.StartAsync(cancellationToken);
} }
public override Task StopAsync(CancellationToken cancellationToken) public override Task StopAsync(CancellationToken cancellationToken)
{ {
MonIn monIn = MonIn.GetInstance(); MonIn monIn = MonIn.GetInstance();
_ = monIn.SendStatus(_AppSettings.MonitorApplicationSite, _AppSettings.MonitorApplicationResource, "Heartbeat", State.Down); string result = monIn.SendStatus(_AppSettings.MonitorApplicationSite, _AppSettings.MonitorApplicationResource, "Heartbeat", State.Down);
_Heartbeat = !string.IsNullOrEmpty(result);
return base.StopAsync(cancellationToken); return base.StopAsync(cancellationToken);
} }
@ -80,7 +84,7 @@ public class Worker : BackgroundService
string weekOfYear; string weekOfYear;
string weekDirectory; string weekDirectory;
string formattedDateTime; string formattedDateTime;
List<string> lines = new(); List<string> lines = [];
MonIn monIn = MonIn.GetInstance(); MonIn monIn = MonIn.GetInstance();
string performanceName = string.Concat(_AppSettings.MonitorApplicationResource, "_Count"); string performanceName = string.Concat(_AppSettings.MonitorApplicationResource, "_Count");
while (!stoppingToken.IsCancellationRequested) while (!stoppingToken.IsCancellationRequested)