forked from cloud66-oss/cloud66
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjob.go
124 lines (107 loc) · 2.54 KB
/
job.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package cloud66
import "strconv"
import "encoding/json"
import "fmt"
var JobStatus = map[int]string{
0: "Updated", // ST_UPDATED
1: "Started", // ST_STARTED
2: "Success", // ST_SUCCESS
3: "Failed", // ST_FAILED
}
type basicJob struct {
Id int `json:"id"`
Uid string `json:"uid"`
Name string `json:"name"`
Type string `json:"type"`
Cron string `json:"cron"`
Status int `json:"status"`
ParamsRaw json.RawMessage `json:"params"`
Params map[string]interface{}
}
type BasicJob struct {
*basicJob
}
func (bj *BasicJob) UnmarshalJSON(b []byte) error {
if err := json.Unmarshal(b, &bj.basicJob); err == nil {
if err = json.Unmarshal(bj.ParamsRaw, &bj.basicJob.Params); err != nil {
return err
}
return nil
} else {
return err
}
}
func (bj BasicJob) GetBasicJob() BasicJob {
return bj
}
func (c *Client) GetJobs(stackUid string, serverUid *string) ([]Job, error) {
fmt.Printf("")
var params interface{}
if serverUid == nil {
params = nil
} else {
params = struct {
ServerUid string `json:"server_uid"`
}{
ServerUid: *serverUid,
}
}
query_strings := make(map[string]string)
var p Pagination
var result []Job
var jobRes []*json.RawMessage
for {
req, err := c.NewRequest("GET", "/stacks/"+stackUid+"/jobs.json", params, query_strings)
if err != nil {
return nil, err
}
jobRes = nil
err = c.DoReq(req, &jobRes, &p)
if err != nil {
return nil, err
}
for _, j := range jobRes {
var job *Job
if job, err = JobFactory(*j); err != nil {
return nil, err
}
result = append(result, *job)
}
if p.Current < p.Next {
query_strings["page"] = strconv.Itoa(p.Next)
} else {
break
}
}
return result, nil
}
func (c *Client) GetJob(stackUid string, jobUid string) (*Job, error) {
req, err := c.NewRequest("GET", "/stacks/"+stackUid+"/jobs/"+jobUid+".json", nil, nil)
if err != nil {
return nil, err
}
var jobRes *json.RawMessage
err = c.DoReq(req, &jobRes, nil)
if err != nil {
return nil, err
}
return JobFactory(*jobRes)
}
func (c *Client) RunJobNow(stackUid string, jobUid string, jobArgs *string) (*AsyncResult, error) {
var params interface{}
if jobArgs == nil {
params = nil
} else {
params = struct {
JobArgs string `json:"job_args"`
}{
JobArgs: *jobArgs,
}
}
req, err := c.NewRequest("POST", "/stacks/"+stackUid+"/jobs/"+jobUid+"/run_now.json", params, nil)
if err != nil {
return nil, err
}
var asyncRes *AsyncResult
return asyncRes, c.DoReq(req, &asyncRes, nil)
}