コード例 #1
0
        public async Task Get()
        {
            var repo = new FactsetDailyBarApi(
                this.configuration,
                this.httpClientFactory,
                this.policyFactory,
                this.logger);

            var message = new FactsetSecurityDailyRequest
            {
                Requests = new List <FactsetSecurityRequestItem>
                {
                    new FactsetSecurityRequestItem
                    {
                        Figi = "BBG000C6K6G9",
                        From = new DateTime(2018, 01, 01),
                        To   = new DateTime(2018, 01, 05)
                    }
                }
            };

            await repo.GetWithTransientFaultHandlingAsync(message);

            Assert.IsTrue(true);
        }
コード例 #2
0
        /// <summary>
        /// The get async.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public async Task <FactsetSecurityResponseDto> GetAsync(FactsetSecurityDailyRequest request)
        {
            this.logger.LogInformation("has received a request to get daily bars from the client service");

            if (request == null)
            {
                this.logger.LogInformation("received a null request. Returning an empty response");

                return(new FactsetSecurityResponseDto
                {
                    Request = null, Responses = new FactsetSecurityDailyResponseItem[0]
                });
            }

            try
            {
                using (var httpClient = this.httpClientFactory.ClientServiceHttpClient(
                           this.apiClientConfiguration.ClientServiceUrl,
                           this.apiClientConfiguration.SurveillanceUserApiAccessToken))
                {
                    var json = JsonConvert.SerializeObject(request);

                    var response =
                        await httpClient
                        .PostAsync(
                            Route,
                            new StringContent(json, Encoding.UTF8, "application/json"))
                    ;

                    if (response == null || !response.IsSuccessStatusCode)
                    {
                        this.logger.LogError(
                            $"Unsuccessful factset time bar api repository GET request. {response?.StatusCode}");

                        return(new FactsetSecurityResponseDto());
                    }

                    var jsonResponse = await response.Content.ReadAsStringAsync();

                    var deserialisedResponse = JsonConvert.DeserializeObject <FactsetSecurityResponseDto>(jsonResponse);

                    if (deserialisedResponse == null)
                    {
                        this.logger.LogError("was unable to deserialise the response");
                        return(new FactsetSecurityResponseDto());
                    }

                    this.logger.LogInformation("returning deserialised GET response");
                    return(deserialisedResponse);
                }
            }
            catch (Exception e)
            {
                this.logger?.LogError(e, "Get encountered an exception");
            }

            this.logger?.LogInformation("Get received a response from the client. Returning result.");

            return(new FactsetSecurityResponseDto());
        }
コード例 #3
0
        public async Task <FactsetSecurityResponseDto> Send(IReadOnlyCollection <MarketDataRequest> factsetRequests)
        {
            if (factsetRequests == null || !factsetRequests.Any())
            {
                this._logger?.LogInformation("send received a null factset requests list. Returning");
                return(new FactsetSecurityResponseDto());
            }

            var requests = factsetRequests.Select(this.Project).ToList();
            var request  = new FactsetSecurityDailyRequest {
                Requests = requests
            };

            try
            {
                var result = await this._dailyBarRepository.GetWithTransientFaultHandlingAsync(request);

                return(result);
            }
            catch (Exception e)
            {
                this._logger.LogError(e, $"send encountered an exception when posting to the factset daily bar api");
            }

            return(new FactsetSecurityResponseDto
            {
                Request = request, Responses = new List <FactsetSecurityDailyResponseItem>()
            });
        }
コード例 #4
0
        public FactsetSecurityResponseDto GetPrices(FactsetSecurityDailyRequest requests)
        {
            var results = new List <FactsetSecurityDailyResponseItem>();

            foreach (var request in requests.Requests)
            {
                if (_data.ContainsKey(request.Figi))
                {
                    var instrumentItems = _data[request.Figi];

                    var items = instrumentItems
                                .Where(x => x.Epoch >= request.From)
                                .Where(x => x.Epoch <= request.To);

                    results.AddRange(items);
                }
            }

            return(new FactsetSecurityResponseDto
            {
                Responses = results
            });
        }
コード例 #5
0
        /// <summary>
        /// The get with transient fault handling async.
        /// </summary>
        /// <param name="request">
        /// The request.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public async Task <FactsetSecurityResponseDto> GetWithTransientFaultHandlingAsync(FactsetSecurityDailyRequest request)
        {
            this.logger.LogInformation(
                "GetWithTransientFaultHandling has received a request to get daily bars from the client service");

            if (request == null)
            {
                this.logger.LogInformation(
                    "GetWithTransientFaultHandling received a null request. Returning an empty response");

                return(new FactsetSecurityResponseDto
                {
                    Request = null, Responses = new FactsetSecurityDailyResponseItem[0]
                });
            }

            using (var httpClient = this.httpClientFactory.ClientServiceHttpClient(
                       this.apiClientConfiguration.ClientServiceUrl,
                       this.apiClientConfiguration.SurveillanceUserApiAccessToken))
            {
                var json   = JsonConvert.SerializeObject(request);
                var policy = this.policyFactory.PolicyTimeoutGeneric <HttpResponseMessage>(
                    TimeSpan.FromMinutes(30),
                    i => !i.IsSuccessStatusCode,
                    5,
                    TimeSpan.FromMinutes(1));

                HttpResponseMessage responseMessage = null;
                await policy
                .ExecuteAsync(async() =>
                {
                    responseMessage =
                        await httpClient
                        .PostAsync(
                            Route,
                            new StringContent(json, Encoding.UTF8, "application/json"))
                    ;

                    return(responseMessage);
                })
                ;

                if (responseMessage == null || !responseMessage.IsSuccessStatusCode)
                {
                    this.logger.LogError(
                        $"GetWithTransientFaultHandling was unable to elicit a successful http response {responseMessage?.StatusCode}");
                    return(new FactsetSecurityResponseDto());
                }

                var jsonResponse = await responseMessage.Content.ReadAsStringAsync();

                var deserialisedResponse = JsonConvert.DeserializeObject <FactsetSecurityResponseDto>(jsonResponse);

                if (deserialisedResponse == null)
                {
                    this.logger.LogError("GetWithTransientFaultHandling was unable to deserialise the response");
                    return(new FactsetSecurityResponseDto());
                }

                this.logger.LogInformation("GetWithTransientFaultHandling returning deserialised GET response");

                return(deserialisedResponse);
            }
        }