18348: Add ClusterID field to service log entries.
[arvados.git] / services / keep-web / server.go
index 100900830f5d6808563a928fdd3e501ca660d501..24f1b77be238bd188b482a9beb678e1b7dfc812f 100644 (file)
@@ -1,27 +1,45 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 package main
 
 import (
-       "flag"
+       "context"
+       "net"
        "net/http"
 
-       "git.curoverse.com/arvados.git/sdk/go/httpserver"
+       "git.arvados.org/arvados.git/sdk/go/arvados"
+       "git.arvados.org/arvados.git/sdk/go/httpserver"
+       "github.com/prometheus/client_golang/prometheus"
+       "github.com/sirupsen/logrus"
 )
 
-var address string
-
-func init() {
-       flag.StringVar(&address, "listen", ":80",
-               "Address to listen on: \"host:port\", or \":port\" to listen on all interfaces.")
-}
-
 type server struct {
        httpserver.Server
+       Config *Config
 }
 
-func (srv *server) Start() error {
-       mux := http.NewServeMux()
-       mux.Handle("/", &handler{})
-       srv.Handler = mux
-       srv.Addr = address
+func (srv *server) Start(ctx context.Context, logger *logrus.Logger) error {
+       h := &handler{Config: srv.Config}
+       reg := prometheus.NewRegistry()
+       h.Config.Cache.registry = reg
+       // Warning: when updating this to use Command() from
+       // lib/service, make sure to implement an exemption in
+       // httpserver.HandlerWithDeadline() so large file uploads are
+       // allowed to take longer than the usual API.RequestTimeout.
+       // See #13697.
+       mh := httpserver.Instrument(reg, logger, httpserver.AddRequestIDs(httpserver.LogRequests(h)))
+       h.MetricsAPI = mh.ServeAPI(h.Config.cluster.ManagementToken, http.NotFoundHandler())
+       srv.Handler = mh
+       srv.BaseContext = func(net.Listener) context.Context { return ctx }
+       var listen arvados.URL
+       for listen = range srv.Config.cluster.Services.WebDAV.InternalURLs {
+               break
+       }
+       if len(srv.Config.cluster.Services.WebDAV.InternalURLs) > 1 {
+               logrus.Warn("Services.WebDAV.InternalURLs has more than one key; picked: ", listen)
+       }
+       srv.Addr = listen.Host
        return srv.Server.Start()
 }