Merge branch '16265-security-updates' into dependabot/bundler/services/api/rake-13.0.1
[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.arvados.org/arvados.git/lib/config"
13         "git.arvados.org/arvados.git/sdk/go/arvados"
14         "git.arvados.org/arvados.git/sdk/go/ctxlog"
15         "github.com/ghodss/yaml"
16         "github.com/sirupsen/logrus"
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         cfg, err := loader.Load()
40         if err != nil {
41                 log.Fatal(err)
42         }
43
44         cluster, err := cfg.GetCluster("")
45         if err != nil {
46                 log.Fatal(err)
47         }
48
49         ctxlog.SetLevel(cluster.SystemLogs.LogLevel)
50         ctxlog.SetFormat(cluster.SystemLogs.Format)
51
52         if *dumpConfig {
53                 out, err := yaml.Marshal(cfg)
54                 if err != nil {
55                         log.Fatal(err)
56                 }
57                 _, err = os.Stdout.Write(out)
58                 if err != nil {
59                         log.Fatal(err)
60                 }
61                 return nil
62         }
63         return cluster
64 }
65
66 func main() {
67         log := logger(nil)
68
69         cluster := configure(log, os.Args)
70         if cluster == nil {
71                 return
72         }
73
74         log.Printf("arvados-ws %s started", version)
75         srv := &server{cluster: cluster}
76         log.Fatal(srv.Run())
77 }