Improve per on price update
This commit is contained in:
@@ -24,5 +24,5 @@ public interface ICandleRepository
|
||||
Enums.TradingExchanges exchange,
|
||||
Enums.Timeframe timeframe,
|
||||
DateTime start);
|
||||
void InsertCandle(Candle candle);
|
||||
Task InsertCandle(Candle candle);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
candlesInserted++;
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user