Exemplo n.º 1
0
        static async Task <GetLoanOptionsResponsePayload> SendHttpRequest(GetLoanOptionsRequestPayload requestPayload)
        {
            var sw = new Stopwatch();

            sw.Start();

            var payload = JsonConvert.SerializeObject(requestPayload);

            logger.WriteOutput($"{requestPayload.Id:000} REQUEST: CreditScore = {requestPayload.CreditScore}");

            var message = new HttpRequestMessage(HttpMethod.Post, "");

            message.Headers.Add("Accept", "application/json");
            message.Content = new StringContent(payload, System.Text.Encoding.UTF8, "application/json");
            var response = await httpClient.SendAsync(message);

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

            var options = Helpers.Deserialize <GetLoanOptionsResponsePayload>(responsePayload);

            sw.Stop();
            SendOverHttp_AverageRTTms = (SendOverHttp_AverageRTTms * SendOverHttp_SendCount + sw.ElapsedMilliseconds) / (++SendOverHttp_SendCount);
            if (sw.ElapsedMilliseconds < SendOverHttp_MinRTTms || SendOverHttp_MinRTTms == 0)
            {
                SendOverHttp_MinRTTms = sw.ElapsedMilliseconds;
            }
            if (sw.ElapsedMilliseconds > SendOverHttp_MaxRTTms)
            {
                SendOverHttp_MaxRTTms = sw.ElapsedMilliseconds;
            }

            return(options);
        }
Exemplo n.º 2
0
        static async Task SendRequests(RequestResponseFactory factory)
        {
            // get number of requests to make
            var requestsToSend     = GetNumberInActionArgs(0);
            var msDelayBetweenReqs = GetNumberInActionArgs(1);
            var httpEndpoint       = GetActionArg(2);

            if (httpEndpoint != null)
            {
                SetupHttpClient(httpEndpoint);
            }

            var sender = factory.GetSender <GetLoanOptionsRequestPayload, GetLoanOptionsResponsePayload>();

            sender.RequestSending += (r, m) =>
            {
                logger.WriteOutput($"{r.Id:000} REQUEST: CreditScore = {r.CreditScore}, SessionId = {m.ReplyToSessionId}");
            };
            var random = new Random();
            var outstandingRequests = new Task[requestsToSend];

            logger.WriteOutput("Sending requests...");

            for (var i = 0; i < requestsToSend; i++)
            {
                var payload = new GetLoanOptionsRequestPayload
                {
                    Id          = i,
                    CreditScore = random.Next(300, 801)
                };

                var rememberI = i;
                if (httpEndpoint == null)
                {
                    outstandingRequests[i] = sender.SendRequest(payload).ContinueWith(async t =>
                    {
                        if (t.IsFaulted)
                        {
                            foreach (var e in t.Exception.InnerExceptions)
                            {
                                logger.WriteOutput($"{rememberI:000} Failure: {e.Message}");
                            }

                            return;
                        }

                        var response = await t;
                        logger.WriteOutput($"{rememberI:000} RESPONSE: Provider = {response.Provider}, Loan = {response.LoanAmount}");
                    });
                }
                else
                {
                    outstandingRequests[i] = SendHttpRequest(payload).ContinueWith(async t =>
                    {
                        var response = await t;
                        logger.WriteOutput($"{rememberI:000} RESPONSE: Provider = {response.Provider}, Loan = {response.LoanAmount}");
                    });
                }

                await Task.Delay(msDelayBetweenReqs);
            }

            await Task.WhenAll(outstandingRequests);

            logger.Stop();

            if (httpEndpoint == null)
            {
                OutputAppMessage($"Average Round Trip Time (sec): {Math.Round(sender.AverageRTTms / 1000.0, 3)}");
                OutputAppMessage($"Min Round Trip Time (sec): {Math.Round(sender.MinRTTms / 1000.0, 3)}");
                OutputAppMessage($"Max Round Trip Time (sec): {Math.Round(sender.MaxRTTms / 1000.0, 3)}");
            }
            else
            {
                OutputAppMessage($"Average Round Trip Time (sec): {Math.Round(SendOverHttp_AverageRTTms / 1000.0, 3)}");
                OutputAppMessage($"Min Round Trip Time (sec): {Math.Round(SendOverHttp_MinRTTms / 1000.0, 3)}");
                OutputAppMessage($"Max Round Trip Time (sec): {Math.Round(SendOverHttp_MaxRTTms / 1000.0, 3)}");
            }
        }