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