Merge branch '18995-addrislocal'
[arvados.git] / lib / controller / cmd.go
index c13d0fa07a1f2faeb7c0d276904b7345ee5e4ec0..96972251a3d18af5758e37cd7961ed586504a10a 100644 (file)
@@ -5,75 +5,17 @@
 package controller
 
 import (
-       "flag"
-       "fmt"
-       "io"
-       "net/http"
+       "context"
 
-       "git.curoverse.com/arvados.git/lib/cmd"
-       "git.curoverse.com/arvados.git/sdk/go/arvados"
-       "git.curoverse.com/arvados.git/sdk/go/httpserver"
-       "github.com/Sirupsen/logrus"
+       "git.arvados.org/arvados.git/lib/cmd"
+       "git.arvados.org/arvados.git/lib/service"
+       "git.arvados.org/arvados.git/sdk/go/arvados"
+       "github.com/prometheus/client_golang/prometheus"
 )
 
-const rfc3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00"
+// Command starts a controller service. See cmd/arvados-server/cmd.go
+var Command cmd.Handler = service.Command(arvados.ServiceNameController, newHandler)
 
-var Command cmd.Handler = &command{}
-
-type command struct{}
-
-func (*command) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
-       log := logrus.StandardLogger()
-       log.Formatter = &logrus.JSONFormatter{
-               TimestampFormat: rfc3339NanoFixed,
-       }
-       log.Out = stderr
-
-       var err error
-       defer func() {
-               if err != nil {
-                       log.WithError(err).Info("exiting")
-               }
-       }()
-       flags := flag.NewFlagSet("", flag.ContinueOnError)
-       flags.SetOutput(stderr)
-       configFile := flags.String("config", arvados.DefaultConfigFile, "Site configuration `file`")
-       err = flags.Parse(args)
-       if err != nil {
-               return 2
-       }
-       cfg, err := arvados.GetConfig(*configFile)
-       if err != nil {
-               return 1
-       }
-       cluster, err := cfg.GetCluster("")
-       if err != nil {
-               return 1
-       }
-       node, err := cluster.GetThisSystemNode()
-       if err != nil {
-               return 1
-       }
-       if node.Controller.Listen == "" {
-               err = fmt.Errorf("configuration does not run a controller on this host: Clusters[%q].SystemNodes[`hostname` or *].Controller.Listen == \"\"", cluster.ClusterID)
-               return 1
-       }
-       srv := &httpserver.Server{
-               Server: http.Server{
-                       Handler: httpserver.LogRequests(&Handler{
-                               Cluster: cluster,
-                       }),
-               },
-               Addr: node.Controller.Listen,
-       }
-       err = srv.Start()
-       if err != nil {
-               return 1
-       }
-       log.WithField("Listen", srv.Addr).Info("listening")
-       err = srv.Wait()
-       if err != nil {
-               return 1
-       }
-       return 0
+func newHandler(ctx context.Context, cluster *arvados.Cluster, _ string, _ *prometheus.Registry) service.Handler {
+       return &Handler{Cluster: cluster, BackgroundContext: ctx}
 }