Merge pull request #2 from Juliens/master

Add health with update on POST
This commit is contained in:
Emile Vauge
2017-02-07 11:35:31 +01:00
committed by GitHub

30
app.go
View File

@ -4,6 +4,8 @@ import (
"encoding/json" "encoding/json"
"flag" "flag"
"fmt" "fmt"
"sync"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
// "github.com/pkg/profile" // "github.com/pkg/profile"
"log" "log"
@ -32,6 +34,7 @@ func main() {
http.HandleFunc("/bench", benchHandler) http.HandleFunc("/bench", benchHandler)
http.HandleFunc("/", whoamI) http.HandleFunc("/", whoamI)
http.HandleFunc("/api", api) http.HandleFunc("/api", api)
http.HandleFunc("/health", healthHandler)
fmt.Println("Starting up on port " + port) fmt.Println("Starting up on port " + port)
log.Fatal(http.ListenAndServe(":"+port, nil)) log.Fatal(http.ListenAndServe(":"+port, nil))
} }
@ -127,3 +130,30 @@ func api(w http.ResponseWriter, req *http.Request) {
} }
json.NewEncoder(w).Encode(data) json.NewEncoder(w).Encode(data)
} }
type healthState struct {
StatusCode int
}
var currentHealthState = healthState{200}
var mutexHealthState = &sync.RWMutex{}
func healthHandler(w http.ResponseWriter, req *http.Request) {
if req.Method == http.MethodPost {
var statusCode int
err := json.NewDecoder(req.Body).Decode(&statusCode)
if err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
} else {
fmt.Printf("Update health check status code [%d]\n", statusCode)
mutexHealthState.Lock()
defer mutexHealthState.Unlock()
currentHealthState.StatusCode = statusCode
}
} else {
mutexHealthState.RLock()
defer mutexHealthState.RUnlock()
w.WriteHeader(currentHealthState.StatusCode)
}
}