public IBulbCacheReadObject SetUnknownStatus(Guid accountId, Guid statusId, DateTime processDate)
        {
            var signal = BulbSignal.CreateUnknown(accountId, processDate);
            var data   = ProlongOrChangeStatus(signal, statusId);

            UpdateParentByChild(data);
            return(data);
        }
        protected void CalculateComponentEventsStatus(Guid accountId, Guid eventsStatusId)
        {
            var processDate   = DateTime.Now;
            var eventService  = Context.EventService;
            var statusService = Context.BulbService;
            var request       = new AccountCacheRequest()
            {
                AccountId = accountId,
                ObjectId  = eventsStatusId
            };

            // получаем объект для записи, чтобы заблокировать доступ, но ничего не пишем
            using (var data = AllCaches.StatusDatas.Write(request))
            {
                if (data.Actual(processDate))
                {
                    // событий не было вообще
                    if (data.LastEventId == null)
                    {
                        return;
                    }

                    // проверим, что событие актуально
                    var lastEvent = eventService.GetEventCacheOrNullById(accountId, data.LastEventId.Value);
                    if (lastEvent != null)
                    {
                        bool isActual = EventImportanceHelper.Get(data.Status) == lastEvent.Importance &&
                                        lastEvent.ActualDate >= processDate;

                        if (isActual)
                        {
                            // ничего не изменилось, статус актуален
                            return;
                        }
                    }
                }

                // ищем событие, которое пересекается со статусом
                var nextEvent = eventService.GetDangerousEvent(
                    accountId,
                    data.ComponentId.Value,
                    processDate);

                if (nextEvent != null)
                {
                    var noSignalImportance = Api.EventImportance.Unknown;
                    var signal             = BulbSignal.Create(processDate, nextEvent, noSignalImportance, accountId);
                    statusService.SetSignal(data.Id, signal);
                    return;
                }

                // нет актуальных событий
                var unknownSignal = BulbSignal.CreateUnknown(accountId, processDate);
                statusService.SetSignal(eventsStatusId, unknownSignal);
            }
        }
Exemple #3
0
        protected IBulbCacheReadObject UpdateEnableOrDisableStatusData(IMetricCacheReadObject metric)
        {
            var statusService         = Context.BulbService;
            IBulbCacheReadObject data = null;
            var processDate           = DateTime.Now;

            if (metric.CanProcess)
            {
                var unknownSignal = BulbSignal.CreateUnknown(metric.AccountId, processDate);
                data = statusService.SetSignal(metric.StatusDataId, unknownSignal);
            }
            else
            {
                var disableSignal = BulbSignal.CreateDisable(metric.AccountId, processDate);
                data = statusService.SetSignal(metric.StatusDataId, disableSignal);
            }
            //Context.ComponentService.CalculateAllStatuses(metric.AccountId, metric.ComponentId);
            return(data);
        }
        public void CalculateByChilds(Guid accountId, Guid statusId, List <Guid> childs)
        {
            var processDate = DateTime.Now;
            var request     = new AccountCacheRequest()
            {
                AccountId = accountId,
                ObjectId  = statusId
            };
            IBulbCacheReadObject rBulb = null;

            using (var statusData = AllCaches.StatusDatas.Write(request))
            {
                var childsList = new List <IBulbCacheReadObject>();
                foreach (var childId in childs)
                {
                    var childRequest = new AccountCacheRequest()
                    {
                        AccountId = accountId,
                        ObjectId  = childId
                    };
                    var child = AllCaches.StatusDatas.Find(childRequest);

                    // Disabled и Unknown не влияют на родителей
                    if (child != null && child.Status != MonitoringStatus.Disabled && child.Status != MonitoringStatus.Unknown)
                    {
                        childsList.Add(child);
                    }
                }
                var mostDandger = childsList.OrderByDescending(x => x.Status).FirstOrDefault();
                if (mostDandger == null)
                {
                    var signal = BulbSignal.CreateUnknown(accountId, processDate);
                    rBulb = ProlongOrChangeStatus(signal, statusId);
                }
                else
                {
                    var signal = BulbSignal.CreateFromChild(processDate, mostDandger);
                    rBulb = ProlongOrChangeStatus(signal, statusId);
                }
            }
            UpdateParentByChild(rBulb);
        }
Exemple #5
0
        public void EnableMetric(Guid accountId, Guid metricId)
        {
            var cache = new AccountCache(accountId);
            IMetricCacheReadObject metricRead = null;

            // изменим метрику
            using (var metric = cache.Metrics.Write(metricId))
            {
                metricRead    = metric;
                metric.Enable = true;
                metric.BeginSave();
            }

            // обновим колбаски
            var statusService = Context.BulbService;
            var processDate   = DateTime.Now;
            var unknownSignal = BulbSignal.CreateUnknown(accountId, processDate);
            var data          = statusService.SetSignal(metricRead.StatusDataId, unknownSignal);

            Context.ComponentService.CalculateAllStatuses(accountId, metricRead.ComponentId);
            // return data;
        }
        public IBulbCacheReadObject Enable(Guid accountId, Guid unitTestId)
        {
            var cache = new AccountCache(accountId);
            IUnitTestCacheReadObject unitTestRead = null;

            // изменим юнит-тест
            using (var unitTest = cache.UnitTests.Write(unitTestId))
            {
                unitTestRead    = unitTest;
                unitTest.Enable = true;
                unitTest.BeginSave();
            }

            // обновим колбаски
            var statusService = Context.BulbService;
            var processDate   = DateTime.Now;
            var unknownSignal = BulbSignal.CreateUnknown(accountId, processDate);
            var data          = statusService.SetSignal(unitTestRead.StatusDataId, unknownSignal);

            Context.ComponentService.CalculateAllStatuses(accountId, unitTestRead.ComponentId);
            return(data);
        }