summaryrefslogtreecommitdiffstats
path: root/api4/job.go
diff options
context:
space:
mode:
authorGeorge Goldberg <george@gberg.me>2017-07-20 16:25:35 +0100
committerChristopher Speller <crspeller@gmail.com>2017-07-20 08:25:35 -0700
commit6c6f2a1138447777bbf46cc2c40e1b3c47204466 (patch)
treec2630ad79a7bc12d6c0c0233098e29d6811cb99b /api4/job.go
parent5ae701d133f713363e52b9cc6aa01579c81ebab4 (diff)
downloadchat-6c6f2a1138447777bbf46cc2c40e1b3c47204466.tar.gz
chat-6c6f2a1138447777bbf46cc2c40e1b3c47204466.tar.bz2
chat-6c6f2a1138447777bbf46cc2c40e1b3c47204466.zip
PLT-6595-Server: Job Management APIs. (#6931)
* PLT-6595-Server: Job Management APIs. * MANAGE_JOBS Permission * Fix test.
Diffstat (limited to 'api4/job.go')
-rw-r--r--api4/job.go81
1 files changed, 71 insertions, 10 deletions
diff --git a/api4/job.go b/api4/job.go
index e6c17c42d..941e5d543 100644
--- a/api4/job.go
+++ b/api4/job.go
@@ -14,8 +14,11 @@ import (
func InitJob() {
l4g.Info("Initializing job API routes")
- BaseRoutes.Jobs.Handle("/type/{job_type:[A-Za-z0-9_-]+}/statuses", ApiSessionRequired(getJobsByType)).Methods("GET")
- BaseRoutes.Jobs.Handle("/{job_id:[A-Za-z0-9]+}/status", ApiSessionRequired(getJob)).Methods("GET")
+ BaseRoutes.Jobs.Handle("", ApiSessionRequired(getJobs)).Methods("GET")
+ BaseRoutes.Jobs.Handle("", ApiSessionRequired(createJob)).Methods("POST")
+ BaseRoutes.Jobs.Handle("/{job_id:[A-Za-z0-9]+}", ApiSessionRequired(getJob)).Methods("GET")
+ BaseRoutes.Jobs.Handle("/{job_id:[A-Za-z0-9]+}/cancel", ApiSessionRequired(cancelJob)).Methods("POST")
+ BaseRoutes.Jobs.Handle("/type/{job_type:[A-Za-z0-9_-]+}", ApiSessionRequired(getJobsByType)).Methods("GET")
}
func getJob(c *Context, w http.ResponseWriter, r *http.Request) {
@@ -24,16 +27,55 @@ func getJob(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_SYSTEM) {
- c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
+ if !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_JOBS) {
+ c.SetPermissionError(model.PERMISSION_MANAGE_JOBS)
return
}
- if status, err := app.GetJob(c.Params.JobId); err != nil {
+ if job, err := app.GetJob(c.Params.JobId); err != nil {
c.Err = err
return
} else {
- w.Write([]byte(status.ToJson()))
+ w.Write([]byte(job.ToJson()))
+ }
+}
+
+func createJob(c *Context, w http.ResponseWriter, r *http.Request) {
+ job := model.JobFromJson(r.Body)
+ if job == nil {
+ c.SetInvalidParam("job")
+ return
+ }
+
+ if !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_JOBS) {
+ c.SetPermissionError(model.PERMISSION_MANAGE_JOBS)
+ return
+ }
+
+ if job, err := app.CreateJob(job); err != nil {
+ c.Err = err
+ return
+ } else {
+ w.WriteHeader(http.StatusCreated)
+ w.Write([]byte(job.ToJson()))
+ }
+}
+
+func getJobs(c *Context, w http.ResponseWriter, r *http.Request) {
+ if c.Err != nil {
+ return
+ }
+
+ if !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_JOBS) {
+ c.SetPermissionError(model.PERMISSION_MANAGE_JOBS)
+ return
+ }
+
+ if jobs, err := app.GetJobsPage(c.Params.Page, c.Params.PerPage); err != nil {
+ c.Err = err
+ return
+ } else {
+ w.Write([]byte(model.JobsToJson(jobs)))
}
}
@@ -43,15 +85,34 @@ func getJobsByType(c *Context, w http.ResponseWriter, r *http.Request) {
return
}
- if !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_SYSTEM) {
- c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM)
+ if !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_JOBS) {
+ c.SetPermissionError(model.PERMISSION_MANAGE_JOBS)
return
}
- if statuses, err := app.GetJobsByTypePage(c.Params.JobType, c.Params.Page, c.Params.PerPage); err != nil {
+ if jobs, err := app.GetJobsByTypePage(c.Params.JobType, c.Params.Page, c.Params.PerPage); err != nil {
c.Err = err
return
} else {
- w.Write([]byte(model.JobsToJson(statuses)))
+ w.Write([]byte(model.JobsToJson(jobs)))
}
}
+
+func cancelJob(c *Context, w http.ResponseWriter, r *http.Request) {
+ c.RequireJobId()
+ if c.Err != nil {
+ return
+ }
+
+ if !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_JOBS) {
+ c.SetPermissionError(model.PERMISSION_MANAGE_JOBS)
+ return
+ }
+
+ if err := app.CancelJob(c.Params.JobId); err != nil {
+ c.Err = err
+ return
+ }
+
+ ReturnStatusOK(w)
+}