errors_reporting.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "net/http"
  4. "strings"
  5. "github.com/bugsnag/bugsnag-go"
  6. "github.com/getsentry/raven-go"
  7. "github.com/honeybadger-io/honeybadger-go"
  8. )
  9. var (
  10. bugsnagEnabled bool
  11. honeybadgerEnabled bool
  12. sentryEnabled bool
  13. headersReplacer = strings.NewReplacer("-", "_")
  14. )
  15. func initErrorsReporting() {
  16. if len(conf.BugsnagKey) > 0 {
  17. bugsnag.Configure(bugsnag.Configuration{
  18. APIKey: conf.BugsnagKey,
  19. ReleaseStage: conf.BugsnagStage,
  20. })
  21. bugsnagEnabled = true
  22. }
  23. if len(conf.HoneybadgerKey) > 0 {
  24. honeybadger.Configure(honeybadger.Configuration{
  25. APIKey: conf.HoneybadgerKey,
  26. Env: conf.HoneybadgerEnv,
  27. })
  28. honeybadgerEnabled = true
  29. }
  30. if len(conf.SentryDSN) > 0 {
  31. raven.SetDSN(conf.SentryDSN)
  32. raven.SetEnvironment(conf.SentryEnvironment)
  33. raven.SetRelease(conf.SentryRelease)
  34. sentryEnabled = true
  35. }
  36. }
  37. func reportError(err error, req *http.Request) {
  38. if bugsnagEnabled {
  39. bugsnag.Notify(err, req)
  40. }
  41. if honeybadgerEnabled {
  42. headers := make(honeybadger.CGIData)
  43. for k, v := range req.Header {
  44. key := "HTTP_" + headersReplacer.Replace(strings.ToUpper(k))
  45. headers[key] = v[0]
  46. }
  47. honeybadger.Notify(err, req.URL, headers)
  48. }
  49. if sentryEnabled {
  50. raven.SetHttpContext(raven.NewHttp(req))
  51. raven.CaptureError(err, nil)
  52. }
  53. }