"net/http"
"os"
"os/signal"
- "sync"
"syscall"
"time"
- "git.curoverse.com/arvados.git/sdk/go/arvados"
- "git.curoverse.com/arvados.git/sdk/go/auth"
- "github.com/julienschmidt/httprouter"
- "github.com/prometheus/client_golang/prometheus/promhttp"
+ "git.arvados.org/arvados.git/sdk/go/arvados"
"github.com/sirupsen/logrus"
)
}
type Server struct {
+ http.Handler
+
Cluster *arvados.Cluster
ArvClient *arvados.Client
RunOptions RunOptions
Metrics *metrics
- httpHandler http.Handler
- setupOnce sync.Once
-
Logger logrus.FieldLogger
Dumper logrus.FieldLogger
}
-// ServeHTTP implements service.Handler.
-func (srv *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- srv.httpHandler.ServeHTTP(w, r)
-}
-
// CheckHealth implements service.Handler.
func (srv *Server) CheckHealth() error {
return nil
}
-// Start sets up and runs the balancer.
-func (srv *Server) Start() {
- srv.setupOnce.Do(srv.setup)
- go srv.run()
-}
-
-func (srv *Server) setup() {
- if srv.Cluster.ManagementToken == "" {
- srv.httpHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- http.Error(w, "Management API authentication is not configured", http.StatusForbidden)
- })
- } else {
- mux := httprouter.New()
- metricsH := promhttp.HandlerFor(srv.Metrics.reg, promhttp.HandlerOpts{
- ErrorLog: srv.Logger,
- })
- mux.Handler("GET", "/metrics", metricsH)
- mux.Handler("GET", "/metrics.json", metricsH)
- srv.httpHandler = auth.RequireLiteralToken(srv.Cluster.ManagementToken, mux)
- }
+// Done implements service.Handler.
+func (srv *Server) Done() <-chan struct{} {
+ return nil
}
func (srv *Server) run() {
}
if err != nil {
srv.Logger.Error(err)
+ os.Exit(1)
+ } else {
+ os.Exit(0)
}
}