private static EventHandlingError CreateEventHandlingError(Domain.EventHandlingError e) => new EventHandlingError { AggregateId = e.Event.AggregateId, SequenceNumber = e.Event.SequenceNumber, SerializedEvent = e.Event.ToJson(), StreamName = e.Event.EventStreamName(), EventTypeName = e.Event.EventName(), EventId = e.Event.AbsoluteSequenceNumber() };
internal static void ReportFailure( Domain.EventHandlingError error, Func <DbContext> createDbContext) { // add an EventHandlingError entry as well EventHandlingError sqlError = CreateEventHandlingError((dynamic)error); var errorText = new { error.Exception, Event = sqlError.SerializedEvent }.ToJson(); log.Write(() => errorText); using (var transaction = new TransactionScope(TransactionScopeOption.Suppress)) using (var db = createDbContext()) { var dbSet = db.Set <ReadModelInfo>(); var handler = error.Handler; string readModelInfoName = null; if (handler != null) { // update the affected ReadModelInfo readModelInfoName = ReadModelInfo.NameForProjector(handler); var readModelInfo = dbSet.SingleOrDefault(i => i.Name == readModelInfoName); if (readModelInfo == null) { readModelInfo = new ReadModelInfo { Name = readModelInfoName }; dbSet.Add(readModelInfo); } readModelInfo.Error = errorText; readModelInfo.FailedOnEventId = sqlError.OriginalId; } sqlError.Error = error.Exception.ToJson(); sqlError.Handler = readModelInfoName; db.Set <EventHandlingError>().Add(sqlError); db.SaveChanges(); transaction.Complete(); } }
private static EventHandlingError CreateEventHandlingError(Domain.EventHandlingError e) => new EventHandlingError { Actor = e.Event.Actor(), AggregateId = e.Event.AggregateId, SequenceNumber = e.Event.SequenceNumber, SerializedEvent = e.Event.ToJson(), StreamName = e.Event.EventStreamName(), EventTypeName = e.Event.EventName(), OriginalId = e.Event .IfTypeIs <IHaveExtensibleMetada>() .Then(ee => ee.Try(eee => eee.Metadata.AbsoluteSequenceNumber, ignore: ex => true)) .Else(() => (long?)null) };
internal static void ReportFailure( Domain.EventHandlingError error, Func <DbContext> createDbContext) { // add an EventHandlingError entry as well EventHandlingError sqlError = CreateEventHandlingError((dynamic)error); log.Write(() => new { error.Exception, sqlError.SerializedEvent }); using (var db = createDbContext()) { var dbSet = db.Set <ReadModelInfo>(); var handler = error.Handler; string readModelInfoName = null; var exceptionJson = error.Exception.ToDiagnosticJson(); if (handler != null) { // update the affected ReadModelInfo readModelInfoName = ReadModelInfo.NameForProjector(handler); var readModelInfo = dbSet.SingleOrDefault(i => i.Name == readModelInfoName); if (readModelInfo == null) { readModelInfo = new ReadModelInfo { Name = readModelInfoName }; dbSet.Add(readModelInfo); } readModelInfo.LastError = exceptionJson; readModelInfo.FailedOnEventId = sqlError.EventId; } sqlError.Error = $"{Environment.MachineName}: {exceptionJson}"; sqlError.Handler = readModelInfoName; db.Set <EventHandlingError>().Add(sqlError); db.SaveChanges(); } }