// New initializes a new web Handler. func New( st local.Storage, qe *promql.Engine, tm *retrieval.TargetManager, rm *rules.Manager, version *PrometheusVersion, flags map[string]string, o *Options, ) *Handler { router := route.New() h := &Handler{ router: router, listenErrCh: make(chan error), quitCh: make(chan struct{}), reloadCh: make(chan struct{}), options: o, versionInfo: version, birth: time.Now(), flagsMap: flags, targetManager: tm, ruleManager: rm, queryEngine: qe, storage: st, apiV1: api_v1.NewAPI(qe, st), } if o.ExternalURL.Path != "" { // If the prefix is missing for the root path, prepend it. router.Get("/", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, o.ExternalURL.Path, http.StatusFound) }) router = router.WithPrefix(o.ExternalURL.Path) } instrh := prometheus.InstrumentHandler instrf := prometheus.InstrumentHandlerFunc router.Get("/", func(w http.ResponseWriter, r *http.Request) { router.Redirect(w, r, "/graph", http.StatusFound) }) router.Get("/alerts", instrf("alerts", h.alerts)) router.Get("/graph", instrf("graph", h.graph)) router.Get("/status", instrf("status", h.status)) router.Get("/flags", instrf("flags", h.flags)) router.Get("/config", instrf("config", h.config)) router.Get("/rules", instrf("rules", h.rules)) router.Get("/targets", instrf("targets", h.targets)) router.Get("/version", instrf("version", h.version)) router.Get("/heap", instrf("heap", dumpHeap)) router.Get(o.MetricsPath, prometheus.Handler().ServeHTTP) router.Get("/federate", instrh("federate", httputil.CompressionHandler{ Handler: http.HandlerFunc(h.federation), })) h.apiV1.Register(router.WithPrefix("/api/v1")) router.Get("/consoles/*filepath", instrf("consoles", h.consoles)) router.Get("/static/*filepath", instrf("static", serveStaticAsset)) if o.UserAssetsPath != "" { router.Get("/user/*filepath", instrf("user", route.FileServe(o.UserAssetsPath))) } if o.EnableQuit { router.Post("/-/quit", h.quit) } router.Post("/-/reload", h.reload) router.Get("/debug/*subpath", http.DefaultServeMux.ServeHTTP) router.Post("/debug/*subpath", http.DefaultServeMux.ServeHTTP) return h }
// New initializes a new web Handler. func New(st local.Storage, qe *promql.Engine, rm *rules.Manager, status *PrometheusStatus, o *Options) *Handler { router := route.New() h := &Handler{ router: router, listenErrCh: make(chan error), quitCh: make(chan struct{}), reloadCh: make(chan struct{}), options: o, statusInfo: status, ruleManager: rm, queryEngine: qe, storage: st, apiV1: &v1.API{ QueryEngine: qe, Storage: st, }, apiLegacy: &legacy.API{ QueryEngine: qe, Storage: st, Now: model.Now, }, } if o.ExternalURL.Path != "" { // If the prefix is missing for the root path, prepend it. router.Get("/", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, o.ExternalURL.Path, http.StatusFound) }) router = router.WithPrefix(o.ExternalURL.Path) } instrh := prometheus.InstrumentHandler instrf := prometheus.InstrumentHandlerFunc router.Get("/", func(w http.ResponseWriter, r *http.Request) { router.Redirect(w, r, "/graph", http.StatusFound) }) router.Get("/graph", instrf("graph", h.graph)) router.Get("/status", instrf("status", h.status)) router.Get("/alerts", instrf("alerts", h.alerts)) router.Get("/version", instrf("version", h.version)) router.Get("/heap", instrf("heap", dumpHeap)) router.Get(o.MetricsPath, prometheus.Handler().ServeHTTP) router.Get("/federate", instrh("federate", httputil.CompressionHandler{ Handler: http.HandlerFunc(h.federation), })) h.apiLegacy.Register(router.WithPrefix("/api")) h.apiV1.Register(router.WithPrefix("/api/v1")) router.Get("/consoles/*filepath", instrf("consoles", h.consoles)) if o.UseLocalAssets { router.Get("/static/*filepath", instrf("static", route.FileServe("web/blob/static"))) } else { router.Get("/static/*filepath", instrh("static", blob.Handler{})) } if o.UserAssetsPath != "" { router.Get("/user/*filepath", instrf("user", route.FileServe(o.UserAssetsPath))) } if o.EnableQuit { router.Post("/-/quit", h.quit) } router.Post("/-/reload", h.reload) router.Get("/debug/*subpath", http.DefaultServeMux.ServeHTTP) router.Post("/debug/*subpath", http.DefaultServeMux.ServeHTTP) return h }
// New initializes a new web Handler. func New(o *Options) *Handler { router := route.New(func(r *http.Request) (context.Context, error) { return o.Context, nil }) h := &Handler{ router: router, listenErrCh: make(chan error), quitCh: make(chan struct{}), reloadCh: make(chan chan error), options: o, versionInfo: o.Version, birth: time.Now(), flagsMap: o.Flags, context: o.Context, targetManager: o.TargetManager, ruleManager: o.RuleManager, queryEngine: o.QueryEngine, storage: o.Storage, apiV1: api_v1.NewAPI(o.QueryEngine, o.Storage), now: model.Now, } if o.RoutePrefix != "/" { // If the prefix is missing for the root path, prepend it. router.Get("/", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, o.RoutePrefix, http.StatusFound) }) router = router.WithPrefix(o.RoutePrefix) } instrh := prometheus.InstrumentHandler instrf := prometheus.InstrumentHandlerFunc router.Get("/", func(w http.ResponseWriter, r *http.Request) { router.Redirect(w, r, "/graph", http.StatusFound) }) router.Get("/alerts", instrf("alerts", h.alerts)) router.Get("/graph", instrf("graph", h.graph)) router.Get("/status", instrf("status", h.status)) router.Get("/flags", instrf("flags", h.flags)) router.Get("/config", instrf("config", h.config)) router.Get("/rules", instrf("rules", h.rules)) router.Get("/targets", instrf("targets", h.targets)) router.Get("/version", instrf("version", h.version)) router.Get("/heap", instrf("heap", dumpHeap)) router.Get(o.MetricsPath, prometheus.Handler().ServeHTTP) router.Get("/federate", instrh("federate", httputil.CompressionHandler{ Handler: http.HandlerFunc(h.federation), })) h.apiV1.Register(router.WithPrefix("/api/v1")) router.Get("/consoles/*filepath", instrf("consoles", h.consoles)) router.Get("/static/*filepath", instrf("static", serveStaticAsset)) if o.UserAssetsPath != "" { router.Get("/user/*filepath", instrf("user", route.FileServe(o.UserAssetsPath))) } if o.EnableQuit { router.Post("/-/quit", h.quit) } router.Post("/-/reload", h.reload) router.Get("/debug/*subpath", http.DefaultServeMux.ServeHTTP) router.Post("/debug/*subpath", http.DefaultServeMux.ServeHTTP) return h }