/
jobs.go
96 lines (82 loc) · 1.93 KB
/
jobs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package controllers
import (
"github.com/lfq7413/tomato/cloud"
"github.com/lfq7413/tomato/errs"
"github.com/lfq7413/tomato/job"
"github.com/lfq7413/tomato/types"
"github.com/lfq7413/tomato/utils"
)
// JobsController 处理 /jobs 接口的请求
type JobsController struct {
ClassesController
}
// HandleCloudJob 执行后台任务
// @router /:jobName [post]
func (j *JobsController) HandleCloudJob() {
if j.EnforceMasterKeyAccess() == false {
return
}
jobName := j.Ctx.Input.Param(":jobName")
j.runJob(jobName)
}
// HandlePost ...
// @router / [post]
func (j *JobsController) HandlePost() {
if j.EnforceMasterKeyAccess() == false {
return
}
jobName := utils.S(j.JSONBody["jobName"])
j.runJob(jobName)
}
func (j *JobsController) runJob(jobName string) {
jobFunction := cloud.GetJob(jobName)
if jobFunction == nil {
j.Data["json"] = errs.ErrorMessageToMap(errs.ScriptFailed, "Invalid job.")
j.ServeJSON()
return
}
jobHandler := job.NewjobStatus()
if j.JSONBody == nil {
j.JSONBody = types.M{}
}
params := types.M{}
for k, v := range j.JSONBody {
params[k] = v
}
for k, v := range j.Query {
params[k] = v
}
headers := map[string]string{}
for k := range j.Ctx.Request.Header {
headers[k] = j.Ctx.Request.Header.Get(k)
}
request := cloud.JobRequest{
Params: params,
JobName: jobName,
Headers: headers,
}
response := cloud.JobResponse{
JobStatus: jobHandler,
}
jobStatus := jobHandler.SetRunning(jobName, j.JSONBody)
request.JobID = utils.S(jobStatus["objectId"])
go jobFunction(request, response)
j.Ctx.Output.Header("X-Parse-Job-Status-Id", utils.S(jobStatus["objectId"]))
j.Data["json"] = types.M{}
j.ServeJSON()
}
// Get ...
// @router / [get]
func (j *JobsController) Get() {
j.ClassesController.Get()
}
// Delete ...
// @router / [delete]
func (j *JobsController) Delete() {
j.ClassesController.Delete()
}
// Put ...
// @router / [put]
func (j *JobsController) Put() {
j.ClassesController.Put()
}