コード例 #1
0
        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
            });
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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());
            }
        }
コード例 #4
0
        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");
        }
コード例 #5
0
        /// <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);
        }