50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
|
package sentry
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"reflect"
|
||
|
|
||
|
cmderrors "github.com/cloudskiff/driftctl/pkg/cmd/errors"
|
||
|
"github.com/cloudskiff/driftctl/pkg/version"
|
||
|
gosentry "github.com/getsentry/sentry-go"
|
||
|
"github.com/pkg/errors"
|
||
|
"github.com/sirupsen/logrus"
|
||
|
)
|
||
|
|
||
|
var excludedErrorTypes = []error{
|
||
|
cmderrors.UsageError{},
|
||
|
}
|
||
|
|
||
|
func Initialize() error {
|
||
|
logrus.Debug("Enabled error reporting")
|
||
|
return gosentry.Init(gosentry.ClientOptions{
|
||
|
Dsn: "https://9f2b735e20bc452387f7fa093f786173@o495597.ingest.sentry.io/5568568",
|
||
|
Release: fmt.Sprintf("driftctl@%s", version.Current()),
|
||
|
AttachStacktrace: true,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func shouldCaptureException(err error) bool {
|
||
|
errType, causeType := reflect.TypeOf(err), reflect.TypeOf(errors.Cause(err))
|
||
|
for _, exludedError := range excludedErrorTypes {
|
||
|
switch reflect.TypeOf(exludedError) {
|
||
|
case errType:
|
||
|
return false
|
||
|
case causeType:
|
||
|
return false
|
||
|
default:
|
||
|
}
|
||
|
}
|
||
|
logrus.WithFields(logrus.Fields{
|
||
|
"error_type": errType,
|
||
|
"cause_type": causeType,
|
||
|
}).Debug("Sentry captured error")
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func CaptureException(err error) {
|
||
|
if shouldCaptureException(err) {
|
||
|
gosentry.CaptureException(err)
|
||
|
}
|
||
|
}
|