1
0

honeybadger.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package honeybadger
  2. import (
  3. "net/http"
  4. "reflect"
  5. "strings"
  6. "github.com/honeybadger-io/honeybadger-go"
  7. "github.com/imgproxy/imgproxy/v3/config"
  8. "github.com/imgproxy/imgproxy/v3/ierrors"
  9. )
  10. var (
  11. enabled bool
  12. metaReplacer = strings.NewReplacer("-", "_", " ", "_")
  13. )
  14. func Init() {
  15. if len(config.HoneybadgerKey) > 0 {
  16. honeybadger.Configure(honeybadger.Configuration{
  17. APIKey: config.HoneybadgerKey,
  18. Env: config.HoneybadgerEnv,
  19. })
  20. enabled = true
  21. }
  22. }
  23. func Report(err error, req *http.Request, meta map[string]any) {
  24. if !enabled {
  25. return
  26. }
  27. extra := make(honeybadger.CGIData, len(req.Header)+len(meta))
  28. for k, v := range req.Header {
  29. key := "HTTP_" + metaReplacer.Replace(strings.ToUpper(k))
  30. extra[key] = v[0]
  31. }
  32. for k, v := range meta {
  33. key := metaReplacer.Replace(strings.ToUpper(k))
  34. extra[key] = v
  35. }
  36. hbErr := honeybadger.NewError(err)
  37. if e, ok := err.(*ierrors.Error); ok {
  38. hbErr.Class = reflect.TypeOf(e.Unwrap()).String()
  39. }
  40. honeybadger.Notify(hbErr, req.URL, extra)
  41. }