public async Task Handle(string systemProcessOperationId, ISystemProcessOperationThirdPartyDataRequestContext dataRequestContext, IReadOnlyCollection <MarketDataRequest> marketDataRequests) { if (marketDataRequests == null || !marketDataRequests.Any()) { this._logger.LogError($"{nameof(RefinitivDataSynchroniser)} Handle received a null or empty market data request collection"); return; } var maxToDate = marketDataRequests.Select(a => a.UniverseEventTimeTo).Max(); var minFromDate = marketDataRequests.Select(a => a.UniverseEventTimeFrom).Min(); if (maxToDate != null && minFromDate != null) { var request = new GetEodPricingRequest { StartUtc = minFromDate.Value.ToUniversalTime().ToTimestamp(), EndUtc = maxToDate.Value.ToUniversalTime().ToTimestamp(), PollPeriod = _refinitivTickPriceHistoryApiConfig.RefinitivTickPriceHistoryApiPollingSeconds, TimeOut = new Duration() { Seconds = _refinitivTickPriceHistoryApiConfig.RefinitivTickPriceHistoryApiTimeOutDurationSeconds }, }; var ids = marketDataRequests.Select(req => new SecurityIdentifiers() { Ric = req.Identifiers.Ric, Cusip = req.Identifiers.Cusip, Isin = req.Identifiers.Isin, Sedol = req.Identifiers.Sedol }); request.Identifiers.AddRange(ids); if (request.Identifiers.All(s => s.Ric == null)) { this._logger.LogError($"{nameof(RefinitivDataSynchroniser)} Handle received a request that didn't have a RIC"); return; } this._logger.LogInformation($"{nameof(RefinitivDataSynchroniser)} Making request for the date range of {request.StartUtc} - {request.EndUtc} using the following RIC identifiers: " + $"{string.Join(" ", request.Identifiers.Select(s => s.Ric).ToArray())}"); var tickPriceHistoryServiceClient = _tickPriceHistoryServiceClientFactory.Create(); await tickPriceHistoryServiceClient.GetEodPricingAsync(request); this._logger.LogInformation($"{nameof(RefinitivDataSynchroniser)} Request returned for the date range of {request.StartUtc} - {request.EndUtc} using the following RIC identifiers: " + $"{string.Join(" ", request.Identifiers.Select(s => s.Ric).ToArray())}"); } else { this._logger.LogError($"{nameof(RefinitivDataSynchroniser)} Handle received a request collection with no dates"); return; } }
public AsyncUnaryCall <GetEodPricingResponse> GetEodPricingAsync(GetEodPricingRequest request) { var response = new GetEodPricingResponse { Success = true }; _currentRunData.AddRange(_allData.Where(w => w.Identifiers.Ric == request.Identifiers.First().Ric && w.Timebars.All(a => a.EpochUtc.ToDateTime().Date >= request.StartUtc.ToDateTime().Date&& a.EpochUtc.ToDateTime().Date <= request.EndUtc.ToDateTime().Date))); return(new AsyncUnaryCall <GetEodPricingResponse>(Task.FromResult(response), null, null, null, null)); }