sentry.go 1009 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package alerter
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/getsentry/sentry-go"
  6. )
  7. type SentryAlerter struct {
  8. client *sentry.Client
  9. }
  10. func noIntegrations(ints []sentry.Integration) []sentry.Integration {
  11. return []sentry.Integration{}
  12. }
  13. func NewSentryAlerter(sentryDSN, sentryEnv string) (*SentryAlerter, error) {
  14. sentryClient, err := sentry.NewClient(sentry.ClientOptions{
  15. Dsn: sentryDSN,
  16. AttachStacktrace: true,
  17. Integrations: noIntegrations,
  18. Environment: sentryEnv,
  19. })
  20. if err != nil {
  21. return nil, err
  22. }
  23. return &SentryAlerter{
  24. client: sentryClient,
  25. }, nil
  26. }
  27. func (s *SentryAlerter) SendAlert(ctx context.Context, err error, data map[string]interface{}) *string {
  28. scope := sentry.NewScope()
  29. for key, val := range data {
  30. scope.SetTag(key, fmt.Sprintf("%v", val))
  31. }
  32. eventID := s.client.CaptureException(
  33. err,
  34. &sentry.EventHint{
  35. Data: data,
  36. },
  37. scope,
  38. )
  39. if eventID != nil {
  40. eventIDStr := string(*eventID)
  41. return &eventIDStr
  42. }
  43. return nil
  44. }