X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/865e5c1e3730117870eb1e485d553383626b882f..9acc8cb9cd9ca4429712b0d31b647e9a6ecf2d96:/services/keep-web/main.go diff --git a/services/keep-web/main.go b/services/keep-web/main.go index 647eab1653..7a23cd1fad 100644 --- a/services/keep-web/main.go +++ b/services/keep-web/main.go @@ -2,124 +2,48 @@ // // SPDX-License-Identifier: AGPL-3.0 -package main +package keepweb import ( - "flag" - "fmt" + "context" "mime" "os" - "git.arvados.org/arvados.git/lib/config" + "git.arvados.org/arvados.git/lib/service" "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" + "git.arvados.org/arvados.git/sdk/go/ctxlog" + "git.arvados.org/arvados.git/sdk/go/keepclient" + "github.com/prometheus/client_golang/prometheus" ) var ( version = "dev" ) -// Config specifies server configuration. -type Config struct { - Client arvados.Client - Cache cache - cluster *arvados.Cluster -} - -func newConfig(arvCfg *arvados.Config) *Config { - cfg := Config{} - var cls *arvados.Cluster - var err error - if cls, err = arvCfg.GetCluster(""); err != nil { - log.Fatal(err) - } - cfg.cluster = cls - cfg.Cache.config = &cfg.cluster.Collections.WebDAVCache - return &cfg -} +var Command = service.Command(arvados.ServiceNameKeepweb, newHandlerOrErrorHandler) -func init() { - // MakeArvadosClient returns an error if this env var isn't - // available as a default token (even if we explicitly set a - // different token before doing anything with the client). We - // set this dummy value during init so it doesn't clobber the - // one used by "run test servers". - if os.Getenv("ARVADOS_API_TOKEN") == "" { - os.Setenv("ARVADOS_API_TOKEN", "xxx") - } - - log.SetFormatter(&log.JSONFormatter{ - TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00", - }) -} - -func configure(logger log.FieldLogger, args []string) *Config { - flags := flag.NewFlagSet(args[0], flag.ExitOnError) - - loader := config.NewLoader(os.Stdin, logger) - loader.SetupFlags(flags) - - dumpConfig := flags.Bool("dump-config", false, - "write current configuration to stdout and exit") - getVersion := flags.Bool("version", false, - "print version information and exit.") - - 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 nil - } - - arvCfg, err := loader.Load() +func newHandlerOrErrorHandler(ctx context.Context, cluster *arvados.Cluster, token string, reg *prometheus.Registry) service.Handler { + h, err := newHandler(ctx, cluster, token, reg) if err != nil { - log.Fatal(err) - } - cfg := newConfig(arvCfg) - - if *dumpConfig { - 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 service.ErrorHandler(ctx, cluster, err) } - return cfg + return h } -func main() { - logger := log.New() - - cfg := configure(logger, os.Args) - if cfg == nil { - return - } - - log.Printf("keep-web %s started", version) - +func newHandler(ctx context.Context, cluster *arvados.Cluster, token string, reg *prometheus.Registry) (*handler, error) { + logger := ctxlog.FromContext(ctx) 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(logrus.StandardLogger()); err != nil { - log.Fatal(err) - } - if _, err := daemon.SdNotify(false, "READY=1"); err != nil { - log.Printf("Error notifying init daemon: %v", err) - } - log.Println("Listening at", srv.Addr) - if err := srv.Wait(); err != nil { - log.Fatal(err) - } + logger.Warnf("cannot look up MIME type for %q -- this probably means /etc/mime.types is missing -- clients will see incorrect content types", ext) + } + + keepclient.RefreshServiceDiscoveryOnSIGHUP() + os.Setenv("ARVADOS_API_HOST", cluster.Services.Controller.ExternalURL.Host) + return &handler{ + Cluster: cluster, + Cache: cache{ + cluster: cluster, + logger: logger, + registry: reg, + }, + }, nil }