summaryrefslogtreecommitdiff
path: root/workhorse/internal/helper/raven.go
blob: 898e8ec85f80a4b41c3ce8c27eea106b8945c14c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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]")
		}
	}
}