Skip to content

Commit

Permalink
fix scopes in fleet telemetry connection service
Browse files Browse the repository at this point in the history
  • Loading branch information
pkuehnel committed Feb 6, 2025
1 parent 0327e36 commit 8fe794c
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
1 change: 1 addition & 0 deletions TeslaSolarCharger/Server/Services/BackendApiService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,7 @@ namespace TeslaSolarCharger.Server.Services;

public class FleetTelemetryWebSocketService(
ILogger<FleetTelemetryWebSocketService> logger,
IConfigurationWrapper configurationWrapper,
IDateTimeProvider dateTimeProvider,
IServiceProvider serviceProvider,
ISettings settings,
IBackendApiService backendApiService) : IFleetTelemetryWebSocketService
IServiceProvider serviceProvider) : IFleetTelemetryWebSocketService
{
private readonly TimeSpan _heartbeatsendTimeout = TimeSpan.FromSeconds(5);

Expand All @@ -44,6 +40,8 @@ public async Task ReconnectWebSocketsForEnabledCars()
logger.LogTrace("{method}", nameof(ReconnectWebSocketsForEnabledCars));
var scope = serviceProvider.CreateScope();
var context = scope.ServiceProvider.GetRequiredService<TeslaSolarChargerContext>();
var backendApiService = scope.ServiceProvider.GetRequiredService<IBackendApiService>();
var dateTimeProvider = scope.ServiceProvider.GetRequiredService<IDateTimeProvider>();
var cars = await context.Cars
.Where(c => c.UseFleetTelemetry
&& (c.ShouldBeManaged == true)
Expand Down Expand Up @@ -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<IDateTimeProvider>();
var configurationWrapper = scope.ServiceProvider.GetRequiredService<IConfigurationWrapper>();
var context = scope.ServiceProvider.GetRequiredService<TeslaSolarChargerContext>();
var tscConfigurationService = scope.ServiceProvider.GetRequiredService<ITscConfigurationService>();
var constants = scope.ServiceProvider.GetRequiredService<IConstants>();
var currentDate = dateTimeProvider.UtcNow();
var decryptionKey = await tscConfigurationService.GetConfigurationValueByKey(constants.TeslaTokenEncryptionKeyKey);
if (decryptionKey == default)
{
Expand Down Expand Up @@ -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<IDateTimeProvider>();
var configurationWrapper = scope.ServiceProvider.GetRequiredService<IConfigurationWrapper>();
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);
Expand Down Expand Up @@ -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<TeslaSolarChargerContext>();
var carValueLog = new CarValueLog
{
Expand All @@ -268,6 +271,7 @@ private async Task ReceiveMessages(DtoFleetTelemetryWebSocketClients client, str
await context.SaveChangesAsync().ConfigureAwait(false);
if (configurationWrapper.GetVehicleDataFromTesla())
{
var settings = scope.ServiceProvider.GetRequiredService<ISettings>();
var settingsCar = settings.Cars.First(c => c.Vin == vin);
string? propertyName = null;
switch (message.Type)
Expand Down

0 comments on commit 8fe794c

Please sign in to comment.