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