diff --git a/gateway/server.go b/gateway/server.go index cb25d690..e21c33bb 100644 --- a/gateway/server.go +++ b/gateway/server.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "context" "log" "net/http" @@ -9,15 +10,38 @@ import ( "strconv" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/client" "github.com/gorilla/mux" ) +func lookupSwarmService(serviceName string) (bool, error) { + var c *client.Client + var err error + c, err = client.NewEnvClient() + if err != nil { + log.Fatal("Error with Docker client.") + } + serviceFilter := filters.NewArgs() + serviceFilter.Add("name", serviceName) + services, err := c.ServiceList(context.Background(), types.ServiceListOptions{Filters: serviceFilter}) + + return len(services) > 0, err +} + func proxy(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { log.Println(r.Header) header := r.Header["X-Function"] log.Println(header) - if header[0] == "catservice" { + + exists, err := lookupSwarmService(header[0]) + if err != nil { + log.Fatalln(err) + } + + if exists == true { // client := http.Client{Timeout: time.Second * 2} requestBody, _ := ioutil.ReadAll(r.Body) buf := bytes.NewBuffer(requestBody) @@ -28,7 +52,6 @@ func proxy(w http.ResponseWriter, r *http.Request) { } responseBody, _ := ioutil.ReadAll(response.Body) w.Write(responseBody) - } } }