Example #1
0
        private async Task CreateMinuteBarRequest(IReadOnlyCollection <MinuteBarRequestKeyDto> keys)
        {
            this._logger.LogInformation($"{nameof(BmllDataRequestsApiManager)} CreateMinuteBarRequest active");

            var request = new CreateMinuteBarRequestCommand {
                Keys = keys?.ToList()
            };

            await this._timeBarRepository.RequestMinuteBarsAsync(request);

            this._logger.LogInformation($"{nameof(BmllDataRequestsApiManager)} CreateMinuteBarRequest complete");
        }
Example #2
0
        /// <summary>
        /// The request minute bars async.
        /// </summary>
        /// <param name="createCommand">
        /// The create command.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public async Task RequestMinuteBarsAsync(CreateMinuteBarRequestCommand createCommand)
        {
            if (createCommand == null || createCommand.Keys == null || !createCommand.Keys.Any())
            {
                this.logger.LogError("BmllTimeBarApiRepository RequestMinuteBars was passed 0 keys to request. Returning early.");

                return;
            }

            this.logger.LogInformation($"BmllTimeBarApiRepository RequestMinuteBars received {createCommand.Keys.Count} keys to query BMLL for");

            try
            {
                using (var httpClient =
                           this.httpClientFactory.GenericHttpClient(this.apiClientConfiguration.BmllServiceUrl))
                {
                    var json   = JsonConvert.SerializeObject(createCommand);
                    var policy = this.policyFactory.PolicyTimeoutGeneric <HttpResponseMessage>(
                        TimeSpan.FromMinutes(30),
                        i => !i.IsSuccessStatusCode,
                        10,
                        TimeSpan.FromMinutes(1));

                    HttpResponseMessage response = null;
                    await policy
                    .ExecuteAsync(async() =>
                    {
                        response = await httpClient.PostAsync(
                            RequestsRoute,
                            new StringContent(json, Encoding.UTF8, "application/json"));
                        this.logger.LogInformation(
                            "RequestMinuteBars policy received post response or timed out");
                        return(response);
                    })
                    ;

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

                        return;
                    }

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

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

                    if (deserialisedResponse == null)
                    {
                        this.logger.LogError("BmllTimeBarApiRepository RequestMinuteBars was unable to deserialise the response");

                        return;
                    }

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

                    return;
                }
            }
            catch (Exception e)
            {
                this.logger?.LogError(e, "BmllTimeBarApiRepository RequestMinuteBars encountered an exception");
            }

            this.logger.LogInformation(
                $"BmllTimeBarApiRepository RequestMinuteBars completed request for {createCommand.Keys.Count} keys to query BMLL for");
        }