public ActionResult Add(UnitTestAddModel model) { if (!ModelState.IsValid) { return(View(model)); } var componentRepository = CurrentAccountDbContext.GetComponentRepository(); var component = componentRepository.GetById(model.ComponentId.Value); var unitTestTypeRepository = CurrentAccountDbContext.GetUnitTestTypeRepository(); var unitTestType = unitTestTypeRepository.GetById(model.UnitTestTypeId); var client = GetDispatcherClient(); var data = new GetOrCreateUnitTestRequestData() { ComponentId = component.Id, UnitTestTypeId = unitTestType.Id, DisplayName = model.DisplayName, SystemName = model.DisplayName }; var response = client.GetOrCreateUnitTest(CurrentUser.AccountId, data); var unitTest = response.Data; this.SetTempMessage(TempMessageType.Success, string.Format("Добавлена проверка <a href='{1}' class='alert-link'>{0}</a>", unitTest.DisplayName, Url.Action("ResultDetails", new { id = unitTest.Id }))); return(RedirectToAction("Index")); }
/// <summary> /// Детализация по компоненту - общее состояние /// </summary> public ActionResult ComponentDetailsState(Guid id) { var repository = CurrentAccountDbContext.GetComponentRepository(); var component = repository.GetById(id); var eventsMiniStatus = ComponentsController.GetEventsMiniStatusModel(id, CurrentAccountDbContext); var unittestsMiniStatus = ComponentsController.GetUnittestsMiniStatusModel(CurrentUser.AccountId, id, CurrentAccountDbContext); var metricsMiniStatus = ComponentsController.GetMetricsMiniStatusModel(CurrentUser.AccountId, id, CurrentAccountDbContext); var childsMiniStatus = ComponentsController.GetChildsMiniStatusModel(CurrentUser.AccountId, id, CurrentAccountDbContext); var model = new ComponentDetailsStateModel() { Id = id, SystemName = component.SystemName, Status = component.ExternalStatus.Status, StatusEventId = component.ExternalStatus.StatusEventId, StatusDuration = component.ExternalStatus.GetDuration(MvcApplication.GetServerDateTime()), CanEdit = CurrentUser.CanEditCommonData() && !component.IsRoot, IsEnabled = component.Enable, EventsMiniStatus = eventsMiniStatus, UnittestsMiniStatus = unittestsMiniStatus, MetricsMiniStatus = metricsMiniStatus, ChildsMiniStatus = childsMiniStatus }; return(PartialView(model)); }
protected SimplifiedComponent[] GetSimplifiedComponentList() { // Одним запросом получаем все нужные данные // Это быстрее, чем загружать данные компонентов по необходимости var componentRepository = CurrentAccountDbContext.GetComponentRepository(); var allComponents = componentRepository.QueryAll(); var query = allComponents .Include("EventsStatus") .Select(t => new SimplifiedComponent() { Id = t.Id, DisplayName = t.DisplayName, SystemName = t.SystemName, ParentId = t.ParentId, ComponentTypeId = t.ComponentTypeId, HasEvents = t.EventsStatus.FirstEventId.HasValue, Unittests = t.UnitTests.Where(a => a.IsDeleted == false).Select(x => new SimplifiedUnittest() { Id = x.Id, DisplayName = x.DisplayName }), Metrics = t.Metrics.Where(a => a.IsDeleted == false && a.MetricType.IsDeleted == false).Select(x => new SimplifiedMetric() { Id = x.Id, DisplayName = x.MetricType.DisplayName }) }); var list = query.ToList(); // Проставим ссылки на родителя и детей foreach (var component in list.ToArray()) { if (component.ParentId.HasValue) { var parent = list.FirstOrDefault(t => t.Id == component.ParentId.Value); if (parent != null) { component.Parent = list.First(t => t.Id == component.ParentId.Value); component.Parent.Childs.Add(component); } else { // Если не нашли родителя, значит, он удалён, выбросим компонент из дерева // Вообще такого не должно быть, потому что компонент удаляется вместе с детьми // Но иногда всё равно бывает list.Remove(component); } } } var result = list.ToArray(); return(result); }
public ActionResult Index(Guid?componentId, Guid?counterId, DateTime?from, DateTime?to) { var eDate = to ?? DateTime.Now; var sDate = from ?? eDate.AddDays(-1); Component component = null; if (componentId.HasValue) { var componentRepository = CurrentAccountDbContext.GetComponentRepository(); component = componentRepository.GetById(componentId.Value); } var model = new CounterDataListModel() { ComponentId = componentId, From = sDate, To = eDate }; if (component != null) { var counterRepository = CurrentAccountDbContext.GetMetricTypeRepository(); MetricType metricType; if (counterId.HasValue) { metricType = counterRepository.GetById(counterId.Value); model.CounterId = metricType.Id; model.CounterName = metricType.SystemName; } else { var metricTypes = component.Metrics.Where(t => t.IsDeleted == false && t.MetricType.IsDeleted == false).Select(t => t.MetricType); metricType = metricTypes.OrderBy(t => t.SystemName).FirstOrDefault(); model.CounterId = metricType != null ? metricType.Id : (Guid?)null; model.CounterName = metricType != null ? metricType.SystemName : null; } if (model.CounterId.HasValue) { var storageContext = CurrentAccountDbContext; var metricHistoryRepository = storageContext.GetMetricHistoryRepository(); var rows = metricHistoryRepository .GetByPeriod(component.Id, sDate, eDate, new[] { model.CounterId.Value }) .OrderByDescending(t => t.BeginDate) .ToArray(); model.Data = rows.ToArray(); model.Graph = GetCounterGraphDataModel(metricType, rows.OrderBy(t => t.BeginDate).ToArray()); } } return(View(model)); }
public ActionResult GetLogRowProperties(Guid componentId, Guid logRowId) { var componentRepository = CurrentAccountDbContext.GetComponentRepository(); componentRepository.GetById(componentId); var logRepository = CurrentAccountDbContext.GetLogRepository(); var log = logRepository.Find(logRowId, componentId); var model = GetLogRowPropertiesModel(log); return(PartialView(model)); }
/// <summary> /// Контейнер разделов детализации по событиям /// </summary> public ActionResult EventsDetails(Guid id) { var repository = CurrentAccountDbContext.GetComponentRepository(); var component = repository.GetById(id); var model = new EventsDetailsModel() { Id = component.Id }; return(PartialView(model)); }
/// <summary> /// Контейнер разделов детализации по компоненту /// </summary> public ActionResult ComponentDetails(Guid id) { var repository = CurrentAccountDbContext.GetComponentRepository(); var component = repository.GetById(id); var model = new ComponentDetailsModel() { Id = component.Id, Name = component.DisplayName, CanEdit = CurrentUser.CanEditCommonData() && !component.IsRoot }; return(PartialView(model)); }
public PartialViewResult GetComponentsMiniTree() { var repository = CurrentAccountDbContext.GetComponentRepository(); // Получим нужные данные по всем компонентам var query = repository .QueryAll() .Include("ExternalStatus") .Select(t => new ComponentsMiniTreeItemModel() { Id = t.Id, DisplayName = t.DisplayName, SystemName = t.SystemName, Status = t.ExternalStatus.Status, ParentId = t.ParentId, ComponentTypeId = t.ComponentTypeId, IsRoot = t.ComponentTypeId == SystemComponentTypes.Root.Id, IsFolder = t.ComponentTypeId == SystemComponentTypes.Folder.Id }); var list = query.ToList(); // Проставим ссылки на родителя и детей foreach (var component in list.ToArray()) { if (component.ParentId.HasValue) { var parent = list.FirstOrDefault(t => t.Id == component.ParentId.Value); if (parent != null) { component.Parent = list.First(t => t.Id == component.ParentId.Value); component.Parent.Childs.Add(component); } else { // Если не нашли родителя, значит, он удалён, выбросим компонент из дерева // Вообще такого не должно быть, потому что компонент удаляется вместе с детьми // Но иногда всё равно бывает list.Remove(component); } } } var result = list.ToArray(); var root = result.Single(t => t.IsRoot); return(PartialView("ComponentsMiniTreeElement", root)); }
protected object GetAllComponentsForGuiSelect() { var repository = CurrentAccountDbContext.GetComponentRepository(); var components = repository.QueryAll(). Where(t => t.ComponentTypeId != SystemComponentTypes.Folder.Id && t.ComponentTypeId != SystemComponentTypes.Root.Id && t.IsDeleted == false).OrderBy(t => t.DisplayName); return(components.Select(x => new { id = x.Id, systemName = x.SystemName, displayName = x.DisplayName, typeId = x.ComponentTypeId }) .ToArray()); }
public ActionResult GetLogFile(Guid componentId, Guid id, Guid fileId) { var componentRepository = CurrentAccountDbContext.GetComponentRepository(); componentRepository.GetById(componentId); var repository = CurrentAccountDbContext.GetLogRepository(); var row = repository.Find(id, componentId); var file = row.Parameters.SingleOrDefault(x => x.Id == fileId); if (file == null) { throw new HttpException(404, "Файл не найден"); } var contentType = GuiHelper.GetContentType(file.Name); var bytes = Convert.FromBase64String(file.Value); return(File(bytes, contentType, file.Name)); }
public PartialViewResult LastEventInfo(Guid id) { var eventRepository = CurrentAccountDbContext.GetEventRepository(); var lastEvent = eventRepository.GetLastEventByEndDate(id); if (lastEvent == null) { return(PartialView("NoLastEventInfo")); } var model = new EventTypeLastEventModel() { Id = lastEvent.Id, EndDate = lastEvent.EndDate, Message = lastEvent.Message }; model.Properties = ExtentionPropertiesModel.Create(lastEvent); // событие метрики if (lastEvent.Category.IsMetricCategory()) { var metricRepository = CurrentAccountDbContext.GetMetricRepository(); var metric = metricRepository.GetById(lastEvent.OwnerId); model.Metric = metric; model.Component = metric.Component; } // событие проверки else if (lastEvent.Category.IsUnitTestCategory()) { var unitTestRepository = CurrentAccountDbContext.GetUnitTestRepository(); var unitTest = unitTestRepository.GetById(lastEvent.OwnerId); model.Unittest = unitTest; model.Component = unitTest.Component; } else // событие компонента { var componentRepository = CurrentAccountDbContext.GetComponentRepository(); model.Component = componentRepository.GetById(lastEvent.OwnerId); } return(PartialView(model)); }
public ActionResult Add(Guid?componentId = null) { // зарегистрируем дефолтный тип пльзовательской проверки // чтобы в выпадающем списке всегда была хотя был хотя бы один тип пользовательской проверки var dispatcher = GetDispatcherClient(); dispatcher.GetOrCreateUnitTestType(CurrentUser.AccountId, new GetOrCreateUnitTestTypeRequestData() { SystemName = "CustomUnitTestType", DisplayName = "Пользовательская проверка" }); var model = new UnitTestAddModel(); if (componentId.HasValue) { var componentRepository = CurrentAccountDbContext.GetComponentRepository(); var component = componentRepository.GetById(componentId.Value); model.ComponentId = component.Id; } return(View(model)); }
/// <summary> /// Главная страница лога /// </summary> public ActionResult Index(LogFiltersModel filters) { filters = filters ?? new LogFiltersModel(); var model = new LogIndexModel() { ComponentId = filters.ComponentId, LogLevel = filters.LogLevel, Context = filters.Context, Date = filters.Date, Text = filters.Text, Id = filters.Id }; if (model.ComponentId.HasValue) { var componentRepository = CurrentAccountDbContext.GetComponentRepository(); model.Component = componentRepository.GetById(model.ComponentId.Value); } return(View(model)); }
/// <summary> /// Вывод списка событий /// </summary> public ActionResult Index( Guid?componentId = null, Guid?componentTypeId = null, ColorStatusSelectorValue color = null, Guid?eventTypeId = null, EventCategory?category = null, string search = null, DateTime?fromDate = null, DateTime?toDate = null, Guid?unitTestId = null, Guid?metricId = null, string dataType = null, string versionFrom = null) { var model = new EventsListModel() { ComponentId = componentId, Color = color ?? new ColorStatusSelectorValue(), EventTypeId = eventTypeId, Category = category, Search = search, FromDate = fromDate, ToDate = toDate, VersionFrom = versionFrom }; IQueryable <Event> eventsQuery; var componentRepository = CurrentAccountDbContext.GetComponentRepository(); var eventRepository = CurrentAccountDbContext.GetEventRepository(); if (componentId.HasValue) { eventsQuery = eventRepository.QueryAll(componentId.Value); } else if (unitTestId.HasValue) { model.UnitTest = CurrentAccountDbContext.GetUnitTestRepository().GetById(unitTestId.Value); eventsQuery = eventRepository.QueryAll(unitTestId.Value); } else if (metricId.HasValue) { model.Metric = CurrentAccountDbContext.GetMetricRepository().GetById(metricId.Value); eventsQuery = eventRepository.QueryAll(metricId.Value); } else { if (componentTypeId.HasValue) { // поиск по типу компонента var componentIds = componentRepository .QueryAll() .Where(t => t.ComponentTypeId == componentTypeId) .Select(t => t.Id) .ToArray(); eventsQuery = eventRepository.QueryAllByComponentId(componentIds); } else { // все события аккаунта eventsQuery = eventRepository.QueryAllByAccount(); } } if (eventTypeId.HasValue) { eventsQuery = eventsQuery.Where(t => t.EventTypeId == eventTypeId.Value); } if (category.HasValue) { eventsQuery = eventsQuery.Where(t => t.Category == category.Value); } else { var categories = new[] { EventCategory.ApplicationError, EventCategory.ComponentEvent }; eventsQuery = eventsQuery.Where(t => categories.Contains(t.Category)); } if (model.Color.Checked) { var importanceLevels = color.GetSelectedEventImportances(); eventsQuery = eventsQuery.Where(t => importanceLevels.Contains(t.Importance)); } if (fromDate.HasValue) { eventsQuery = eventsQuery.Where(t => t.ActualDate >= fromDate.Value); } if (toDate.HasValue) { eventsQuery = eventsQuery.Where(t => t.StartDate <= toDate.Value); } if (!string.IsNullOrEmpty(search)) { eventsQuery = eventsQuery.Where(t => t.Message != null && t.Message.Contains(search)); } if (!string.IsNullOrEmpty(versionFrom)) { var versionFromLong = VersionHelper.FromString(versionFrom) ?? -1; eventsQuery = eventsQuery.Where(t => (t.VersionLong ?? long.MaxValue) > versionFromLong); } eventsQuery = eventsQuery.OrderByDescending(t => t.StartDate); var eventsModel = eventsQuery.Select(t => new EventsListItemModel() { Id = t.Id, Message = t.Message, OwnerId = t.OwnerId, Category = t.Category, EventTypeId = t.EventTypeId, StartDate = t.StartDate, Importance = t.Importance, EndDate = t.EndDate, ActualDate = t.ActualDate, Count = t.Count, JoinKey = t.JoinKeyHash }); model.Events = eventsModel; model.Components = componentRepository .QueryAllWithDeleted() .ToArray() .Select(t => new EventsListComponentModel() { Id = t.Id, DisplayName = t.DisplayName, SystemName = t.SystemName, FullName = t.GetFullDisplayName() }) .ToDictionary(t => t.Id, t => t); var eventTypeRepository = CurrentAccountDbContext.GetEventTypeRepository(); model.EventTypes = eventTypeRepository .QueryAllWithDeleted() .Select(t => new EventsListEventTypeModel() { Id = t.Id, DisplayName = t.DisplayName, SystemName = t.SystemName, Code = t.Code, Category = t.Category }) .ToDictionary(t => t.Id, t => t); if (dataType == "xml") { var xmlEvents = model.GetXmlEvents(CurrentAccountDbContext); return(new ActionXmlFileResult(xmlEvents, "events.xml")); } return(View(model)); }
public ActionResult Index(Guid?componentId = null, string fromDate = null, string toDate = null, string category = null, string channel = null, string status = null, Guid?userId = null) { var sDate = !string.IsNullOrEmpty(fromDate) ? DecodeDateTimeParameter(fromDate) : (DateTime?)null; var eDate = !string.IsNullOrEmpty(toDate) ? DecodeDateTimeParameter(toDate) : (DateTime?)null; var eventCategory = EnumHelper.StringToEnum <EventCategory>(category); var nChannel = EnumHelper.StringToEnum <NotificationType>(channel); var nStatus = EnumHelper.StringToEnum <NotificationStatus>(status); var componentRepository = CurrentAccountDbContext.GetComponentRepository(); var userRepository = CurrentAccountDbContext.GetUserRepository(); if (!CurrentUser.CanManageAccount()) { userId = CurrentUser.Id; } if (userId.HasValue) { userRepository.GetById(userId.Value); } var users = userRepository.QueryAll().ToArray(); var eventTypeRepository = CurrentAccountDbContext.GetEventTypeRepository(); var eventTypes = eventTypeRepository.QueryAll().ToArray(); var allComponents = componentRepository.QueryAllWithDeleted(); var notificationRepository = CurrentAccountDbContext.GetNotificationRepository(); var query = notificationRepository.QueryAllForGui(componentId, sDate, eDate, eventCategory, nChannel, nStatus, userId); query = query.OrderByDescending(t => t.CreationDate).Take(1000); var notifications = query.ToArray() .Join(users, a => a.UserId, b => b.Id, (a, b) => new { Notification = a, User = b }) .Join(eventTypes, a => a.Notification.Event.EventTypeId, b => b.Id, (a, b) => new { Notification = a, EventType = b }) .Select(t => new NotificationsListItemModel() { Id = t.Notification.Notification.Id, CreationDate = t.Notification.Notification.CreationDate, Event = t.Notification.Notification.Event, User = t.Notification.User, Component = allComponents.Single(x => x.Id == t.Notification.Notification.Event.OwnerId), Address = t.Notification.Notification.Address, Channel = t.Notification.Notification.Type, Status = t.Notification.Notification.Status, SendError = t.Notification.Notification.SendError, SendDate = t.Notification.Notification.SendDate, NextDate = null, EventType = t.EventType }); var model = new NotificationsListModel() { AccountId = CurrentUser.AccountId, ComponentId = componentId, FromDate = sDate, ToDate = eDate, Category = eventCategory, Channel = nChannel, Status = nStatus, UserId = userId, Notifications = notifications.OrderByDescending(t => t.CreationDate).ToList() }; return(View(model)); }
/// <summary> /// Статистика запусков /// </summary> public ActionResult Starts(Guid?componentTypeId = null, Guid?componentId = null, string fromDate = null, string toDate = null) { var sDate = !string.IsNullOrEmpty(fromDate) ? DecodeDateTimeParameter(fromDate) : (DateTime?)null; var eDate = !string.IsNullOrEmpty(toDate) ? DecodeDateTimeParameter(toDate) : (DateTime?)null; Component component = null; var componentRepository = CurrentAccountDbContext.GetComponentRepository(); if (componentId.HasValue) { component = componentRepository.GetById(componentId.Value); } ComponentType componentType = null; var componentTypeRepository = CurrentAccountDbContext.GetComponentTypeRepository(); if (componentTypeId.HasValue) { componentType = componentTypeRepository.GetById(componentTypeId.Value); } else { componentType = componentTypeRepository.QueryAll().Where(t => t.IsDeleted == false).OrderBy(t => t.DisplayName).FirstOrDefault(); } EventType startEventType = null; Component[] components; var items = new List <StartsReportItemModel>(); var graph = new List <StartsReportGrapthItemModel>(); string error = null; if (componentType != null) { if (component != null) { components = new[] { component } } ; else { components = componentRepository.QueryAll() .Where(t => t.ComponentTypeId == componentType.Id && t.IsDeleted == false) .ToArray(); } var componentsIds = components.Select(t => t.Id).ToArray(); var eventTypeRepository = CurrentAccountDbContext.GetEventTypeRepository(); startEventType = eventTypeRepository.GetOneOrNullBySystemName(SystemEventType.ComponentStart); if (startEventType != null) { var startEventTypeId = startEventType.Id; var listLockObject = new Object(); var eventRepository = CurrentAccountDbContext.GetEventRepository(); // Все события запуска за указанный интервал var allEventsQuery = eventRepository.QueryAllByComponentId(componentsIds) .Where(t => t.EventTypeId == startEventTypeId); if (sDate.HasValue) { allEventsQuery = allEventsQuery.Where(t => t.StartDate >= sDate.Value); } if (eDate.HasValue) { allEventsQuery = allEventsQuery.Where(t => t.StartDate <= eDate.Value); } // События запуска по компонентам var startEventsQuery = allEventsQuery.Select( t => new { Id = t.Id, StartDate = t.StartDate, ComponentId = t.OwnerId, Count = t.Count }); var startEvents = startEventsQuery.GroupBy(t => t.ComponentId).ToArray(); var list = startEvents.Join(components, a => a.Key, b => b.Id, (a, b) => new { Component = b, Events = a }) .Select(t => new StartsReportItemModel() { ComponentId = t.Component.Id, ComponentDisplayName = t.Component.DisplayName, ComponentSystemName = t.Component.SystemName, CreateDate = t.Component.CreatedDate, Version = t.Component.Version, FirstStart = t.Events.OrderBy(x => x.StartDate).Select(x => x.StartDate).FirstOrDefault(), FirstStartId = t.Events.OrderBy(x => x.StartDate).Select(x => x.Id).FirstOrDefault(), LastStart = t.Events.OrderByDescending(x => x.StartDate) .Select(x => x.StartDate) .FirstOrDefault(), LastStartId = t.Events.OrderByDescending(x => x.StartDate).Select(x => x.Id).FirstOrDefault(), Count = t.Events.Sum(x => x.Count) }).ToList(); // События запуска по датам var statsEventsQuery = allEventsQuery.Select(t => new { StartDate = t.StartDate, Count = t.Count }); var stats = statsEventsQuery.GroupBy(t => DbFunctions.TruncateTime(t.StartDate)) .Select(t => new StartsReportGrapthItemModel() { Date = t.Key.Value, Count = t.Sum(x => x.Count) }).ToList(); lock (listLockObject) { items.AddRange(list); graph.AddRange(stats); } } else { error = "У выбранного типа компонента нет типа события с системным именем '" + SystemEventType.ComponentStart + "'"; } } var model = new StartsReportModel() { AccountId = CurrentUser.AccountId, ComponentId = componentId, ComponentTypeId = componentTypeId, FromDate = sDate, ToDate = eDate, Items = items.OrderBy(t => t.ComponentDisplayName).ToList(), Graph = graph.OrderBy(t => t.Date).ToList(), Error = error, StartEventTypeId = startEventType != null ? startEventType.Id : (Guid?)null, Total = items.Sum(t => t.Count) }; return(View(model)); }
public UnitTest SaveSimpleCheck(T model) { var dispatcher = GetDispatcherClient(); var unitTestDisplayName = GetUnitTestDisplayName(model); if (model.Id.HasValue) { var unitTest = GetUnitTestById(model.Id.Value); var updateData = new UpdateUnitTestRequestData() { ComponentId = unitTest.ComponentId, DisplayName = unitTestDisplayName, PeriodSeconds = TimeSpanHelper.GetSeconds(model.Period), UnitTestId = unitTest.Id, ErrorColor = unitTest.ErrorColor, NoSignalColor = ObjectColor.Gray, SystemName = unitTest.SystemName, SimpleMode = true }; dispatcher.UpdateUnitTest(CurrentUser.AccountId, updateData).Check(); // Зем: название компонента решили не менять, чтобы не было неожиданных сюрпризов, // меняешь проверку, а меняется компонент, если нужно изменить название компонента, // пусть пользователь сделает это явно вручную // Обновим параметры SetUnitTestParams(unitTest, model); CurrentAccountDbContext.SaveChanges(); this.SetTempMessage(TempMessageType.Success, string.Format("Обновлена проверка <a href='{1}' class='alert-link'>{0}</a>", unitTest.DisplayName, Url.Action("Edit", "Checks", new { id = unitTest.Id }))); return(unitTest); } else // создание проверки { // Создаём компонент только если его ещё нет ComponentInfo component; if (!model.ComponentId.HasValue) { // Создадим папку для компонента var componentRepository = CurrentAccountDbContext.GetComponentRepository(); var root = componentRepository.GetRoot(); var createFolderResponse = dispatcher.GetOrCreateComponent(CurrentUser.AccountId, new GetOrCreateComponentRequestData() { SystemName = GetFolderSystemName(model), DisplayName = GetFolderDisplayName(model), TypeId = SystemComponentTypes.Folder.Id, ParentComponentId = root.Id }); if (!createFolderResponse.Success) { throw new UserFriendlyException("Ошибка создания папки для проверки: " + createFolderResponse.ErrorMessage); } var folder = createFolderResponse.Data.Component; // Создадим тип компонента var createComponentTypeResponse = dispatcher.GetOrCreateComponentType(CurrentUser.AccountId, new GetOrCreateComponentTypeRequestData() { SystemName = GetTypeSystemName(model), DisplayName = GetTypeDisplayName(model) }); if (!createComponentTypeResponse.Success) { throw new UserFriendlyException("Ошибка создания типа компонента для проверки: " + createComponentTypeResponse.ErrorMessage); } var componentType = createComponentTypeResponse.Data; // Создадим компонент var componentId = Guid.NewGuid(); var createComponentResponse = dispatcher.GetOrCreateComponent(CurrentUser.AccountId, new GetOrCreateComponentRequestData() { NewId = componentId, SystemName = GetComponentSystemName(componentId), DisplayName = GetComponentDisplayName(model), TypeId = componentType.Id, ParentComponentId = folder.Id }); if (!createComponentResponse.Success) { throw new UserFriendlyException("Ошибка создания компонента для проверки: " + createComponentResponse.ErrorMessage); } component = createComponentResponse.Data.Component; } else { component = dispatcher.GetComponentById(CurrentUser.AccountId, model.ComponentId.Value).Data; } // Создадим проверку var unitTestId = Guid.NewGuid(); var createUnitTestData = new GetOrCreateUnitTestRequestData() { ActualTimeSecs = null, ComponentId = component.Id, DisplayName = unitTestDisplayName, ErrorColor = UnitTestResult.Alarm, NewId = unitTestId, SimpleMode = true, NoSignalColor = ObjectColor.Gray, PeriodSeconds = TimeSpanHelper.GetSeconds(model.Period), SystemName = UnitTestHelper.GetDynamicSystemName(unitTestId), UnitTestTypeId = GetUnitTestTypeId() }; dispatcher.GetOrCreateUnitTest(CurrentUser.AccountId, createUnitTestData).Check(); var unitTest = GetUnitTestById(unitTestId); SetUnitTestParams(unitTest, model); CurrentAccountDbContext.SaveChanges(); this.SetTempMessage(TempMessageType.Success, string.Format("Добавлена проверка <a href='{1}' class='alert-link'>{0}</a>", unitTest.DisplayName, Url.Action("Edit", "Checks", new { id = unitTest.Id }))); return(unitTest); } }
public ActionResult Index() { var model = new DashboardModel(); // Компоненты - общая информация var componentRepository = CurrentAccountDbContext.GetComponentRepository(); var components = componentRepository .QueryAll() .Include("ExternalStatus"). Where(t => t.IsDeleted == false && t.ComponentTypeId != SystemComponentTypes.Root.Id && t.ComponentTypeId != SystemComponentTypes.Folder.Id) .ToArray(); model.ComponentsTotal = new DashboardComponentsInfoModel(components); // Компоненты - разбивка по типам var componentGroups = components .GroupBy(t => t.ComponentType) .OrderBy(t => t.Key.DisplayName) .ToArray(); model.ComponentsByTypes = componentGroups .Select(t => new DashboardComponentsInfoModel(t.ToArray(), t.Key)) .ToArray(); /* * // События - сбор данных * var events = new List<DashboardEventModel>(); * var listLockObject = new Object(); * using (var dbProcessor = new MultipleDataBaseProcessor()) * { * dbProcessor.ForEachStorageDbForAccountId(CurrentUser.AccountId, data => * { * var eventRepository = data.StorageDbContext.GetEventRepository(); * var eventsQuery = eventRepository.QueryAllByComponentId(components.Select(t => t.Id).ToArray(), DateTime.Now.AddMonths(-1)); * eventsQuery = eventsQuery.Where(t => t.Category != EventCategory.ComponentStatus); * var eventsList = eventsQuery.Select(t => new DashboardEventModel() * { * ActualDate = t.ActualDate, * EventTypeId = t.EventTypeId, * Importance = t.Importance, * IsProcessed = t.IsUserHandled, * StartDate = t.StartDate * }).ToArray(); * lock (listLockObject) * { * events.AddRange(eventsList); * } * }); * } * var actualEvents = events.Where(t => t.ActualDate >= DateTime.Now && t.IsProcessed == false).ToArray(); * * // Типы событий - общая информация * model.ActualEventTypesCount = actualEvents.GroupBy(t => t.EventTypeId).Count(); * model.ActualEventTypesAlertCount = actualEvents.Where(t => t.Importance == EventImportance.Alarm).GroupBy(t => t.EventTypeId).Count(); * model.ActualEventTypesWarningCount = actualEvents.Where(t => t.Importance == EventImportance.Warning).GroupBy(t => t.EventTypeId).Count(); * model.ActualEventTypesInfoCount = actualEvents.Where(t => t.Importance == EventImportance.Info).GroupBy(t => t.EventTypeId).Count(); * model.ActualEventTypesOtherCount = actualEvents.Where(t => t.Importance == EventImportance.Unknown).GroupBy(t => t.EventTypeId).Count(); * * // Типы событий - сводка * var alertEvents = events.Where(t => t.Importance == EventImportance.Alarm).ToArray(); * model.TypesByPeriodAlert = new DashboardEventTypesByPeriodModel(alertEvents); * var warningEvents = events.Where(t => t.Importance == EventImportance.Warning).ToArray(); * model.TypesByPeriodWarning = new DashboardEventTypesByPeriodModel(warningEvents); * var infoEvents = events.Where(t => t.Importance == EventImportance.Info).ToArray(); * model.TypesByPeriodInfo = new DashboardEventTypesByPeriodModel(infoEvents); * var otherEvents = events.Where(t => t.Importance == EventImportance.Unknown).ToArray(); * model.TypesByPeriodOther = new DashboardEventTypesByPeriodModel(otherEvents); * * // События - общая информация * model.ActualEventsCount = actualEvents.Count(); * model.ActualEventsAlertCount = actualEvents.Count(t => t.Importance == EventImportance.Alarm); * model.ActualEventsWarningCount = actualEvents.Count(t => t.Importance == EventImportance.Warning); * model.ActualEventsInfoCount = actualEvents.Count(t => t.Importance == EventImportance.Info); * model.ActualEventsOtherCount = actualEvents.Count(t => t.Importance == EventImportance.Unknown); * * // События - сводка * model.ByPeriodAlert = new DashboardEventsByPeriodModel(alertEvents); * model.ByPeriodWarning = new DashboardEventsByPeriodModel(warningEvents); * model.ByPeriodInfo = new DashboardEventsByPeriodModel(infoEvents); * model.ByPeriodOther = new DashboardEventsByPeriodModel(otherEvents); * * // События - по типам * var eventTypeRepository = CurrentAccountDbContext.GetEventTypeRepository(); * model.ActualEventsAlert = actualEvents.Where(t => t.Importance == EventImportance.Alarm). * GroupBy(t => t.EventTypeId).Select(t => new * { * EventType = eventTypeRepository.GetById(CurrentUser.AccountId, t.Key), * Count = t.Count() * }).Where(t => t.EventType != null).Select(t => new DashboardEventsByTypeModel() * { * EventType = t.EventType, * Count = t.Count * }).OrderByDescending(t => t.Count).ToArray(); * * model.ActualEventsWarning = actualEvents.Where(t => t.Importance == EventImportance.Warning). * GroupBy(t => t.EventTypeId).Select(t => new * { * EventType = eventTypeRepository.GetById(CurrentUser.AccountId, t.Key), * Count = t.Count() * }).Where(t => t.EventType != null).Select(t => new DashboardEventsByTypeModel() * { * EventType = t.EventType, * Count = t.Count * }).OrderByDescending(t => t.Count).ToArray(); */ return(View(model)); }