// HandleJobRequest routes requests to /api/v1/job/{id} to either // handleDeleteJob if its a DELETE or handleGetJob if its a GET request. func HandleJobRequest(cache job.JobCache, db job.JobDB) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] j, err := cache.Get(id) if err != nil { log.Error("Error occured when trying to get the job you requested.") w.WriteHeader(http.StatusNotFound) return } if j == nil { w.WriteHeader(http.StatusNotFound) return } if r.Method == "DELETE" { err = j.Delete(cache, db) if err != nil { w.WriteHeader(http.StatusInternalServerError) } else { w.WriteHeader(http.StatusNoContent) } } else if r.Method == "GET" { handleGetJob(w, r, j) } } }
// HandleListJobStatsRequest is the handler for getting job-specific stats // /api/v1/job/stats/{id} func HandleListJobStatsRequest(cache job.JobCache) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] j, err := cache.Get(id) if err != nil { log.Error("Error occured when trying to get the job you requested.") w.WriteHeader(http.StatusNotFound) return } if j == nil { w.WriteHeader(http.StatusNotFound) return } resp := &ListJobStatsResponse{ JobStats: j.Stats, } w.Header().Set(contentType, jsonContentType) w.WriteHeader(http.StatusOK) if err := json.NewEncoder(w).Encode(resp); err != nil { log.Error("Error occured when marshalling response: %s", err) return } } }
// HandleListJobs responds with an array of all Jobs within the server, // active or disabled. func HandleListJobsRequest(cache job.JobCache) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { resp := &ListJobsResponse{ Jobs: cache.GetAll(), } w.Header().Set(contentType, jsonContentType) w.WriteHeader(http.StatusOK) if err := json.NewEncoder(w).Encode(resp); err != nil { log.Error("Error occured when marshalling response: %s", err) return } } }
// HandleStartJobRequest is the handler for manually starting jobs // /api/v1/job/start/{id} func HandleStartJobRequest(cache job.JobCache) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { id := mux.Vars(r)["id"] j, err := cache.Get(id) if err != nil { log.Error("Error occured when trying to get the job you requested.") w.WriteHeader(http.StatusNotFound) return } if j == nil { w.WriteHeader(http.StatusNotFound) return } j.Run(cache) w.WriteHeader(http.StatusNoContent) } }