fix filechecker in health with precondition check
Signed-off-by: andy xie <andy.xning@gmail.com>master
							parent
							
								
									7694c31658
								
							
						
					
					
						commit
						658cda621f
					
				|  | @ -2,9 +2,11 @@ package checks | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"errors" | 	"errors" | ||||||
|  | 	"fmt" | ||||||
| 	"net" | 	"net" | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"os" | 	"os" | ||||||
|  | 	"path/filepath" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
|  | @ -15,10 +17,19 @@ import ( | ||||||
| // if the file exists.
 | // if the file exists.
 | ||||||
| func FileChecker(f string) health.Checker { | func FileChecker(f string) health.Checker { | ||||||
| 	return health.CheckFunc(func() error { | 	return health.CheckFunc(func() error { | ||||||
| 		if _, err := os.Stat(f); err == nil { | 		absoluteFilePath, err := filepath.Abs(f) | ||||||
| 			return errors.New("file exists") | 		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
 | //  # curl localhost:5001/debug/health
 | ||||||
| //  {"fileChecker":"file exists"}
 | //  {"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
 | // 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
 | // "HTTPChecker", but ensure that you only mark the test unhealthy if there
 | ||||||
| // are a minimum of two failures in a row:
 | // are a minimum of two failures in a row:
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue