From 8fe794ce8d92cebc8a0db7251d78d5ca22eb9f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Thu, 6 Feb 2025 17:51:51 +0100 Subject: [PATCH] fix scopes in fleet telemetry connection service --- .../Server/Services/BackendApiService.cs | 1 + .../Services/FleetTelemetryWebSocketService.cs | 18 +++++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/TeslaSolarCharger/Server/Services/BackendApiService.cs b/TeslaSolarCharger/Server/Services/BackendApiService.cs index 7998bfa82..77b954d21 100644 --- a/TeslaSolarCharger/Server/Services/BackendApiService.cs +++ b/TeslaSolarCharger/Server/Services/BackendApiService.cs @@ -153,6 +153,7 @@ await errorHandlingService.HandleError(nameof(BackendApiService), nameof(Refresh token.RefreshToken = newToken.RefreshToken; token.ExpiresAtUtc = DateTimeOffset.FromUnixTimeSeconds(newToken.ExpiresAt); await teslaSolarChargerContext.SaveChangesAsync().ConfigureAwait(false); + logger.LogInformation("Backend token refreshed."); memoryCache.Remove(constants.BackendTokenStateKey); } diff --git a/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs b/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs index efad60530..6f314ba29 100644 --- a/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs +++ b/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs @@ -21,11 +21,7 @@ namespace TeslaSolarCharger.Server.Services; public class FleetTelemetryWebSocketService( ILogger logger, - IConfigurationWrapper configurationWrapper, - IDateTimeProvider dateTimeProvider, - IServiceProvider serviceProvider, - ISettings settings, - IBackendApiService backendApiService) : IFleetTelemetryWebSocketService + IServiceProvider serviceProvider) : IFleetTelemetryWebSocketService { private readonly TimeSpan _heartbeatsendTimeout = TimeSpan.FromSeconds(5); @@ -44,6 +40,8 @@ public async Task ReconnectWebSocketsForEnabledCars() logger.LogTrace("{method}", nameof(ReconnectWebSocketsForEnabledCars)); var scope = serviceProvider.CreateScope(); var context = scope.ServiceProvider.GetRequiredService(); + var backendApiService = scope.ServiceProvider.GetRequiredService(); + var dateTimeProvider = scope.ServiceProvider.GetRequiredService(); var cars = await context.Cars .Where(c => c.UseFleetTelemetry && (c.ShouldBeManaged == true) @@ -131,11 +129,13 @@ await client.WebSocketClient private async Task ConnectToFleetTelemetryApi(string vin, bool includeTrackingRelevantFields) { logger.LogTrace("{method}({carId})", nameof(ConnectToFleetTelemetryApi), vin); - var currentDate = dateTimeProvider.UtcNow(); var scope = serviceProvider.CreateScope(); + var dateTimeProvider = scope.ServiceProvider.GetRequiredService(); + var configurationWrapper = scope.ServiceProvider.GetRequiredService(); var context = scope.ServiceProvider.GetRequiredService(); var tscConfigurationService = scope.ServiceProvider.GetRequiredService(); var constants = scope.ServiceProvider.GetRequiredService(); + var currentDate = dateTimeProvider.UtcNow(); var decryptionKey = await tscConfigurationService.GetConfigurationValueByKey(constants.TeslaTokenEncryptionKeyKey); if (decryptionKey == default) { @@ -202,6 +202,9 @@ private async Task ReceiveMessages(DtoFleetTelemetryWebSocketClients client, str try { // Receive message from the WebSocket server + var scope = serviceProvider.CreateScope(); + var dateTimeProvider = scope.ServiceProvider.GetRequiredService(); + var configurationWrapper = scope.ServiceProvider.GetRequiredService(); logger.LogTrace("Waiting for new fleet telemetry message for car {vin}", vin); var result = await client.WebSocketClient.ReceiveAsync(new(buffer), client.CancellationToken); logger.LogTrace("Received new fleet telemetry message for car {vin}", vin); @@ -249,7 +252,7 @@ private async Task ReceiveMessages(DtoFleetTelemetryWebSocketClients client, str logger.LogDebug("Save location message for car {carId}", carId); } - var scope = serviceProvider.CreateScope(); + var context = scope.ServiceProvider.GetRequiredService(); var carValueLog = new CarValueLog { @@ -268,6 +271,7 @@ private async Task ReceiveMessages(DtoFleetTelemetryWebSocketClients client, str await context.SaveChangesAsync().ConfigureAwait(false); if (configurationWrapper.GetVehicleDataFromTesla()) { + var settings = scope.ServiceProvider.GetRequiredService(); var settingsCar = settings.Cars.First(c => c.Vin == vin); string? propertyName = null; switch (message.Type)