shad-go/distbuild/pkg/api/heartbeat_handler.go

61 lines
1.2 KiB
Go
Raw Normal View History

2020-04-04 16:19:01 +00:00
package api
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"go.uber.org/zap"
)
type HeartbeatHandler struct {
l *zap.Logger
s HeartbeatService
}
func NewHeartbeatHandler(l *zap.Logger, s HeartbeatService) *HeartbeatHandler {
return &HeartbeatHandler{l: l, s: s}
}
func (h *HeartbeatHandler) Register(mux *http.ServeMux) {
mux.HandleFunc("/heartbeat", h.heartbeat)
}
func (h *HeartbeatHandler) doHeartbeat(w http.ResponseWriter, r *http.Request) error {
reqJSON, err := ioutil.ReadAll(r.Body)
if err != nil {
return err
}
var req HeartbeatRequest
2020-04-04 21:55:07 +00:00
if err = json.Unmarshal(reqJSON, &req); err != nil {
2020-04-04 16:19:01 +00:00
return err
}
h.l.Debug("heartbeat started", zap.Any("req", req))
rsp, err := h.s.Heartbeat(r.Context(), &req)
if err != nil {
return err
}
h.l.Debug("heartbeat finished", zap.Any("rsp", rsp))
rspJSON, err := json.Marshal(rsp)
if err != nil {
return err
}
w.WriteHeader(http.StatusOK)
_, _ = w.Write(rspJSON)
return nil
}
func (h *HeartbeatHandler) heartbeat(w http.ResponseWriter, r *http.Request) {
if err := h.doHeartbeat(w, r); err != nil {
h.l.Warn("heartbeat error", zap.Error(err))
w.WriteHeader(http.StatusBadRequest)
_, _ = fmt.Fprintf(w, "%v", err)
}
}