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  }