X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/ae92d144610446849eb568247a44f02ae985c281..9acc8cb9cd9ca4429712b0d31b647e9a6ecf2d96:/services/keep-web/main.go?ds=sidebyside diff --git a/services/keep-web/main.go b/services/keep-web/main.go index 208b23b93b..7a23cd1fad 100644 --- a/services/keep-web/main.go +++ b/services/keep-web/main.go @@ -2,129 +2,48 @@ // // SPDX-License-Identifier: AGPL-3.0 -package main +package keepweb import ( "context" - "flag" - "fmt" "mime" "os" - "git.arvados.org/arvados.git/lib/cmd" - "git.arvados.org/arvados.git/lib/config" + "git.arvados.org/arvados.git/lib/service" "git.arvados.org/arvados.git/sdk/go/arvados" "git.arvados.org/arvados.git/sdk/go/ctxlog" - "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/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(logger logrus.FieldLogger, 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 - cfg.Cache.cluster = cls - cfg.Cache.logger = logger - return &cfg -} - -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") - } +var Command = service.Command(arvados.ServiceNameKeepweb, newHandlerOrErrorHandler) - log.SetFormatter(&log.JSONFormatter{ - TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00", - }) -} - -func configure(logger log.FieldLogger, args []string) (*Config, error) { - flags := flag.NewFlagSet(args[0], flag.ContinueOnError) - - 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.") - - prog := args[0] - args = loader.MungeLegacyConfigArgs(logger, args[1:], "-legacy-keepweb-config") - if ok, code := cmd.ParseFlags(flags, prog, args, "", os.Stderr); !ok { - os.Exit(code) - } else if *getVersion { - fmt.Printf("%s %s\n", args[0], version) - return nil, 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 { - return nil, err - } - cfg := newConfig(logger, arvCfg) - - if *dumpConfig { - out, err := yaml.Marshal(cfg) - if err != nil { - return nil, err - } - _, err = os.Stdout.Write(out) - return nil, err + return service.ErrorHandler(ctx, cluster, err) } - return cfg, nil + return h } -func main() { - initLogger := log.StandardLogger() - logger := initLogger.WithField("PID", os.Getpid()) - cfg, err := configure(logger, os.Args) - if err != nil { - log.Fatal(err) - } else if cfg == nil { - return - } - logger = logger.WithField("ClusterID", cfg.cluster.ClusterID) - logger.Printf("keep-web %s started", version) - ctx := ctxlog.Context(context.Background(), logger) - +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(ctx, initLogger); err != nil { - logger.Fatal(err) - } - if _, err := daemon.SdNotify(false, "READY=1"); err != nil { - logger.Printf("Error notifying init daemon: %v", err) - } - logger.Println("Listening at", srv.Addr) - if err := srv.Wait(); err != nil { - logger.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 }