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