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  }