public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
                return null;

            return new SummaryData("event-session-summary", new { SessionId = ev.SessionId });
        }
        public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
                return null;

            return new SummaryData("event-feature-summary", new { Source = ev.Source });
        }
        public override string GetStackTitle(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
                return null;

            return ev.IsSessionStart() ? "Session Starts" : "Session Ends";
        }
        public override string GetEventViewName(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
                return null;

            return "Event-Feature";
        }
        public override SummaryData GetEventSummaryData(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            var error = ev.GetError();
            if (error == null)
                return null;

            var stackingTarget = error.GetStackingTarget();
            if (stackingTarget == null)
                return null;

            dynamic data = new ExpandoObject();
            data.Id = ev.Id;
            data.Message = ev.Message;
            data.Type = stackingTarget.Error.Type.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last();
            data.TypeFullName = stackingTarget.Error.Type;

            if (stackingTarget.Method != null) {
                data.Method = stackingTarget.Method.Name;
                data.MethodFullName = stackingTarget.Method.GetFullName();
            }

            var requestInfo = ev.GetRequestInfo();
            if (requestInfo != null && !String.IsNullOrEmpty(requestInfo.Path))
                data.Path = requestInfo.Path;

            return new SummaryData { TemplateKey = "event-error-summary", Data = data };
        }
        public override string GetStackTitle(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
                return null;

            return ev.Source;
        }
        public override string GetStackTitle(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            var error = ev.GetSimpleError();
            if (error == null)
                return null;

            return error.Message;
        }
        public override SummaryData GetEventSummaryData(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            var error = ev.GetSimpleError();
            if (error == null)
                return null;

            dynamic data = new ExpandoObject();
            data.Message = ev.Message;
            data.Type = error.Type.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last();
            data.TypeFullName = error.Type;

            var requestInfo = ev.GetRequestInfo();
            if (requestInfo != null && !String.IsNullOrEmpty(requestInfo.Path))
                data.Path = requestInfo.Path;

            return new SummaryData { TemplateKey = "event-simple-summary", Data = data };
        }
Ejemplo n.º 9
0
        public async Task WillSetLocationFromRequestInfo()
        {
            var plugin = new GeoPlugin(await GetResolverAsync(Log));
            var ev     = new PersistentEvent();

            ev.AddRequestInfo(new RequestInfo {
                ClientIpAddress = GREEN_BAY_IP
            });
            await plugin.EventBatchProcessingAsync(new List <EventContext> {
                new EventContext(ev, OrganizationData.GenerateSampleOrganization(), ProjectData.GenerateSampleProject())
            });

            Assert.NotNull(ev.Geo);

            var location = ev.GetLocation();

            Assert.Equal("US", location?.Country);
            Assert.Equal("WI", location?.Level1);
            Assert.Equal("Green Bay", location?.Locality);
        }
Ejemplo n.º 10
0
        public async Task WillResetLocation(string geo)
        {
            var resolver = await GetResolverAsync(Log);

            if (resolver is NullGeoIpService)
            {
                return;
            }

            var plugin = new GeoPlugin(resolver, _options);
            var ev     = new PersistentEvent {
                Geo = geo
            };
            await plugin.EventBatchProcessingAsync(new List <EventContext> {
                new EventContext(ev, OrganizationData.GenerateSampleOrganization(_billingManager, _plans), ProjectData.GenerateSampleProject())
            });

            Assert.Null(ev.Geo);
            Assert.Null(ev.GetLocation());
        }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        public async Task WillSetLocationFromEnvironmentInfoInfo()
        {
            var plugin = new GeoPlugin(await GetResolverAsync(Log), _options);
            var ev     = new PersistentEvent();

            ev.SetEnvironmentInfo(new EnvironmentInfo {
                IpAddress = $"127.0.0.1,{GREEN_BAY_IP}"
            });
            await plugin.EventBatchProcessingAsync(new List <EventContext> {
                new EventContext(ev, OrganizationData.GenerateSampleOrganization(_billingManager, _plans), ProjectData.GenerateSampleProject())
            });

            Assert.NotNull(ev.Geo);

            var location = ev.GetLocation();

            Assert.Equal("US", location?.Country);
            Assert.Equal("WI", location?.Level1);
            Assert.Equal("Green Bay", location?.Locality);
        }
Ejemplo n.º 13
0
        public async Task WillSetLocationFromEnvironmentInfoInfo()
        {
            var plugin = new GeoPlugin(await GetResolverAsync(Log));
            var ev     = new PersistentEvent();

            ev.SetEnvironmentInfo(new EnvironmentInfo {
                IpAddress = $"127.0.0.1,{GREEN_BAY_IP}"
            });
            await plugin.EventBatchProcessingAsync(new List <EventContext> {
                new EventContext(ev)
            });

            Assert.NotNull(ev.Geo);

            var location = ev.GetLocation();

            Assert.Equal("US", location?.Country);
            Assert.Equal("WI", location?.Level1);
            Assert.Equal("Green Bay", location?.Locality);
        }
Ejemplo n.º 14
0
        public SlackAttachment(PersistentEvent ev)
        {
            TimeStamp = ev.Date.ToUnixTimeSeconds();

            var ud = ev.GetUserDescription();
            var ui = ev.GetUserIdentity();

            Text = ud?.Description;

            string displayName = null;

            if (!String.IsNullOrEmpty(ui?.Identity))
            {
                displayName = ui.Identity;
            }

            if (!String.IsNullOrEmpty(ui?.Name))
            {
                displayName = ui.Name;
            }

            if (!String.IsNullOrEmpty(displayName) && !String.IsNullOrEmpty(ud?.EmailAddress))
            {
                displayName = $"{displayName} ({ud.EmailAddress})";
            }
            else if (!String.IsNullOrEmpty(ui?.Identity) && !String.IsNullOrEmpty(ui.Name))
            {
                displayName = $"{ui.Name} ({ui.Identity})";
            }

            if (!String.IsNullOrEmpty(displayName))
            {
                AuthorName = displayName;

                if (!String.IsNullOrEmpty(ud?.EmailAddress))
                {
                    AuthorLink = $"mailto:{ud.EmailAddress}?body={ud.Description}";
                    //AuthorIcon = $"https://www.gravatar.com/avatar/{ud.EmailAddress.ToMD5()}",
                }
            }
        }
Ejemplo n.º 15
0
        public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
            {
                return(null);
            }

            dynamic data = new ExpandoObject();

            data.SessionId = ev.SessionId;

            if (ev.IsSessionStart())
            {
                data.Value = ev.Value.GetValueOrDefault();

                DateTime?endTime = ev.GetSessionEndTime();
                if (endTime.HasValue)
                {
                    data.SessionEnd = endTime;
                }
            }

            var identity = ev.GetUserIdentity();

            if (identity != null)
            {
                if (!String.IsNullOrEmpty(identity.Identity))
                {
                    data.Identity = identity.Identity;
                }

                if (!String.IsNullOrEmpty(identity.Name))
                {
                    data.Name = identity.Name;
                }
            }

            return(new SummaryData {
                TemplateKey = "event-session-summary", Data = data
            });
        }
Ejemplo n.º 16
0
        public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
            {
                return(null);
            }

            var data = new Dictionary <string, object> {
                { "SessionId", ev.GetSessionId() }, { "Type", ev.Type }
            };

            if (ev.IsSessionStart())
            {
                data.Add("Value", ev.Value.GetValueOrDefault());

                DateTime?endTime = ev.GetSessionEndTime();
                if (endTime.HasValue)
                {
                    data.Add("SessionEnd", endTime);
                }
            }

            var identity = ev.GetUserIdentity();

            if (identity != null)
            {
                if (!String.IsNullOrEmpty(identity.Identity))
                {
                    data.Add("Identity", identity.Identity);
                }

                if (!String.IsNullOrEmpty(identity.Name))
                {
                    data.Add("Name", identity.Name);
                }
            }

            return(new SummaryData {
                TemplateKey = "event-session-summary", Data = data
            });
        }
        public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
            {
                return(null);
            }

            var stackingTarget = ev.GetStackingTarget();

            if (stackingTarget?.Error == null)
            {
                return(null);
            }

            var data = new Dictionary <string, object> {
                { "Id", ev.Id }, { "Message", ev.Message }
            };

            if (!String.IsNullOrEmpty(stackingTarget.Error.Type))
            {
                data.Add("Type", stackingTarget.Error.Type.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last());
                data.Add("TypeFullName", stackingTarget.Error.Type);
            }

            if (stackingTarget.Method != null)
            {
                data.Add("Method", stackingTarget.Method.Name);
                data.Add("MethodFullName", stackingTarget.Method.GetFullName());
            }

            var requestInfo = ev.GetRequestInfo();

            if (!String.IsNullOrEmpty(requestInfo?.Path))
            {
                data.Add("Path", requestInfo.Path);
            }

            return(new SummaryData {
                TemplateKey = "event-error-summary", Data = data
            });
        }
Ejemplo n.º 18
0
        public async Task WillSetMultipleFromEmptyGeo()
        {
            var resolver = await GetResolverAsync(Log);

            if (resolver is NullGeoIpService)
            {
                return;
            }

            var plugin = new GeoPlugin(resolver, _options);

            var ev            = new PersistentEvent();
            var greenBayEvent = new PersistentEvent();

            greenBayEvent.SetEnvironmentInfo(new EnvironmentInfo {
                IpAddress = GREEN_BAY_IP
            });
            var irvingEvent = new PersistentEvent();

            irvingEvent.SetEnvironmentInfo(new EnvironmentInfo {
                IpAddress = IRVING_IP
            });
            await plugin.EventBatchProcessingAsync(new List <EventContext> {
                new EventContext(ev, OrganizationData.GenerateSampleOrganization(_billingManager, _plans), ProjectData.GenerateSampleProject()),
                new EventContext(greenBayEvent, OrganizationData.GenerateSampleOrganization(_billingManager, _plans), ProjectData.GenerateSampleProject()),
                new EventContext(irvingEvent, OrganizationData.GenerateSampleOrganization(_billingManager, _plans), ProjectData.GenerateSampleProject())
            });

            AssertCoordinatesAreEqual(GREEN_BAY_COORDINATES, greenBayEvent.Geo);
            var location = greenBayEvent.GetLocation();

            Assert.Equal("US", location?.Country);
            Assert.Equal("WI", location?.Level1);
            Assert.Equal("Green Bay", location?.Locality);

            AssertCoordinatesAreEqual(IRVING_COORDINATES, irvingEvent.Geo);
            location = irvingEvent.GetLocation();
            Assert.Equal("US", location?.Country);
            Assert.Equal("TX", location?.Level1);
            Assert.Equal("Irving", location?.Locality);
        }
        public static void SetSessionId(this PersistentEvent ev, string sessionId)
        {
            if (ev == null)
            {
                return;
            }

            if (!IsValidIdentifier(sessionId) || String.IsNullOrEmpty(sessionId))
            {
                throw new ArgumentException("Session Id must contain between 8 and 100 alphanumeric or '-' characters.", nameof(sessionId));
            }

            if (ev.IsSessionStart())
            {
                ev.ReferenceId = sessionId;
            }
            else
            {
                ev.SetEventReference("session", sessionId);
            }
        }
        public static DateTime?GetSessionEndTime(this PersistentEvent ev)
        {
            if (ev == null || !ev.IsSessionStart())
            {
                return(null);
            }

            if (ev.Data.TryGetValue(Event.KnownDataKeys.SessionEnd, out object sessionEnd))
            {
                if (sessionEnd is DateTimeOffset dto)
                {
                    return(dto.UtcDateTime);
                }

                if (sessionEnd is DateTime dt)
                {
                    return(dt);
                }
            }

            return(null);
        }
Ejemplo n.º 21
0
        public static bool UpdateSessionStart(this PersistentEvent ev, DateTime lastActivityUtc, bool isSessionEnd = false, bool hasError = false)
        {
            if (ev == null || !ev.IsSessionStart())
            {
                return(false);
            }

            decimal duration = ev.Value.GetValueOrDefault();

            if (duration < 0)
            {
                duration = 0;
            }

            decimal newDuration = (decimal)(lastActivityUtc - ev.Date.UtcDateTime).TotalSeconds;

            if (duration >= newDuration)
            {
                lastActivityUtc = ev.Date.UtcDateTime.AddSeconds((double)duration);
            }
            else
            {
                duration = newDuration;
            }

            ev.Value = duration;
            if (isSessionEnd)
            {
                ev.Data[Event.KnownDataKeys.SessionEnd] = lastActivityUtc;
                ev.CopyDataToIndex(Event.KnownDataKeys.SessionEnd);
            }
            else
            {
                ev.Data.Remove(Event.KnownDataKeys.SessionEnd);
                ev.Idx.Remove(Event.KnownDataKeys.SessionEnd + "-d");
            }

            return(true);
        }
Ejemplo n.º 22
0
        public void EnsureSingleRegression()
        {
            var pipeline = IoC.GetInstance <EventPipeline>();
            var client   = IoC.GetInstance <IElasticClient>();

            PersistentEvent ev      = EventData.GenerateEvent(projectId: TestConstants.ProjectId, organizationId: TestConstants.OrganizationId, occurrenceDate: DateTime.UtcNow);
            var             context = new EventContext(ev);

            Assert.DoesNotThrow(() => pipeline.Run(context));
            Assert.True(context.IsProcessed);
            Assert.False(context.IsRegression);

            client.Refresh();
            ev = _eventRepository.GetById(ev.Id);
            Assert.NotNull(ev);

            var stack = _stackRepository.GetById(ev.StackId);

            stack.DateFixed   = DateTime.UtcNow;
            stack.IsRegressed = false;
            _stackRepository.Save(stack, true);

            var contexts = new List <EventContext> {
                new EventContext(EventData.GenerateEvent(stackId: ev.StackId, projectId: TestConstants.ProjectId, organizationId: TestConstants.OrganizationId, occurrenceDate: DateTime.UtcNow.AddMinutes(1))),
                new EventContext(EventData.GenerateEvent(stackId: ev.StackId, projectId: TestConstants.ProjectId, organizationId: TestConstants.OrganizationId, occurrenceDate: DateTime.UtcNow.AddMinutes(1)))
            };

            Assert.DoesNotThrow(() => pipeline.Run(contexts));
            Assert.Equal(1, contexts.Count(c => c.IsRegression));
            Assert.Equal(1, contexts.Count(c => !c.IsRegression));

            contexts = new List <EventContext> {
                new EventContext(EventData.GenerateEvent(stackId: ev.StackId, projectId: TestConstants.ProjectId, organizationId: TestConstants.OrganizationId, occurrenceDate: DateTime.UtcNow.AddMinutes(1))),
                new EventContext(EventData.GenerateEvent(stackId: ev.StackId, projectId: TestConstants.ProjectId, organizationId: TestConstants.OrganizationId, occurrenceDate: DateTime.UtcNow.AddMinutes(1)))
            };

            Assert.DoesNotThrow(() => pipeline.Run(contexts));
            Assert.Equal(2, contexts.Count(c => !c.IsRegression));
        }
Ejemplo n.º 23
0
        public async Task <bool> SendEventNoticeAsync(PersistentEvent ev, Project project, bool isNew, bool isRegression)
        {
            var token = project.GetSlackToken();

            if (token?.IncomingWebhook?.Url == null)
            {
                return(false);
            }

            bool isCritical = ev.IsCritical();
            var  message    = _pluginManager.GetSlackEventNotificationMessage(ev, project, isCritical, isNew, isRegression);

            if (message == null)
            {
                _logger.LogWarning("Unable to create event notification slack message for event {id}.", ev.Id);
                return(false);
            }

            await SendMessageAsync(ev.OrganizationId, ev.ProjectId, token.IncomingWebhook.Url, message);

            return(true);
        }
Ejemplo n.º 24
0
        public async Task CanIndexExtendedDataAsync()
        {
            await ResetAsync();

            PersistentEvent ev = EventData.GenerateEvent(projectId: TestConstants.ProjectId, organizationId: TestConstants.OrganizationId, generateTags: false, generateData: false, occurrenceDate: DateTime.Now);

            ev.Data.Add("First Name", "Eric");
            ev.Data.Add("IsVerified", true);
            ev.Data.Add("IsVerified1", true.ToString());
            ev.Data.Add("Age", Int32.MaxValue);
            ev.Data.Add("Age1", Int32.MaxValue.ToString(CultureInfo.InvariantCulture));
            ev.Data.Add("AgeDec", Decimal.MaxValue);
            ev.Data.Add("AgeDec1", Decimal.MaxValue.ToString(CultureInfo.InvariantCulture));
            ev.Data.Add("AgeDbl", Double.MaxValue);
            ev.Data.Add("AgeDbl1", Double.MaxValue.ToString("r", CultureInfo.InvariantCulture));
            ev.Data.Add(" Birthday ", DateTime.MinValue);
            ev.Data.Add("BirthdayWithOffset", DateTimeOffset.MinValue);
            ev.Data.Add("@excluded", DateTime.MinValue);
            ev.Data.Add("Address", new { State = "Texas" });

            var pipeline = IoC.GetInstance <EventPipeline>();
            await pipeline.RunAsync(ev);

            await _client.RefreshAsync();

            Assert.Equal(11, ev.Idx.Count);
            Assert.True(ev.Idx.ContainsKey("first-name-s"));
            Assert.True(ev.Idx.ContainsKey("isverified-b"));
            Assert.True(ev.Idx.ContainsKey("isverified1-b"));
            Assert.True(ev.Idx.ContainsKey("age-n"));
            Assert.True(ev.Idx.ContainsKey("age1-n"));
            Assert.True(ev.Idx.ContainsKey("agedec-n"));
            Assert.True(ev.Idx.ContainsKey("agedec1-n"));
            Assert.True(ev.Idx.ContainsKey("agedbl-n"));
            Assert.True(ev.Idx.ContainsKey("agedbl1-n"));
            Assert.True(ev.Idx.ContainsKey("birthday-d"));
            Assert.True(ev.Idx.ContainsKey("birthdaywithoffset-d"));
        }
Ejemplo n.º 25
0
        private void IncrementMonthProjectStats(PersistentEvent data, bool isNew, DateTime localDate, TimeSpan utcOffset)
        {
            string id = GetMonthProjectStatsId(localDate, utcOffset, data.ProjectId);
            long   documentsAffected = _monthProjectStats.IncrementStats(id, data.StackId, localDate, isNew);

            if (documentsAffected > 0)
            {
                return;
            }

            lock (_monthProjectStatsLock) {
                try {
                    _monthProjectStats.Add(CreateBlankMonthProjectStats(utcOffset, localDate, data.ProjectId, data.StackId, isNew));
                } catch (MongoDuplicateKeyException) {
                    // The doc was already created by another thread, update it.
                    documentsAffected = _monthProjectStats.IncrementStats(id, data.StackId, localDate, isNew);
                    if (documentsAffected == 0)
                    {
                        Log.Error().Project(data.ProjectId).Message("Unable to update or insert stats doc id (\"{0}\").", id).Write();
                    }
                }
            }
        }
Ejemplo n.º 26
0
        private async Task <HeartbeatResult> GetHeartbeatAsync(PersistentEvent sessionStart)
        {
            string sessionId = sessionStart.GetSessionId();

            if (!String.IsNullOrWhiteSpace(sessionId))
            {
                var result = await GetLastHeartbeatActivityUtcAsync($"Project:{sessionStart.ProjectId}:heartbeat:{sessionId.ToSHA1()}").AnyContext();

                if (result != null)
                {
                    return(result);
                }
            }

            var user = sessionStart.GetUserIdentity();

            if (String.IsNullOrWhiteSpace(user?.Identity))
            {
                return(null);
            }

            return(await GetLastHeartbeatActivityUtcAsync($"Project:{sessionStart.ProjectId}:heartbeat:{user.Identity.ToSHA1()}").AnyContext());
        }
Ejemplo n.º 27
0
        public void Run(PersistentEvent ev) {
            _statsClient.Counter(StatNames.EventsSubmitted);
            try {
                _statsClient.Time(() => {
                    if (String.IsNullOrEmpty(ev.ProjectId))
                        throw new ArgumentException("ProjectId must be populated on the Event.");

                    var project = _projectRepository.GetById(ev.ProjectId, true);
                    if (project == null)
                        throw new InvalidOperationException(String.Format("Unable to load project \"{0}\"", ev.ProjectId));

                    if (String.IsNullOrEmpty(ev.OrganizationId))
                        ev.OrganizationId = project.OrganizationId;

                    var ctx = new EventContext(ev) {
                        Organization = _organizationRepository.GetById(ev.OrganizationId, true),
                        Project = project
                    };

                    if (ctx.Organization == null)
                        throw new InvalidOperationException(String.Format("Unable to load organization \"{0}\"", ev.OrganizationId));

                    // load organization settings into the context
                    foreach (var key in ctx.Organization.Data.Keys)
                        ctx.SetProperty(key, ctx.Organization.Data[key]);

                    // load project settings into the context, overriding any organization settings with the same name
                    foreach (var key in ctx.Project.Data.Keys)
                        ctx.SetProperty(key, ctx.Project.Data[key]);

                    Run(ctx);
                }, StatNames.EventsProcessingTime);
            } catch (Exception ex) {
                _statsClient.Counter(StatNames.EventsProcessErrors);
                throw;
            }
        }
Ejemplo n.º 28
0
        public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
            {
                return(null);
            }

            var error = ev.GetSimpleError();

            if (error == null)
            {
                return(null);
            }

            var data = new Dictionary <string, object> {
                { "Message", ev.Message }
            };

            AddUserIdentitySummaryData(data, ev.GetUserIdentity());

            if (!String.IsNullOrEmpty(error.Type))
            {
                data.Add("Type", error.Type.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last());
                data.Add("TypeFullName", error.Type);
            }

            var requestInfo = ev.GetRequestInfo();

            if (!String.IsNullOrEmpty(requestInfo?.Path))
            {
                data.Add("Path", requestInfo.Path);
            }

            return(new SummaryData {
                TemplateKey = "event-simple-summary", Data = data
            });
        }
Ejemplo n.º 29
0
        public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
            {
                return(null);
            }

            var data = new Dictionary <string, object> {
                { "Message", ev.Message }
            };

            AddUserIdentitySummaryData(data, ev.GetUserIdentity());

            if (!String.IsNullOrWhiteSpace(ev.Source))
            {
                data.Add("Source", ev.Source);

                var parts = ev.Source.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length > 1 && !String.Equals(ev.Source, parts.Last()) && parts.All(p => p.IsValidIdentifier()))
                {
                    data.Add("SourceShortName", parts.Last());
                }
            }

            object temp;
            string level = ev.Data.TryGetValue(Event.KnownDataKeys.Level, out temp) ? temp as string : null;

            if (!String.IsNullOrWhiteSpace(level))
            {
                data.Add("Level", level.Trim());
            }

            return(new SummaryData {
                TemplateKey = "event-log-summary", Data = data
            });
        }
Ejemplo n.º 30
0
        public override SummaryData GetEventSummaryData(PersistentEvent ev)
        {
            if (!ShouldHandle(ev))
            {
                return(null);
            }

            var data = new Dictionary <string, object> {
                { "Source", ev.Source }
            };

            AddUserIdentitySummaryData(data, ev.GetUserIdentity());

            var ips = ev.GetIpAddresses().ToList();

            if (ips.Count > 0)
            {
                data.Add("IpAddress", ips);
            }

            return(new SummaryData {
                TemplateKey = "event-notfound-summary", Data = data
            });
        }
Ejemplo n.º 31
0
        private void IncrementDayProjectStats(PersistentEvent data, bool isNew)
        {
            string id = GetDayProjectStatsId(data.ProjectId, data.Date);

            long documentsAffected = _dayProjectStats.IncrementStats(id, data.StackId, GetTimeBucket(data.Date), isNew);

            if (documentsAffected > 0)
            {
                return;
            }

            lock (_dayProjectStatsLock) {
                try {
                    _dayProjectStats.Add(CreateBlankDayProjectStats(data, isNew));
                } catch (MongoDuplicateKeyException) {
                    // The doc was already created by another thread, update it.
                    documentsAffected = _dayProjectStats.IncrementStats(id, data.StackId, GetTimeBucket(data.Date), isNew);
                    if (documentsAffected == 0)
                    {
                        Log.Error().Project(data.ProjectId).Message("Unable to update or insert stats doc id (\"{0}\").", id).Write();
                    }
                }
            }
        }
Ejemplo n.º 32
0
 public virtual string GetEventViewName(PersistentEvent ev)
 {
     return(null);
 }
Ejemplo n.º 33
0
 public virtual string GetStackTitle(PersistentEvent ev)
 {
     return(null);
 }
 public SummaryData GetEventSummaryData(PersistentEvent ev)
 {
     return new SummaryData("event-summary", new { Message = ev.Message });
 }
        public override SummaryData GetEventSummaryData(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            return new SummaryData { TemplateKey = "event-session-summary", Data = new { SessionId = ev.SessionId } };
        }
Ejemplo n.º 36
0
 public string GetEventViewName(PersistentEvent ev)
 {
     return("Event");
 }
Ejemplo n.º 37
0
 public string GetStackTitle(PersistentEvent ev)
 {
     return(ev.Message);
 }
        public override SummaryData GetEventSummaryData(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            return new SummaryData { TemplateKey = "event-feature-summary", Data = new { Source = ev.Source } };
        }
 private bool ShouldHandle(PersistentEvent ev)
 {
     return ev.IsSessionStart() || ev.IsSessionEnd();
 }
 private bool ShouldHandle(PersistentEvent ev)
 {
     return ev.IsError() && ev.Data.ContainsKey(Event.KnownDataKeys.SimpleError);
 }
 private bool ShouldHandle(PersistentEvent ev)
 {
     return ev.IsNotFound();
 }
 private bool ShouldHandle(PersistentEvent ev) {
     return ev.IsLog();
 }
 private bool ShouldHandle(PersistentEvent ev)
 {
     return ev.IsFeatureUsage();
 }
Ejemplo n.º 44
0
 public virtual string GetStackSummaryHtml(PersistentEvent ev)
 {
     return(null);
 }
        public override string GetStackTitle(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            return !String.IsNullOrEmpty(ev.Source) ? ev.Source : "(Unknown)";
        }
Ejemplo n.º 46
0
		private static PersistentEvent Convert(Type aggregatedRootType, Guid aggregateId, IEvent @event)
		{
			var eventType = @event.GetType();
			var entity = new PersistentEvent(aggregateId)
			{
				AggregateId = aggregateId,
				AggregatedRootType = aggregatedRootType.AssemblyQualifiedName,
				EventType = eventType.AssemblyQualifiedName,
				SerializedEvent = @event.ToJson(),
				Name = eventType.Name,
				Occured = SystemClock.GetCurrentTime(),
			};

			return entity;
		}
Ejemplo n.º 47
0
		private static IEvent Convert(PersistentEvent persistentEvent)
		{
			var eventType = Type.GetType(persistentEvent.EventType);
			var @event = EventSerializationExtensions.FromJson(eventType, persistentEvent.SerializedEvent);
			return @event;
		}
 public string GetStackTitle(PersistentEvent ev) {
     return ev.Message;
 }
Ejemplo n.º 49
0
 public SummaryData GetEventSummaryData(PersistentEvent ev)
 {
     return(new SummaryData {
         TemplateKey = "event-summary", Data = new { Message = ev.Message, Source = ev.Source, Type = ev.Type }
     });
 }
 public SummaryData GetEventSummaryData(PersistentEvent ev) {
     return new SummaryData { TemplateKey = "event-summary", Data = new { Message = ev.Message, Source = ev.Source, Type = ev.Type } };
 }
 public string GetEventViewName(PersistentEvent ev) {
     return "Event";
 }
Ejemplo n.º 52
0
 public virtual string GetStackTitle(PersistentEvent ev)
 {
     return null;
 }
Ejemplo n.º 53
0
 public virtual SummaryData GetEventSummaryData(PersistentEvent ev)
 {
     return null;
 }
        public override SummaryData GetEventSummaryData(PersistentEvent ev) {
            if (!ShouldHandle(ev))
                return null;

            return new SummaryData { TemplateKey = "event-summary", Data = new { Message = ev.Message, Source = ev.Source, Type = ev.Type } };
        }
Ejemplo n.º 55
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, string type = null, string sessionId = null, string userIdentity = 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 ?? RandomData.GetDateTimeOffset(startDate, endDate),
                IsFixed        = isFixed,
                IsHidden       = isHidden,
                StackId        = stackIds.Random()
            };

            if (!String.IsNullOrEmpty(sessionId))
            {
                ev.SetSessionId(sessionId);
            }

            if (!String.IsNullOrEmpty(userIdentity))
            {
                ev.SetUserIdentity(userIdentity);
            }

            if (generateData)
            {
                for (int i = 0; i < RandomData.GetInt(1, 5); i++)
                {
                    string key = RandomData.GetWord();
                    while (ev.Data.ContainsKey(key) || key == Event.KnownDataKeys.Error)
                    {
                        key = RandomData.GetWord();
                    }

                    ev.Data.Add(key, RandomData.GetWord());
                }
            }

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

            if (String.IsNullOrEmpty(type) || String.Equals(type, Event.KnownTypes.Error, StringComparison.OrdinalIgnoreCase))
            {
                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();
            }
            else
            {
                ev.Type = type.ToLower();
            }

            if (ev.IsSessionStart())
            {
                ev.Value = 0;
            }

            return(ev);
        }
Ejemplo n.º 56
0
 public virtual string GetEventViewName(PersistentEvent ev)
 {
     return null;
 }