protected ComponentsTreeItemModel GetTreeItemModel( SimplifiedComponent component, string[] expandedItems, DateTime from, DateTime to) { var eventRepository = CurrentAccountDbContext.GetEventRepository(); var states = eventRepository.GetTimelineStates(component.Id, EventCategory.ComponentExternalStatus, from, to); var okTime = eventRepository.GetTimelineOkTime(states, from, to); var items = this.GetTimelineItemsByStates(states, from, to); var result = new ComponentsTreeItemModel() { Id = component.Id, ParentId = component.ParentId, ComponentTypeId = component.ComponentTypeId, DisplayName = component.DisplayName, SystemName = component.SystemName, Path = component.Path, From = from, To = to, OkTime = okTime, Timeline = new TimelineModel() { Category = EventCategory.ComponentExternalStatus, OwnerId = component.Id, DateFrom = from, DateTo = to, Items = items, OkTime = okTime } }; // Изначально развёрнут только корень дерева var expanded = result.IsRoot; if (expandedItems.Contains(result.Id.ToString())) { expanded = true; } result.Expanded = expanded; // Если узел раскрыт, то загрузим содержимое if (result.Expanded) { if (result.Content == null) { result.Content = GetTreeItemContentModel(component, expandedItems, from, to); } if (result.Content.Details == null) { result.Content.Details = GetTreeItemDetailsModel(component, expandedItems, from, to); } } return(result); }
protected ComponentsTreeItemDetailsModel GetTreeItemDetailsModel(SimplifiedComponent component, DateTime now, string[] expandedItems) { var result = new ComponentsTreeItemDetailsModel() { Id = component.Id, Events = new ComponentsTreeItemEventsDetailsModel() { HasEvents = component.EventsStatus.FirstEventId.HasValue, Status = component.EventsStatus.Status, FromDate = component.EventsStatus.StartDate, StatusDuration = component.EventsStatus.GetDuration(now) }, Unittests = new ComponentsTreeItemUnittestsDetailsModel() { Id = component.Id, Status = component.UnitTestsStatus.Status, Items = component.Unittests .OrderByDescending(t => t.StatusData.Status) .ThenBy(t => t.DisplayName) .Select(t => new ComponentsTreeItemUnittestsDetailsItemModel() { Id = t.Id, DisplayName = t.DisplayName, Status = t.StatusData.Status, StatusDuration = t.StatusData.GetDuration(now), Message = t.StatusData.Message }) .ToArray(), StatusDuration = component.UnitTestsStatus.GetDuration(now) }, Metrics = new ComponentsTreeItemMetricsDetailsModel() { Id = component.Id, Status = component.MetricsStatus.Status, Items = component.Metrics .OrderByDescending(t => t.StatusData.Status) .ThenBy(t => t.DisplayName) .Select(t => new ComponentsTreeItemMetricsDetailsItemModel() { Id = t.Id, DisplayName = t.DisplayName, Status = t.StatusData.Status, StatusDuration = t.StatusData.GetDuration(now), Value = t.Value }) .ToArray(), StatusDuration = component.MetricsStatus.GetDuration(now) } }; result.Unittests.Expanded = expandedItems.Contains(result.Unittests.HtmlId); result.Metrics.Expanded = expandedItems.Contains(result.Metrics.HtmlId); return(result); }
protected ComponentsTreeItemContentModel GetTreeItemContentModel( SimplifiedComponent component, string[] expandedItems, DateTime from, DateTime to) { var result = new ComponentsTreeItemContentModel() { Childs = component.Childs .Select(t => GetTreeItemModel(t, expandedItems, from, to)) .Where(t => t != null) .OrderBy(t => t.OkTime) .ToArray() }; return(result); }
protected ComponentsTreeItemContentModel GetTreeItemContentModel( List <MonitoringStatus> statuses, Guid?componentTypeId, string search, SimplifiedComponent component, DateTime now, string[] expandedItems) { var result = new ComponentsTreeItemContentModel() { Childs = component.Childs .Select(t => GetTreeItemModel(statuses, componentTypeId, search, t, now, expandedItems)) .Where(t => t != null) .OrderBy(t => t.DisplayName) .ToArray() }; return(result); }
protected ComponentsTreeItemDetailsModel GetTreeItemDetailsModel( SimplifiedComponent component, string[] expandedItems, DateTime from, DateTime to) { var eventRepository = CurrentAccountDbContext.GetEventRepository(); var eventsStates = eventRepository.GetTimelineStates(component.Id, EventCategory.ComponentEventsStatus, from, to); var eventsOkTime = eventRepository.GetTimelineOkTime(eventsStates, from, to); var eventsItems = this.GetTimelineItemsByStates(eventsStates, from, to); var unittestsStates = eventRepository.GetTimelineStates(component.Id, EventCategory.ComponentUnitTestsStatus, from, to); var unittestsOkTime = eventRepository.GetTimelineOkTime(unittestsStates, from, to); var unittestsItems = this.GetTimelineItemsByStates(unittestsStates, from, to); var metricsStates = eventRepository.GetTimelineStates(component.Id, EventCategory.ComponentMetricsStatus, from, to); var metricsOkTime = eventRepository.GetTimelineOkTime(metricsStates, from, to); var metricsItems = this.GetTimelineItemsByStates(metricsStates, from, to); var result = new ComponentsTreeItemDetailsModel() { Id = component.Id, HasEvents = component.HasEvents, EventsOkTime = eventsOkTime, EventsTimeline = new TimelineModel() { Category = EventCategory.ComponentEventsStatus, OwnerId = component.Id, DateFrom = from, DateTo = to, Items = eventsItems, OkTime = eventsOkTime }, From = from, To = to, Path = component.Path, Unittests = new ComponentsTreeItemUnittestsDetailsModel() { Id = component.Id, Items = component.Unittests .Select(t => new ComponentsTreeItemUnittestsDetailsItemModel() { Id = t.Id, DisplayName = t.DisplayName }) .ToArray() }, UnittestsOkTime = unittestsOkTime, UnittestsTimeline = new TimelineModel() { Category = EventCategory.ComponentUnitTestsStatus, OwnerId = component.Id, DateFrom = from, DateTo = to, Items = unittestsItems, OkTime = unittestsOkTime }, Metrics = new ComponentsTreeItemMetricsDetailsModel() { Id = component.Id, Items = component.Metrics .Select(t => new ComponentsTreeItemMetricsDetailsItemModel() { Id = t.Id, DisplayName = t.DisplayName }) .ToArray() }, MetricsOkTime = metricsOkTime, MetricsTimeline = new TimelineModel() { Category = EventCategory.ComponentMetricsStatus, OwnerId = component.Id, DateFrom = from, DateTo = to, Items = metricsItems, OkTime = metricsOkTime } }; foreach (var unittest in result.Unittests.Items) { var unittestStates = eventRepository.GetTimelineStates(unittest.Id, EventCategory.UnitTestStatus, from, to); unittest.OkTime = eventRepository.GetTimelineOkTime(unittestStates, from, to); var unittestItems = this.GetTimelineItemsByStates(unittestStates, from, to); unittest.Timeline = new TimelineModel() { Category = EventCategory.UnitTestStatus, OwnerId = unittest.Id, DateFrom = from, DateTo = to, Items = unittestItems, OkTime = unittest.OkTime }; } result.Unittests.Items = result.Unittests.Items.OrderBy(t => t.OkTime).ToArray(); foreach (var metric in result.Metrics.Items) { var metricStates = eventRepository.GetTimelineStates(metric.Id, EventCategory.MetricStatus, from, to); metric.OkTime = eventRepository.GetTimelineOkTime(metricStates, from, to); var metricItems = this.GetTimelineItemsByStates(metricStates, from, to); metric.Timeline = new TimelineModel() { Category = EventCategory.MetricStatus, OwnerId = metric.Id, DateFrom = from, DateTo = to, Items = metricItems, OkTime = metric.OkTime }; } result.Metrics.Items = result.Metrics.Items.OrderBy(t => t.OkTime).ToArray(); result.Unittests.Expanded = expandedItems.Contains(result.Unittests.HtmlId); result.Metrics.Expanded = expandedItems.Contains(result.Metrics.HtmlId); return(result); }
protected ComponentsTreeItemModel GetTreeItemModel( List <MonitoringStatus> statuses, Guid?componentTypeId, string search, SimplifiedComponent component, DateTime now, string[] expandedItems) { var result = new ComponentsTreeItemModel() { Id = component.Id, DisplayName = component.DisplayName, SystemName = component.SystemName, Status = component.ExternalStatus.Status, StatusDuration = component.ExternalStatus.GetDuration(now), IsRoot = component.ComponentTypeId == SystemComponentTypes.Root.Id, IsFolder = component.ComponentTypeId == SystemComponentTypes.Folder.Id, ParentId = component.ParentId, ComponentTypeId = component.ComponentTypeId }; // Изначально развёрнут только корень дерева var expanded = result.IsRoot; // Если заполнен хотя бы один фильтр, то нужно проверять всех детей var isFilterActive = (statuses != null && statuses.Count > 0) || componentTypeId.HasValue || !string.IsNullOrEmpty(search); if (isFilterActive) { var filtered = true; if (statuses != null && statuses.Count > 0) { if (!statuses.Contains(result.Status)) { filtered = false; } } if (componentTypeId.HasValue) { if (result.ComponentTypeId != componentTypeId.Value) { filtered = false; } } if (!string.IsNullOrEmpty(search)) { if (!( result.Id.ToString().IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 || result.SystemName.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 || result.DisplayName.IndexOf(search, StringComparison.OrdinalIgnoreCase) >= 0 )) { filtered = false; } } result.Content = GetTreeItemContentModel(statuses, componentTypeId, search, component, now, expandedItems); filtered = filtered || (result.Content.Childs.Length > 0); // Критерии поиска не выполняются ни у себя, ни у детей -> этот элемент не нужен if (!filtered) { return(null); } // Раскрываем, если есть дети, подходящие под условия if (result.Content.Childs.Length > 0) { expanded = true; } } if (expandedItems.Contains(result.Id.ToString())) { expanded = true; } result.Expanded = expanded; // Если узел раскрыт, то загрузим содержимое if (result.Expanded) { if (result.Content == null) { result.Content = GetTreeItemContentModel(statuses, componentTypeId, search, component, now, expandedItems); } if (result.Content.Details == null) { result.Content.Details = GetTreeItemDetailsModel(component, now, expandedItems); } } return(result); }