8460: Merge branch 'master' into 8460-websocket-go
[arvados.git] / services / ws / main.go
index 33728dcae0510f889dc661847799edcd99f62847..77ebf9ee4a8aed2e6b85454f0a3a77570df11bab 100644 (file)
@@ -7,7 +7,7 @@ import (
        "time"
 
        "git.curoverse.com/arvados.git/sdk/go/config"
-       "github.com/Sirupsen/logrus"
+       "github.com/coreos/go-systemd/daemon"
 )
 
 func main() {
@@ -15,7 +15,7 @@ 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()
+       cfg := defaultConfig()
        flag.Parse()
 
        err := config.LoadFile(&cfg, *configPath)
@@ -23,24 +23,7 @@ func main() {
                log.Fatal(err)
        }
 
-       lvl, err := logrus.ParseLevel(cfg.LogLevel)
-       if err != nil {
-               log.Fatal(err)
-       }
-       rootLogger.Level = lvl
-       switch cfg.LogFormat {
-       case "text":
-               rootLogger.Formatter = &logrus.TextFormatter{
-                       FullTimestamp:   true,
-                       TimestampFormat: time.RFC3339Nano,
-               }
-       case "json":
-               rootLogger.Formatter = &logrus.JSONFormatter{
-                       TimestampFormat: time.RFC3339Nano,
-               }
-       default:
-               log.WithField("LogFormat", cfg.LogFormat).Fatal("unknown log format")
-       }
+       loggerConfig(cfg)
 
        if *dumpConfig {
                txt, err := config.Dump(&cfg)
@@ -51,6 +34,7 @@ func main() {
                return
        }
 
+       log.Info("started")
        eventSource := &pgEventSource{
                DataSource: cfg.Postgres.ConnectionString(),
                QueueSize:  cfg.ServerEventQueue,
@@ -63,11 +47,17 @@ func main() {
                Handler: &router{
                        Config:         &cfg,
                        eventSource:    eventSource,
-                       newPermChecker: func() permChecker { return NewPermChecker(cfg.Client) },
+                       newPermChecker: func() permChecker { return newPermChecker(cfg.Client) },
                },
        }
+       // Bootstrap the eventSource by attaching a dummy subscriber
+       // and hanging up.
        eventSource.NewSink().Stop()
 
+       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())
 }