From 97c7dbdba2de20c1f8a921f9796eaa7264c07e59 Mon Sep 17 00:00:00 2001 From: Liam Pietralla Date: Wed, 20 Aug 2025 09:10:58 +1000 Subject: [PATCH] Added logging, update service lifetime --- packages/backend/Program.cs | 6 ++-- packages/backend/Services/YaleAccessor.cs | 41 ++++++++++++++++++++++- packages/frontend/package.json | 3 +- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/packages/backend/Program.cs b/packages/backend/Program.cs index 7088b29..27e4438 100644 --- a/packages/backend/Program.cs +++ b/packages/backend/Program.cs @@ -45,6 +45,8 @@ try // Setup the application logger Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error) .WriteTo.File(logLocation, rollingInterval: RollingInterval.Day) .CreateLogger(); @@ -56,11 +58,11 @@ try if (builder.Environment.IsDevelopment() && configuration.GetValue("UseMockDevelopmentMode")) { builder.Services.AddSingleton(); - builder.Services.AddScoped(); + builder.Services.AddSingleton(); } else { - builder.Services.AddScoped(); + builder.Services.AddSingleton(); } diff --git a/packages/backend/Services/YaleAccessor.cs b/packages/backend/Services/YaleAccessor.cs index a7eef2c..e40cc50 100644 --- a/packages/backend/Services/YaleAccessor.cs +++ b/packages/backend/Services/YaleAccessor.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Options; using Newtonsoft.Json.Linq; using Serilog; +using System.Diagnostics; using YaleAccess.Models; using YaleAccess.Models.Options; using YaleAccess.Services.Interfaces; @@ -62,11 +63,13 @@ namespace YaleAccess.Services // Subscribe to the driver ready event driver.DriverReady += () => { + Log.Logger.Information("Z-Wave driver started successfully."); isReady = true; }; driver.StartupErrorEvent += (error) => { + Log.Logger.Error("Error starting the driver: {error}", error); message = error; }; @@ -80,6 +83,7 @@ namespace YaleAccess.Services // If there was an error starting the driver, throw an exception if (message != null) { + Log.Logger.Error("Failed to start the driver. Error message: {message}", message); throw new Exception($"Failed to start the driver. Error message: {message}"); } @@ -89,22 +93,45 @@ namespace YaleAccess.Services public async Task GetCodeInformationAsync(int userCodeId) { + Stopwatch stopwatch = new(); + stopwatch.Start(); + + // Log the start of the operation + Log.Logger.Debug("Retrieving user code information for user code ID: {userCodeId}", userCodeId); + // Setup the two tasks to get the values we need CMDResult status = await lockNode.GetValue(GetUserStatusValue(userCodeId)); + + Log.Logger.Debug("Retrieved user code status for user code ID: {userCodeId} in {ElapsedMilliseconds} ms", userCodeId, stopwatch.ElapsedMilliseconds); + CMDResult code = await lockNode.GetValue(GetUserCodeValue(userCodeId)); + Log.Logger.Debug("Retrieved user code value for user code ID: {userCodeId} in {ElapsedMilliseconds} ms", userCodeId, stopwatch.ElapsedMilliseconds); + // Covert the result to a YaleUserCode object - return new YaleUserCode() + YaleUserCode yaleUserCode = new() { Id = userCodeId, Code = GetUserCodeValue(code), Status = GetUserStatusValue(status), IsHome = false }; + + stopwatch.Stop(); + Log.Logger.Debug("Retrieved user code information for user code ID: {userCodeId} in {ElapsedMilliseconds} ms", userCodeId, stopwatch.ElapsedMilliseconds); + + // Return the user code information + return yaleUserCode; } public async Task SetUserCode(int userCodeId, string code) { + Stopwatch stopwatch = new(); + stopwatch.Start(); + + // Log the start of the operation + Log.Logger.Debug("Setting user code for user code ID: {userCodeId} to {code}", userCodeId, code); + // Setup the set value task CMDResult result = await lockNode.SetValue(GetUserCodeValue(userCodeId), code); @@ -114,12 +141,21 @@ namespace YaleAccess.Services Log.Logger.Error("Failed to set user code {@userCodeId} to {@code}. Error message: {message}", userCodeId, code, result.Message); } + stopwatch.Stop(); + Log.Logger.Debug("Set user code for user code ID: {userCodeId} to {code} in {ElapsedMilliseconds} ms", userCodeId, code, stopwatch.ElapsedMilliseconds); + // Return the result return result.Success; } public async Task SetCodeAsAvailable(int userCode) { + Stopwatch stopwatch = new(); + stopwatch.Start(); + + // Log the start of the operation + Log.Logger.Debug("Setting user code status for user code ID: {userCode} to available", userCode); + // Setup the set value task CMDResult result = await lockNode.SetValue(GetUserStatusValue(userCode), (int)UserCodeStatus.AVAILABLE); @@ -129,6 +165,9 @@ namespace YaleAccess.Services Log.Logger.Error("Failed to set user code {@userCode} to available status. Error message: {message}", userCode, result.Message); } + stopwatch.Stop(); + Log.Logger.Debug("Set user code status for user code ID: {userCode} to available in {ElapsedMilliseconds} ms", userCode, stopwatch.ElapsedMilliseconds); + // Return the result return result.Success; } diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 1d5410a..3fe8d0e 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -16,5 +16,6 @@ "vue": "^3.4.10", "vue-router": "^4.2.5" }, - "dependencies": {} + "dependencies": {}, + "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610" }