Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
61cbb37001 | |||
59db921a65 | |||
94643d7c4d |
@ -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
1
.vscode/format-report.json
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
[]
|
6
.vscode/launch.json
vendored
6
.vscode/launch.json
vendored
@ -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
17
.vscode/tasks.json
vendored
@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -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
|
||||||
|
{
|
||||||
}
|
}
|
2
Models/Binder/.editorconfig
Normal file
2
Models/Binder/.editorconfig
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[*.cs]
|
||||||
|
csharp_preserve_single_line_statements = true
|
@ -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
|
||||||
|
{
|
||||||
}
|
}
|
26
Program.cs
26
Program.cs
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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">
|
||||||
|
16
Worker.cs
16
Worker.cs
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user