Refactor the multi-host salt install page.
[arvados.git] / services / keep-web / main.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package keepweb
6
7 import (
8         "context"
9         "mime"
10         "os"
11
12         "git.arvados.org/arvados.git/lib/service"
13         "git.arvados.org/arvados.git/sdk/go/arvados"
14         "git.arvados.org/arvados.git/sdk/go/ctxlog"
15         "git.arvados.org/arvados.git/sdk/go/keepclient"
16         "github.com/prometheus/client_golang/prometheus"
17 )
18
19 var (
20         version = "dev"
21 )
22
23 var Command = service.Command(arvados.ServiceNameKeepweb, newHandlerOrErrorHandler)
24
25 func newHandlerOrErrorHandler(ctx context.Context, cluster *arvados.Cluster, token string, reg *prometheus.Registry) service.Handler {
26         h, err := newHandler(ctx, cluster, token, reg)
27         if err != nil {
28                 return service.ErrorHandler(ctx, cluster, err)
29         }
30         return h
31 }
32
33 func newHandler(ctx context.Context, cluster *arvados.Cluster, token string, reg *prometheus.Registry) (*handler, error) {
34         logger := ctxlog.FromContext(ctx)
35         if ext := ".txt"; mime.TypeByExtension(ext) == "" {
36                 logger.Warnf("cannot look up MIME type for %q -- this probably means /etc/mime.types is missing -- clients will see incorrect content types", ext)
37         }
38
39         keepclient.RefreshServiceDiscoveryOnSIGHUP()
40         os.Setenv("ARVADOS_API_HOST", cluster.Services.Controller.ExternalURL.Host)
41         return &handler{
42                 Cluster: cluster,
43                 Cache: cache{
44                         cluster:  cluster,
45                         logger:   logger,
46                         registry: reg,
47                 },
48         }, nil
49 }