+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
package main
import (
"flag"
"fmt"
- "net/http"
- "time"
"git.curoverse.com/arvados.git/sdk/go/config"
- log "github.com/Sirupsen/logrus"
+ "git.curoverse.com/arvados.git/sdk/go/ctxlog"
)
+var logger = ctxlog.FromContext
+var version = "dev"
+
func main() {
+ log := logger(nil)
+
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()
+ getVersion := flag.Bool("version", false, "Print version information and exit.")
+ cfg := defaultConfig()
flag.Parse()
- err := config.LoadFile(&cfg, *configPath)
- if err != nil {
- log.Fatal(err)
+ // Print version information if requested
+ if *getVersion {
+ fmt.Printf("arvados-ws %s\n", version)
+ return
}
- lvl, err := log.ParseLevel(cfg.LogLevel)
+ err := config.LoadFile(&cfg, *configPath)
if err != nil {
log.Fatal(err)
}
- log.SetLevel(lvl)
- switch cfg.LogFormat {
- case "text":
- log.SetFormatter(&log.TextFormatter{
- FullTimestamp: true,
- TimestampFormat: time.RFC3339Nano,
- })
- case "json":
- log.SetFormatter(&log.JSONFormatter{
- TimestampFormat: time.RFC3339Nano,
- })
- default:
- log.WithField("LogFormat", cfg.LogFormat).Fatal("unknown log format")
- }
+
+ ctxlog.SetLevel(cfg.LogLevel)
+ ctxlog.SetFormat(cfg.LogFormat)
if *dumpConfig {
txt, err := config.Dump(&cfg)
return
}
- 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,
- },
- }
- eventSource.NewSink().Stop()
-
- log.WithField("Listen", srv.Addr).Info("listening")
- log.Fatal(srv.ListenAndServe())
+ log.Printf("arvados-ws %s started", version)
+ srv := &server{wsConfig: &cfg}
+ log.Fatal(srv.Run())
}