From fa3b56ecfe1df59d8cf535b6429f8bd22ac167e2 Mon Sep 17 00:00:00 2001 From: Marcos Lilljedahl Date: Mon, 31 Jul 2017 12:00:49 -0300 Subject: [PATCH] Check docker daemon is alive in ping endpoint --- handlers/ping.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/handlers/ping.go b/handlers/ping.go index ccf5cec..5e621f9 100644 --- a/handlers/ping.go +++ b/handlers/ping.go @@ -1,9 +1,12 @@ package handlers import ( + "context" "log" "net/http" + "time" + "github.com/docker/docker/client" "github.com/play-with-docker/play-with-docker/config" "github.com/shirou/gopsutil/load" ) @@ -11,6 +14,21 @@ import ( func Ping(rw http.ResponseWriter, req *http.Request) { // Get system load average of the last 5 minutes and compare it against a threashold. + c, err := client.NewEnvClient() + + if err != nil { + rw.WriteHeader(http.StatusInternalServerError) + return + } + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Microsecond) + defer cancel() + + if _, err := c.Info(ctx); err != nil && err == context.DeadlineExceeded { + log.Printf("Docker info took to long to respond\n") + rw.WriteHeader(http.StatusGatewayTimeout) + } + a, err := load.Avg() if err != nil { log.Println("Cannot get system load average!", err)