Improve per on price update
Some checks failed
Build & Deploy / build-and-deploy (push) Has been cancelled
.NET / build (push) Has been cancelled

This commit is contained in:
2025-08-16 17:02:31 +07:00
parent 750f6cebbb
commit 955c358138
5 changed files with 27 additions and 22 deletions

View File

@@ -24,5 +24,5 @@ public interface ICandleRepository
Enums.TradingExchanges exchange,
Enums.Timeframe timeframe,
DateTime start);
void InsertCandle(Candle candle);
Task InsertCandle(Candle candle);
}

View File

@@ -39,39 +39,35 @@ public class PricesService : IPricesService
throw new Exception($"Enable to found account for exchange {exchange}");
var lastCandles =
await _candleRepository.GetCandles(exchange, ticker, timeframe, DateTime.UtcNow.AddDays(-30), limit: 5);
await _candleRepository.GetCandles(exchange, ticker, timeframe, DateTime.UtcNow.AddDays(-30), limit: 1)
.ConfigureAwait(false);
var lastCandle = lastCandles.LastOrDefault();
var startDate = lastCandle != null ? lastCandle.Date : new DateTime(2017, 1, 1);
List<Candle> newCandles;
if (!lastCandles.Any())
{
newCandles = await _exchangeService.GetCandles(account, ticker, startDate, timeframe, true);
}
else
{
newCandles = await _exchangeService.GetCandles(account, ticker, startDate, timeframe, false);
}
List<Candle> newCandles =
await _exchangeService.GetCandles(account, ticker, startDate, timeframe, true)
.ConfigureAwait(false);
var candlesToInsert = lastCandle == null
? newCandles
: newCandles.Where(c => c.Date > lastCandle.Date);
var candles = !lastCandles.Any() ? newCandles : newCandles.Where(c => c.Date > lastCandle?.Date);
var candlesInserted = 0;
foreach (var newCandle in candles)
foreach (var newCandle in candlesToInsert)
{
if (lastCandle == null || newCandle.Date > lastCandle.Date)
{
_candleRepository.InsertCandle(newCandle);
await _candleRepository.InsertCandle(newCandle).ConfigureAwait(false);
candlesInserted++;
}
}
if (candlesInserted > 0)
_logger.LogInformation($"[{exchange}][{ticker}][{timeframe}] New candles inserted : {candlesInserted}");
_logger.LogInformation("[{exchange}][{ticker}][{timeframe}] New candles inserted : {candlesInserted}", exchange, ticker, timeframe, candlesInserted);
}
catch (Exception ex)
{
SentrySdk.CaptureException(ex);
_logger.LogError($"[{exchange}][{ticker}][{timeframe}] Error : {ex.Message} | {ex.StackTrace}");
_logger.LogError("[{exchange}][{ticker}][{timeframe}] Error : {ex.Message} | {ex.StackTrace}", exchange, ticker, timeframe, ex.Message, ex.StackTrace);
}
}
}

View File

@@ -8,4 +8,5 @@ public interface IInfluxDbRepository
Task<T> QueryAsync<T>(Func<QueryApi, Task<T>> action);
void Write(Action<WriteApi> action);
Task WriteAsync(Func<WriteApi, Task> action);
}

View File

@@ -111,9 +111,9 @@ public class CandleRepository : ICandleRepository
return results;
}
public void InsertCandle(Candle candle)
public async Task InsertCandle(Candle candle)
{
_influxDbRepository.Write(write =>
await _influxDbRepository.WriteAsync(write =>
{
PriceDto price = PriceHelpers.Map(candle);
write.WriteMeasurement(
@@ -121,6 +121,7 @@ public class CandleRepository : ICandleRepository
WritePrecision.Ns,
_priceBucket,
_influxDbRepository.Organization);
return Task.CompletedTask;
});
}

View File

@@ -23,6 +23,13 @@ public class InfluxDbRepository : IInfluxDbRepository
action(write);
}
public Task WriteAsync(Func<WriteApi, Task> action)
{
// Get write API asynchronously
using var client = new InfluxDBClient(_url, _token);
using var write = client.GetWriteApi();
return action(write);
}
public async Task<T> QueryAsync<T>(Func<QueryApi, Task<T>> action)
{
using var client = InfluxDBClientFactory.Create(_url, _token);