Added logging, update service lifetime
All checks were successful
Build and Publish / Build Yale Access Backend (pull_request) Successful in 37s
Build and Publish / Push Yale Access Backend Docker Image (pull_request) Has been skipped
Build and Publish / Build Yale Access Frontend (pull_request) Successful in 1m1s
Build and Publish / Push Yale Access Frontend Docker Image (pull_request) Has been skipped

This commit is contained in:
2025-08-20 09:10:58 +10:00
parent 6e076fba5c
commit 97c7dbdba2
3 changed files with 46 additions and 4 deletions

View File

@@ -45,6 +45,8 @@ try
// Setup the application logger // Setup the application logger
Log.Logger = new LoggerConfiguration() Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error) .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error)
.WriteTo.File(logLocation, rollingInterval: RollingInterval.Day) .WriteTo.File(logLocation, rollingInterval: RollingInterval.Day)
.CreateLogger(); .CreateLogger();
@@ -56,11 +58,11 @@ try
if (builder.Environment.IsDevelopment() && configuration.GetValue<bool>("UseMockDevelopmentMode")) if (builder.Environment.IsDevelopment() && configuration.GetValue<bool>("UseMockDevelopmentMode"))
{ {
builder.Services.AddSingleton<MockYaleData>(); builder.Services.AddSingleton<MockYaleData>();
builder.Services.AddScoped<IYaleAccessor, MockYaleAccessor>(); builder.Services.AddSingleton<IYaleAccessor, MockYaleAccessor>();
} }
else else
{ {
builder.Services.AddScoped<IYaleAccessor, YaleAccessor>(); builder.Services.AddSingleton<IYaleAccessor, YaleAccessor>();
} }

View File

@@ -1,6 +1,7 @@
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using Serilog; using Serilog;
using System.Diagnostics;
using YaleAccess.Models; using YaleAccess.Models;
using YaleAccess.Models.Options; using YaleAccess.Models.Options;
using YaleAccess.Services.Interfaces; using YaleAccess.Services.Interfaces;
@@ -62,11 +63,13 @@ namespace YaleAccess.Services
// Subscribe to the driver ready event // Subscribe to the driver ready event
driver.DriverReady += () => driver.DriverReady += () =>
{ {
Log.Logger.Information("Z-Wave driver started successfully.");
isReady = true; isReady = true;
}; };
driver.StartupErrorEvent += (error) => driver.StartupErrorEvent += (error) =>
{ {
Log.Logger.Error("Error starting the driver: {error}", error);
message = error; message = error;
}; };
@@ -80,6 +83,7 @@ namespace YaleAccess.Services
// If there was an error starting the driver, throw an exception // If there was an error starting the driver, throw an exception
if (message != null) 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}"); throw new Exception($"Failed to start the driver. Error message: {message}");
} }
@@ -89,22 +93,45 @@ namespace YaleAccess.Services
public async Task<YaleUserCode> GetCodeInformationAsync(int userCodeId) public async Task<YaleUserCode> 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 // Setup the two tasks to get the values we need
CMDResult status = await lockNode.GetValue(GetUserStatusValue(userCodeId)); 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)); 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 // Covert the result to a YaleUserCode object
return new YaleUserCode() YaleUserCode yaleUserCode = new()
{ {
Id = userCodeId, Id = userCodeId,
Code = GetUserCodeValue(code), Code = GetUserCodeValue(code),
Status = GetUserStatusValue(status), Status = GetUserStatusValue(status),
IsHome = false 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<bool> SetUserCode(int userCodeId, string code) public async Task<bool> 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 // Setup the set value task
CMDResult result = await lockNode.SetValue(GetUserCodeValue(userCodeId), code); 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); 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 the result
return result.Success; return result.Success;
} }
public async Task<bool> SetCodeAsAvailable(int userCode) public async Task<bool> 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 // Setup the set value task
CMDResult result = await lockNode.SetValue(GetUserStatusValue(userCode), (int)UserCodeStatus.AVAILABLE); 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); 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 the result
return result.Success; return result.Success;
} }

View File

@@ -16,5 +16,6 @@
"vue": "^3.4.10", "vue": "^3.4.10",
"vue-router": "^4.2.5" "vue-router": "^4.2.5"
}, },
"dependencies": {} "dependencies": {},
"packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
} }