diff --git a/internal/bridge/user_events.go b/internal/bridge/user_events.go index 3d2e9505..a05f4731 100644 --- a/internal/bridge/user_events.go +++ b/internal/bridge/user_events.go @@ -56,7 +56,7 @@ func (bridge *Bridge) handleUserEvent(ctx context.Context, user *user.User, even bridge.handleUserDeauth(ctx, user) case events.UserBadEvent: - bridge.handleUserBadEvent(ctx, user, event.Error) + bridge.handleUserBadEvent(ctx, user, event) case events.UncategorizedEventError: bridge.handleUncategorizedErrorEvent(event) @@ -140,11 +140,15 @@ func (bridge *Bridge) handleUserDeauth(ctx context.Context, user *user.User) { }, bridge.usersLock) } -func (bridge *Bridge) handleUserBadEvent(ctx context.Context, user *user.User, err error) { +func (bridge *Bridge) handleUserBadEvent(ctx context.Context, user *user.User, event events.UserBadEvent) { safe.Lock(func() { if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle event", reporter.Context{ - "error_type": fmt.Sprintf("%T", internal.ErrCause(err)), - "error": err, + "user_id": user.ID(), + "old_event_id": event.OldEventID, + "new_event_id": event.NewEventID, + "event_info": event.EventInfo, + "error": event.Error, + "error_type": fmt.Sprintf("%T", internal.ErrCause(event.Error)), }); rerr != nil { logrus.WithError(rerr).Error("Failed to report failed event handling") } diff --git a/internal/events/user.go b/internal/events/user.go index 7b9771a5..9b80d820 100644 --- a/internal/events/user.go +++ b/internal/events/user.go @@ -103,12 +103,23 @@ func (event UserDeauth) String() string { type UserBadEvent struct { eventBase - UserID string - Error error + UserID string + OldEventID string + NewEventID string + EventInfo string + + Error error } func (event UserBadEvent) String() string { - return fmt.Sprintf("UserBadEvent: UserID: %s, Error: %s", event.UserID, event.Error) + return fmt.Sprintf( + "UserBadEvent: UserID: %s, OldEventID: %s, NewEventID: %s, EventInfo: %v, Error: %s", + event.UserID, + event.OldEventID, + event.NewEventID, + event.EventInfo, + event.Error, + ) } // UserDeleted is emitted when a user has been deleted. diff --git a/internal/user/user.go b/internal/user/user.go index c2634f0a..8035f0a4 100644 --- a/internal/user/user.go +++ b/internal/user/user.go @@ -693,8 +693,11 @@ func (user *User) doEventPoll(ctx context.Context) error { user.log.WithField("event", event).Warn("Failed to handle API event") user.eventCh.Enqueue(events.UserBadEvent{ - UserID: user.ID(), - Error: err, + UserID: user.ID(), + OldEventID: user.vault.EventID(), + NewEventID: event.EventID, + EventInfo: event.String(), + Error: err, }) return fmt.Errorf("failed to handle event due to client error: %w", err)