protected Event CreateUnitTestResultEvent( IUnitTestCacheReadObject unitTest, SendUnitTestResultRequestData data, DateTime processDate) { data.Message = data.Message ?? string.Empty; if (data.Message.Length > 255) { data.Message = data.Message.Substring(0, 255); } var importance = EventImportanceHelper.Get(data.Result ?? UnitTestResult.Unknown); var cache = new AccountCache(unitTest.AccountId); var unittestType = cache.UnitTestTypes.Read(unitTest.TypeId); var actualInterval = unitTest.ActualTime // сначала берем из настроек проверки в ЛК ?? TimeSpanHelper.FromSeconds(unittestType.ActualTimeSecs) // потом из настроек типа проверки в ЛК ?? TimeSpanHelper.FromSeconds(data.ActualIntervalSeconds) // потом из сообщения ?? TimeSpan.FromMinutes(5); // по умолчанию 5 мин var actualDate = processDate + actualInterval; var joinKeyHash = data.ReasonCode ?? 0; var result = new Event() { Id = Guid.NewGuid(), Count = 1, JoinKeyHash = joinKeyHash, Importance = importance, OwnerId = unitTest.Id, ActualDate = actualDate, CreateDate = DateTime.Now, LastUpdateDate = processDate, StartDate = processDate, EndDate = processDate, Message = data.Message, EventTypeId = SystemEventType.UnitTestResult.Id, Category = EventCategory.UnitTestResult }; if (data.Properties != null) { result.Properties = ApiConverter.GetEventProperties(data.Properties); } return(result); }
public IBulbCacheReadObject Disable(Guid accountId, SetUnitTestDisableRequestData requestData) { var unitTestId = requestData.UnitTestId; var cache = new AccountCache(accountId); IUnitTestCacheReadObject unitTestRead = null; // изменим юнит-тест using (var unitTest = cache.UnitTests.Write(unitTestId.Value)) { unitTestRead = unitTest; unitTest.Enable = false; unitTest.DisableToDate = requestData.ToDate; unitTest.DisableComment = requestData.Comment; unitTest.BeginSave(); } // обновим колбаски return(UpdateEnableOrDisableStatusData(unitTestRead)); }
protected IBulbCacheReadObject UpdateEnableOrDisableStatusData(IUnitTestCacheReadObject unitTest) { var statusService = Context.BulbService; IBulbCacheReadObject data = null; var processDate = DateTime.Now; if (unitTest.CanProcess) { var unknownSignal = BulbSignal.CreateUnknown(unitTest.AccountId, processDate); data = statusService.SetSignal(unitTest.StatusDataId, unknownSignal); } else { var disableSignal = BulbSignal.CreateDisable(unitTest.AccountId, processDate); data = statusService.SetSignal(unitTest.StatusDataId, disableSignal); } Context.ComponentService.CalculateAllStatuses(unitTest.AccountId, unitTest.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); }
public static GetOrCreateUnitTestResponseData GetOrCreateUnitTestResponseData(IUnitTestCacheReadObject unitTest) { if (unitTest == null) { return(null); } return(new GetOrCreateUnitTestResponseData() { Id = unitTest.Id, TypeId = unitTest.TypeId, SystemName = unitTest.SystemName, DisplayName = unitTest.DisplayName }); }
protected IBulbCacheReadObject GetUnitTestResultInternal( IUnitTestCacheReadObject unitTest, DateTime processDate) { if (unitTest == null) { throw new ArgumentNullException("unitTest"); } // обновим галочку "включено" if (unitTest.Enable == false && unitTest.DisableToDate.HasValue && unitTest.DisableToDate < DateTime.Now) { using (var unitTestWrite = AllCaches.UnitTests.Write(unitTest)) { unitTestWrite.Enable = true; unitTestWrite.BeginSave(); unitTest = unitTestWrite; } } var statusService = Context.BulbService; var data = statusService.GetRaw(unitTest.AccountId, unitTest.StatusDataId); // если надо выключить if (unitTest.CanProcess == false && data.Status != MonitoringStatus.Disabled) { return(UpdateEnableOrDisableStatusData(unitTest)); } // если надо включить if (unitTest.CanProcess && data.Status == MonitoringStatus.Disabled) { return(UpdateEnableOrDisableStatusData(unitTest)); } // проверим актуальность if (data.Actual(processDate)) { return(data); } // значение неактуальное // сохраняем пробел (событие результата теста) var cache = new AccountCache(unitTest.AccountId); var unittestType = cache.UnitTestTypes.Read(unitTest.TypeId); var noSignalImportance = ImportanceHelper.Get(unitTest.NoSignalColor) ?? ImportanceHelper.Get(unittestType.NoSignalColor) ?? (unitTest.IsSystemType ? EventImportance.Unknown : EventImportance.Alarm); var noSignalEvent = new Event() { Id = Guid.NewGuid(), Message = "Нет сигнала", OwnerId = unitTest.Id, ActualDate = EventHelper.InfiniteActualDate, Category = EventCategory.UnitTestResult, Count = 1, CreateDate = processDate, LastUpdateDate = processDate, StartDate = data.ActualDate, EndDate = processDate, IsSpace = true, EventTypeId = SystemEventType.UnitTestResult.Id, Importance = noSignalImportance }; return(SaveResultEvent(processDate, unitTest, noSignalEvent)); }
protected IBulbCacheReadObject SaveResultEvent( DateTime processDate, IUnitTestCacheReadObject unitTest, Event newEvent) { var request = new AccountCacheRequest() { AccountId = unitTest.AccountId, ObjectId = unitTest.StatusDataId }; using (var statusData = AllCaches.StatusDatas.Write(request)) { // сохраним результаты var eventService = Context.EventService; IEventCacheReadObject lastEvent = null; if (statusData.LastEventId.HasValue) { lastEvent = eventService.GetEventCacheOrNullById( unitTest.AccountId, statusData.LastEventId.Value); } // для системных проверок пробелы должны быть серыми, // чтобы из-за простоев агента зидиума не красить пользовательские проверки var noSignalImportance = unitTest.IsSystemType ? EventImportance.Unknown : EventImportance.Alarm; if (lastEvent == null) { // todo не понятно нужно ли в результаты проверок вставлять пробелы? // TryAddSpaceResultEvent(unitTest, newEvent, noSignalImportance); } else { // например, чтобы обрезать бесконечную актуальность у события "нет сигнала" if (lastEvent.ActualDate > newEvent.StartDate) { if (AllCaches.Events.ExistsInStorage(lastEvent)) { using (var wLastEvent = AllCaches.Events.Write(lastEvent)) { wLastEvent.ActualDate = newEvent.StartDate; wLastEvent.BeginSave(); } } } } // синхронная вставка // асинхронное создание объектов сильно усложняет код, поэтому будет создавать всё синхронно eventService.Add(unitTest.AccountId, newEvent); // асинхронная вставка //var newEventCache = EventCacheWriteObject.CreateForAdd(newEvent); //AllCaches.Events.AddNew(newEventCache); using (var wUnitTest = AllCaches.UnitTests.Write(unitTest)) { wUnitTest.LastExecutionDate = newEvent.EndDate; // расчитаем время следующего выполнения if (unitTest.PeriodSeconds > 0) { var nextTime = wUnitTest.NextDate ?? processDate; var period = TimeSpan.FromSeconds(wUnitTest.PeriodSeconds.Value); while (nextTime <= processDate) { nextTime = nextTime + period; } wUnitTest.NextDate = nextTime; } wUnitTest.BeginSave(); } // обновим статус var statusService = Context.BulbService; var signal = BulbSignal.Create(processDate, newEvent, noSignalImportance, unitTest.AccountId); var newStatus = statusService.SetSignal(unitTest.StatusDataId, signal); return(newStatus); } }
public void UpdateUnitTest(Guid accountId, UpdateUnitTestRequestData data) { if (data == null) { throw new ArgumentNullException("data"); } if (data.UnitTestId == null) { throw new ParameterRequiredException("UnitTestId"); } if (data.ComponentId == null) { throw new ParameterRequiredException("ComponentId"); } if (data.UnitTestId == Guid.Empty) { throw new ParameterErrorException("UnitTestId не может быть Guid.Empty"); } if (data.DisplayName == null) { throw new ParameterRequiredException("DisplayName"); } if (string.IsNullOrWhiteSpace(data.DisplayName)) { throw new ParameterErrorException("DisplayName не может быть пустым"); } //if (data.ErrorColor == null) //{ // throw new ParameterRequiredException("ErrorColor"); //} // SystemName сейчас не настраивается через GUI //if (data.SystemName == null) //{ // throw new ParameterRequiredException("SystemName"); //} //получим компонент, чтобы убедится, что он принадлежит аккаунту var req = new AccountCacheRequest() { AccountId = accountId, ObjectId = data.ComponentId.Value }; var component = AllCaches.Components.Find(req); if (component == null) { throw new UnknownComponentIdException(data.ComponentId.Value, accountId); } var request = new AccountCacheRequest() { AccountId = accountId, ObjectId = data.UnitTestId.Value }; // сохраним изменения IUnitTestCacheReadObject unitTestCache = null; using (var unitTest = AllCaches.UnitTests.Write(request)) { unitTestCache = unitTest; // период выполнения проверки if (unitTest.IsSystemType) { // не для всех системных проверок можно указывать период (для проверки домена нельзя) if (SystemUnitTestTypes.CanEditPeriod(unitTest.TypeId)) { if (data.PeriodSeconds == null) { throw new ParameterRequiredException("Period"); } if (data.PeriodSeconds.Value < 60) { throw new ParameterErrorException("Период проверки НЕ может быть меньше 1 минуты"); } unitTest.PeriodSeconds = (int)data.PeriodSeconds.Value; } // чтобы выполнить проверку прямо сейчас с новыми параметрами и увидеть результат unitTest.NextDate = DateTime.Now; } unitTest.DisplayName = data.DisplayName; unitTest.ComponentId = data.ComponentId.Value; unitTest.ErrorColor = data.ErrorColor; unitTest.NoSignalColor = data.NoSignalColor; unitTest.ActualTime = TimeSpanHelper.FromSeconds(data.ActualTime); if (data.SimpleMode.HasValue) { unitTest.SimpleMode = data.SimpleMode.Value; } unitTest.BeginSave(); } // ждем сохранения в кэше unitTestCache.WaitSaveChanges(); }