Merge pull request #2072 from andyxning/fix_filechecker_in_health
fix filechecker in health with precondition check
This commit is contained in:
		
						commit
						923c7763b0
					
				
					 2 changed files with 19 additions and 3 deletions
				
			
		|  | @ -2,9 +2,11 @@ package checks | |||
| 
 | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"net/http" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strconv" | ||||
| 	"time" | ||||
| 
 | ||||
|  | @ -15,10 +17,19 @@ import ( | |||
| // if the file exists. | ||||
| func FileChecker(f string) health.Checker { | ||||
| 	return health.CheckFunc(func() error { | ||||
| 		if _, err := os.Stat(f); err == nil { | ||||
| 			return errors.New("file exists") | ||||
| 		absoluteFilePath, err := filepath.Abs(f) | ||||
| 		if err != nil { | ||||
| 			return fmt.Errorf("failed to get absolute path for %q: %v", f, err) | ||||
| 		} | ||||
| 		return nil | ||||
| 
 | ||||
| 		_, err = os.Stat(absoluteFilePath) | ||||
| 		if err == nil { | ||||
| 			return errors.New("file exists") | ||||
| 		} else if os.IsNotExist(err) { | ||||
| 			return nil | ||||
| 		} | ||||
| 
 | ||||
| 		return err | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -122,6 +122,11 @@ | |||
| //  # curl localhost:5001/debug/health | ||||
| //  {"fileChecker":"file exists"} | ||||
| // | ||||
| // FileChecker only accepts absolute or relative file path. It does not work properly with tilde(~). | ||||
| // You should make sure that the application has proper permission(read and execute permission | ||||
| // for directory along with the specified file path). Otherwise, the FileChecker will report error | ||||
| // and file health check is not ok. | ||||
| // | ||||
| // You could also test the connectivity to a downstream service by using a | ||||
| // "HTTPChecker", but ensure that you only mark the test unhealthy if there | ||||
| // are a minimum of two failures in a row: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue