private void Initialize(UptimeReportViewModel model)
        {
            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>
        protected UptimeReportViewModel PopulateServerModelSettings()
        {
            var model       = new UptimeReportViewModel();
            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
                : (UptimeViewColumns?)System.Enum.Parse(typeof(UptimeViewColumns), 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 scoreFilter  = queryParams.FirstOrDefault(k => k.Key == "sSearch_1");
            var statusFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_2");
            var uptimeFilter = queryParams.FirstOrDefault(k => k.Key == "sSearch_3");

            int      score;
            double   uptime;
            DateTime hour;

            model.FilterConditions = new UptimeViewFilterConditions()
            {
                SummaryDayHour = DateTime.TryParse(HttpUtility.UrlDecode(hourFilter.Value), out hour)
                    ? hour
                    : (DateTime?)null,
                Score = int.TryParse(scoreFilter.Value, out score)
                    ? score
                    : (int?)null,
                Status = string.IsNullOrEmpty(statusFilter.Value)
                    ? null
                    : statusFilter.Value,
                Uptime = double.TryParse(uptimeFilter.Value, out uptime)
                    ? uptime
                    : (double?)null
            };

            //Filter operands
            System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_1").Value, out model.FilterOperands.Score);
            System.Enum.TryParse <FilterOperand>(queryParams.FirstOrDefault(k => k.Key == "sOperand_3").Value, out model.FilterOperands.Uptime);

            return(model);
        }
        /// <summary>
        /// Translates a Server view into grid data
        /// </summary>
        /// <param name="viewModel"></param>
        /// <returns></returns>
        private DataTableResponse FetchServerGridData(UptimeService svc, UptimeReportViewModel 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(UptimeService svc, UptimeReportViewModel viewModel, IQualityIndicatorService qualityIndicatorService)
        {
            var filterResult = FilterData(svc, viewModel, true, qualityIndicatorService);

            using (var sw = new System.IO.StringWriter())
            {
                var heaaderArr = new string[]
                {
                    "Hour", "Score", "Status", "Uptime"
                };
                sw.WriteLine(string.Join(",", heaaderArr));
                foreach (var row in filterResult.Data)
                {
                    sw.WriteCsvSafeLine(row);
                }
                return(sw.ToString());
            }
        }
        private FilterResult FilterData(UptimeService svc, UptimeReportViewModel viewModel, bool isDownload, IQualityIndicatorService qualityIndicatorService)
        {
            var grid = svc.UptimeHours(viewModel.GridConditions, viewModel.FilterConditions, viewModel.FilterOperands);

            var aaData = grid.Data.Select(d => new string[]
            {
                $"{d.SummaryDayHour.ToShortDateString()} {d.SummaryDayHour.ToString("t")}",
                isDownload
                    ? $"{d.Score} {(d.AffectedByMaintenanceWindow ? "(Affected By Maintenance Window)" : string.Empty)}"
                    : $"<span class='{qualityIndicatorService.GetCssClassForScore(d.Score, false)}'>{d.Score} {(d.AffectedByMaintenanceWindow ? "(Affected By Maintenance Window)" : string.Empty)}</span>",
                d.Status.ToString(),
                d.Uptime.ToString("N2")
            }).ToArray();

            return(new FilterResult()
            {
                Data = aaData, TotalRecordCount = grid.Count
            });
        }