public WaterfallTitle ChromeWaterFallTitle(PerformanceDataDto queryResults)
        {
            var waterTitle = new WaterfallTitle()
            {
                Url         = queryResults.Url,
                Response    = queryResults.Response.ToString(),
                FailedCount = queryResults.PerformancesData.Count(s => !s.Status.StartsWith("1") && !s.Status.StartsWith("2") && !s.Status.StartsWith("3")).ToString()
            };


            return(waterTitle);
        }
        public dynamic ChromeWaterFall(PerformanceDataDto queryResults)
        {
            var duplicateCheck = queryResults.PerformancesData.Distinct().ToList();

            foreach (var data in duplicateCheck)
            {
                var query = queryResults.PerformancesData.Where(s => s.Url.Equals(data.Url)).ToList();

                if (query.Count > 1)
                {
                    for (var i = 1; i < query.Count; i++)
                    {
                        for (var z = 0; z < i; z++)
                        {
                            query[i].Url = query[i].Url.Insert(query[i].Url.Count(), " ");
                        }
                    }
                }
            }

            string[] dataLabel = new string[5] {
                "DNS", "Connect", "Send", "TTFB", "Download"
            };

            dynamic returnData = new ExpandoObject();

            dynamic chartData = new ExpandoObject();

            chartData = queryResults;

            dynamic objectForChart = new ExpandoObject();

            objectForChart.cols = new List <Object>();
            objectForChart.cols.Add(new { type = "string", id = "url" });
            objectForChart.cols.Add(new { type = "string", id = "name" });
            objectForChart.cols.Add(new { type = "string", role = "style" });
            objectForChart.cols.Add(new { type = "number", id = "start" });
            objectForChart.cols.Add(new { type = "number", id = "end" });


            objectForChart.rows = new List <Object>();

            foreach (var data in queryResults.PerformancesData)
            {
                decimal[] dataValue = new decimal[5] {
                    data.Dns, data.Connect, data.Send, data.TTFB, data.Download
                };
                string status = data.Status.StartsWith("2") || data.Status.StartsWith("3") || data.Status.StartsWith("1") ? "null" : "error";

                for (var i = 0; i < 5; i++)
                {
                    if (i < 1)
                    {
                        string label    = dataLabel[i];
                        long   response = Convert.ToInt64(data.RequestTime + dataValue[i]);


                        var cItem = new List <Object>
                        {
                            new { v = data.Url },
                            new { v = label },
                            new { v = status },
                            new { v = data.RequestTime },
                            new { v = response }
                        };
                        objectForChart.rows.Add(new { c = cItem });
                    }
                    else
                    {
                        var    requestTime = RequestTimeRestructure(dataValue, i, data.RequestTime);
                        string label       = dataLabel[i];
                        long   response    = Convert.ToInt64(requestTime + dataValue[i]);

                        var cItem = new List <Object>
                        {
                            new { v = data.Url },
                            new { v = label },
                            new { v = status },
                            new { v = requestTime },
                            new { v = response }
                        };
                        objectForChart.rows.Add(new { c = cItem });
                    }
                }
            }

            returnData.ObjectForChart = objectForChart;
            returnData.ChartData      = chartData;

            return(returnData);
        }
예제 #3
0
        public void ResponseCalculation(string url, List <RequestData> request, List <ResponseModel> response, List <DataReceived> received, List <LoadingFinished> loading, List <LoadingFailed> failed, DateTime now, string image)
        {
            var requestId   = request.Select(s => s.RequestId).Distinct();
            var startedTime = request.OrderBy(s => s.TimeStamp).FirstOrDefault().TimeStamp;
            var returnList  = new List <ResponseData>();

            foreach (var id in requestId)
            {
                try
                {
                    var startTime    = requestId.FirstOrDefault();
                    var requestData  = request.Find(s => s.RequestId.Equals(id));
                    var responseData = response.Where(s => s.ResponseParams.RequestId.Equals(id)).OrderBy(p => p.ResponseParams.TimeStamp).ToList();
                    var receivedData = received.Where(s => s.RequestId.Equals(id)).OrderBy(p => p.TimeStamp).ToList();
                    var loadingData  = loading.Where(s => s.RequestId.Equals(id));
                    var failedData   = failed.Where(s => s.RequestId.Equals(id));

                    if (!failedData.Any() && responseData.Any() && responseData.LastOrDefault().ResponseDetail.RemoteIPAddress != null)
                    {
                        var responseTime = new ResponseData()
                        {
                            Url             = requestData.Url,
                            MimeType        = requestData.Type,
                            Protocol        = responseData.LastOrDefault().ResponseDetail.Protocol,
                            RemoteIPAddress = responseData.LastOrDefault().ResponseDetail.RemoteIPAddress,
                            Status          = responseData.LastOrDefault().ResponseDetail.Status,
                            RequestTime     = Math.Round((requestData.TimeStamp - startedTime) * 1000),
                            Dns             = Math.Round(responseData.LastOrDefault().ResponseRawData.DnsEnd - responseData.LastOrDefault().ResponseRawData.DnsStart, 3),
                            Connect         = Math.Round(responseData.LastOrDefault().ResponseRawData.ConnectEnd - responseData.LastOrDefault().ResponseRawData.ConnectStart, 3),
                            SSL             = Math.Round(responseData.LastOrDefault().ResponseRawData.SendEnd - responseData.LastOrDefault().ResponseRawData.SslStart, 3),
                            Send            = Math.Round(responseData.LastOrDefault().ResponseRawData.SendEnd - responseData.LastOrDefault().ResponseRawData.SendStart, 3),
                            TTFB            = Math.Round(responseData.LastOrDefault().ResponseRawData.ReceiveHeadersEnd - responseData.LastOrDefault().ResponseRawData.SendEnd, 3),
                            Download        = receivedData.Any() ? Math.Round((receivedData.LastOrDefault().TimeStamp - responseData.LastOrDefault().ResponseParams.TimeStamp) * 1000, 3) : 0,
                            ResponseTime    = 0
                        };
                        responseTime.ResponseTime = Math.Round(responseTime.Dns + responseTime.Connect + responseTime.Send + responseTime.TTFB + responseTime.Download, 3);
                        returnList.Add(responseTime);
                    }
                    else if (failedData.Any())
                    {
                        var responseTime = new ResponseData()
                        {
                            Url             = requestData.Url,
                            MimeType        = requestData.Type,
                            Protocol        = responseData.Any() ? responseData.LastOrDefault().ResponseDetail.Protocol : "Unknown",
                            RemoteIPAddress = responseData.Any() ? responseData.LastOrDefault().ResponseDetail.RemoteIPAddress : "",
                            Status          = responseData.Any() ? responseData.LastOrDefault().ResponseDetail.Status : failedData.Any() ? failedData.LastOrDefault().ErrorText : "",
                            RequestTime     = Math.Round((requestData.TimeStamp - startedTime) * 1000),
                            Dns             = receivedData.Any() ? Math.Round((receivedData.LastOrDefault().TimeStamp - responseData.LastOrDefault().ResponseParams.TimeStamp) * 1000, 3) : 0,
                            Connect         = responseData.Any() ? Math.Round(responseData.LastOrDefault().ResponseRawData.ConnectEnd - responseData.LastOrDefault().ResponseRawData.ConnectStart, 3) : 0,
                            SSL             = responseData.Any() ? Math.Round(responseData.LastOrDefault().ResponseRawData.SendEnd - responseData.LastOrDefault().ResponseRawData.SslStart, 3) : 0,
                            Send            = responseData.Any() ? Math.Round(responseData.LastOrDefault().ResponseRawData.SendEnd - responseData.LastOrDefault().ResponseRawData.SendStart, 3) : 0,
                            TTFB            = responseData.Any() ? Math.Round(responseData.LastOrDefault().ResponseRawData.ReceiveHeadersEnd - responseData.LastOrDefault().ResponseRawData.SendEnd, 3) : 0,
                            Download        = receivedData.Any() ? Math.Round((receivedData.LastOrDefault().TimeStamp - responseData.LastOrDefault().ResponseParams.TimeStamp) * 1000, 3) : 0,
                            ResponseTime    = 0
                        };
                        responseTime.ResponseTime = Math.Round(responseTime.Dns + responseTime.Connect + responseTime.Send + responseTime.TTFB + responseTime.Download, 3);
                        returnList.Add(responseTime);
                    }
                }
                catch (Exception ex)
                {
                    log.Error($"Calculatioin Error : {ex}");
                }
            }


            var newPerformanceData = new PerformanceDataDto()
            {
                TestTime         = now,
                Url              = url,
                Page_Total       = 0,
                Province         = _province,
                Image            = image,
                Response         = returnList.Select(s => s.RequestTime + s.ResponseTime).Max(),
                PerformancesData = returnList
            };

            performanceDataService.AddOrEdit(newPerformanceData);
        }