Extract magic variables for server

This commit is contained in:
Alex Ellis 2017-05-03 21:57:48 +01:00
parent 0b2d3ea6c0
commit 968002c15f
2 changed files with 16 additions and 7 deletions

View File

@ -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))

View File

@ -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,
}