Add funcs for events endpoint

Signed-off-by: Michael Crosby <crosbymichael@gmail.com>
This commit is contained in:
Michael Crosby 2015-11-30 15:46:36 -08:00
parent 3a30ea0c4f
commit 510c9c852b
3 changed files with 43 additions and 2 deletions

View file

@ -27,6 +27,7 @@ func NewServer(supervisor *containerd.Supervisor) http.Handler {
r.HandleFunc("/containers/{id:.*}", s.createContainer).Methods("POST")
r.HandleFunc("/containers/{id:.*}", s.updateContainer).Methods("PATCH")
r.HandleFunc("/event", s.event).Methods("POST")
r.HandleFunc("/events", s.events).Methods("GET")
r.HandleFunc("/containers", s.containers).Methods("GET")
return s
}
@ -60,6 +61,34 @@ func (s *server) updateContainer(w http.ResponseWriter, r *http.Request) {
}
}
func (s *server) events(w http.ResponseWriter, r *http.Request) {
events, err := s.supervisor.Events()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
enc := json.NewEncoder(w)
for evt := range events {
var v interface{}
switch evt.Type {
case containerd.ExitEventType:
v = createExitEvent(evt)
}
if err := enc.Encode(v); err != nil {
// TODO: handled closed conn
logrus.WithField("error", err).Error("encode event")
}
}
}
func createExitEvent(e *containerd.Event) *Event {
return &Event{
Type: "exit",
ID: e.ID,
Status: e.Status,
}
}
func (s *server) event(w http.ResponseWriter, r *http.Request) {
var e containerd.Event
if err := json.NewDecoder(r.Body).Decode(&e); err != nil {