59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
|
package helper
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"reflect"
|
||
|
|
||
|
raven "github.com/getsentry/raven-go"
|
||
|
|
||
|
//lint:ignore SA1019 this was recently deprecated. Update workhorse to use labkit errortracking package.
|
||
|
correlation "gitlab.com/gitlab-org/labkit/correlation/raven"
|
||
|
|
||
|
"gitlab.com/gitlab-org/labkit/log"
|
||
|
)
|
||
|
|
||
|
var ravenHeaderBlacklist = []string{
|
||
|
"Authorization",
|
||
|
"Private-Token",
|
||
|
}
|
||
|
|
||
|
func CaptureRavenError(r *http.Request, err error, fields log.Fields) {
|
||
|
client := raven.DefaultClient
|
||
|
extra := raven.Extra{}
|
||
|
|
||
|
for k, v := range fields {
|
||
|
extra[k] = v
|
||
|
}
|
||
|
|
||
|
interfaces := []raven.Interface{}
|
||
|
if r != nil {
|
||
|
CleanHeadersForRaven(r)
|
||
|
interfaces = append(interfaces, raven.NewHttp(r))
|
||
|
|
||
|
//lint:ignore SA1019 this was recently deprecated. Update workhorse to use labkit errortracking package.
|
||
|
extra = correlation.SetExtra(r.Context(), extra)
|
||
|
}
|
||
|
|
||
|
exception := &raven.Exception{
|
||
|
Stacktrace: raven.NewStacktrace(2, 3, nil),
|
||
|
Value: err.Error(),
|
||
|
Type: reflect.TypeOf(err).String(),
|
||
|
}
|
||
|
interfaces = append(interfaces, exception)
|
||
|
|
||
|
packet := raven.NewPacketWithExtra(err.Error(), extra, interfaces...)
|
||
|
client.Capture(packet, nil)
|
||
|
}
|
||
|
|
||
|
func CleanHeadersForRaven(r *http.Request) {
|
||
|
if r == nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for _, key := range ravenHeaderBlacklist {
|
||
|
if r.Header.Get(key) != "" {
|
||
|
r.Header.Set(key, "[redacted]")
|
||
|
}
|
||
|
}
|
||
|
}
|