X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/31d76600cdb691251d0823cc6be601d958b4e1a4..0e2a467a923bd490f3e1dc4d8c00a9e2f29e59d4:/services/ws/main.go diff --git a/services/ws/main.go b/services/ws/main.go index 9eee8130af..de8e6328db 100644 --- a/services/ws/main.go +++ b/services/ws/main.go @@ -1,69 +1,77 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + package main import ( "flag" "fmt" - "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/coreos/go-systemd/daemon" + "github.com/ghodss/yaml" + "github.com/sirupsen/logrus" ) var logger = ctxlog.FromContext +var version = "dev" -func main() { - log := logger(nil) +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.") - 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() + 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 + } - err := config.LoadFile(&cfg, *configPath) + cfg, err := loader.Load() if err != nil { log.Fatal(err) } - ctxlog.SetLevel(cfg.LogLevel) - ctxlog.SetFormat(cfg.LogFormat) + 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 - } - - log.Info("started") - eventSource := &pgEventSource{ - DataSource: cfg.Postgres.ConnectionString(), - QueueSize: cfg.ServerEventQueue, - } - srv := &http.Server{ - Addr: cfg.Listen, - ReadTimeout: time.Minute, - WriteTimeout: time.Minute, - MaxHeaderBytes: 1 << 20, - Handler: &router{ - Config: &cfg, - eventSource: eventSource, - newPermChecker: func() permChecker { return newPermChecker(cfg.Client) }, - }, + _, err = os.Stdout.Write(out) + if err != nil { + log.Fatal(err) + } + return nil } + return cluster +} - go func() { - eventSource.Run() - log.Fatal("event source stopped") - }() +func main() { + log := logger(nil) - if _, err := daemon.SdNotify(false, "READY=1"); err != nil { - log.WithError(err).Warn("error notifying init daemon") + cluster := configure(log, os.Args) + if cluster == nil { + return } - log.WithField("Listen", srv.Addr).Info("listening") - log.Fatal(srv.ListenAndServe()) + log.Printf("arvados-ws %s started", version) + srv := &server{cluster: cluster} + log.Fatal(srv.Run()) }