Merge branch '10846-nodemanager-errors' closes #10846
[arvados.git] / services / ws / main.go
index ce56d0d5fddc32973da04de855f74102bf66212a..9eee8130af9d9b4b8fe831aa48865f5abd64808f 100644 (file)
@@ -2,32 +2,68 @@ package main
 
 import (
        "flag"
-       "log"
+       "fmt"
        "net/http"
        "time"
 
        "git.curoverse.com/arvados.git/sdk/go/config"
+       "git.curoverse.com/arvados.git/sdk/go/ctxlog"
+       "github.com/coreos/go-systemd/daemon"
 )
 
+var logger = ctxlog.FromContext
+
 func main() {
+       log := logger(nil)
+
        configPath := flag.String("config", "/etc/arvados/ws/ws.yml", "`path` to config file")
-       cfg := DefaultConfig()
+       dumpConfig := flag.Bool("dump-config", false, "show current configuration and exit")
+       cfg := defaultConfig()
+       flag.Parse()
+
        err := config.LoadFile(&cfg, *configPath)
        if err != nil {
                log.Fatal(err)
        }
 
+       ctxlog.SetLevel(cfg.LogLevel)
+       ctxlog.SetFormat(cfg.LogFormat)
+
+       if *dumpConfig {
+               txt, err := config.Dump(&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{
-                       EventSource: (&pgEventSource{
-                               PgConfig:  cfg.Postgres,
-                               QueueSize: cfg.ServerEventQueue,
-                       }).EventSource(),
+                       Config:         &cfg,
+                       eventSource:    eventSource,
+                       newPermChecker: func() permChecker { return newPermChecker(cfg.Client) },
                },
        }
+
+       go func() {
+               eventSource.Run()
+               log.Fatal("event source stopped")
+       }()
+
+       if _, err := daemon.SdNotify(false, "READY=1"); err != nil {
+               log.WithError(err).Warn("error notifying init daemon")
+       }
+
+       log.WithField("Listen", srv.Addr).Info("listening")
        log.Fatal(srv.ListenAndServe())
 }