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 SendUnitTestResult(Guid accountId, SendUnitTestResultRequestData data) { // Проверка на наличие необходимых параметров if (data == null) { throw new ParameterRequiredException("Request.Data"); } if (data.UnitTestId == null) { throw new ParameterRequiredException("Request.Data.UnitTestId"); } using (var unitTest = AllCaches.UnitTests.Write(new AccountCacheRequest() { AccountId = accountId, ObjectId = data.UnitTestId.Value })) { var processDate = DateTime.Now; // получим актуальную колбасу, чтобы не было пробелов между результатами GetUnitTestResultInternal(unitTest, processDate); // если проверка выключена или выключен один из её родителей if (unitTest.CanProcess == false) { throw new ResponseCodeException(Zidium.Api.ResponseCode.ObjectDisabled, "Проверка выключена"); } var checker = AccountLimitsCheckerManager.GetCheckerForAccount(accountId); // Проверим лимит "Количество запросов в день" var accountDbContext = Context.GetAccountDbContext(accountId); checker.CheckUnitTestResultsPerDay(accountDbContext); // Проверим лимит размера хранилища var size = data.GetSize(); checker.CheckStorageSize(accountDbContext, size); var resultEvent = CreateUnitTestResultEvent(unitTest, data, processDate); if (resultEvent.ActualDate < processDate) //todo это источник проблем из-за разного времени клиента и сервера { // код ниже никогда не выполнится, но пусть на всякий случай будет throw new ResponseCodeException( Zidium.Api.ResponseCode.ServerError, "Результат юнит-теста неактуален (date + actualInterval < now)"); } //if (resultEvent.ActualDate < unitTest.StatusData.EndDate) //{ // // код ниже никогда не выполнится, но пусть на всякий случай будет // throw new ResponseCodeException( // Zidium.Api.ResponseCode.ServerError, // "Результат юнит-теста неактуален (actualDate < unitTest.StatusData.EndDate)"); // сохраним результаты var result = SaveResultEvent(processDate, unitTest, resultEvent); // увеличим счетчик лимита проверки "Количество запросов в день" checker.AddUnitTestsSizePerDay(accountDbContext, size); checker.AddUnitTestResultsPerDay(accountDbContext, unitTest.Id); return(result); } }