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