瀏覽代碼

emit sentry event ID in logs for better navigation (#2897)

Mohammed Nafees 3 年之前
父節點
當前提交
9578c4e0c4

+ 1 - 1
api/server/shared/apierrors/alerter/alerter.go

@@ -5,5 +5,5 @@ import (
 )
 
 type Alerter interface {
-	SendAlert(ctx context.Context, err error, data map[string]interface{})
+	SendAlert(ctx context.Context, err error, data map[string]interface{}) *string
 }

+ 3 - 1
api/server/shared/apierrors/alerter/noop.go

@@ -6,4 +6,6 @@ import (
 
 type NoOpAlerter struct{}
 
-func (s NoOpAlerter) SendAlert(ctx context.Context, err error, data map[string]interface{}) {}
+func (s NoOpAlerter) SendAlert(ctx context.Context, err error, data map[string]interface{}) *string {
+	return nil
+}

+ 9 - 2
api/server/shared/apierrors/alerter/sentry.go

@@ -31,18 +31,25 @@ func NewSentryAlerter(sentryDSN, sentryEnv string) (*SentryAlerter, error) {
 	}, nil
 }
 
-func (s *SentryAlerter) SendAlert(ctx context.Context, err error, data map[string]interface{}) {
+func (s *SentryAlerter) SendAlert(ctx context.Context, err error, data map[string]interface{}) *string {
 	scope := sentry.NewScope()
 
 	for key, val := range data {
 		scope.SetTag(key, fmt.Sprintf("%v", val))
 	}
 
-	s.client.CaptureException(
+	eventID := s.client.CaptureException(
 		err,
 		&sentry.EventHint{
 			Data: data,
 		},
 		scope,
 	)
+
+	if eventID != nil {
+		eventIDStr := string(*eventID)
+		return &eventIDStr
+	}
+
+	return nil
 }

+ 7 - 5
api/server/shared/apierrors/errors.go

@@ -123,7 +123,7 @@ type ErrorOpts struct {
 
 func HandleAPIError(
 	l *logger.Logger,
-	alerter alerter.Alerter,
+	al alerter.Alerter,
 	w http.ResponseWriter,
 	r *http.Request,
 	err RequestError,
@@ -143,11 +143,15 @@ func HandleAPIError(
 	event.Send()
 
 	// if the status code is internal server error, use alerter
-	if err.GetStatusCode() == http.StatusInternalServerError && alerter != nil {
+	if err.GetStatusCode() == http.StatusInternalServerError && al != nil {
 		data["method"] = r.Method
 		data["url"] = r.URL.String()
 
-		alerter.SendAlert(r.Context(), err, data)
+		eventID := al.SendAlert(r.Context(), err, data)
+
+		if _, ok := al.(*alerter.SentryAlerter); ok && eventID != nil {
+			data["sentry_event_id"] = *eventID
+		}
 	}
 
 	if writeErr {
@@ -175,6 +179,4 @@ func HandleAPIError(
 			event.Send()
 		}
 	}
-
-	return
 }