sentry.go 1.3 KB

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