private FilterResult FilterData(SystemLoadService svc, SystemLoadWaitsViewModel viewModel, bool isDownload, IQualityIndicatorService qualityIndicatorService) { var grid = svc.Waits(viewModel.GridConditions, viewModel.FilterConditions, viewModel.FilterOperands); var sysInfo = svc.ReadSystemInformation().ToList(); var aaData = grid.Data.Select(d => new string[] { $"{d.SummaryDayHour.ToShortDateString()} {d.SummaryDayHour.ToString("t")}", $"{d.Server} ({d.ServerId})", isDownload ? d.OverallScore.ToString() :$"<span class='{qualityIndicatorService.GetCssClassForScore(d.OverallScore, false)}'>{d.OverallScore}</span>", $"{d.SignalWaitsRatio}%", d.PercentOfCPUThreshold.ToString("f2"), isDownload ? d.WaitType : $"<div style='display:inline-block;' title='{d.WaitDescription}'>{d.WaitType}</div>", d.SignalWaitTime.ToString(), d.TotalWaitTime.ToString(), d.DifferentialWaitingTasksCount.ToString(), d.IsPoisonWait ? "Yes" : "No", d.IsActiveWeeklySample ? "Yes" : "No" }).ToArray(); return(new kCura.PDD.Web.Controllers.FilterResult() { Data = aaData, TotalRecordCount = grid.Count }); }
/// <summary> /// Translates a Server view into grid data /// </summary> /// <param name="viewModel"></param> /// <returns></returns> private DataTableResponse FetchServerGridData(SystemLoadService svc, SystemLoadWaitsViewModel viewModel, IQualityIndicatorService qualityIndicatorService) { var data = FilterData(svc, viewModel, false, qualityIndicatorService); var dtResponse = new DataTableResponse() { sEcho = string.IsNullOrEmpty(viewModel.GridConditions.sEcho) ? "1" : viewModel.GridConditions.sEcho, aaData = data.Data, recordsTotal = data.Data.Count(), recordsFiltered = data.TotalRecordCount }; return(dtResponse); }
private string FetchFileData(SystemLoadService svc, SystemLoadWaitsViewModel viewModel, IQualityIndicatorService qualityIndicatorService) { var filterResult = FilterData(svc, viewModel, true, qualityIndicatorService); using (var sw = new System.IO.StringWriter()) { var heaaderArr = new string[] { "Hour", "Server", "Waits Score", "Signal Waits Ratio", "Processor Time Utilization", "Wait Type", "Signal Wait Time (ms)", "Total Wait Time (ms)", "Waiting Task Count", "Poison Wait", "Weekly Sample" }; sw.WriteLine(string.Join(",", heaaderArr)); foreach (var row in filterResult.Data) { sw.WriteCsvSafeLine(row); } return(sw.ToString()); } }
private void Initialize(SystemLoadWaitsViewModel model, string serverParam, string hourParam) { if (!string.IsNullOrEmpty(serverParam)) { model.FilterConditions.Server = serverParam; } if (!string.IsNullOrEmpty(hourParam)) { DateTime parsedHour; if (DateTime.TryParse(hourParam, out parsedHour)) { model.FilterConditions.SummaryDayHour = parsedHour; } } var json = new JavaScriptSerializer().Serialize(model); VarscatState.Value = json; TimezoneOffset.Value = RequestService.GetTimezoneOffset(this.Request).ToString(); SampleStart.Value = base.GlassInfo.MinSampleDate.GetValueOrDefault(DateTime.UtcNow).ToString("s"); }
/// <summary> /// Pulls query parameters from the request and converts them to grid and filter conditions for the Server View /// </summary> /// <returns></returns> private SystemLoadWaitsViewModel PopulateServerModelSettings() { var model = new SystemLoadWaitsViewModel(); var queryParams = this.requestService.GetQueryParamsDecoded(Request); //Grid conditions model.GridConditions = PopulateCommonGridConditions(queryParams); var iSortCol = queryParams.FirstOrDefault(k => k.Key == "iSortCol_0"); var sSortDir = queryParams.FirstOrDefault(k => k.Key == "sSortDir_0"); var sortColumn = string.IsNullOrEmpty(iSortCol.Value) ? null : (WaitsViewColumns?)System.Enum.Parse(typeof(WaitsViewColumns), iSortCol.Value); var sortBy = sortColumn?.ToString(); model.GridConditions.SortIndex = iSortCol.Value; model.GridConditions.SortColumn = sortBy; model.GridConditions.SortDirection = sSortDir.Value; //Filter conditions var hourFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_0"); var serverFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_1"); var scoreFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_2"); var signalWaitsRatioFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_3"); var percentOfCPUThresholdFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_4"); var typeFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_5"); var signalWaitTimeFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_6"); var waitTimeFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_7"); var differentialWaitingTasksCountFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_8"); var poisonFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_9"); var weeklyFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_10"); int score, ratio; long signalTime, waitTime, differentialWaitingTasksCount; DateTime hour; decimal percentOfCPUThreshold; model.FilterConditions = new WaitsViewFilterConditions() { SummaryDayHour = DateTime.TryParse(HttpUtility.UrlDecode(hourFilter.Value), out hour) ? hour : (DateTime?)null, Server = serverFilter.Value, OverallScore = int.TryParse(scoreFilter.Value, out score) ? score : (int?)null, SignalWaitsRatio = int.TryParse(signalWaitsRatioFilter.Value.Replace("%", string.Empty), out ratio) ? ratio : (int?)null, WaitType = typeFilter.Value, SignalWaitTime = long.TryParse(signalWaitTimeFilter.Value, out signalTime) ? signalTime : (long?)null, TotalWaitTime = long.TryParse(waitTimeFilter.Value, out waitTime) ? waitTime : (long?)null, IsPoisonWait = string.IsNullOrEmpty(poisonFilter.Value) ? null : (bool?)poisonFilter.Value.Equals("yes", StringComparison.CurrentCultureIgnoreCase), IsActiveWeeklySample = string.IsNullOrEmpty(weeklyFilter.Value) ? null : (bool?)weeklyFilter.Value.Equals("yes", StringComparison.CurrentCultureIgnoreCase), PercentOfCPUThreshold = (string.IsNullOrEmpty(percentOfCPUThresholdFilter.Value) || false == decimal.TryParse(percentOfCPUThresholdFilter.Value, out percentOfCPUThreshold)) ? null : (decimal?)percentOfCPUThreshold, DifferentialWaitingTasksCount = (string.IsNullOrEmpty(differentialWaitingTasksCountFilter.Value) || false == long.TryParse(differentialWaitingTasksCountFilter.Value, out differentialWaitingTasksCount)) ? null : (decimal?)differentialWaitingTasksCount, }; //Filter operands System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_2").Value, out model.FilterOperands.OverallScore); System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_3").Value, out model.FilterOperands.SignalWaitsRatio); System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_6").Value, out model.FilterOperands.SignalWaitTime); System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_7").Value, out model.FilterOperands.TotalWaitTime); System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_4").Value, out model.FilterOperands.PercentOfCPUThreshold); System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_8").Value, out model.FilterOperands.DifferentialWaitingTasksCount); return(model); }