Merge branch '15467-config-fixups'
[arvados.git] / services / ws / main.go
index 9a24b312b05344c07a4331b7652199a379f82869..de8e6328dbaadb0ba5568a229f6e62193ecd28cb 100644 (file)
@@ -1,46 +1,77 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 package main
 
 import (
        "flag"
        "fmt"
-       "log"
-       "net/http"
-       "time"
+       "os"
 
-       "git.curoverse.com/arvados.git/sdk/go/config"
+       "git.curoverse.com/arvados.git/lib/config"
+       "git.curoverse.com/arvados.git/sdk/go/arvados"
+       "git.curoverse.com/arvados.git/sdk/go/ctxlog"
+       "github.com/ghodss/yaml"
+       "github.com/sirupsen/logrus"
 )
 
-func main() {
-       configPath := flag.String("config", "/etc/arvados/ws/ws.yml", "`path` to config file")
-       dumpConfig := flag.Bool("dump-config", false, "show current configuration and exit")
-       cfg := DefaultConfig()
-       flag.Parse()
+var logger = ctxlog.FromContext
+var version = "dev"
+
+func configure(log logrus.FieldLogger, args []string) *arvados.Cluster {
+       flags := flag.NewFlagSet(args[0], flag.ExitOnError)
+       dumpConfig := flags.Bool("dump-config", false, "show current configuration and exit")
+       getVersion := flags.Bool("version", false, "Print version information and exit.")
+
+       loader := config.NewLoader(nil, log)
+       loader.SetupFlags(flags)
+       args = loader.MungeLegacyConfigArgs(log, args[1:], "-legacy-ws-config")
+
+       flags.Parse(args)
+
+       // Print version information if requested
+       if *getVersion {
+               fmt.Printf("arvados-ws %s\n", version)
+               return nil
+       }
+
+       cfg, err := loader.Load()
+       if err != nil {
+               log.Fatal(err)
+       }
 
-       err := config.LoadFile(&cfg, *configPath)
+       cluster, err := cfg.GetCluster("")
        if err != nil {
                log.Fatal(err)
        }
 
+       ctxlog.SetLevel(cluster.SystemLogs.LogLevel)
+       ctxlog.SetFormat(cluster.SystemLogs.Format)
+
        if *dumpConfig {
-               txt, err := config.Dump(&cfg)
+               out, err := yaml.Marshal(cfg)
                if err != nil {
                        log.Fatal(err)
                }
-               fmt.Print(string(txt))
-               return
+               _, err = os.Stdout.Write(out)
+               if err != nil {
+                       log.Fatal(err)
+               }
+               return nil
        }
+       return cluster
+}
+
+func main() {
+       log := logger(nil)
 
-       srv := &http.Server{
-               Addr:           cfg.Listen,
-               ReadTimeout:    time.Minute,
-               WriteTimeout:   time.Minute,
-               MaxHeaderBytes: 1 << 20,
-               Handler: &router{
-                       EventSource: (&pgEventSource{
-                               PgConfig:  cfg.Postgres,
-                               QueueSize: cfg.ServerEventQueue,
-                       }).EventSource(),
-               },
+       cluster := configure(log, os.Args)
+       if cluster == nil {
+               return
        }
-       log.Fatal(srv.ListenAndServe())
+
+       log.Printf("arvados-ws %s started", version)
+       srv := &server{cluster: cluster}
+       log.Fatal(srv.Run())
 }