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  }