Пример #1
0
        public DeleteMetricResponse DeleteMetric(Guid accountId, DeleteMetricRequestData data)
        {
            var request = GetRequest <DeleteMetricRequest>(accountId);

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

            return(dispatcher.DeleteMetric(request));
        }
Пример #2
0
 public JsonResult Delete(Guid id, string fake)
 {
     try
     {
         var dispatcher = GetDispatcherClient();
         var data       = new DeleteMetricRequestData()
         {
             MetricId = id,
             UpdateComponentStatus = true
         };
         dispatcher.DeleteMetric(CurrentUser.AccountId, data).Check();
         return(GetSuccessJsonResponse());
     }
     catch (Exception exception)
     {
         MvcApplication.HandleException(exception);
         return(GetErrorJsonResponse(exception));
     }
 }
Пример #3
0
        public void DeleteMetric(Guid accountId, DeleteMetricRequestData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (data.MetricId == null)
            {
                throw new ParameterRequiredException("MetricId");
            }

            // удаляем метрику
            Guid componentId;
            Guid statusDataId;
            Guid componentMetricsStatusDataId;

            var metricRequest = new AccountCacheRequest()
            {
                AccountId = accountId,
                ObjectId  = data.MetricId.Value
            };

            using (var metric = AllCaches.Metrics.Write(metricRequest))
            {
                componentId      = metric.ComponentId;
                statusDataId     = metric.StatusDataId;
                metric.IsDeleted = true;
                metric.BeginSave();
                metric.WaitSaveChanges();
            }

            // Проверим лимиты
            var limitChecker = AccountLimitsCheckerManager.GetCheckerForAccount(accountId);

            limitChecker.RefreshMetricsCount();

            // удаляем колбасу метрики
            var statusDataRequest = new AccountCacheRequest()
            {
                AccountId = accountId,
                ObjectId  = statusDataId
            };

            using (var statusData = AllCaches.StatusDatas.Write(statusDataRequest))
            {
                statusData.IsDeleted = true;
                statusData.BeginSave();
            }

            // удаляем ссылку на метрику в компоненте
            var componentRequest = new AccountCacheRequest()
            {
                AccountId = accountId,
                ObjectId  = componentId
            };

            using (var component = AllCaches.Components.Write(componentRequest))
            {
                componentMetricsStatusDataId = component.MetricsStatusId;
                component.WriteChilds.Delete(data.MetricId.Value);
                component.BeginSave();
            }

            // обновим колбасу метрик компонента
            var componentMetricsStatusDataIds = new List <Guid>();
            var component1 = AllCaches.Components.Find(componentRequest);

            foreach (var metricRef in component1.Metrics.GetAll())
            {
                var metric = AllCaches.Metrics.Find(new AccountCacheRequest()
                {
                    AccountId = accountId,
                    ObjectId  = metricRef.Id
                });
                if (metric == null)
                {
                    throw new Exception("metric == null");
                }
                if (metric.IsDeleted)
                {
                    continue;
                }
                componentMetricsStatusDataIds.Add(metric.StatusDataId);
            }

            Context.BulbService.CalculateByChilds(
                accountId,
                componentMetricsStatusDataId,
                componentMetricsStatusDataIds);
        }