TUN-3524: Don't ignore errors from app-level action handler (#248)
This commit is contained in:
parent
64d3836645
commit
8c6181db9f
|
@ -27,17 +27,17 @@ func UsageError(format string, args ...interface{}) error {
|
||||||
// Ensures exit with error code if actionFunc returns an error
|
// Ensures exit with error code if actionFunc returns an error
|
||||||
func ErrorHandler(actionFunc cli.ActionFunc) cli.ActionFunc {
|
func ErrorHandler(actionFunc cli.ActionFunc) cli.ActionFunc {
|
||||||
return func(ctx *cli.Context) error {
|
return func(ctx *cli.Context) error {
|
||||||
|
defer logger.SharedWriteManager.Shutdown()
|
||||||
|
|
||||||
err := actionFunc(ctx)
|
err := actionFunc(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(usageError); ok {
|
if _, ok := err.(usageError); ok {
|
||||||
msg := fmt.Sprintf("%s\nSee 'cloudflared %s --help'.", err.Error(), ctx.Command.FullName())
|
msg := fmt.Sprintf("%s\nSee 'cloudflared %s --help'.", err.Error(), ctx.Command.FullName())
|
||||||
return cli.Exit(msg, -1)
|
err = cli.Exit(msg, -1)
|
||||||
}
|
} else if _, ok := err.(cli.ExitCoder); !ok {
|
||||||
// os.Exits with error code if err is cli.ExitCoder or cli.MultiError
|
|
||||||
cli.HandleExitCoder(err)
|
|
||||||
err = cli.Exit(err.Error(), 1)
|
err = cli.Exit(err.Error(), 1)
|
||||||
}
|
}
|
||||||
logger.SharedWriteManager.Shutdown()
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,7 +145,7 @@ func isEmptyInvocation(c *cli.Context) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func action(version string, shutdownC, graceShutdownC chan struct{}) cli.ActionFunc {
|
func action(version string, shutdownC, graceShutdownC chan struct{}) cli.ActionFunc {
|
||||||
return func(c *cli.Context) (err error) {
|
return cliutil.ErrorHandler(func(c *cli.Context) (err error) {
|
||||||
if isEmptyInvocation(c) {
|
if isEmptyInvocation(c) {
|
||||||
return handleServiceMode(shutdownC)
|
return handleServiceMode(shutdownC)
|
||||||
}
|
}
|
||||||
|
@ -153,15 +153,11 @@ func action(version string, shutdownC, graceShutdownC chan struct{}) cli.ActionF
|
||||||
tags["hostname"] = c.String("hostname")
|
tags["hostname"] = c.String("hostname")
|
||||||
raven.SetTagsContext(tags)
|
raven.SetTagsContext(tags)
|
||||||
raven.CapturePanic(func() { err = tunnel.TunnelCommand(c) }, nil)
|
raven.CapturePanic(func() { err = tunnel.TunnelCommand(c) }, nil)
|
||||||
exitCode := 0
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handleError(err)
|
captureError(err)
|
||||||
exitCode = 1
|
|
||||||
}
|
|
||||||
// we already handle error printing, so we pass an empty string so we
|
|
||||||
// don't have to print again.
|
|
||||||
return cli.Exit("", exitCode)
|
|
||||||
}
|
}
|
||||||
|
return err
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func userHomeDir() (string, error) {
|
func userHomeDir() (string, error) {
|
||||||
|
@ -177,7 +173,7 @@ func userHomeDir() (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// In order to keep the amount of noise sent to Sentry low, typical network errors can be filtered out here by a substring match.
|
// In order to keep the amount of noise sent to Sentry low, typical network errors can be filtered out here by a substring match.
|
||||||
func handleError(err error) {
|
func captureError(err error) {
|
||||||
errorMessage := err.Error()
|
errorMessage := err.Error()
|
||||||
for _, ignoredErrorMessage := range ignoredErrors {
|
for _, ignoredErrorMessage := range ignoredErrors {
|
||||||
if strings.Contains(errorMessage, ignoredErrorMessage) {
|
if strings.Contains(errorMessage, ignoredErrorMessage) {
|
||||||
|
|
Loading…
Reference in New Issue