diff options
Diffstat (limited to 'model/job.go')
-rw-r--r-- | model/job.go | 79 |
1 files changed, 78 insertions, 1 deletions
diff --git a/model/job.go b/model/job.go index d539b5bf9..b0567bf1a 100644 --- a/model/job.go +++ b/model/job.go @@ -3,7 +3,84 @@ package model -type Job interface { +import ( + "encoding/json" + "io" +) + +const ( + JOB_TYPE_DATA_RETENTION = "data_retention" + JOB_TYPE_SEARCH_INDEXING = "search_indexing" + + JOB_STATUS_PENDING = "pending" + JOB_STATUS_IN_PROGRESS = "in_progress" + JOB_STATUS_SUCCESS = "success" + JOB_STATUS_ERROR = "error" + JOB_STATUS_CANCEL_REQUESTED = "cancel_requested" + JOB_STATUS_CANCELED = "canceled" +) + +type Job struct { + Id string `json:"id"` + Type string `json:"type"` + Priority int64 `json:"priority"` + CreateAt int64 `json:"create_at"` + StartAt int64 `json:"start_at"` + LastActivityAt int64 `json:"last_activity_at"` + Status string `json:"status"` + Progress int64 `json:"progress"` + Data map[string]interface{} `json:"data"` +} + +func (js *Job) ToJson() string { + if b, err := json.Marshal(js); err != nil { + return "" + } else { + return string(b) + } +} + +func JobFromJson(data io.Reader) *Job { + var status Job + if err := json.NewDecoder(data).Decode(&status); err == nil { + return &status + } else { + return nil + } +} + +func JobsToJson(jobs []*Job) string { + if b, err := json.Marshal(jobs); err != nil { + return "" + } else { + return string(b) + } +} + +func JobsFromJson(data io.Reader) []*Job { + var jobs []*Job + if err := json.NewDecoder(data).Decode(&jobs); err == nil { + return jobs + } else { + return nil + } +} + +func (js *Job) DataToJson() string { + if b, err := json.Marshal(js.Data); err != nil { + return "" + } else { + return string(b) + } +} + +type Worker interface { + Run() + Stop() + JobChannel() chan<- Job +} + +type Scheduler interface { Run() Stop() } |