Ejemplo n.º 1
0
        public ActionResult Edit(EventTypeEditModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var dispatcher = GetDispatcherClient();
            var data       = new UpdateEventTypeRequestData()
            {
                EventTypeId         = model.Id,
                DisplayName         = model.DisplayName,
                SystemName          = model.SystemName,
                OldVersion          = model.OldVersion,
                JoinIntervalSeconds = TimeSpanHelper.GetSeconds(model.JoinInterval),
                ImportanceForOld    = model.ImportanceForOld,
                ImportanceForNew    = model.ImportanceForNew,
                UpdateActualEvents  = true
            };
            var response = dispatcher.UpdateEventType(CurrentUser.AccountId, data);

            response.Check();

            this.SetTempMessage(TempMessageType.Success, "Тип события сохранён");
            return(RedirectToAction("Show", new { id = model.Id }));
        }
Ejemplo n.º 2
0
        public UpdateEventTypeResponse UpdateEventType(Guid accountId, UpdateEventTypeRequestData data)
        {
            var request = GetRequest <UpdateEventTypeRequest>(accountId);

            request.Data = data;
            var dispatcher = DispatcherHelper.GetDispatcherService();

            return(dispatcher.UpdateEventType(request));
        }
Ejemplo n.º 3
0
 public JsonResult ChangeImportance(ChangeImportanceModel model)
 {
     try
     {
         var eventType = GetEventTypeById(model.EventTypeId);
         if (model.EventTypeId == Guid.Empty)
         {
             throw new UserFriendlyException("Не удалось получить ИД типа события");
         }
         if (model.Importance == null)
         {
             throw new UserFriendlyException("Не удалось получить важность");
         }
         if (model.Version != null && VersionHelper.FromString(model.Version) == null)
         {
             throw new UserFriendlyException("Неверный формат версии");
         }
         var dispatcher = GetDispatcherClient();
         var data       = new UpdateEventTypeRequestData()
         {
             EventId            = model.EventId,
             EventTypeId        = model.EventTypeId,
             DisplayName        = eventType.DisplayName,
             ImportanceForNew   = eventType.ImportanceForNew,
             ImportanceForOld   = eventType.ImportanceForOld,
             OldVersion         = eventType.OldVersion,
             UpdateActualEvents = true
         };
         if (string.IsNullOrEmpty(model.Version))
         {
             data.ImportanceForNew = model.Importance.Value;
             data.OldVersion       = null;
         }
         else
         {
             data.ImportanceForOld = model.Importance.Value;
             data.OldVersion       = model.Version;
         }
         dispatcher.UpdateEventType(CurrentUser.AccountId, data).Check();
         return(GetSuccessJsonResponse());
     }
     catch (Exception exception)
     {
         MvcApplication.HandleException(exception);
         return(GetErrorJsonResponse(exception));
     }
 }
Ejemplo n.º 4
0
        public void UpdateComponentStatus2Test()
        {
            var account   = TestHelper.GetTestAccount();
            var client    = account.GetClient();
            var component = account.CreateRandomComponentControl();

            // Отправляем ошибку
            var error = TestHelper.CreateRandomApplicationError(component);

            error.JoinInterval = TimeSpan.Zero;
            error.Importance   = EventImportance.Alarm;
            error.StartDate    = DateTime.Now;
            error.Version      = "2.0.0.0";
            var eventResponse = error.Send();

            Assert.True(eventResponse.Success);

            // Проверим, что статус компонента Alarm
            var state = component.GetTotalState(false);

            Assert.Equal(MonitoringStatus.Alarm, state.Data.Status);

            // Отметим в типе события, что для данной версии нужно снижать важность и считать их обработанными
            var dispatcher = account.GetDispatcherClient();
            var updateData = new UpdateEventTypeRequestData()
            {
                EventTypeId        = eventResponse.Data.EventTypeId,
                DisplayName        = null,
                OldVersion         = error.Version,
                ImportanceForOld   = Zidium.Core.Api.EventImportance.Warning,
                ImportanceForNew   = null,
                UpdateActualEvents = true
            };

            dispatcher.UpdateEventType(account.Id, updateData).Check();

            // Отправим ещё раз
            error.Send();
            Assert.True(eventResponse.Success);

            // Проверим, что статус компонента Alarm
            account.SaveAllCaches();
            state = client.ApiService.GetComponentTotalState(component.Info.Id, false);
            Assert.Equal(MonitoringStatus.Warning, state.Data.Status);
        }
Ejemplo n.º 5
0
        public void Update(Guid accountId, UpdateEventTypeRequestData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            var accountDbContext = Context.GetAccountDbContext(accountId);
            var repository       = GetEventTypeRepository(accountId);
            var eventType        = repository.GetById(data.EventTypeId);

            if (eventType.IsSystem)
            {
                throw new UserFriendlyException("Нельзя менять системный тип события");
            }

            eventType.OldVersion          = data.OldVersion;
            eventType.ImportanceForOld    = data.ImportanceForOld;
            eventType.ImportanceForNew    = data.ImportanceForNew;
            eventType.JoinIntervalSeconds = data.JoinIntervalSeconds;

            if (string.IsNullOrEmpty(data.DisplayName) == false)
            {
                eventType.DisplayName = data.DisplayName;
            }
            if (string.IsNullOrEmpty(data.SystemName) == false)
            {
                eventType.SystemName = data.SystemName;
            }

            accountDbContext.SaveChanges();

            if (data.UpdateActualEvents == false)
            {
                return;
            }

            // Обновим старые события
            long?oldVersion      = VersionHelper.FromString(eventType.OldVersion);
            var  now             = DateTime.Now;
            var  components      = new List <Guid>();
            var  eventRepository = accountDbContext.GetEventRepository();

            var events = eventRepository
                         .GetAllByType(eventType.Id)
                         .Where(t => t.ActualDate >= now) // неактуальные уже нина что не влияют, нет смысла их менять
                         .ToList();

            // если есть событие - инициатор (на основании которого решили изменить важность)
            if (data.EventId.HasValue)
            {
                var eventObj = eventRepository.GetById(data.EventId.Value);
                events.Add(eventObj);
            }

            // обновим события в БД
            foreach (var _event in events)
            {
                if (eventType.ImportanceForOld.HasValue && _event.VersionLong <= oldVersion)
                {
                    // ставим важность для старых событий
                    if (_event.Importance != eventType.ImportanceForOld.Value)
                    {
                        _event.Importance = eventType.ImportanceForOld.Value;
                        components.Add(_event.OwnerId);
                    }
                }
                else if (eventType.ImportanceForNew.HasValue &&
                         (oldVersion == null || _event.VersionLong > oldVersion))
                {
                    // ставим важность для новых событий
                    if (_event.Importance != eventType.ImportanceForNew.Value)
                    {
                        _event.Importance = eventType.ImportanceForNew.Value;
                        components.Add(_event.OwnerId);
                    }
                }
            }
            accountDbContext.SaveChanges();

            // выгрузим события из кэша
            foreach (var _event in events)
            {
                AllCaches.Events.Unload(new AccountCacheRequest()
                {
                    AccountId = accountId,
                    ObjectId  = _event.Id
                });
            }

            // обновим статусы компонентов
            var componentIds = components.Distinct().ToList();

            foreach (var id in componentIds)
            {
                Context.ComponentService.CalculateEventsStatus(accountId, id);
            }
        }