X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/00f65f60e69326839447f431146312481db05f01..HEAD:/cmd/arvados-server/cmd.go diff --git a/cmd/arvados-server/cmd.go b/cmd/arvados-server/cmd.go index d65e18ddf5..0f267a9b40 100644 --- a/cmd/arvados-server/cmd.go +++ b/cmd/arvados-server/cmd.go @@ -5,11 +5,15 @@ package main import ( + "context" "encoding/json" "fmt" "io" "net/http" "os" + "path" + "path/filepath" + "strings" "git.arvados.org/arvados.git/lib/boot" "git.arvados.org/arvados.git/lib/cloud/cloudtest" @@ -17,14 +21,21 @@ import ( "git.arvados.org/arvados.git/lib/config" "git.arvados.org/arvados.git/lib/controller" "git.arvados.org/arvados.git/lib/crunchrun" + "git.arvados.org/arvados.git/lib/crunchstat" "git.arvados.org/arvados.git/lib/dispatchcloud" "git.arvados.org/arvados.git/lib/install" "git.arvados.org/arvados.git/lib/lsf" "git.arvados.org/arvados.git/lib/recovercollection" - "git.arvados.org/arvados.git/services/githttpd" + "git.arvados.org/arvados.git/lib/service" + "git.arvados.org/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/health" + dispatchslurm "git.arvados.org/arvados.git/services/crunch-dispatch-slurm" + keepbalance "git.arvados.org/arvados.git/services/keep-balance" + keepweb "git.arvados.org/arvados.git/services/keep-web" "git.arvados.org/arvados.git/services/keepproxy" "git.arvados.org/arvados.git/services/keepstore" "git.arvados.org/arvados.git/services/ws" + "github.com/prometheus/client_golang/prometheus" ) var ( @@ -34,17 +45,22 @@ var ( "--version": cmd.Version, "boot": boot.Command, + "check": health.CheckCommand, "cloudtest": cloudtest.Command, "config-check": config.CheckCommand, "config-defaults": config.DumpDefaultsCommand, "config-dump": config.DumpCommand, "controller": controller.Command, "crunch-run": crunchrun.Command, + "crunchstat": crunchstat.Command, "dispatch-cloud": dispatchcloud.Command, "dispatch-lsf": lsf.DispatchCommand, - "git-httpd": githttpd.Command, + "dispatch-slurm": dispatchslurm.Command, + "health": healthCommand, "install": install.Command, "init": install.InitCommand, + "keep-balance": keepbalance.Command, + "keep-web": keepweb.Command, "keepproxy": keepproxy.Command, "keepstore": keepstore.Command, "recover-collection": recovercollection.Command, @@ -69,8 +85,21 @@ func (wb2command) RunCommand(prog string, args []string, stdin io.Reader, stdout fmt.Fprintf(stderr, "json.Marshal: %s\n", err) return 1 } + servefs := http.FileServer(http.Dir(args[2])) mux := http.NewServeMux() - mux.Handle("/", http.FileServer(http.Dir(args[2]))) + mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + for _, ent := range strings.Split(req.URL.Path, "/") { + if ent == ".." { + http.Error(w, "invalid URL path", http.StatusBadRequest) + return + } + } + fnm := filepath.Join(args[2], filepath.FromSlash(path.Clean("/"+req.URL.Path))) + if _, err := os.Stat(fnm); os.IsNotExist(err) { + req.URL.Path = "/" + } + servefs.ServeHTTP(w, req) + })) mux.HandleFunc("/config.json", func(w http.ResponseWriter, _ *http.Request) { w.Write(configJSON) }) @@ -84,3 +113,17 @@ func (wb2command) RunCommand(prog string, args []string, stdin io.Reader, stdout } return 0 } + +var healthCommand cmd.Handler = service.Command(arvados.ServiceNameHealth, func(ctx context.Context, cluster *arvados.Cluster, _ string, reg *prometheus.Registry) service.Handler { + mClockSkew := prometheus.NewGauge(prometheus.GaugeOpts{ + Namespace: "arvados", + Subsystem: "health", + Name: "clock_skew_seconds", + Help: "Clock skew observed in most recent health check", + }) + reg.MustRegister(mClockSkew) + return &health.Aggregator{ + Cluster: cluster, + MetricClockSkew: mClockSkew, + } +})