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 }; }
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); }
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()); }
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; }
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); }
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); }
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()}", } } }
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 }); }
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 }); }
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); }
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); }
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)); }
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); }
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")); }
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(); } } } }
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()); }
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; } }
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 }); }
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 }); }
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 }); }
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(); } } } }
public virtual string GetEventViewName(PersistentEvent ev) { return(null); }
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 } }; }
public string GetEventViewName(PersistentEvent ev) { return("Event"); }
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(); }
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)"; }
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; }
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; }
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"; }
public virtual string GetStackTitle(PersistentEvent ev) { return null; }
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 } }; }
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); }
public virtual string GetEventViewName(PersistentEvent ev) { return null; }