public WebHookDataContext(Version version, PersistentEvent ev, Organization organization = null, Project project = null, Stack stack = null, bool isNew = false, bool isRegression = false)
        {
            if (version == null)
                throw new ArgumentException("Version cannot be null.", "version");

            if (ev == null)
                throw new ArgumentException("Event cannot be null.", "ev");

            Version = version;
            Organization = organization;
            Project = project;
            Stack = stack;
            Event = ev;
            IsNew = isNew;
            IsRegression = isRegression;
        }
示例#2
0
        public static PersistentEvent GenerateEvent(string[] organizationIds = null, string[] projectIds = null, string[] stackIds = null, DateTimeOffset? startDate = null, DateTimeOffset? endDate = null, DateTimeOffset? occurrenceDate = null, int maxErrorNestingLevel = 0, bool generateTags = true, bool generateData = true, bool isFixed = false, bool isHidden = false, string[] referenceIds = null) {
            if (!startDate.HasValue || startDate > DateTimeOffset.Now.AddHours(1))
                startDate = DateTimeOffset.Now.AddDays(-30);
            if (!endDate.HasValue || endDate > DateTimeOffset.Now.AddHours(1))
                endDate = DateTimeOffset.Now;

            var ev = new PersistentEvent {
                OrganizationId = organizationIds.Random(TestConstants.OrganizationId),
                ProjectId = projectIds.Random(TestConstants.ProjectId),
                ReferenceId = referenceIds.Random(),
                Date = occurrenceDate.HasValue ? occurrenceDate.Value : RandomHelper.GetDateTimeOffset(startDate, endDate),
                IsFixed = isFixed,
                IsHidden = isHidden,
                StackId = stackIds.Random()
            };

            if (generateData) {
                for (int i = 0; i < RandomHelper.GetRange(1, 5); i++) {
                    string key = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 10));
                    while (ev.Data.ContainsKey(key) || key == Event.KnownDataKeys.Error)
                        key = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 15));

                    ev.Data.Add(key, RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 25)));
                }
            }

            if (generateTags) {
                for (int i = 0; i < RandomHelper.GetRange(1, 3); i++) {
                    string tag = TestConstants.EventTags.Random();
                    if (!ev.Tags.Contains(tag))
                        ev.Tags.Add(tag);
                }
            }

            ev.Type = Event.KnownTypes.Error;

            // limit error variation so that stacking will occur
            if (_randomErrors == null)
                _randomErrors = new List<Error>(Enumerable.Range(1, 25).Select(i => GenerateError(maxErrorNestingLevel)));
            
            ev.Data[Event.KnownDataKeys.Error] = _randomErrors.Random();

            return ev;
        }
示例#3
0
        public static PersistentEvent GenerateEvent(bool generateId = false, string id = null, string organizationId = null, string projectId = null, string stackId = null, DateTime? startDate = null, DateTime? endDate = null, DateTimeOffset? occurrenceDate = null, int nestingLevel = 0, int minimiumNestingLevel = 0, TimeSpan? timeZoneOffset = null, bool generateTags = true, bool generateData = true) {
            if (!startDate.HasValue)
                startDate = DateTime.Now.AddDays(-90);
            if (!endDate.HasValue)
                endDate = DateTime.Now;

            var ev = new PersistentEvent {
                Id = id.IsNullOrEmpty() ? generateId ? ObjectId.GenerateNewId().ToString() : null : id,
                OrganizationId = organizationId.IsNullOrEmpty() ? TestConstants.OrganizationId : organizationId,
                ProjectId = projectId.IsNullOrEmpty() ? TestConstants.ProjectIds.Random() : projectId,
                Date = occurrenceDate.HasValue ? occurrenceDate.Value : new DateTimeOffset(RandomHelper.GetDateTime(startDate, endDate), timeZoneOffset.HasValue ? timeZoneOffset.Value : TimeZoneInfo.Local.BaseUtcOffset)
            };

            if (!stackId.IsNullOrEmpty())
                ev.StackId = stackId;

            if (generateData) {
                for (int i = 0; i < RandomHelper.GetRange(minimiumNestingLevel, minimiumNestingLevel + 5); i++) {
                    string key = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 15));
                    while (ev.Data.ContainsKey(key))
                        key = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 15));

                    ev.Data.Add(key, RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 25)));
                }
            }

            if (generateTags) {
                for (int i = 0; i < RandomHelper.GetRange(minimiumNestingLevel, minimiumNestingLevel + 5); i++) {
                    string tag = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 15));
                    while (ev.Tags.Contains(tag))
                        tag = RandomHelper.GetPronouncableString(RandomHelper.GetRange(5, 15));

                    ev.Tags.Add(tag);
                }
            }

            ev.Type = Event.KnownTypes.Error;
            ev.Data[Event.KnownDataKeys.Error] = GenerateError(nestingLevel, minimiumNestingLevel).ToJson();

            return ev;
        }
示例#4
0
        public PersistentEvent ToEvent()
        {
            var ev = new PersistentEvent {
                Id = Id,
                OrganizationId = OrganizationId,
                ProjectId = ProjectId,
                StackId = ErrorStackId,
                Type = Code == "404" ? Event.KnownTypes.NotFound : Event.KnownTypes.Error,
                Date = OccurrenceDate,
                IsFixed = IsFixed,
                IsHidden = IsHidden,
                Message = Message
            };

            ev.Tags.AddRange(Tags);

            var error = new Exceptionless.Models.Data.Error {
                Message = Message,
                Type = Type,
                Code = Code
            };

            if (StackTrace != null && StackTrace.Count > 0)
                error.StackTrace = StackTrace.ToStackTrace();

            if (TargetMethod != null)
                error.TargetMethod = TargetMethod.ToMethod();

            if (Modules != null && Modules.Count > 0)
                error.Modules = Modules.ToModules();

            if (Inner != null)
                error.Inner = Inner.ToInnerError();

            object traceLog;
            if (ExtendedData != null && ExtendedData.TryGetValue("TraceLog", out traceLog)) {
                ev.Data[Event.KnownDataKeys.TraceLog] = traceLog;
                ExtendedData.Remove("TraceLog");
            }

            if (ExtendedData != null && ExtendedData.Count > 0)
                error.Data.AddRange(ExtendedData.ToData());

            // TODO: __ExceptionInfo

            ev.Data[Event.KnownDataKeys.Error] = error;

            if (!String.IsNullOrEmpty(UserEmail) || !String.IsNullOrEmpty(UserDescription))
                ev.SetUserDescription(UserEmail, UserDescription);

            if (!String.IsNullOrEmpty(UserName))
                ev.SetUserIdentity(UserName);

            if (RequestInfo != null)
                ev.Data[Event.KnownDataKeys.RequestInfo] = RequestInfo.ToRequestInfo();

            if (EnvironmentInfo != null)
                ev.Data[Event.KnownDataKeys.EnvironmentInfo] = EnvironmentInfo.ToEnvironmentInfo();

            return ev;
        }
示例#5
0
 public EventContext(PersistentEvent ev)
 {
     Event = ev;
     StackSignatureData = new Dictionary<string, string>();
 }
        public string GetEventViewName(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            throw new NotImplementedException();
        }
        public string GetStackSummaryHtml(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            throw new NotImplementedException();
        }
 private bool ShouldHandle(PersistentEvent ev) {
     return ev.IsError();
 }