func (l Logs) Install(c *mux.APIContainer) { // use restful: ws.Route(ws.GET("/logs/{logpath:*}").To(fileHandler)) // See github.com/emicklei/go-restful/blob/master/examples/restful-serve-static.go ws := new(restful.WebService) ws.Path("/logs") ws.Doc("get log files") ws.Route(ws.GET("/{logpath:*}").To(logFileHandler).Param(ws.PathParameter("logpath", "path to the log").DataType("string"))) ws.Route(ws.GET("/").To(logFileListHandler)) c.Add(ws) }
// initMetricsRoute initializes an HTTP endpoint for metrics. func initMetricsRoute(apiContainer *genericmux.APIContainer, path string) { ws := new(restful.WebService). Path(path). Doc("return metrics for this process") h := prometheus.Handler() ws.Route(ws.GET("/").To(func(req *restful.Request, resp *restful.Response) { h.ServeHTTP(resp.ResponseWriter, req.Request) }).Doc("return metrics for this process"). Returns(http.StatusOK, "if metrics are available", nil). Produces("text/plain")) apiContainer.Add(ws) }
// Install registers the APIServer's `/version` handler. func (v Version) Install(c *mux.APIContainer) { // Set up a service to return the git code version. versionWS := new(restful.WebService) versionWS.Path("/version") versionWS.Doc("git code version from which this is built") versionWS.Route( versionWS.GET("/").To(handleVersion). Doc("get the code version"). Operation("getCodeVersion"). Produces(restful.MIME_JSON). Consumes(restful.MIME_JSON). Writes(version.Info{})) c.Add(versionWS) }
// Install adds the SwaggerUI webservice to the given mux. func (s Swagger) Install(c *mux.APIContainer) { swagger.RegisterSwaggerService(swagger.Config{ WebServicesUrl: "https://" + s.ExternalAddress, WebServices: c.RegisteredWebServices(), ApiPath: "/swaggerapi/", SwaggerPath: "/swaggerui/", SwaggerFilePath: "/swagger-ui/", SchemaFormatHandler: func(typeName string) string { switch typeName { case "metav1.Time", "*metav1.Time": return "date-time" } return "" }, }, c.Container) }
// initAPIVersionRoute initializes the osapi endpoint to behave similar to the upstream api endpoint func initAPIVersionRoute(apiContainer *genericmux.APIContainer, prefix string, versions ...string) { versionHandler := apiserver.APIVersionHandler(kapi.Codecs, func(req *restful.Request) *unversioned.APIVersions { apiVersionsForDiscovery := unversioned.APIVersions{ // TODO: ServerAddressByClientCIDRs: s.getServerAddressByClientCIDRs(req.Request), Versions: versions, } return &apiVersionsForDiscovery }) ws := new(restful.WebService). Path(prefix). Doc("list supported server API versions") ws.Route(ws.GET("/").To(versionHandler). Doc("list supported server API versions"). Produces(restful.MIME_JSON). Consumes(restful.MIME_JSON). Operation("get" + strings.Title(prefix[1:]) + "Version")) apiContainer.Add(ws) }
// initReadinessCheckRoute initializes an HTTP endpoint for readiness checking func initReadinessCheckRoute(apiContainer *genericmux.APIContainer, path string, readyFunc func() bool) { ws := new(restful.WebService). Path(path). Doc("return the readiness state of the master") ws.Route(ws.GET("/").To(func(req *restful.Request, resp *restful.Response) { if readyFunc() { resp.ResponseWriter.WriteHeader(http.StatusOK) resp.ResponseWriter.Write([]byte("ok")) } else { resp.ResponseWriter.WriteHeader(http.StatusServiceUnavailable) } }).Doc("return the readiness state of the master"). Returns(http.StatusOK, "if the master is ready", nil). Returns(http.StatusServiceUnavailable, "if the master is not ready", nil). Produces(restful.MIME_JSON)) apiContainer.Add(ws) }
// Install adds the Index webservice to the given mux. func (i Index) Install(c *mux.APIContainer) { c.UnlistedRoutes.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { status := http.StatusOK if r.URL.Path != "/" && r.URL.Path != "/index.html" { // Since "/" matches all paths, handleIndex is called for all paths for which there is no handler registered. // We want to return a 404 status with a list of all valid paths, incase of an invalid URL request. status = http.StatusNotFound } var handledPaths []string // Extract the paths handled using restful.WebService for _, ws := range c.RegisteredWebServices() { handledPaths = append(handledPaths, ws.RootPath()) } // Extract the paths handled using mux handler. handledPaths = append(handledPaths, c.NonSwaggerRoutes.HandledPaths()...) sort.Strings(handledPaths) responsewriters.WriteRawJSON(status, metav1.RootPaths{Paths: handledPaths}, w) }) }
// Install adds the SwaggerUI webservice to the given mux. func (oa OpenAPI) Install(c *mux.APIContainer) { err := openapi.RegisterOpenAPIService("/swagger.json", c.RegisteredWebServices(), oa.Config, c) if err != nil { glog.Fatalf("Failed to register open api spec for root: %v", err) } }
// Install adds the SwaggerUI webservice to the given mux. func (s Swagger) Install(c *mux.APIContainer) { s.Config.WebServices = c.RegisteredWebServices() swagger.RegisterSwaggerService(*s.Config, c.Container) }