예제 #1
0
        public ActionResult Edit(UnitTestTypeEditModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var repository   = CurrentAccountDbContext.GetUnitTestTypeRepository();
            var unitTestType = repository.GetById(model.Id);

            CheckEditingPermissions(unitTestType);

            var client   = GetDispatcherClient();
            var response = client.UpdateUnitTestType(CurrentUser.AccountId, new UpdateUnitTestTypeRequestData()
            {
                UnitTestTypeId = unitTestType.Id,
                DisplayName    = model.DisplayName,
                SystemName     = model.SystemName,
                ActualTimeSecs = TimeSpanHelper.GetSeconds(model.ActualTime),
                NoSignalColor  = model.NoSignalColor.GetSelectedOne()
            });

            response.Check();

            return(RedirectToAction("Show", new { id = model.Id }));
        }
예제 #2
0
        protected override void UpdateBatchObject(AccountDbContext accountDbContext, UnitTestCacheWriteObject unitTest, bool useCheck)
        {
            if (unitTest.Response.LastSavedData == null)
            {
                throw new Exception("unitTest.Response.LastSavedData == null");
            }
            var dbEntity = unitTest.Response.LastSavedData.CreateEf();

            accountDbContext.UnitTests.Attach(dbEntity);

            dbEntity.IsDeleted         = unitTest.IsDeleted;
            dbEntity.ComponentId       = unitTest.ComponentId;
            dbEntity.CreateDate        = unitTest.CreateDate;
            dbEntity.DisplayName       = unitTest.DisplayName;
            dbEntity.Enable            = unitTest.Enable;
            dbEntity.DisableComment    = unitTest.DisableComment;
            dbEntity.DisableToDate     = unitTest.DisableToDate;
            dbEntity.ErrorColor        = unitTest.ErrorColor;
            dbEntity.IsDeleted         = unitTest.IsDeleted;
            dbEntity.NextExecutionDate = unitTest.NextDate;
            dbEntity.ParentEnable      = unitTest.ParentEnable;
            dbEntity.PeriodSeconds     = unitTest.PeriodSeconds;
            dbEntity.SimpleMode        = unitTest.SimpleMode;
            dbEntity.StatusDataId      = unitTest.StatusDataId;
            dbEntity.SystemName        = unitTest.SystemName;
            dbEntity.NoSignalColor     = unitTest.NoSignalColor;
            dbEntity.ActualTimeSecs    = TimeSpanHelper.GetSeconds(unitTest.ActualTime);
            dbEntity.LastExecutionDate = unitTest.LastExecutionDate;
        }
 public UnitTest CreateEf()
 {
     return(new UnitTest()
     {
         Id = Id,
         ErrorColor = ErrorColor,
         Enable = Enable,
         DisplayName = DisplayName,
         DisableToDate = DisableToDate,
         DisableComment = DisableComment,
         CreateDate = CreateDate,
         ComponentId = ComponentId,
         IsDeleted = IsDeleted,
         NextExecutionDate = NextDate,
         ParentEnable = ParentEnable,
         PeriodSeconds = PeriodSeconds,
         SimpleMode = SimpleMode,
         StatusDataId = StatusDataId,
         SystemName = SystemName,
         TypeId = TypeId,
         NoSignalColor = NoSignalColor,
         ActualTimeSecs = TimeSpanHelper.GetSeconds(ActualTime),
         LastExecutionDate = LastExecutionDate
     });
 }
예제 #4
0
 public Metric CreateEf()
 {
     return(new Metric()
     {
         Id = Id,
         Enable = Enable,
         DisableComment = DisableComment,
         DisableToDate = DisableToDate,
         IsDeleted = IsDeleted,
         ParentEnable = ParentEnable,
         CreateDate = CreateDate,
         Value = Value,
         BeginDate = BeginDate,
         ComponentId = ComponentId,
         ActualDate = ActualDate,
         MetricTypeId = MetricTypeId,
         StatusDataId = StatusDataId,
         NoSignalColor = NoSignalColor,
         ConditionAlarm = ConditionRed,
         ConditionWarning = ConditionYellow,
         ConditionSuccess = ConditionGreen,
         ConditionElseColor = ElseColor,
         ActualTimeSecs = TimeSpanHelper.GetSeconds(ActualTime)
     });
 }
        protected override void UpdateBatchObject(AccountDbContext accountDbContext, MetricTypeCacheWriteObject metricType, bool useCheck)
        {
            var oldMetricType = metricType.Response.LastSavedData;

            if (oldMetricType == null)
            {
                throw new Exception("oldMetricType == null");
            }

            var dbEntity = oldMetricType.CreateEf();

            accountDbContext.MetricTypes.Attach(dbEntity);

            dbEntity.CreateDate         = metricType.CreateDate;
            dbEntity.IsDeleted          = metricType.IsDeleted;
            dbEntity.CreateDate         = metricType.CreateDate;
            dbEntity.SystemName         = metricType.SystemName;
            dbEntity.DisplayName        = metricType.DisplayName;
            dbEntity.ActualTimeSecs     = TimeSpanHelper.GetSeconds(metricType.ActualTime);
            dbEntity.NoSignalColor      = metricType.NoSignalColor;
            dbEntity.ConditionAlarm     = metricType.ConditionRed;
            dbEntity.ConditionWarning   = metricType.ConditionYellow;
            dbEntity.ConditionSuccess   = metricType.ConditionGreen;
            dbEntity.ConditionElseColor = metricType.ElseColor;
        }
예제 #6
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 }));
        }
예제 #7
0
        public ActionResult Edit(UnitTestEditModel model)
        {
            model.UnitTest = GetUnitTestById(model.Id);

            if (!ModelState.IsValid)
            {
                View(model);
            }

            var updateData = new UpdateUnitTestRequestData()
            {
                NoSignalColor = model.NoSignalColor.GetSelectedOne(),
                ActualTime    = TimeSpanHelper.GetSeconds(model.ActualTime),
                DisplayName   = model.DisplayName,
                ComponentId   = model.ComponentId,
                PeriodSeconds = model.PeriodSeconds,
                UnitTestId    = model.Id,
                SystemName    = model.UnitTest.SystemName
            };
            var dispatcher = GetDispatcherClient();
            var response   = dispatcher.UpdateUnitTest(CurrentUser.AccountId, updateData);

            if (response.Success)
            {
                return(RedirectToAction("ResultDetails", new { id = model.Id }));
            }
            SetCommonError(response.ErrorMessage);
            return(View(model));
        }
예제 #8
0
        protected override void UpdateBatchObject(AccountDbContext accountDbContext, MetricCacheWriteObject metric, bool useCheck)
        {
            var oldMetric = metric.Response.LastSavedData;

            if (oldMetric == null)
            {
                throw new Exception("oldMetric == null");
            }

            var dbEntity = oldMetric.CreateEf();

            accountDbContext.Metrics.Attach(dbEntity);

            dbEntity.ActualDate         = metric.ActualDate;
            dbEntity.BeginDate          = metric.BeginDate;
            dbEntity.ComponentId        = metric.ComponentId;
            dbEntity.CreateDate         = metric.CreateDate;
            dbEntity.Enable             = metric.Enable;
            dbEntity.DisableComment     = metric.DisableComment;
            dbEntity.DisableToDate      = metric.DisableToDate;
            dbEntity.IsDeleted          = metric.IsDeleted;
            dbEntity.MetricTypeId       = metric.MetricTypeId;
            dbEntity.ParentEnable       = metric.ParentEnable;
            dbEntity.StatusDataId       = metric.StatusDataId;
            dbEntity.Value              = metric.Value;
            dbEntity.ConditionAlarm     = metric.ConditionRed;
            dbEntity.ConditionWarning   = metric.ConditionYellow;
            dbEntity.ConditionSuccess   = metric.ConditionGreen;
            dbEntity.ActualTimeSecs     = TimeSpanHelper.GetSeconds(metric.ActualTime);
            dbEntity.NoSignalColor      = metric.NoSignalColor;
            dbEntity.ConditionElseColor = metric.ElseColor;
        }
        public ActionResult Edit(EditModel model)
        {
            if (model.NoSignalColor.Checked == false)
            {
                ModelState.AddModelError("NoSignalColor", "Выберите цвет");
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }


            Guid metricTypeId;
            var  client = GetDispatcherClient();

            if (model.Id.HasValue)
            {
                metricTypeId = model.Id.Value;
                var noSignalColor = model.NoSignalColor.GetSelectedColors().Single();
                var updateData    = new UpdateMetricTypeRequestData()
                {
                    MetricTypeId     = metricTypeId,
                    SystemName       = model.SystemName,
                    DisplayName      = model.DisplayName,
                    AlarmCondition   = model.ConditionRed,
                    WarningCondition = model.ConditionYellow,
                    SuccessCondition = model.ConditionGreen,
                    ElseColor        = model.ElseColor.GetSelectedOne(),
                    ActualTimeSecs   = TimeSpanHelper.GetSeconds(model.ActualTime),
                    NoSignalColor    = noSignalColor
                };
                client.UpdateMetricType(CurrentUser.AccountId, updateData).Check();
            }
            else
            {
                var createData = new CreateMetricTypeRequestData()
                {
                    SystemName       = model.SystemName,
                    DisplayName      = model.DisplayName,
                    AlarmCondition   = model.ConditionRed,
                    WarningCondition = model.ConditionYellow,
                    SuccessCondition = model.ConditionGreen,
                    ElseColor        = model.ElseColor.GetSelectedOne(),
                    NoSignalColor    = model.NoSignalColor.GetSelectedColors().SingleOrDefault(),
                    ActualTimeSecs   = TimeSpanHelper.GetSeconds(model.ActualTime)
                };
                var response = client.CreateMetricType(CurrentUser.AccountId, createData);
                response.Check();
                metricTypeId = response.Data.MetricTypeId;
            }

            return(RedirectToAction("Show", new { id = metricTypeId }));
        }
        public void SaveCommonSettings()
        {
            var dispatcher = FullRequestContext.Current.Controller.GetDispatcherClient();

            // получим юнит-тест
            if (Id == null)
            {
                var unitTestResponse = dispatcher.GetOrCreateUnitTest(
                    User.AccountId,
                    new GetOrCreateUnitTestRequestData()
                {
                    ComponentId    = ComponentId,
                    SystemName     = "GUID_" + Guid.NewGuid(),
                    DisplayName    = CheckName,
                    UnitTestTypeId = UnitTestTypeId
                });

                unitTestResponse.Check();

                GetUnitTest(unitTestResponse.Data.Id);
            }
            else
            {
                GetUnitTest(Id.Value);
            }

            var isSystem = SystemUnitTestTypes.IsSystem(UnitTest.TypeId);

            // обновим данные юнит-теста
            var updateResponse = dispatcher.UpdateUnitTest(
                User.AccountId,
                new UpdateUnitTestRequestData()
            {
                ComponentId   = ComponentId,
                DisplayName   = CheckName,
                PeriodSeconds = Period != null ? Period.Value.TotalSeconds : (double?)null,
                ActualTime    = !isSystem ? TimeSpanHelper.GetSeconds(ActualTime) : null,
                ErrorColor    = ErrorColor.GetSelectedUnitTestResultStatuses().FirstOrDefault(),
                NoSignalColor = !isSystem ? NoSignalColor.GetSelectedColors().FirstOrDefault() : Core.Common.ObjectColor.Gray,
                UnitTestId    = UnitTest.Id,
                SimpleMode    = false
            });

            updateResponse.Check();

            var setNextTime = new SetUnitTestNextTimeRequestData()
            {
                UnitTestId = UnitTest.Id
            };

            dispatcher.SetUnitTestNextTime(User.AccountId, setNextTime).Check();

            GetUnitTest(UnitTest.Id);
        }
예제 #11
0
 public MetricType CreateEf()
 {
     return(new MetricType()
     {
         Id = Id,
         IsDeleted = IsDeleted,
         CreateDate = CreateDate,
         SystemName = SystemName,
         DisplayName = DisplayName,
         ActualTimeSecs = TimeSpanHelper.GetSeconds(ActualTime),
         NoSignalColor = NoSignalColor,
         ConditionAlarm = ConditionRed,
         ConditionWarning = ConditionYellow,
         ConditionSuccess = ConditionGreen,
         ConditionElseColor = ElseColor
     });
 }
예제 #12
0
        public void EventTypeShowTest()
        {
            var account   = TestHelper.GetTestAccount();
            var user      = TestHelper.GetAccountAdminUser(account.Id);
            var eventType = TestHelper.GetTestEventType(account.Id);

            using (var controller = new EventTypesController(account.Id, user.Id))
            {
                var result = (ViewResultBase)controller.Show(eventType.Id, TimelineInterval.Day);
                var model  = (EventTypeShowModel)result.Model;
                Assert.Equal(eventType.Id, model.Id);
                Assert.Equal(eventType.DisplayName, model.DisplayName);
                Assert.Equal(eventType.SystemName, model.SystemName);
                Assert.Equal(eventType.Category, model.Category);
                Assert.Equal(eventType.JoinIntervalSeconds, TimeSpanHelper.GetSeconds(model.JoinInterval));
                Assert.Equal(eventType.OldVersion, model.OldVersion);
                Assert.Equal(eventType.ImportanceForOld, model.ImportanceForOld);
                Assert.Equal(eventType.ImportanceForNew, model.ImportanceForNew);
                Assert.Equal(eventType.IsSystem, model.IsSystem);
            }
        }
예제 #13
0
        public ActionResult Add(EventTypeEditModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var repository = CurrentAccountDbContext.GetEventTypeRepository();
            var eventType  = new EventType()
            {
                DisplayName         = model.DisplayName,
                SystemName          = model.SystemName,
                Category            = EventCategory.ComponentEvent,
                JoinIntervalSeconds = TimeSpanHelper.GetSeconds(model.JoinInterval),
                OldVersion          = model.OldVersion,
                ImportanceForOld    = model.ImportanceForOld,
                ImportanceForNew    = model.ImportanceForNew
            };

            repository.Add(eventType);
            this.SetTempMessage(TempMessageType.Success, string.Format("Добавлен тип события <a href='{1}' class='alert-link'>{0}</a>", eventType.DisplayName, Url.Action("Show", new { id = eventType.Id })));
            return(RedirectToAction("Index"));
        }
예제 #14
0
        public ActionResult Edit(SubscriptionEditModel model)
        {
            var modelState = new ModelStateHelper <SubscriptionEditModel>(ModelState);

            // Проверка ComponentTypeId
            if (model.Object == SubscriptionObject.ComponentType && model.ComponentTypeId == null)
            {
                modelState.AddErrorFor(x => x.ComponentTypeId, "Выберите тип компонента");
            }

            // Проверка ComponentId
            if (model.Object == SubscriptionObject.Component && model.ComponentId == null)
            {
                modelState.AddErrorFor(x => x.ComponentId, "Выберите компонент");
            }

            // Проверка Channel
            if (model.Id == null && model.Channel == null)
            {
                // канал должен указываться явно только для новых подписок
                modelState.AddErrorFor(x => x.Channel, "Выберите канал");
            }

            // Проверка UserId
            if (model.Id == null && model.UserId == null)
            {
                // Пользователь должен указываться явно только для новых подписок
                modelState.AddErrorFor(x => x.UserId, "Выберите пользователя");
            }

            // проверка цвета
            var color = model.Color.GetSelectedOne();

            if (color == null)
            {
                modelState.AddErrorFor(x => x.Color, "Укажите цвет");
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                // проверка прав
                var isOtherUser = CurrentUser.Id != model.UserId;
                if (isOtherUser)
                {
                    if (CurrentUser.IsAdmin() == false)
                    {
                        throw new UserFriendlyException("Нет прав на создание подписок другим пользователям");
                    }
                }

                var importance = ImportanceHelper.Get(color).Value;
                var client     = GetDispatcherClient();
                if (model.Id == null)
                {
                    // создание новой подписки
                    var createData = new CreateSubscriptionRequestData()
                    {
                        UserId  = model.UserId.Value,
                        Channel = model.Channel.Value,
                        DurationMinimumInSeconds = TimeSpanHelper.GetSeconds(model.MinimumDuration),
                        ResendTimeInSeconds      = TimeSpanHelper.GetSeconds(model.ResendTime),
                        Importance         = importance,
                        IsEnabled          = model.IsEnabled,
                        NotifyBetterStatus = model.NotifyBetterStatus,
                        Object             = model.Object
                    };
                    if (model.Object == SubscriptionObject.Component)
                    {
                        createData.ComponentId = model.ComponentId;
                    }
                    if (model.Object == SubscriptionObject.ComponentType)
                    {
                        createData.ComponentTypeId = model.ComponentTypeId;
                    }
                    var response = client.CreateSubscription(CurrentUser.AccountId, createData);
                    response.Check();
                    model.Id = response.Data.Id;
                }
                else
                {
                    // редактирование существующей подписки
                    var updateData = new UpdateSubscriptionRequestData()
                    {
                        Id = model.Id.Value,
                        NotifyBetterStatus       = model.NotifyBetterStatus,
                        IsEnabled                = model.IsEnabled,
                        ResendTimeInSeconds      = TimeSpanHelper.GetSeconds(model.ResendTime),
                        DurationMinimumInSeconds = TimeSpanHelper.GetSeconds(model.MinimumDuration),
                        Importance               = importance
                    };
                    var response = client.UpdateSubscription(CurrentUser.AccountId, updateData);
                    response.Check();
                }
                if (model.ModalMode)
                {
                    return(GetSuccessJsonResponse(new { subscriptionId = model.Id }));
                }
                return(Redirect(model.ReturnUrl));
            }
            catch (UserFriendlyException exception)
            {
                model.Exception = exception;
            }

            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);
            }
        }
예제 #16
0
        public ActionResult Edit(EditModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                var component = GetComponentById(model.ComponentId.Value);
                if (model.Id == null)
                {
                    var oldMetric = component.Metrics.FirstOrDefault(x => x.IsDeleted == false && x.MetricTypeId == model.MetricTypeId);
                    if (oldMetric != null)
                    {
                        ModelState.AddModelError("MetricTypeId", "Метрика данного типа уже есть у компонента");
                        return(View(model));
                    }
                }

                var  client = GetDispatcherClient();
                Guid metricId;

                if (model.Id.HasValue)
                {
                    metricId = model.Id.Value;
                    var updateData = new UpdateMetricRequestData()
                    {
                        MetricId         = model.Id.Value,
                        AlarmCondition   = model.ConditionRed,
                        WarningCondition = model.ConditionYellow,
                        SuccessCondition = model.ConditionGreen,
                        ElseColor        = model.ElseColor.GetSelectedOne(),
                        ActualTimeSecs   = TimeSpanHelper.GetSeconds(model.ActualTime),
                        NoSignalColor    = model.NoSignalColor.GetSelectedOne()
                    };
                    client.UpdateMetric(CurrentUser.AccountId, updateData).Check();
                }
                else
                {
                    var metricType = GetMetricTypeById(model.MetricTypeId.Value);
                    var createData = new CreateMetricRequestData()
                    {
                        ComponentId      = model.ComponentId.Value,
                        MetricName       = metricType.SystemName,//todo сделать отдельную версию, где передается MetricTypeId
                        AlarmCondition   = model.ConditionRed,
                        WarningCondition = model.ConditionYellow,
                        SuccessCondition = model.ConditionGreen,
                        ElseColor        = model.ElseColor.GetSelectedOne(),
                        NoSignalColor    = model.NoSignalColor.GetSelectedOne(),
                        ActualTimeSecs   = TimeSpanHelper.GetSeconds(model.ActualTime)
                    };
                    metricId = client.CreateMetric(CurrentUser.AccountId, createData).Data.MetricId;
                }
                return(RedirectToAction("Show", new { id = metricId }));
            }
            catch (UserFriendlyException exception)
            {
                SetCommonError(exception);
                if (model.Id.HasValue)
                {
                    model.Metric = GetMetricById(model.Id.Value);
                }
                return(View(model));
            }
        }