Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        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));
        }