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); }
/// <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()); }
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>() }); }
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 }); }
/// <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); } }