38 lines
		
	
	
		
			934 B
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			934 B
		
	
	
	
		
			Go
		
	
	
package checks
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
	"net/http"
 | 
						|
	"os"
 | 
						|
	"strconv"
 | 
						|
 | 
						|
	"github.com/docker/distribution/health"
 | 
						|
)
 | 
						|
 | 
						|
// FileChecker checks the existence of a file and returns and error
 | 
						|
// if the file exists, taking the application out of rotation
 | 
						|
func FileChecker(f string) health.Checker {
 | 
						|
	return health.CheckFunc(func() error {
 | 
						|
		if _, err := os.Stat(f); err == nil {
 | 
						|
			return errors.New("file exists")
 | 
						|
		}
 | 
						|
		return nil
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
// HTTPChecker does a HEAD request and verifies if the HTTP status
 | 
						|
// code return is a 200, taking the application out of rotation if
 | 
						|
// otherwise
 | 
						|
func HTTPChecker(r string) health.Checker {
 | 
						|
	return health.CheckFunc(func() error {
 | 
						|
		response, err := http.Head(r)
 | 
						|
		if err != nil {
 | 
						|
			return errors.New("error while checking: " + r)
 | 
						|
		}
 | 
						|
		if response.StatusCode != http.StatusOK {
 | 
						|
			return errors.New("downstream service returned unexpected status: " + strconv.Itoa(response.StatusCode))
 | 
						|
		}
 | 
						|
		return nil
 | 
						|
	})
 | 
						|
}
 |