github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/monitor/errorhandler/sentryprovider/sentry.go (about) 1 package sentryprovider 2 3 import ( 4 "github.com/getsentry/sentry-go" 5 "github.com/pkg/errors" 6 lego2 "github.com/vseinstrumentiru/lego/internal/lego" 7 "os" 8 "time" 9 ) 10 11 // Handler is responsible for sending errors to Sentry. 12 type SentryHandler struct{} 13 14 // New creates a new handler. 15 func New(p lego2.Process, dsn string) (*SentryHandler, error) { 16 serverName := p.Name() 17 if p.DataCenterName() != "" { 18 serverName += ":" + p.DataCenterName() 19 } 20 21 release := p.Build().Version 22 if release != "" { 23 release += "@" 24 } 25 release += p.Build().CommitHash 26 27 err := sentry.Init(sentry.ClientOptions{ 28 Dsn: dsn, 29 Debug: p.IsDebug(), 30 AttachStacktrace: true, 31 ServerName: p.Name(), 32 Environment: p.Env(), 33 Release: release, 34 }) 35 36 host, _ := os.Hostname() 37 dataCenter := p.DataCenterName() 38 branch := p.Build().Version 39 40 sentry.ConfigureScope(func(scope *sentry.Scope) { 41 scope.SetTag("data-center", dataCenter) 42 scope.SetTag("branch", branch) 43 scope.SetTag("host", host) 44 }) 45 46 if err != nil { 47 return nil, errors.Wrap(err, "failed to create sentry client") 48 } 49 50 return &SentryHandler{}, nil 51 } 52 53 func (h *SentryHandler) Handle(err error) { 54 if err == error(nil) || err == nil { 55 return 56 } 57 58 sentry.CaptureException(err) 59 } 60 61 func (h *SentryHandler) Close() error { 62 sentry.Flush(2 * time.Second) 63 64 return nil 65 }