diff --git a/internal/worker/json.go b/internal/worker/json.go index 7fdc8f8f9..bcf323f95 100644 --- a/internal/worker/json.go +++ b/internal/worker/json.go @@ -25,6 +25,10 @@ type OSBuildJobResult struct { // JSON-serializable types for the HTTP API // +type statusResponse struct { + Status string `json:"status"` +} + type errorResponse struct { Message string `json:"message"` } diff --git a/internal/worker/server.go b/internal/worker/server.go index 1c6d5bf49..00f9ba418 100644 --- a/internal/worker/server.go +++ b/internal/worker/server.go @@ -49,6 +49,10 @@ func NewServer(logger *log.Logger, jobs jobqueue.JobQueue, artifactsDir string) s.router.MethodNotAllowed = http.HandlerFunc(methodNotAllowedHandler) s.router.NotFound = http.HandlerFunc(notFoundHandler) + // Add a basic status handler for checking if osbuild-composer is alive. + s.router.GET("/status", s.statusHandler) + + // Add handlers for managing jobs. s.router.POST("/job-queue/v1/jobs", s.addJobHandler) s.router.PATCH("/job-queue/v1/jobs/:job_id", s.updateJobHandler) s.router.POST("/job-queue/v1/jobs/:job_id/artifacts/:name", s.addJobImageHandler) @@ -134,6 +138,15 @@ func notFoundHandler(writer http.ResponseWriter, request *http.Request) { jsonErrorf(writer, http.StatusNotFound, "not found") } +func (s *Server) statusHandler(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) { + writer.WriteHeader(http.StatusOK) + + // Send back a status message. + _ = json.NewEncoder(writer).Encode(&statusResponse{ + Status: "OK", + }) +} + func (s *Server) addJobHandler(writer http.ResponseWriter, request *http.Request, _ httprouter.Params) { contentType := request.Header["Content-Type"] if len(contentType) != 1 || contentType[0] != "application/json" { diff --git a/internal/worker/server_test.go b/internal/worker/server_test.go index 1ed3d254e..41dae2494 100644 --- a/internal/worker/server_test.go +++ b/internal/worker/server_test.go @@ -14,6 +14,12 @@ import ( "github.com/osbuild/osbuild-composer/internal/worker" ) +// Ensure that the status request returns OK. +func TestStatus(t *testing.T) { + server := worker.NewServer(nil, testjobqueue.New(), "") + test.TestRoute(t, server, false, "GET", "/status", ``, http.StatusOK, `{"status":"OK"}`, "message") +} + func TestErrors(t *testing.T) { var cases = []struct { Method string