/
state_handler.go
48 lines (38 loc) · 1.12 KB
/
state_handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package handlers
import (
"encoding/json"
"net/http"
"time"
"code.cloudfoundry.org/lager/v3"
"code.cloudfoundry.org/locket/metrics/helpers"
"code.cloudfoundry.org/rep"
"code.cloudfoundry.org/rep/auctioncellrep"
)
type state struct {
rep auctioncellrep.AuctionCellClient
metrics helpers.RequestMetrics
}
func newStateHandler(rep auctioncellrep.AuctionCellClient, metrics helpers.RequestMetrics) *state {
return &state{rep: rep, metrics: metrics}
}
func (h *state) ServeHTTP(w http.ResponseWriter, r *http.Request, logger lager.Logger) {
var deferErr error
start := time.Now()
requestType := "State"
startMetrics(h.metrics, requestType)
defer stopMetrics(h.metrics, requestType, start, &deferErr)
logger = logger.Session("auction-fetch-state").WithTraceInfo(r)
var state rep.CellState
var healthy bool
state, healthy, deferErr = h.rep.State(logger)
if deferErr != nil {
w.WriteHeader(http.StatusInternalServerError)
logger.Error("failed-to-fetch-state", deferErr)
return
}
if !healthy {
logger.Info("cell-not-healthy")
w.WriteHeader(http.StatusServiceUnavailable)
}
json.NewEncoder(w).Encode(state)
}