diff --git a/.gitignore b/.gitignore
index fb12081..6f19ff6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -346,4 +346,6 @@ SignalRChat/*
Server/wwwroot/js/chat.js
Server/Hubs/ChatHub.cs
Server/Pages/Chat.cshtml
-Server/Pages/Chat.cshtml.cs
\ No newline at end of file
+Server/Pages/Chat.cshtml.cs
+
+.kanbn
\ No newline at end of file
diff --git a/.kanbn/index.md b/.kanbn/index.md
index 9582bdc..fd306ec 100644
--- a/.kanbn/index.md
+++ b/.kanbn/index.md
@@ -4,6 +4,9 @@ startedColumns:
completedColumns:
- Done
dateFormat: mm/dd
+created: "2023-10-20T05:13:53.975Z"
+updated: "2023-10-20T05:13:53.975Z"
+type: "note"
---
# Barcode-Host
@@ -25,6 +28,7 @@ dateFormat: mm/dd
- [roll-out](tasks/roll-out.md)
- [publish](tasks/publish.md)
- [post-only-once](tasks/post-only-once.md)
+- [convert-to-net-7](tasks/convert-to-net-7.md)
## Done
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5feb921..f5c7f36 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,19 +1,16 @@
{
- "files.eol": "\n",
- "[markdown]": {
- "editor.wordWrap": "off"
- },
- "cSpell.enabled": false,
- "thunder-client.saveToWorkspace": true,
- "thunder-client.workspaceRelativePath": ".vscode",
- "coverage-gutters.coverageBaseDir": "../.vscode/TestResults/*",
- "[markdown]": {
- "editor.wordWrap": "off"
- },
- "files.exclude": {
- "**/node_modules": true
- },
- "files.watcherExclude": {
- "**/node_modules": true
- }
+ "[markdown]": {
+ "editor.wordWrap": "off"
+ },
+ "coverage-gutters.coverageBaseDir": "../.vscode/TestResults/*",
+ "cSpell.enabled": false,
+ "files.eol": "\n",
+ "files.exclude": {
+ "**/node_modules": true
+ },
+ "files.watcherExclude": {
+ "**/node_modules": true
+ },
+ "thunder-client.saveToWorkspace": true,
+ "thunder-client.workspaceRelativePath": ".vscode"
}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index f8f4a21..0f30f9f 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -1,5 +1,4 @@
{
- "version": "2.0.0",
"options": {
"env": {
"serverUserSecretsId": "02dce973-df1d-4325-962a-ed549af8d4c5"
@@ -7,21 +6,18 @@
},
"tasks": [
{
- "label": "userSecretsInit",
- "command": "dotnet",
- "type": "process",
"args": [
"user-secrets",
"-p",
"${workspaceFolder}/Server/Barcode.Host.Server.csproj",
"init"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "userSecretsInit",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "userSecretsSet",
- "command": "dotnet",
- "type": "process",
"args": [
"user-secrets",
"-p",
@@ -30,12 +26,12 @@
"asdf",
"123"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "userSecretsSet",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "userSecretsMkLink",
- "command": "cmd",
- "type": "shell",
"args": [
"/c",
"mklink",
@@ -43,47 +39,47 @@
".vscode\\UserSecrets",
"${userHome}\\AppData\\Roaming\\Microsoft\\UserSecrets\\$env:serverUserSecretsId"
],
- "problemMatcher": "$msCompile"
+ "command": "cmd",
+ "label": "userSecretsMkLink",
+ "problemMatcher": "$msCompile",
+ "type": "shell"
},
{
- "label": "buildServer",
- "command": "dotnet",
- "type": "process",
"args": [
"build",
"${workspaceFolder}/Server/Barcode.Host.Server.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "buildServer",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "publishServer",
- "command": "dotnet",
- "type": "process",
"args": [
"publish",
"${workspaceFolder}/Server/Barcode.Host.Server.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "publishServer",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "testDebug",
- "command": "dotnet",
- "type": "process",
"args": [
"test",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "testDebug",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "testRelease",
- "command": "dotnet",
- "type": "process",
"args": [
"test",
"/property:GenerateFullPaths=true",
@@ -91,12 +87,12 @@
"-c",
"Release"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "testRelease",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "format",
- "command": "dotnet",
- "type": "process",
"args": [
"format",
"--report",
@@ -106,24 +102,24 @@
"--severity",
"warn"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "format",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "old-watch",
- "command": "dotnet",
- "type": "process",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/Server/Barcode.Host.Server.csproj"
],
- "problemMatcher": "$msCompile"
+ "command": "dotnet",
+ "label": "old-watch",
+ "problemMatcher": "$msCompile",
+ "type": "process"
},
{
- "label": "watchServer",
- "command": "dotnet",
- "type": "process",
"args": [
"watch",
"--launch-profile",
@@ -133,68 +129,72 @@
"${workspaceFolder}/Server/Barcode.Host.Server.csproj",
"--verbose"
],
- "isBackground": true,
+ "command": "dotnet",
"dependsOn": [
"build"
],
+ "isBackground": true,
+ "label": "watchServer",
"problemMatcher": {
- "fileLocation": "relative",
- "pattern": {
- "regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$",
- "file": 1,
- "location": 2,
- "severity": 3,
- "code": 4,
- "message": 5
- },
"background": {
"activeOnStart": true,
"beginsPattern": "^.*Shutdown requested.*",
"endsPattern": "^.*Application started.*"
+ },
+ "fileLocation": "relative",
+ "pattern": {
+ "code": 4,
+ "file": 1,
+ "location": 2,
+ "message": 5,
+ "regexp": "^([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s*:\\s*(.*)$",
+ "severity": 3
}
- }
+ },
+ "type": "process"
},
{
- "label": "PowerShell Force Clean",
- "type": "shell",
"command": "& Get-ChildItem . -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }",
- "problemMatcher": []
+ "label": "PowerShell Force Clean",
+ "problemMatcher": [],
+ "type": "shell"
},
{
- "label": "PowerShell Clean TestResults",
- "type": "shell",
"command": "& Get-ChildItem . -include TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }",
- "problemMatcher": []
+ "label": "PowerShell Clean TestResults",
+ "problemMatcher": [],
+ "type": "shell"
},
{
- "label": "File-Folder-Helper AOT s Set metadata",
- "type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe .kanbn",
- "problemMatcher": []
+ "label": "File-Folder-Helper AOT s Set metadata",
+ "problemMatcher": [],
+ "type": "shell"
},
{
- "label": "File-Folder-Helper AOT s M tasks",
- "type": "shell",
"command": "& L:/DevOps/Mesa_FI/File-Folder-Helper/bin/Release/net7.0/win-x64/publish/File-Folder-Helper.exe s M .kanbn/tasks",
- "problemMatcher": []
+ "label": "File-Folder-Helper AOT s M tasks",
+ "problemMatcher": [],
+ "type": "shell"
},
{
"label": "Kanbn Console",
- "type": "npm",
+ "problemMatcher": [],
"script": "kanbn.board",
- "problemMatcher": []
+ "type": "npm"
},
{
- "label": "Kanbn Write Boad",
- "type": "shell",
"command": "& kanbn board -j | L:/Git/kanbn2md/kanbn2md.exe >.kanbn/board.md",
- "problemMatcher": []
+ "label": "Kanbn Write Boad",
+ "problemMatcher": [],
+ "type": "shell"
},
{
"label": "Kanbn Write json",
- "type": "npm",
+ "problemMatcher": [],
"script": "kanbn.board.json",
- "problemMatcher": []
+ "type": "npm"
}
- ]
+ ],
+ "version": "2.0.0"
}
\ No newline at end of file
diff --git a/Server.Tests/Barcode.Host.Server.Tests.csproj b/Server.Tests/Barcode.Host.Server.Tests.csproj
index ba1516e..362da56 100644
--- a/Server.Tests/Barcode.Host.Server.Tests.csproj
+++ b/Server.Tests/Barcode.Host.Server.Tests.csproj
@@ -4,6 +4,7 @@
enable
win-x64;linux-x64
net7.0
+ 02dce973-df1d-4325-962a-ed549af8d4c5
trx
@@ -30,25 +31,13 @@
-
-
-
-
-
-
-
-
+
+
+
+
-
-
- Always
-
-
- Always
-
-
\ No newline at end of file
diff --git a/Server.Tests/UnitTestFileService.cs b/Server.Tests/UnitTestFileService.cs
index 86b2b7e..03985fb 100644
--- a/Server.Tests/UnitTestFileService.cs
+++ b/Server.Tests/UnitTestFileService.cs
@@ -2,7 +2,7 @@ using Barcode.Host.Shared.Models;
using Barcode.Host.Shared.Models.Stateless;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
-using Serilog;
+using Microsoft.Extensions.Logging;
namespace Barcode.Host.Tests;
@@ -10,20 +10,17 @@ namespace Barcode.Host.Tests;
public class UnitTestFileService
{
-#pragma warning disable CS8618
-
- private static ILogger _Logger;
- private static TestContext _TestContext;
- private static WebApplicationFactory _WebApplicationFactory;
-
-#pragma warning restore
+ private static ILogger? _Logger;
+ private static TestContext? _TestContext;
+ private static WebApplicationFactory? _WebApplicationFactory;
[ClassInitialize]
public static void ClassInitAsync(TestContext testContext)
{
_TestContext = testContext;
- _Logger = Log.ForContext();
_WebApplicationFactory = new WebApplicationFactory();
+ IServiceProvider serviceProvider = _WebApplicationFactory.Services.CreateScope().ServiceProvider;
+ _Logger = serviceProvider.GetRequiredService>();
}
private static void NonThrowTryCatch()
@@ -39,13 +36,15 @@ public class UnitTestFileService
[TestMethod]
public void GetWrite()
{
- _Logger.Information("Starting Web Application");
- IServiceProvider serviceProvider = _WebApplicationFactory.Services.CreateScope().ServiceProvider;
- Server.Models.AppSettings appSettings = serviceProvider.GetRequiredService();
- IFileService fileService = serviceProvider.GetRequiredService();
- Notification notification = new(KeyPressEvent: null, "Test", appSettings.ToolClass, null);
+ _Logger?.LogInformation("Starting Web Application");
+ IServiceProvider? serviceProvider = _WebApplicationFactory?.Services.CreateScope().ServiceProvider;
+ Server.Models.AppSettings? appSettings = serviceProvider?.GetRequiredService();
+ IFileService? fileService = serviceProvider?.GetRequiredService();
+ Assert.IsNotNull(appSettings);
+ Assert.IsNotNull(fileService);
+ Notification? notification = new(KeyPressEvent: null, "Test", appSettings.ToolClass, null);
fileService.Write(appSettings.EquipmentName, appSettings.FileShare, calendar: null, notification);
- _Logger.Information($"{_TestContext?.TestName} completed");
+ _Logger?.LogInformation("{testName} completed", _TestContext?.TestName);
NonThrowTryCatch();
}
diff --git a/Server.Tests/UnitTestLastScanController.cs b/Server.Tests/UnitTestLastScanController.cs
index 5247513..3159167 100644
--- a/Server.Tests/UnitTestLastScanController.cs
+++ b/Server.Tests/UnitTestLastScanController.cs
@@ -2,7 +2,7 @@ using Barcode.Host.Shared.DataModels;
using Barcode.Host.Shared.Models.Stateless;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
-using Serilog;
+using Microsoft.Extensions.Logging;
namespace Barcode.Host.Tests;
@@ -10,21 +10,18 @@ namespace Barcode.Host.Tests;
public class UnitTestLastScanController
{
-#pragma warning disable CS8618
-
- private static ILogger _Logger;
- private static string _ControllerName;
- private static TestContext _TestContext;
- private static WebApplicationFactory _WebApplicationFactory;
-
-#pragma warning restore
+ private static ILogger? _Logger;
+ private static string? _ControllerName;
+ private static TestContext? _TestContext;
+ private static WebApplicationFactory? _WebApplicationFactory;
[ClassInitialize]
public static void ClassInitAsync(TestContext testContext)
{
_TestContext = testContext;
- _Logger = Log.ForContext();
_WebApplicationFactory = new WebApplicationFactory();
+ IServiceProvider serviceProvider = _WebApplicationFactory.Services.CreateScope().ServiceProvider;
+ _Logger = serviceProvider.GetRequiredService>();
_ControllerName = nameof(Server.ApiControllers.LastScanController)[..^10];
}
@@ -38,9 +35,9 @@ public class UnitTestLastScanController
[TestMethod]
public void TestControllerName()
{
- _Logger.Information("Starting Web Application");
+ _Logger?.LogInformation("Starting Web Application");
Assert.AreEqual(ILastScanController.GetRouteName(), _ControllerName);
- _Logger.Information($"{_TestContext?.TestName} completed");
+ _Logger?.LogInformation("{testName} completed", _TestContext?.TestName);
NonThrowTryCatch();
}
@@ -50,12 +47,13 @@ public class UnitTestLastScanController
[TestMethod]
public void GetScan()
{
- _Logger.Information("Starting Web Application");
- IServiceProvider serviceProvider = _WebApplicationFactory.Services.CreateScope().ServiceProvider;
- ILastScanService lastScanService = serviceProvider.GetRequiredService();
+ _Logger?.LogInformation("Starting Web Application");
+ IServiceProvider? serviceProvider = _WebApplicationFactory?.Services.CreateScope().ServiceProvider;
+ ILastScanService? lastScanService = serviceProvider?.GetRequiredService();
+ Assert.IsNotNull(lastScanService);
Result result = lastScanService.GetScan();
Assert.IsNotNull(result?.Results);
- _Logger.Information($"{_TestContext?.TestName} completed");
+ _Logger?.LogInformation("{testName} completed", _TestContext?.TestName);
NonThrowTryCatch();
}
@@ -65,13 +63,14 @@ public class UnitTestLastScanController
[TestMethod]
public async Task GetScanApi()
{
- HttpClient httpClient = _WebApplicationFactory.CreateClient();
- _Logger.Information("Starting Web Application");
+ HttpClient? httpClient = _WebApplicationFactory?.CreateClient();
+ _Logger?.LogInformation("Starting Web Application");
+ Assert.IsNotNull(httpClient);
string? json = await httpClient.GetStringAsync($"api/{_ControllerName}/O171927.1.37/");
File.WriteAllText(Path.Combine(AppContext.BaseDirectory, $"{_ControllerName}-{nameof(GetScan)}.json"), json);
Result? result = System.Text.Json.JsonSerializer.Deserialize>(json);
Assert.IsNotNull(result?.Results);
- _Logger.Information($"{_TestContext?.TestName} completed");
+ _Logger?.LogInformation("{testName} completed", _TestContext?.TestName);
NonThrowTryCatch();
}
diff --git a/Server.Tests/UnitTestPostService.cs b/Server.Tests/UnitTestPostService.cs
index 8dcdc7e..0391cb1 100644
--- a/Server.Tests/UnitTestPostService.cs
+++ b/Server.Tests/UnitTestPostService.cs
@@ -2,7 +2,7 @@ using Barcode.Host.Shared.Models;
using Barcode.Host.Shared.Models.Stateless;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
-using Serilog;
+using Microsoft.Extensions.Logging;
namespace Barcode.Host.Tests;
@@ -10,20 +10,17 @@ namespace Barcode.Host.Tests;
public class UnitTestPostService
{
-#pragma warning disable CS8618
-
- private static ILogger _Logger;
- private static TestContext _TestContext;
- private static WebApplicationFactory _WebApplicationFactory;
-
-#pragma warning restore
+ private static ILogger? _Logger;
+ private static TestContext? _TestContext;
+ private static WebApplicationFactory? _WebApplicationFactory;
[ClassInitialize]
public static void ClassInitAsync(TestContext testContext)
{
_TestContext = testContext;
- _Logger = Log.ForContext();
_WebApplicationFactory = new WebApplicationFactory();
+ IServiceProvider serviceProvider = _WebApplicationFactory.Services.CreateScope().ServiceProvider;
+ _Logger = serviceProvider.GetRequiredService>();
}
private static void NonThrowTryCatch()
@@ -39,14 +36,18 @@ public class UnitTestPostService
[TestMethod]
public void GetPostTo()
{
- _Logger.Information("Starting Web Application");
- HttpClient httpClient = _WebApplicationFactory.CreateClient();
- IServiceProvider serviceProvider = _WebApplicationFactory.Services.CreateScope().ServiceProvider;
- Server.Models.AppSettings appSettings = serviceProvider.GetRequiredService();
- IPostService postService = serviceProvider.GetRequiredService();
- Notification notification = new(KeyPressEvent: null, "Test", appSettings.ToolClass, null);
+ _Logger?.LogInformation("Starting Web Application");
+ HttpClient? httpClient = _WebApplicationFactory?.CreateClient();
+ IServiceProvider? serviceProvider = _WebApplicationFactory?.Services.CreateScope().ServiceProvider;
+ Server.Models.AppSettings? appSettings = serviceProvider?.GetRequiredService();
+ IPostService? postService = serviceProvider?.GetRequiredService();
+ Assert.IsNotNull(httpClient);
+ Assert.IsNotNull(appSettings);
+ Assert.IsNotNull(postService);
+ Notification? notification = new(KeyPressEvent: null, "Test", appSettings.ToolClass, null);
+ Assert.IsNotNull(notification);
_ = postService.Post(appSettings.PostTo, httpClient, notification);
- _Logger.Information($"{_TestContext?.TestName} completed");
+ _Logger?.LogInformation("{testName} completed", _TestContext?.TestName);
NonThrowTryCatch();
}
diff --git a/Server/Barcode.Host.Server.csproj b/Server/Barcode.Host.Server.csproj
index 37b0160..9767ce9 100644
--- a/Server/Barcode.Host.Server.csproj
+++ b/Server/Barcode.Host.Server.csproj
@@ -22,27 +22,17 @@
Linux
-
-
+
+
-
-
-
-
+
+
-
+
-
-
- Always
-
-
- Always
-
-
\ No newline at end of file
diff --git a/Server/HostedService/TimedHostedService.cs b/Server/HostedService/TimedHostedService.cs
index df3e961..1f4b3fa 100644
--- a/Server/HostedService/TimedHostedService.cs
+++ b/Server/HostedService/TimedHostedService.cs
@@ -5,7 +5,6 @@ using Barcode.Host.Shared.KeyboardMouse;
using Barcode.Host.Shared.Models;
using Barcode.Host.Shared.Models.Stateless;
using Microsoft.AspNetCore.SignalR;
-using Serilog.Context;
using System.Globalization;
namespace Barcode.Host.Server.HostedService;
@@ -65,12 +64,9 @@ public class TimedHostedService : IHostedService, IAggregateInputReader, IDispos
public Task StartAsync(CancellationToken stoppingToken)
{
- string? methodName = IMethodName.GetActualAsyncMethodName();
- using (LogContext.PushProperty("MethodName", methodName))
- {
- _Logger.LogInformation($"Timed Hosted Service: {_AppSettings.BuildSourceVersion}:{Environment.ProcessId} running.");
- if (!string.IsNullOrEmpty(_AppSettings.SerialPortName))
- _SerialService.Open();
+ _Logger.LogInformation("Timed Hosted Service: {BuildSourceVersion}:{ProcessId} running.", _AppSettings.BuildSourceVersion, Environment.ProcessId);
+ if (!string.IsNullOrEmpty(_AppSettings.SerialPortName))
+ _SerialService.Open();
#if Linux
if (!_LinuxGroupManager.IsInInputGroup().WaitAsync(stoppingToken).Result)
{
@@ -80,32 +76,29 @@ public class TimedHostedService : IHostedService, IAggregateInputReader, IDispos
_ = _LinuxGroupManager.RebootSystem(_AppSettings.RootPassword);
}
#endif
- List<(EventCode, char)> collection = _LastScanService.IncludeEventCodes();
- foreach ((EventCode eventCode, char @char) in collection)
- _CharToEventCodes.Add(eventCode, @char);
- int dueTime = 0;
- foreach ((string _, Timer timer) in _Timers)
- {
- dueTime += 300;
- _ = timer.Change(dueTime, Timeout.Infinite);
- }
+ List<(EventCode, char)> collection = _LastScanService.IncludeEventCodes();
+ foreach ((EventCode eventCode, char @char) in collection)
+ _CharToEventCodes.Add(eventCode, @char);
+ int dueTime = 0;
+ foreach ((string _, Timer timer) in _Timers)
+ {
+ dueTime += 300;
+ _ = timer.Change(dueTime, Timeout.Infinite);
}
+
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken stoppingToken)
{
- string? methodName = IMethodName.GetActualAsyncMethodName();
- using (LogContext.PushProperty("MethodName", methodName))
+ _Logger.LogInformation("Timed Hosted Service: {BuildSourceVersion}:{ProcessId} is stopping.", _AppSettings.BuildSourceVersion, Environment.ProcessId);
+ for (short i = 0; i < short.MaxValue; i++)
{
- _Logger.LogInformation($"Timed Hosted Service: {_AppSettings.BuildSourceVersion}:{Environment.ProcessId} is stopping.");
- for (short i = 0; i < short.MaxValue; i++)
- {
- Thread.Sleep(500);
- if (_ExecutionCount == 0)
- break;
- }
+ Thread.Sleep(500);
+ if (_ExecutionCount == 0)
+ break;
}
+
return Task.CompletedTask;
}
diff --git a/Server/Models/AppSettings.cs b/Server/Models/AppSettings.cs
index 074919c..b59387b 100644
--- a/Server/Models/AppSettings.cs
+++ b/Server/Models/AppSettings.cs
@@ -1,4 +1,5 @@
using System.Text.Json;
+using System.Text.Json.Serialization;
namespace Barcode.Host.Server.Models;
@@ -32,8 +33,14 @@ public record AppSettings(string BuildNumber,
public override string ToString()
{
- string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });
+ string result = JsonSerializer.Serialize(this, AppSettingsSourceGenerationContext.Default.AppSettings);
return result;
}
+}
+
+[JsonSourceGenerationOptions(WriteIndented = true)]
+[JsonSerializable(typeof(AppSettings))]
+internal partial class AppSettingsSourceGenerationContext : JsonSerializerContext
+{
}
\ No newline at end of file
diff --git a/Server/Models/Binder/.editorconfig b/Server/Models/Binder/.editorconfig
new file mode 100644
index 0000000..1c444cd
--- /dev/null
+++ b/Server/Models/Binder/.editorconfig
@@ -0,0 +1,2 @@
+[*.cs]
+csharp_preserve_single_line_statements = true
\ No newline at end of file
diff --git a/Server/Models/Binder/AppSettings.cs b/Server/Models/Binder/AppSettings.cs
index 61e57de..d7affb7 100644
--- a/Server/Models/Binder/AppSettings.cs
+++ b/Server/Models/Binder/AppSettings.cs
@@ -1,4 +1,3 @@
-using System.ComponentModel.DataAnnotations;
using System.Text.Json;
namespace Barcode.Host.Server.Models.Binder;
@@ -6,34 +5,32 @@ namespace Barcode.Host.Server.Models.Binder;
public class AppSettings
{
- [Display(Name = "Build Number"), Required] public string? BuildNumber { get; set; }
- [Display(Name = "Build Source Version"), Required] public string? BuildSourceVersion { get; set; }
- [Display(Name = "Last Scan Service Clear After"), Required] public int? ClearLastScanServiceAfter { get; set; }
- [Display(Name = "Company"), Required] public string? Company { get; set; }
- [Display(Name = "Device Name Ends With"), Required] public string? DeviceNameEndsWith { get; set; }
- [Display(Name = "Equipment Name"), Required] public string? EquipmentName { get; set; }
- [Display(Name = "ExpectedScanLengthA"), Required] public int? ExpectedScanLengthA { get; set; }
- [Display(Name = "ExpectedScanLengthB"), Required] public int? ExpectedScanLengthB { get; set; }
- [Display(Name = "File Share"), Required] public string? FileShare { get; set; }
- [Display(Name = "Is Development"), Required] public bool? IsDevelopment { get; set; }
- [Display(Name = "Is Staging"), Required] public bool? IsStaging { get; set; }
- [Display(Name = "Linux Device Path"), Required] public string? LinuxDevicePath { get; set; }
- [Display(Name = "Mock Root"), Required] public string? MockRoot { get; set; }
- [Display(Name = "MonA Resource"), Required] public string? MonAResource { get; set; }
- [Display(Name = "MonA Site"), Required] public string? MonASite { get; set; }
- [Display(Name = "Notify Minimum"), Required] public int? NotifyMinimum { get; set; }
- [Display(Name = "OpenInsight Application Programming Interface"), Required] public string? OpenInsightApplicationProgrammingInterface { get; set; }
- [Display(Name = "PostTo"), Required] public string? PostTo { get; set; }
- [Display(Name = "Post to Every"), Required] public int? PostToEvery { get; set; }
- [Display(Name = "RootPassword"), Required] public string? RootPassword { get; set; }
- [Display(Name = "Serial Port Name"), Required] public string? SerialPortName { get; set; }
- [Display(Name = "Share to Every"), Required] public int? ShareToEvery { get; set; }
- [Display(Name = "ToolClass"), Required] public string? ToolClass { get; set; }
- [Display(Name = "URLs"), Required] public string? URLs { get; set; }
- [Display(Name = "Working Directory Name"), Required] public string? WorkingDirectoryName { get; set; }
- [Display(Name = "WriteToSerialEvery"), Required] public int? WriteToSerialEvery { get; set; }
-
-#nullable restore
+ public string? BuildNumber { get; set; }
+ public string? BuildSourceVersion { get; set; }
+ public int? ClearLastScanServiceAfter { get; set; }
+ public string? Company { get; set; }
+ public string? DeviceNameEndsWith { get; set; }
+ public string? EquipmentName { get; set; }
+ public int? ExpectedScanLengthA { get; set; }
+ public int? ExpectedScanLengthB { get; set; }
+ public string? FileShare { get; set; }
+ public bool? IsDevelopment { get; set; }
+ public bool? IsStaging { get; set; }
+ public string? LinuxDevicePath { get; set; }
+ public string? MockRoot { get; set; }
+ public string? MonAResource { get; set; }
+ public string? MonASite { get; set; }
+ public int? NotifyMinimum { get; set; }
+ public string? OpenInsightApplicationProgrammingInterface { get; set; }
+ public string? PostTo { get; set; }
+ public int? PostToEvery { get; set; }
+ public string? RootPassword { get; set; }
+ public string? SerialPortName { get; set; }
+ public int? ShareToEvery { get; set; }
+ public string? ToolClass { get; set; }
+ public string? URLs { get; set; }
+ public string? WorkingDirectoryName { get; set; }
+ public int? WriteToSerialEvery { get; set; }
public override string ToString()
{
@@ -44,60 +41,33 @@ public class AppSettings
private static Models.AppSettings Get(AppSettings? appSettings)
{
Models.AppSettings result;
- if (appSettings is null)
- throw new NullReferenceException(nameof(appSettings));
- if (appSettings.BuildNumber is null)
- throw new NullReferenceException(nameof(BuildNumber));
- if (appSettings.BuildSourceVersion is null)
- throw new NullReferenceException(nameof(BuildSourceVersion));
- if (appSettings.ClearLastScanServiceAfter is null)
- throw new NullReferenceException(nameof(ClearLastScanServiceAfter));
- if (appSettings.Company is null)
- throw new NullReferenceException(nameof(Company));
- if (appSettings.DeviceNameEndsWith is null)
- throw new NullReferenceException(nameof(DeviceNameEndsWith));
- if (appSettings.EquipmentName is null)
- throw new NullReferenceException(nameof(EquipmentName));
- if (appSettings.ExpectedScanLengthA is null)
- throw new NullReferenceException(nameof(ExpectedScanLengthA));
- if (appSettings.ExpectedScanLengthB is null)
- throw new NullReferenceException(nameof(ExpectedScanLengthB));
- if (appSettings.FileShare is null)
- throw new NullReferenceException(nameof(FileShare));
- if (appSettings.IsDevelopment is null)
- throw new NullReferenceException(nameof(IsDevelopment));
- if (appSettings.IsStaging is null)
- throw new NullReferenceException(nameof(IsStaging));
- if (appSettings.LinuxDevicePath is null)
- throw new NullReferenceException(nameof(LinuxDevicePath));
- if (appSettings.MockRoot is null)
- throw new NullReferenceException(nameof(MockRoot));
- if (appSettings.MonAResource is null)
- throw new NullReferenceException(nameof(MonAResource));
- if (appSettings.MonASite is null)
- throw new NullReferenceException(nameof(MonASite));
- if (appSettings.NotifyMinimum is null)
- throw new NullReferenceException(nameof(NotifyMinimum));
- if (appSettings.OpenInsightApplicationProgrammingInterface is null)
- throw new NullReferenceException(nameof(OpenInsightApplicationProgrammingInterface));
- if (appSettings.PostTo is null)
- throw new NullReferenceException(nameof(PostTo));
- if (appSettings.PostToEvery is null)
- throw new NullReferenceException(nameof(PostToEvery));
- if (appSettings.RootPassword is null)
- throw new NullReferenceException(nameof(RootPassword));
- if (appSettings.SerialPortName is null)
- throw new NullReferenceException(nameof(SerialPortName));
- if (appSettings.ShareToEvery is null)
- throw new NullReferenceException(nameof(ShareToEvery));
- if (appSettings.ToolClass is null)
- throw new NullReferenceException(nameof(ToolClass));
- if (appSettings.URLs is null)
- throw new NullReferenceException(nameof(URLs));
- if (appSettings.WorkingDirectoryName is null)
- throw new NullReferenceException(nameof(WorkingDirectoryName));
- if (appSettings.WriteToSerialEvery is null)
- throw new NullReferenceException(nameof(WriteToSerialEvery));
+ if (appSettings is null) throw new NullReferenceException(nameof(appSettings));
+ if (appSettings.BuildNumber is null) throw new NullReferenceException(nameof(BuildNumber));
+ if (appSettings.BuildSourceVersion is null) throw new NullReferenceException(nameof(BuildSourceVersion));
+ if (appSettings.ClearLastScanServiceAfter is null) throw new NullReferenceException(nameof(ClearLastScanServiceAfter));
+ if (appSettings.Company is null) throw new NullReferenceException(nameof(Company));
+ if (appSettings.DeviceNameEndsWith is null) throw new NullReferenceException(nameof(DeviceNameEndsWith));
+ if (appSettings.EquipmentName is null) throw new NullReferenceException(nameof(EquipmentName));
+ if (appSettings.ExpectedScanLengthA is null) throw new NullReferenceException(nameof(ExpectedScanLengthA));
+ if (appSettings.ExpectedScanLengthB is null) throw new NullReferenceException(nameof(ExpectedScanLengthB));
+ if (appSettings.FileShare is null) throw new NullReferenceException(nameof(FileShare));
+ if (appSettings.IsDevelopment is null) throw new NullReferenceException(nameof(IsDevelopment));
+ if (appSettings.IsStaging is null) throw new NullReferenceException(nameof(IsStaging));
+ if (appSettings.LinuxDevicePath is null) throw new NullReferenceException(nameof(LinuxDevicePath));
+ if (appSettings.MockRoot is null) throw new NullReferenceException(nameof(MockRoot));
+ if (appSettings.MonAResource is null) throw new NullReferenceException(nameof(MonAResource));
+ if (appSettings.MonASite is null) throw new NullReferenceException(nameof(MonASite));
+ if (appSettings.NotifyMinimum is null) throw new NullReferenceException(nameof(NotifyMinimum));
+ if (appSettings.OpenInsightApplicationProgrammingInterface is null) throw new NullReferenceException(nameof(OpenInsightApplicationProgrammingInterface));
+ if (appSettings.PostTo is null) throw new NullReferenceException(nameof(PostTo));
+ if (appSettings.PostToEvery is null) throw new NullReferenceException(nameof(PostToEvery));
+ if (appSettings.RootPassword is null) throw new NullReferenceException(nameof(RootPassword));
+ if (appSettings.SerialPortName is null) throw new NullReferenceException(nameof(SerialPortName));
+ if (appSettings.ShareToEvery is null) throw new NullReferenceException(nameof(ShareToEvery));
+ if (appSettings.ToolClass is null) throw new NullReferenceException(nameof(ToolClass));
+ if (appSettings.URLs is null) throw new NullReferenceException(nameof(URLs));
+ if (appSettings.WorkingDirectoryName is null) throw new NullReferenceException(nameof(WorkingDirectoryName));
+ if (appSettings.WriteToSerialEvery is null) throw new NullReferenceException(nameof(WriteToSerialEvery));
result = new(
appSettings.BuildNumber,
appSettings.BuildSourceVersion,
diff --git a/Server/Pages/Error.cshtml.cs b/Server/Pages/Error.cshtml.cs
index 75427c4..9f46a8b 100644
--- a/Server/Pages/Error.cshtml.cs
+++ b/Server/Pages/Error.cshtml.cs
@@ -1,6 +1,6 @@
-using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
+using System.Diagnostics;
namespace Barcode.Host.Server.Pages;
@@ -19,5 +19,4 @@ public class ErrorModel : PageModel
public void OnGet() =>
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
-}
-
+}
\ No newline at end of file
diff --git a/Server/Pages/Notification.cshtml.cs b/Server/Pages/Notification.cshtml.cs
index 82e8c86..761b5b5 100644
--- a/Server/Pages/Notification.cshtml.cs
+++ b/Server/Pages/Notification.cshtml.cs
@@ -15,4 +15,4 @@ public class NotificationModel : PageModel
{
}
-}
+}
\ No newline at end of file
diff --git a/Server/Program.cs b/Server/Program.cs
index 2b3f9f4..c0468ab 100644
--- a/Server/Program.cs
+++ b/Server/Program.cs
@@ -2,50 +2,21 @@
using Barcode.Host.Server.Hubs;
using Barcode.Host.Server.Models;
using Barcode.Host.Server.Services;
-using Barcode.Host.Shared.Models;
using Barcode.Host.Shared.Models.Stateless;
-using Serilog;
-using System.Reflection;
namespace Barcode.Host.Server;
public class Program
{
- private static (string, WebApplicationOptions) Get(string[] args)
- {
- Assembly assembly = Assembly.GetExecutingAssembly();
- string? assemblyName = assembly.GetName()?.Name;
- if (string.IsNullOrEmpty(assemblyName))
- throw new Exception();
- string baseAssemblyName = assemblyName.Split('.')[0];
- string webRootPath = Path.Combine(AppContext.BaseDirectory.Split(baseAssemblyName)[0], baseAssemblyName, "wwwroot");
- if (!Directory.Exists(webRootPath))
- webRootPath = string.Empty;
- WebApplicationOptions webApplicationOptions = new()
- {
- Args = args,
- ContentRootPath = AppContext.BaseDirectory,
- WebRootPath = webRootPath
- };
- return new(assemblyName, webApplicationOptions);
- }
-
public static int Main(string[] args)
{
- LoggerConfiguration loggerConfiguration = new();
- (string assemblyName, _) = Get(args);
+ ILogger? logger = null;
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
_ = webApplicationBuilder.Configuration.AddUserSecrets();
AppSettings appSettings = Models.Binder.AppSettings.Get(webApplicationBuilder.Configuration);
- if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName))
- throw new Exception("Working directory name must have a value!");
- string workingDirectory = IWorkingDirectory.GetWorkingDirectory(assemblyName, appSettings.WorkingDirectoryName);
- Environment.SetEnvironmentVariable(nameof(workingDirectory), workingDirectory);
- _ = ConfigurationLoggerConfigurationExtensions.Configuration(loggerConfiguration.ReadFrom, webApplicationBuilder.Configuration);
- _ = SerilogHostBuilderExtensions.UseSerilog(webApplicationBuilder.Host);
- Log.Logger = loggerConfiguration.CreateLogger();
- Serilog.ILogger log = Log.ForContext();
+ if (string.IsNullOrEmpty(appSettings.Company))
+ throw new Exception("Company name must have a value!");
try
{
if (appSettings.IsStaging && appSettings.IsDevelopment)
@@ -68,6 +39,7 @@ public class Program
_ = webApplicationBuilder.Services.AddHostedService();
_ = webApplicationBuilder.Services.AddSwaggerGen();
WebApplication webApplication = webApplicationBuilder.Build();
+ logger = webApplication.Services.GetRequiredService>();
if (appSettings.IsDevelopment)
{
_ = webApplication.UseSwagger();
@@ -79,25 +51,23 @@ public class Program
_ = webApplication.UseExceptionHandler("/Error");
_ = webApplication.UseHsts();
}
- _ = webApplication.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush);
_ = webApplication.UseStaticFiles();
_ = webApplication.UseRouting();
_ = webApplication.UseAuthorization();
_ = webApplication.MapControllers();
_ = webApplication.MapRazorPages();
_ = webApplication.MapHub($"/{nameof(NotificationHub)}");
- log.Information("Starting Web Application");
+ logger.LogInformation("Starting Web Application");
+ logger.LogCritical("{Company}", appSettings.Company);
webApplication.Run();
return 0;
}
catch (Exception ex)
{
- log.Fatal(ex, "Host terminated unexpectedly");
- return 1;
- }
- finally
- {
- Log.CloseAndFlush();
+ try
+ { logger?.LogCritical(ex, "Host terminated unexpectedly"); }
+ catch (Exception) { }
+ throw;
}
}
diff --git a/Server/appsettings.Development.json b/Server/appsettings.Development.json
deleted file mode 100644
index 0f32e52..0000000
--- a/Server/appsettings.Development.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "ExpectedScanLengthA": 6,
- "ExpectedScanLengthB": 9,
- "Logging": {
- "LogLevel": {
- "Log4netProvider": "Debug"
- }
- },
- "IsDevelopment": true,
- "Serilog": {
- "MinimumLevel": "Debug"
- }
-}
\ No newline at end of file
diff --git a/Server/appsettings.json b/Server/appsettings.json
deleted file mode 100644
index fee4de3..0000000
--- a/Server/appsettings.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "BuildNumber": "1",
- "BuildSourceVersion": "1234567",
- "Company": "Infineon Technologies Americas Corp.",
- "ClearLastScanServiceAfter": 250,
- "DeviceNameEndsWith": "Symbol Bar Code Scanner",
- "EquipmentName": "",
- "ExpectedScanLengthA": 8,
- "ExpectedScanLengthB": 14,
- "ExpectedScanLengthBExample": "1TO172125.1.11",
- "FileShare": "",
- "LinuxDevicePath": "/proc/bus/input/devices",
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft": "Warning",
- "Log4netProvider": "Information",
- "Microsoft.Hosting.Lifetime": "Information"
- }
- },
- "IsDevelopment": false,
- "IsStaging": false,
- "NotifyMinimum": 3,
- "MockRoot": "",
- "MonAResource": "OI_Metrology_Viewer_EC",
- "MonASite": "auc",
- "OpenInsightApplicationProgrammingInterface": "https://oi-prod-ec-api.mes.infineon.com/api/oiWizard",
- "PostTo": "",
- "PostToEvery": 1000,
- "SerialPortName": "/dev/ttyUSB0",
- "Serilog": {
- "Using": [
- "Serilog.Sinks.Console",
- "Serilog.Sinks.File"
- ],
- "MinimumLevel": "Information",
- "WriteTo": [
- {
- "Name": "Debug",
- "Args": {
- "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}"
- }
- },
- {
- "Name": "Console",
- "Args": {
- "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}"
- }
- },
- {
- "Name": "File",
- "Args": {
- "path": "%workingDirectory% - Log/log-.txt",
- "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}",
- "rollingInterval": "Hour"
- }
- }
- ],
- "Enrich": [
- "FromLogContext",
- "WithMachineName",
- "WithThreadId"
- ],
- "Properties": {
- "Application": "Sample"
- }
- },
- "ShareToEvery": 1000,
- "RootPassword": "",
- "ToolClass": "FTIR",
- "URLs": "http://localhost:5003;",
- "WorkingDirectoryName": "IFXApps",
- "WriteToSerialEvery": 750
-}
\ No newline at end of file
diff --git a/Shared/Barcode.Host.Shared.csproj b/Shared/Barcode.Host.Shared.csproj
index 0c69df0..91b6997 100644
--- a/Shared/Barcode.Host.Shared.csproj
+++ b/Shared/Barcode.Host.Shared.csproj
@@ -20,7 +20,7 @@
Linux
-
+