github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/mq/task.go (about) 1 package mq 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/google/uuid" 8 ) 9 10 func NewTask(channel string, subject string, data []byte) *Task { 11 return &Task{ 12 MsgHead: MsgHead{ 13 Channel: channel, 14 Subject: subject, 15 ID: genUUID(), 16 }, 17 Data: data, 18 CreatedAt: time.Now(), 19 } 20 } 21 22 type Task struct { 23 MsgHead 24 Data []byte `json:"data,omitempty"` 25 CreatedAt time.Time `json:"created_at"` 26 } 27 28 func (task *Task) Pending() *TaskStatus { 29 return &TaskStatus{ 30 MsgHead: task.MsgHead, 31 Args: task.Data, 32 UpdatedAt: task.CreatedAt, 33 Status: StatusPending, 34 } 35 } 36 37 func (task *Task) Cancelled() *TaskStatus { 38 return &TaskStatus{ 39 MsgHead: task.MsgHead, 40 UpdatedAt: time.Now(), 41 Status: StatusCancelled, 42 } 43 } 44 45 func (task *Task) Running() *TaskStatus { 46 return &TaskStatus{ 47 MsgHead: task.MsgHead, 48 UpdatedAt: time.Now(), 49 Status: StatusRunning, 50 } 51 } 52 53 func (task *Task) Success(result interface{}) *TaskStatus { 54 return &TaskStatus{ 55 MsgHead: task.MsgHead, 56 UpdatedAt: time.Now(), 57 Status: StatusSuccess, 58 Result: []byte(fmt.Sprintf("%v", result)), 59 } 60 } 61 62 func (task *Task) Failed(traceback error) *TaskStatus { 63 return &TaskStatus{ 64 MsgHead: task.MsgHead, 65 UpdatedAt: time.Now(), 66 Status: StatusFailed, 67 Traceback: []byte(traceback.Error()), 68 } 69 } 70 71 type TaskStatus struct { 72 MsgHead 73 Status Status `json:"status"` 74 UpdatedAt time.Time `json:"updated_at"` 75 Args []byte `json:"args,omitempty"` 76 Result []byte `json:"result,omitempty"` 77 Traceback []byte `json:"traceback,omitempty"` 78 } 79 80 type Status string 81 82 const ( 83 StatusPending Status = "PENDING" 84 StatusRunning Status = "RUNNING" 85 StatusCancelled Status = "CANCELED" 86 StatusSuccess Status = "SUCCESS" 87 StatusFailed Status = "FAILED" 88 ) 89 90 func genUUID() string { 91 return uuid.New().String() 92 }