Exemple #1
0
        public static Log GetLog(Guid componentId, SendLogData message)
        {
            if (message.Date == null)
            {
                message.Date = DateTime.Now;
            }
            if (message.Level == null)
            {
                message.Level = LogLevel.Info;
            }
            var log = new Log()
            {
                Id              = Guid.NewGuid(),
                ComponentId     = componentId,
                Date            = DateTimeHelper.TrimMs(message.Date.Value), // Важно - убираем мс из даты, иначе будет некорректно работать просмотр лога
                Order           = message.Order ?? 0,
                Level           = message.Level.Value,
                Message         = message.Message,
                Context         = message.Context,
                ParametersCount = 0,
                Parameters      = GetLogProperies(message.Properties)
            };

            if (message.Properties != null)
            {
                log.ParametersCount = message.Properties.Count;
            }
            return(log);
        }
Exemple #2
0
        public SendLogResponse SendLog(Guid accountId, SendLogData data)
        {
            var request = GetRequest <SendLogRequest>(accountId);

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

            return(dispatcher.SendLog(request));
        }
Exemple #3
0
        public void SaveLogMessage(Guid accountId, Guid componentId, SendLogData message)
        {
            // Проверка на наличие необходимых параметров
            if (message == null)
            {
                throw new ParameterRequiredException("Request.Message");
            }
            if (message.Message == null)
            {
                throw new ParameterRequiredException("Request.Message.Message"); //todo надо переименовать
            }

            if (message.Message.Length > 4000)
            {
                message.Message = message.Message.Substring(0, 4000);
            }

            if (message.Context != null && message.Context.Length > 255)
            {
                message.Context = message.Context.Substring(0, 255);
            }

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

            var size = message.GetSize();

            checker.CheckLogSizePerDay(accountDbContext, size);

            // Проверим лимит размера хранилища
            checker.CheckStorageSize(accountDbContext, size);

            // Получим компонент
            var componentService = Context.ComponentService;
            var component        = componentService.GetComponentById(accountId, componentId);

            var logRepository = Context.DbContext.GetAccountDbContext(accountId).GetLogRepository();
            var log           = ApiConverter.GetLog(component.Id, message);

            logRepository.Add(log);

            Context.SaveChanges();

            checker.AddLogSizePerDay(accountDbContext, size);
        }
Exemple #4
0
 public static SendLogDto GetSendLogDto(SendLogData data)
 {
     if (data == null)
     {
         return(null);
     }
     return(new SendLogDto()
     {
         ComponentId = data.ComponentId,
         Context = data.Context,
         Date = data.Date,
         Order = data.Order,
         Level = data.Level,
         Message = data.Message,
         Properties = GetExtentionPropertyDtos(data.Properties)
     });
 }
        public void SendLogTest()
        {
            var account = TestHelper.GetTestAccount();
            var client  = account.GetClient();
            var root    = client.GetRootComponentControl();

            var levels = new[]
            {
                LogLevel.Debug,
                LogLevel.Trace,
                LogLevel.Info,
                LogLevel.Warning,
                LogLevel.Error,
                LogLevel.Fatal
            };

            var date = RandomHelper.GetRandomDate(
                new DateTime(1980, 1, 1),
                new DateTime(2014, 1, 1));

            date = TestHelper.GetRoundDateTime(date);

            // отправляем сообщения каждого уровня
            var logDate  = date;
            var messages = new List <SendLogData>();

            foreach (var level in levels)
            {
                var message = new SendLogData()
                {
                    ComponentId = root.Info.Id,
                    Date        = logDate,
                    Message     = "test message " + level,
                    Level       = level,
                    Context     = Guid.NewGuid().ToString()
                };
                messages.Add(message);
                TestHelper.InitRandomProperties(message.Properties);
                var response = client.ApiService.SendLog(message);
                Assert.True(response.Success);
                logDate = logDate.AddSeconds(1);
            }

            // проверим, что все сообщения записались
            var findMessage = new GetLogsFilter()
            {
                From     = date,
                To       = date.AddSeconds(levels.Length),
                Levels   = levels.ToList(),
                MaxCount = levels.Length
            };
            var findLogsResponse = root.GetLogs(findMessage);

            Assert.True(findLogsResponse.Success);
            Assert.Equal(levels.Length, findLogsResponse.Data.Count);
            logDate = date;
            foreach (var level in levels)
            {
                var logRow  = findLogsResponse.Data.FirstOrDefault(x => x.Level == level);
                var message = messages.First(x => x.Level == level);
                Assert.NotNull(logRow);
                Assert.Equal("test message " + level, logRow.Message);
                Assert.Equal(logDate, logRow.Date);
                Assert.Equal(message.Context, logRow.Context);
                Assert.True(logRow.Properties.Count > 0);
                TestHelper.CheckExtentionProperties(logRow.Properties, message.Properties);
                logDate = logDate.AddSeconds(1);
            }
        }