123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package main
- import (
- "net/http"
- "strings"
- "time"
- "github.com/bugsnag/bugsnag-go"
- "github.com/getsentry/sentry-go"
- "github.com/honeybadger-io/honeybadger-go"
- )
- var (
- bugsnagEnabled bool
- honeybadgerEnabled bool
- sentryEnabled bool
- headersReplacer = strings.NewReplacer("-", "_")
- sentryTimeout = 5 * time.Second
- )
- func initErrorsReporting() {
- if len(conf.BugsnagKey) > 0 {
- bugsnag.Configure(bugsnag.Configuration{
- APIKey: conf.BugsnagKey,
- ReleaseStage: conf.BugsnagStage,
- })
- bugsnagEnabled = true
- }
- if len(conf.HoneybadgerKey) > 0 {
- honeybadger.Configure(honeybadger.Configuration{
- APIKey: conf.HoneybadgerKey,
- Env: conf.HoneybadgerEnv,
- })
- honeybadgerEnabled = true
- }
- if len(conf.SentryDSN) > 0 {
- sentry.Init(sentry.ClientOptions{
- Dsn: conf.SentryDSN,
- Release: conf.SentryRelease,
- Environment: conf.SentryEnvironment,
- })
- sentryEnabled = true
- }
- }
- func reportError(err error, req *http.Request) {
- if bugsnagEnabled {
- bugsnag.Notify(err, req)
- }
- if honeybadgerEnabled {
- headers := make(honeybadger.CGIData)
- for k, v := range req.Header {
- key := "HTTP_" + headersReplacer.Replace(strings.ToUpper(k))
- headers[key] = v[0]
- }
- honeybadger.Notify(err, req.URL, headers)
- }
- if sentryEnabled {
- hub := sentry.CurrentHub().Clone()
- hub.Scope().SetRequest(req)
- hub.Scope().SetLevel(sentry.LevelError)
- eventID := hub.CaptureException(err)
- if eventID != nil {
- hub.Flush(sentryTimeout)
- }
- }
- }
|