diff --git a/src/Managing.Application/Grains/CandleStoreGrain.cs b/src/Managing.Application/Grains/CandleStoreGrain.cs index cee90dc6..a7554491 100644 --- a/src/Managing.Application/Grains/CandleStoreGrain.cs +++ b/src/Managing.Application/Grains/CandleStoreGrain.cs @@ -42,11 +42,7 @@ public class CandleStoreGrain : Grain, ICandleStoreGrain, IAsyncObserver // Parse the grain key to extract exchange, ticker, and timeframe var (exchange, ticker, timeframe) = CandleHelpers.ParseCandleStoreGrainKey(grainKey); - // Initialize state if empty - if (_state.State.Candles == null || _state.State.Candles.Count == 0) - { - await LoadInitialCandlesAsync(exchange, ticker, timeframe); - } + await LoadInitialCandlesAsync(exchange, ticker, timeframe); // Subscribe to the price stream await SubscribeToPriceStreamAsync(grainKey); @@ -55,15 +51,16 @@ public class CandleStoreGrain : Grain, ICandleStoreGrain, IAsyncObserver } catch (Exception ex) { - _logger.LogError(ex, "Error during CandleStoreGrain activation for key: {GrainKey}", this.GetPrimaryKeyString()); - + _logger.LogError(ex, "Error during CandleStoreGrain activation for key: {GrainKey}", + this.GetPrimaryKeyString()); + // Ensure state is initialized even if there's an error if (_state.State.Candles == null) { _state.State.Candles = new List(); await _state.WriteStateAsync(); } - + throw; // Re-throw to let Orleans handle the activation failure } } @@ -87,10 +84,11 @@ public class CandleStoreGrain : Grain, ICandleStoreGrain, IAsyncObserver // Ensure state is initialized if (_state.State.Candles == null) { - _logger.LogWarning("State not initialized for grain {GrainKey}, returning empty list", this.GetPrimaryKeyString()); + _logger.LogWarning("State not initialized for grain {GrainKey}, returning empty list", + this.GetPrimaryKeyString()); return Task.FromResult(new List()); } - + return Task.FromResult(_state.State.Candles.ToList()); } catch (Exception ex) @@ -168,7 +166,8 @@ public class CandleStoreGrain : Grain, ICandleStoreGrain, IAsyncObserver var endDate = DateTime.UtcNow; var startDate = CandleHelpers.GetBotPreloadSinceFromTimeframe(timeframe); - var candles = await _candleRepository.GetCandles(exchange, ticker, timeframe, startDate, endDate, MaxCandleCount); + var candles = + await _candleRepository.GetCandles(exchange, ticker, timeframe, startDate, endDate, MaxCandleCount); if (candles?.Any() == true) { @@ -229,7 +228,7 @@ public class CandleStoreGrain : Grain, ICandleStoreGrain, IAsyncObserver _logger.LogDebug("No candles available for grain {GrainKey}", this.GetPrimaryKeyString()); return Task.FromResult(null); } - + return Task.FromResult(_state.State.Candles.LastOrDefault()); } catch (Exception ex) diff --git a/src/Managing.Core/DateHelpers.cs b/src/Managing.Core/DateHelpers.cs index 2d5f14f0..ac70177a 100644 --- a/src/Managing.Core/DateHelpers.cs +++ b/src/Managing.Core/DateHelpers.cs @@ -4,7 +4,7 @@ public class DateHelpers { public static DateTime GetFromUnixTimestamp(int unixTimestamp) { - var dat_Time = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Local); + var dat_Time = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); return dat_Time.AddSeconds(unixTimestamp); } } diff --git a/src/Managing.Infrastructure.Web3/Extensions/PriceExtensions.cs b/src/Managing.Infrastructure.Web3/Extensions/PriceExtensions.cs index 8fd65750..e5a1b46c 100644 --- a/src/Managing.Infrastructure.Web3/Extensions/PriceExtensions.cs +++ b/src/Managing.Infrastructure.Web3/Extensions/PriceExtensions.cs @@ -9,7 +9,6 @@ public static class PriceExtensions { public static List GetCandles(this Round[] prices, Timeframe timeframe, Ticker ticker) { - int timezoneOffset = -(int)(new DateTimeOffset(DateTime.UtcNow).Offset.TotalSeconds); var CHART_PERIODS = new Dictionary { { Timeframe.FiveMinutes, 60 * 5 }, @@ -41,8 +40,8 @@ public static class PriceExtensions { candles.Add(new Candle { - OpenTime = DateHelpers.GetFromUnixTimestamp(prevTsGroup + timezoneOffset), - Date = DateHelpers.GetFromUnixTimestamp(tsGroup + timezoneOffset), + OpenTime = DateHelpers.GetFromUnixTimestamp(prevTsGroup), + Date = DateHelpers.GetFromUnixTimestamp(tsGroup), Open = o, High = h, Low = l,