|
|
@@ -0,0 +1,54 @@
|
|
|
+package errors
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "os"
|
|
|
+
|
|
|
+ "github.com/fatih/color"
|
|
|
+ "github.com/getsentry/sentry-go"
|
|
|
+ "github.com/porter-dev/porter/cli/cmd/config"
|
|
|
+)
|
|
|
+
|
|
|
+var SentryDSN string = ""
|
|
|
+
|
|
|
+type errorHandler interface {
|
|
|
+ HandleError(error)
|
|
|
+}
|
|
|
+
|
|
|
+type standardErrorHandler struct{}
|
|
|
+
|
|
|
+func (h *standardErrorHandler) HandleError(err error) {
|
|
|
+ color.New(color.FgRed).Fprintf(os.Stderr, "error: %s\n", err.Error())
|
|
|
+}
|
|
|
+
|
|
|
+type sentryErrorHandler struct{}
|
|
|
+
|
|
|
+func (h *sentryErrorHandler) HandleError(err error) {
|
|
|
+ if SentryDSN == "" {
|
|
|
+ panic("using SentryErrorHandler but Sentry DSN is not set")
|
|
|
+ }
|
|
|
+
|
|
|
+ localHub := sentry.CurrentHub().Clone()
|
|
|
+
|
|
|
+ localHub.ConfigureScope(func(scope *sentry.Scope) {
|
|
|
+ scope.SetTags(map[string]string{
|
|
|
+ "host": config.GetCLIConfig().Host,
|
|
|
+ "project": fmt.Sprintf("%d", config.GetCLIConfig().Project),
|
|
|
+ "cluster": fmt.Sprintf("%d", config.GetCLIConfig().Cluster),
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ if eventID := localHub.CaptureException(err); eventID == nil {
|
|
|
+ color.New(color.FgRed).Fprintf(os.Stderr, "error in sending exception to sentry\n")
|
|
|
+ }
|
|
|
+
|
|
|
+ color.New(color.FgRed).Fprintf(os.Stderr, "error: %s\n", err.Error())
|
|
|
+}
|
|
|
+
|
|
|
+func GetErrorHandler() errorHandler {
|
|
|
+ if SentryDSN != "" {
|
|
|
+ return &sentryErrorHandler{}
|
|
|
+ }
|
|
|
+
|
|
|
+ return &standardErrorHandler{}
|
|
|
+}
|