16950: switch to os.UserHomeDir(), and send all output to stderr.
[arvados.git] / services / keep-web / main.go
index 289f413f5d13b25ff96e3f16d7d3ca62940220fa..647eab1653294311644bdce91faa367bd0ec1832 100644 (file)
@@ -7,12 +7,14 @@ package main
 import (
        "flag"
        "fmt"
+       "mime"
        "os"
 
-       "git.curoverse.com/arvados.git/lib/config"
-       "git.curoverse.com/arvados.git/sdk/go/arvados"
-       sdkConfig "git.curoverse.com/arvados.git/sdk/go/config"
+       "git.arvados.org/arvados.git/lib/config"
+       "git.arvados.org/arvados.git/sdk/go/arvados"
        "github.com/coreos/go-systemd/daemon"
+       "github.com/ghodss/yaml"
+       "github.com/sirupsen/logrus"
        log "github.com/sirupsen/logrus"
 )
 
@@ -27,8 +29,7 @@ type Config struct {
        cluster *arvados.Cluster
 }
 
-// DefaultConfig returns the default configuration.
-func DefaultConfig(arvCfg *arvados.Config) *Config {
+func newConfig(arvCfg *arvados.Config) *Config {
        cfg := Config{}
        var cls *arvados.Cluster
        var err error
@@ -55,12 +56,8 @@ func init() {
        })
 }
 
-func main() {
-       prog := os.Args[0]
-       args := os.Args[1:]
-       logger := log.New()
-
-       flags := flag.NewFlagSet(prog, flag.ExitOnError)
+func configure(logger log.FieldLogger, args []string) *Config {
+       flags := flag.NewFlagSet(args[0], flag.ExitOnError)
 
        loader := config.NewLoader(os.Stdin, logger)
        loader.SetupFlags(flags)
@@ -70,30 +67,52 @@ func main() {
        getVersion := flags.Bool("version", false,
                "print version information and exit.")
 
-       args = loader.MungeLegacyConfigArgs(logger, args, "-legacy-keepweb-config")
+       args = loader.MungeLegacyConfigArgs(logger, args[1:], "-legacy-keepweb-config")
        flags.Parse(args)
 
        // Print version information if requested
        if *getVersion {
                fmt.Printf("keep-web %s\n", version)
-               return
+               return nil
        }
 
        arvCfg, err := loader.Load()
        if err != nil {
                log.Fatal(err)
        }
-       cfg := DefaultConfig(arvCfg)
+       cfg := newConfig(arvCfg)
 
        if *dumpConfig {
-               log.Fatal(sdkConfig.DumpAndExit(cfg.cluster))
+               out, err := yaml.Marshal(cfg)
+               if err != nil {
+                       log.Fatal(err)
+               }
+               _, err = os.Stdout.Write(out)
+               if err != nil {
+                       log.Fatal(err)
+               }
+               return nil
+       }
+       return cfg
+}
+
+func main() {
+       logger := log.New()
+
+       cfg := configure(logger, os.Args)
+       if cfg == nil {
+               return
        }
 
        log.Printf("keep-web %s started", version)
 
+       if ext := ".txt"; mime.TypeByExtension(ext) == "" {
+               log.Warnf("cannot look up MIME type for %q -- this probably means /etc/mime.types is missing -- clients will see incorrect content types", ext)
+       }
+
        os.Setenv("ARVADOS_API_HOST", cfg.cluster.Services.Controller.ExternalURL.Host)
        srv := &server{Config: cfg}
-       if err := srv.Start(); err != nil {
+       if err := srv.Start(logrus.StandardLogger()); err != nil {
                log.Fatal(err)
        }
        if _, err := daemon.SdNotify(false, "READY=1"); err != nil {