github.com/googlecloudplatform/kubernetes-workshops@v0.0.0-20180501174420-d8199445b2c3/bundles/kubernetes-101/workshop/app/health/health.go (about) 1 package health 2 3 import ( 4 "net/http" 5 "sync" 6 ) 7 8 var ( 9 healthzStatus = http.StatusOK 10 readinessStatus = http.StatusOK 11 mu sync.RWMutex 12 ) 13 14 func HealthzStatus() int { 15 mu.RLock() 16 defer mu.RUnlock() 17 return healthzStatus 18 } 19 20 func ReadinessStatus() int { 21 mu.RLock() 22 defer mu.RUnlock() 23 return readinessStatus 24 } 25 26 func SetHealthzStatus(status int) { 27 mu.Lock() 28 healthzStatus = status 29 mu.Unlock() 30 } 31 32 func SetReadinessStatus(status int) { 33 mu.Lock() 34 readinessStatus = status 35 mu.Unlock() 36 } 37 38 // HealthzHandler responds to health check requests. 39 func HealthzHandler(w http.ResponseWriter, r *http.Request) { 40 w.WriteHeader(HealthzStatus()) 41 } 42 43 // ReadinessHandler responds to readiness check requests. 44 func ReadinessHandler(w http.ResponseWriter, r *http.Request) { 45 w.WriteHeader(ReadinessStatus()) 46 } 47 48 func ReadinessStatusHandler(w http.ResponseWriter, r *http.Request) { 49 switch ReadinessStatus() { 50 case http.StatusOK: 51 SetReadinessStatus(http.StatusServiceUnavailable) 52 case http.StatusServiceUnavailable: 53 SetReadinessStatus(http.StatusOK) 54 } 55 w.WriteHeader(http.StatusOK) 56 } 57 58 func HealthzStatusHandler(w http.ResponseWriter, r *http.Request) { 59 switch HealthzStatus() { 60 case http.StatusOK: 61 SetHealthzStatus(http.StatusServiceUnavailable) 62 case http.StatusServiceUnavailable: 63 SetHealthzStatus(http.StatusOK) 64 } 65 w.WriteHeader(http.StatusOK) 66 }