14717: Fix fallback behavior for component config vs main config
[arvados.git] / services / ws / main.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package main
6
7 import (
8         "flag"
9         "fmt"
10         "os"
11
12         "git.curoverse.com/arvados.git/lib/config"
13         "git.curoverse.com/arvados.git/sdk/go/arvados"
14         "git.curoverse.com/arvados.git/sdk/go/ctxlog"
15         "github.com/sirupsen/logrus"
16         "gopkg.in/yaml.v2"
17 )
18
19 var logger = ctxlog.FromContext
20 var version = "dev"
21
22 func configure(log logrus.FieldLogger, args []string) *arvados.Cluster {
23         flags := flag.NewFlagSet(args[0], flag.ExitOnError)
24         dumpConfig := flags.Bool("dump-config", false, "show current configuration and exit")
25         getVersion := flags.Bool("version", false, "Print version information and exit.")
26
27         loader := config.NewLoader(nil, log)
28         loader.SetupFlags(flags)
29         args = loader.MungeLegacyConfigArgs(log, args[1:], "-legacy-ws-config")
30
31         flags.Parse(args)
32
33         // Print version information if requested
34         if *getVersion {
35                 fmt.Printf("arvados-ws %s\n", version)
36                 return nil
37         }
38
39         loader.LegacyComponentConfig = loader.WebsocketPath
40         cfg, err := loader.Load()
41         if err != nil {
42                 log.Fatal(err)
43         }
44
45         cluster, err := cfg.GetCluster("")
46         if err != nil {
47                 log.Fatal(err)
48         }
49
50         ctxlog.SetLevel(cluster.SystemLogs.LogLevel)
51         ctxlog.SetFormat(cluster.SystemLogs.Format)
52
53         if *dumpConfig {
54                 out, err := yaml.Marshal(cfg)
55                 if err != nil {
56                         log.Fatal(err)
57                 }
58                 _, err = os.Stdout.Write(out)
59                 if err != nil {
60                         log.Fatal(err)
61                 }
62                 return nil
63         }
64         return cluster
65 }
66
67 func main() {
68         log := logger(nil)
69
70         cluster := configure(log, os.Args)
71         if cluster == nil {
72                 return
73         }
74
75         log.Printf("arvados-ws %s started", version)
76         srv := &server{cluster: cluster}
77         log.Fatal(srv.Run())
78 }