diff --git a/gateway/metrics/swarmwatcher.go b/gateway/metrics/swarmwatcher.go index 7f25bc88..0b528040 100644 --- a/gateway/metrics/swarmwatcher.go +++ b/gateway/metrics/swarmwatcher.go @@ -15,7 +15,7 @@ import ( // AttachSwarmWatcher adds a go-route to monitor the amount of service replicas in the swarm // matching a 'function' label. -func AttachSwarmWatcher(dockerClient *client.Client, metricsOptions MetricOptions) { +func AttachSwarmWatcher(dockerClient *client.Client, metricsOptions MetricOptions, label string) { ticker := time.NewTicker(1 * time.Second) quit := make(chan struct{}) @@ -35,7 +35,7 @@ func AttachSwarmWatcher(dockerClient *client.Client, metricsOptions MetricOption } for _, service := range services { - if len(service.Spec.TaskTemplate.ContainerSpec.Labels["function"]) > 0 { + if len(service.Spec.TaskTemplate.ContainerSpec.Labels[label]) > 0 { metricsOptions.ServiceReplicasCounter. WithLabelValues(service.Spec.Name). Set(float64(*service.Spec.Mode.Replicated.Replicas)) diff --git a/gateway/server.go b/gateway/server.go index 53053b1e..b011e1cc 100644 --- a/gateway/server.go +++ b/gateway/server.go @@ -11,6 +11,8 @@ import ( "github.com/alexellis/faas/gateway/metrics" "github.com/docker/docker/client" + "fmt" + "github.com/gorilla/mux" ) @@ -52,15 +54,22 @@ func main() { metricsHandler := metrics.PrometheusHandler() r.Handle("/metrics", metricsHandler) - metrics.AttachSwarmWatcher(dockerClient, metricsOptions) + + // This could exist in a separate process - records the replicas of each swarm service. + functionLabel := "function" + metrics.AttachSwarmWatcher(dockerClient, metricsOptions, functionLabel) r.Handle("/", http.RedirectHandler("/ui/", http.StatusMovedPermanently)).Methods("GET") + readTimeout := 8 * time.Second + writeTimeout := 8 * time.Second + tcpPort := 8080 + s := &http.Server{ - Addr: ":8080", - ReadTimeout: 8 * time.Second, - WriteTimeout: 8 * time.Second, - MaxHeaderBytes: 1 << 20, + Addr: fmt.Sprintf(":%d", tcpPort), + ReadTimeout: readTimeout, + WriteTimeout: writeTimeout, + MaxHeaderBytes: http.DefaultMaxHeaderBytes, // 1MB - can be overridden by setting Server.MaxHeaderBytes. Handler: r, }