github.com/secure-build/gitlab-runner@v12.5.0+incompatible/helpers/sentry/log_hook.go (about) 1 package sentry 2 3 import ( 4 "errors" 5 "fmt" 6 "os" 7 "runtime" 8 9 "github.com/getsentry/raven-go" 10 "github.com/sirupsen/logrus" 11 12 "gitlab.com/gitlab-org/gitlab-runner/common" 13 ) 14 15 type LogHook struct { 16 client *raven.Client 17 } 18 19 func (s *LogHook) Levels() []logrus.Level { 20 return []logrus.Level{ 21 logrus.PanicLevel, 22 logrus.FatalLevel, 23 logrus.ErrorLevel, 24 } 25 } 26 27 func (s *LogHook) Fire(entry *logrus.Entry) error { 28 if s.client == nil { 29 return nil 30 } 31 32 tags := make(map[string]string) 33 for key, value := range entry.Data { 34 tags[key] = fmt.Sprint(value) 35 } 36 37 switch entry.Level { 38 case logrus.PanicLevel: 39 s.client.CaptureErrorAndWait(errors.New(entry.Message), tags) 40 41 case logrus.FatalLevel: 42 s.client.CaptureErrorAndWait(errors.New(entry.Message), tags) 43 44 case logrus.ErrorLevel: 45 s.client.CaptureError(errors.New(entry.Message), tags) 46 } 47 return nil 48 } 49 50 func NewLogHook(dsn string) (lh LogHook, err error) { 51 tags := make(map[string]string) 52 tags["built"] = common.BUILT 53 tags["version"] = common.VERSION 54 tags["revision"] = common.REVISION 55 tags["branch"] = common.BRANCH 56 tags["go-version"] = runtime.Version() 57 tags["go-os"] = runtime.GOOS 58 tags["go-arch"] = runtime.GOARCH 59 tags["hostname"], _ = os.Hostname() 60 client, err := raven.NewWithTags(dsn, tags) 61 if err != nil { 62 return 63 } 64 lh.client = client 65 return 66 }