예제 #1
0
        /// <summary>
        /// Заполнение ссылок на следующий и предыдущий блоки записей, не для режима следующие N / предыдущие N
        /// </summary>
        /// <param name="model"></param>
        private void FillRecordLinks(LogPartialModel model)
        {
            // Рассчитаем ссылку на предыдущие записи
            if (model.Items.Length > 0)
            {
                var firstRecord = model.Items[0];
                model.Previous = new LogPartialModel.DateAndOrderModel()
                {
                    Date  = firstRecord.Date,
                    Order = firstRecord.Order
                };
            }
            else if (model.Filters.Date.HasValue)
            {
                model.Previous = new LogPartialModel.DateAndOrderModel()
                {
                    Date  = model.Filters.Date.Value,
                    Order = 0
                };
            }
            else
            {
                model.Previous = null;
            }

            // Рассчитаем ссылку на следующие записи
            if (model.Items.Length > 0)
            {
                var lastRecord = model.Items.Last();
                model.Next = new LogPartialModel.DateAndOrderModel()
                {
                    Date  = lastRecord.Date,
                    Order = lastRecord.Order
                };
            }
            else if (model.Filters.Date.HasValue)
            {
                model.Next = new LogPartialModel.DateAndOrderModel()
                {
                    Date  = model.Filters.Date.Value,
                    Order = 0
                };
            }
            else
            {
                model.Next = new LogPartialModel.DateAndOrderModel()
                {
                    Date  = Now().AddDays(-1),
                    Order = 0
                }
            };
        }
예제 #2
0
        public PartialViewResult Center(LogFiltersModel filters)
        {
            if (!filters.ComponentId.HasValue)
            {
                return(null);
            }

            if (!filters.Id.HasValue)
            {
                return(null);
            }

            var levels = GetFilterLevels(filters.LogLevel);

            var logRepository = CurrentAccountDbContext.GetLogRepository();
            var logRecord     = logRepository.Find(filters.Id.Value, filters.ComponentId.Value);

            var previousRecords      = logRepository.GetPreviousRecords(filters.ComponentId.Value, logRecord.Date, logRecord.Order, levels, filters.Context, OutputRecordCount / 2);
            var previousRecordsModel = RecordsToModel(previousRecords);

            var nextRecords      = logRepository.GetNextRecords(filters.ComponentId.Value, logRecord.Date, logRecord.Order, levels, filters.Context, OutputRecordCount - previousRecordsModel.Length - 1);
            var nextRecordsModel = RecordsToModel(nextRecords);

            var logRecordModel = RecordsToModel(new[] { logRecord }.AsQueryable());

            var model = new LogPartialModel()
            {
                Filters           = filters,
                Items             = previousRecordsModel.Concat(logRecordModel).Concat(nextRecordsModel).ToArray(),
                ScrollToId        = logRecord.Id,
                OutputRecordCount = OutputRecordCount
            };

            FillRecordLinks(model);

            if (!string.IsNullOrEmpty(filters.Text))
            {
                var textLowercase = filters.Text.ToLower();
                if (!logRecord.Message.ToLower().Contains(textLowercase) && logRecord.Parameters.Any(t => t.Name.ToLower().Contains(textLowercase) || t.Value.ToLower().Contains(textLowercase)))
                {
                    model.ExpandedProperties      = GetLogRowPropertiesModel(logRecord);
                    model.ExpandedProperties.Text = filters.Text;
                }
            }

            return(PartialView("Partial", model));
        }
예제 #3
0
        /// <summary>
        /// Подгружаемая часть с блоком N предыдущих записей
        /// </summary>
        public PartialViewResult GetPreviousRecords(DateTime toDate, int order, LogFiltersModel filters)
        {
            if (!filters.ComponentId.HasValue)
            {
                return(null);
            }

            var levels = GetFilterLevels(filters.LogLevel);

            var logRepository = CurrentAccountDbContext.GetLogRepository();
            var records       = logRepository.GetPreviousRecords(filters.ComponentId.Value, toDate, order, levels, filters.Context, OutputRecordCount);

            var model = new LogPartialModel()
            {
                Filters           = filters,
                Items             = RecordsToModel(records),
                OutputRecordCount = OutputRecordCount
            };

            // Рассчитаем ссылку на предыдущие записи
            if (model.Items.Length > 0)
            {
                var firstRecord = model.Items[0];
                model.Previous = new LogPartialModel.DateAndOrderModel()
                {
                    Date  = firstRecord.Date,
                    Order = firstRecord.Order
                };
            }
            else
            {
                model.Previous          = null;
                model.NoPreviousRecords = true;
            }

            model.Next      = null;
            model.MarkAsNew = true;

            if (model.Items.Length > 0)
            {
                model.ScrollToId = model.Items.Last().Id;
            }

            return(PartialView("Partial", model));
        }
예제 #4
0
        /// <summary>
        /// Подгружаемая часть лога, не для режима следующие N / предыдущие N
        /// </summary>
        public PartialViewResult Partial(LogFiltersModel filters)
        {
            if (!filters.ComponentId.HasValue)
            {
                return(null);
            }

            // Если явно указана запись, отобразим как при поиске, с центрированием
            if (filters.Id.HasValue)
            {
                return(Center(filters));
            }

            var levels = GetFilterLevels(filters.LogLevel);

            IQueryable <Log> records;
            var logRepository = CurrentAccountDbContext.GetLogRepository();

            if (filters.Date.HasValue)
            {
                records = logRepository.GetFirstRecords(filters.ComponentId.Value, filters.Date, levels, filters.Context, OutputRecordCount);
            }
            else
            {
                records = logRepository.GetLastRecords(filters.ComponentId.Value, null, levels, filters.Context, OutputRecordCount);
            }

            var model = new LogPartialModel()
            {
                Filters           = filters,
                Items             = RecordsToModel(records),
                OutputRecordCount = OutputRecordCount
            };

            // Если показываем записи с конца, то прокрутим до последней записи
            if (!filters.Date.HasValue && model.Items.Length > 0)
            {
                model.ScrollToId = model.Items.Last().Id;
            }

            FillRecordLinks(model);

            return(PartialView(model));
        }