コード例 #1
0
        public void PrepareEvent(SendEventBase eventBase)
        {
            var eventObj = eventBase;

            // нормализация данных
            eventObj.TypeDisplayName = GetGoodString(eventBase.TypeDisplayName, DisplayNameMaxLength);
            eventObj.TypeSystemName  = GetGoodString(eventBase.TypeSystemName, SystemNameMaxLength);
            eventObj.Message         = GetGoodString(eventBase.Message, MessageMaxLength);
            eventObj.Count           = FixEventCount(eventObj.Count);

            // установим время, если оно не задано явно
            if (eventObj.StartDate == null)
            {
                eventObj.StartDate    = DateTime.Now;
                eventObj.IsServerTime = false;
            }

            // обрежем слишком жирные свойства
            TrimProperties(eventObj.Properties);

            eventObj.TypeSystemName = FixEventTypeSystemName(eventObj.TypeSystemName, eventObj.TypeDisplayName);
            eventObj.JoinInterval   = FixEventJoinTime(eventObj.JoinInterval, eventObj.EventCategory);
            eventObj.JoinKey        = FixEventJoinKey(eventObj);
            eventObj.Message        = FixEventMessage(eventObj.Message, eventObj.TypeSystemName, eventObj.TypeDisplayName);
            if (eventObj.Version == null)
            {
                eventObj.Version = eventObj.ComponentControl.Version;
            }
            eventObj.Version = FixVersion(eventObj.Version);
        }
コード例 #2
0
        public void Prepare(SendEventBase eventObj)
        {
            try
            {
                // Если UserAgent не указан, то не будем ничего делать,
                // это либо роботы, либо псевдо-хакеры
                // Игнорируем также проверки от самого Zidium
                if (HttpContext.Current != null)
                {
                    var userAgent = HttpContext.Current.Request.UserAgent;
                    if (string.IsNullOrEmpty(userAgent) ||
                        string.Equals(userAgent, "Zidium", StringComparison.OrdinalIgnoreCase) ||
                        UserAgentHelper.IsBot(userAgent))
                    {
                        eventObj.Ignore = true;
                        return;
                    }
                }
            }
            catch
            {
                // Request доступен не для всех событий
            }

            HttpContextHelper.SetProperties(eventObj.Properties);

            var user = UserHelper.CurrentUser;

            if (user != null)
            {
                eventObj.Properties.Set("UserId", user.Id);
                eventObj.Properties.Set("UserLogin", user.Login);
                eventObj.Properties.Set("UserName", user.Name);
                eventObj.Properties.Set("AccountId", user.AccountId);
                eventObj.Properties.Set("AccountName", user.AccountName);
            }

            // Игнорирование некоторых ошибок
            if (eventObj.EventCategory == SendEventCategory.ApplicationError)
            {
                if (
                    // Несуществующий метод контроллера
                    eventObj.TypeSystemName.StartsWith("HttpException в Controller.HandleUnknownAction(String)", StringComparison.OrdinalIgnoreCase) ||
                    eventObj.TypeSystemName.StartsWith("HttpException at Controller.HandleUnknownAction(String)", StringComparison.OrdinalIgnoreCase) ||

                    // Несуществующий контроллер
                    eventObj.TypeSystemName.StartsWith("HttpException в DefaultControllerFactory.GetControllerInstance(RequestContext, Type)", StringComparison.OrdinalIgnoreCase) ||
                    eventObj.TypeSystemName.StartsWith("HttpException at DefaultControllerFactory.GetControllerInstance(RequestContext, Type)", StringComparison.OrdinalIgnoreCase) ||

                    // Неверный токен
                    eventObj.TypeSystemName.StartsWith("HttpAntiForgeryException", StringComparison.OrdinalIgnoreCase) ||

                    // Недопустимые символы в Url
                    eventObj.TypeSystemName.IndexOf("HttpRequest.ValidateInputIfRequiredByConfig()", StringComparison.OrdinalIgnoreCase) >= 0
                    )
                {
                    eventObj.Ignore = true;
                }
            }
        }
コード例 #3
0
 public static void InitRandomEvent(SendEventBase eventBase)
 {
     eventBase.Message      = "test comment " + PasswordHelper.GetRandomPassword(3000);
     eventBase.StartDate    = DateTime.Now;
     eventBase.Importance   = GetRandomEventImportance();
     eventBase.JoinInterval = TimeSpan.FromSeconds(RandomHelper.GetRandomInt32(0, 1000000));
     eventBase.JoinKey      = RandomHelper.GetRandomInt64(0, 100000000000);
     InitRandomProperties(eventBase.Properties);
 }
コード例 #4
0
        protected long FixEventJoinKey(SendEventBase data)
        {
            if (data.JoinKey.HasValue)
            {
                return(data.JoinKey.Value);
            }

            var joinKey = data.TypeCode + data.Message;

            foreach (var prop in data.Properties)
            {
                joinKey += prop.Name + prop.Value.Value;
            }

            return(HashHelper.GetInt64(joinKey));
        }
コード例 #5
0
 public static SendEventRequestDtoData GetSendEventData(SendEventBase data)
 {
     return(new SendEventRequestDtoData()
     {
         ComponentId = data.ComponentControl.Info.Id,
         Category = data.EventCategory,
         StartDate = data.StartDate,
         Importance = data.Importance,
         JoinIntervalSeconds = GetSeconds(data.JoinInterval),
         JoinKey = data.JoinKey,
         Message = data.Message,
         TypeDisplayName = data.TypeDisplayName,
         TypeSystemName = data.TypeSystemName,
         TypeCode = data.TypeCode,
         Version = data.Version,
         Properties = GetExtentionPropertyDtos(data.Properties),
         Count = data.Count
     });
 }
コード例 #6
0
 public static void CheckEvent(SendEventBase eventBase, Api.EventInfo info)
 {
     Assert.Equal(eventBase.ComponentControl.Info.Id, info.OwnerId);
     //Assert.Equal(eventBase.Count, info.Count);
     Assert.Equal(eventBase.EventCategory.ToString(), info.Category.ToString());
     Assert.Equal(eventBase.Importance, info.Importance);
     Assert.Equal(eventBase.TypeSystemName, info.TypeSystemName);
     if (eventBase.TypeDisplayName == null)
     {
         Assert.Equal(info.TypeSystemName, info.TypeDisplayName);
     }
     else
     {
         Assert.Equal(eventBase.TypeDisplayName, info.TypeDisplayName);
     }
     Assert.Equal(eventBase.Version, info.Version);
     //CheckDateTimesEqualBySeconds(eventBase.StartDate, info.StartDate);
     //CheckDateTimesEqualBySeconds(eventBase.EndDate, info.EndDate);
     Assert.Equal(eventBase.JoinKey, info.JoinKeyHash);//todo переименовать, чтобы ыбло одинаково
     Assert.Equal(eventBase.Message, info.Message);
     CheckExtentionProperties(eventBase.Properties, info.Properties);
 }
コード例 #7
0
 public void Prepare(SendEventBase eventObj)
 {
     _events.Add(eventObj);
 }
コード例 #8
0
 public void Prepare(SendEventBase eventObj)
 {
     HttpContextHelper.SetProperties(eventObj.Properties);
 }