Merge branch '19126-nginx-proxy-settings-change'
[arvados.git] / services / health / main.go
index 496fb884d433a5eea350d27818d5e72629e9242f..92bd377c800041583ded6c6b161e88332639f69b 100644 (file)
@@ -1,67 +1,39 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 package main
 
 import (
-       "flag"
-       "fmt"
-       "net/http"
-
-       "git.curoverse.com/arvados.git/sdk/go/arvados"
-       "git.curoverse.com/arvados.git/sdk/go/health"
-       "git.curoverse.com/arvados.git/sdk/go/httpserver"
-       log "github.com/Sirupsen/logrus"
+       "context"
+       "os"
+
+       "git.arvados.org/arvados.git/lib/cmd"
+       "git.arvados.org/arvados.git/lib/service"
+       "git.arvados.org/arvados.git/sdk/go/arvados"
+       "git.arvados.org/arvados.git/sdk/go/health"
+       "github.com/prometheus/client_golang/prometheus"
 )
 
-var version = "dev"
-
-func main() {
-       configFile := flag.String("config", arvados.DefaultConfigFile, "`path` to arvados configuration file")
-       getVersion := flag.Bool("version", false, "Print version information and exit.")
-       flag.Parse()
-
-       // Print version information if requested
-       if *getVersion {
-               fmt.Printf("arvados-health %s\n", version)
-               return
-       }
+var (
+       version             = "dev"
+       command cmd.Handler = service.Command(arvados.ServiceNameHealth, newHandler)
+)
 
-       log.SetFormatter(&log.JSONFormatter{
-               TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
+func newHandler(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",
        })
-       log.Printf("arvados-health %s started", version)
-
-       cfg, err := arvados.GetConfig(*configFile)
-       if err != nil {
-               log.Fatal(err)
-       }
-       clusterCfg, err := cfg.GetCluster("")
-       if err != nil {
-               log.Fatal(err)
-       }
-       nodeCfg, err := clusterCfg.GetThisSystemNode()
-       if err != nil {
-               log.Fatal(err)
+       reg.MustRegister(mClockSkew)
+       return &health.Aggregator{
+               Cluster:         cluster,
+               MetricClockSkew: mClockSkew,
        }
+}
 
-       log := log.WithField("Service", "Health")
-       srv := &httpserver.Server{
-               Addr: nodeCfg.Health.Listen,
-               Server: http.Server{
-                       Handler: &health.Aggregator{
-                               Config: cfg,
-                               Log: func(req *http.Request, err error) {
-                                       log.WithField("RemoteAddr", req.RemoteAddr).
-                                               WithField("Path", req.URL.Path).
-                                               WithError(err).
-                                               Info("HTTP request")
-                               },
-                       },
-               },
-       }
-       if err := srv.Start(); err != nil {
-               log.Fatal(err)
-       }
-       log.WithField("Listen", srv.Addr).Info("listening")
-       if err := srv.Wait(); err != nil {
-               log.Fatal(err)
-       }
+func main() {
+       os.Exit(command.RunCommand(os.Args[0], os.Args[1:], os.Stdin, os.Stdout, os.Stderr))
 }