|
- package tasks
-
- import "time"
-
- const (
- // StatePending - initial state of a task
- StatePending = "PENDING"
- // StateReceived - when task is received by a worker
- StateReceived = "RECEIVED"
- // StateStarted - when the worker starts processing the task
- StateStarted = "STARTED"
- // StateRetry - when failed task has been scheduled for retry
- StateRetry = "RETRY"
- // StateSuccess - when the task is processed successfully
- StateSuccess = "SUCCESS"
- // StateFailure - when processing of the task fails
- StateFailure = "FAILURE"
- )
-
- // TaskState represents a state of a task
- type TaskState struct {
- TaskUUID string `bson:"_id"`
- TaskName string `bson:"task_name"`
- State string `bson:"state"`
- Results []*TaskResult `bson:"results"`
- Error string `bson:"error"`
- CreatedAt time.Time `bson:"created_at"`
- }
-
- // GroupMeta stores useful metadata about tasks within the same group
- // E.g. UUIDs of all tasks which are used in order to check if all tasks
- // completed successfully or not and thus whether to trigger chord callback
- type GroupMeta struct {
- GroupUUID string `bson:"_id"`
- TaskUUIDs []string `bson:"task_uuids"`
- ChordTriggered bool `bson:"chord_triggered"`
- Lock bool `bson:"lock"`
- CreatedAt time.Time `bson:"created_at"`
- }
-
- // NewPendingTaskState ...
- func NewPendingTaskState(signature *Signature) *TaskState {
- return &TaskState{
- TaskUUID: signature.UUID,
- TaskName: signature.Name,
- State: StatePending,
- CreatedAt: time.Now().UTC(),
- }
- }
-
- // NewReceivedTaskState ...
- func NewReceivedTaskState(signature *Signature) *TaskState {
- return &TaskState{
- TaskUUID: signature.UUID,
- State: StateReceived,
- }
- }
-
- // NewStartedTaskState ...
- func NewStartedTaskState(signature *Signature) *TaskState {
- return &TaskState{
- TaskUUID: signature.UUID,
- State: StateStarted,
- }
- }
-
- // NewSuccessTaskState ...
- func NewSuccessTaskState(signature *Signature, results []*TaskResult) *TaskState {
- return &TaskState{
- TaskUUID: signature.UUID,
- State: StateSuccess,
- Results: results,
- }
- }
-
- // NewFailureTaskState ...
- func NewFailureTaskState(signature *Signature, err string) *TaskState {
- return &TaskState{
- TaskUUID: signature.UUID,
- State: StateFailure,
- Error: err,
- }
- }
-
- // NewRetryTaskState ...
- func NewRetryTaskState(signature *Signature) *TaskState {
- return &TaskState{
- TaskUUID: signature.UUID,
- State: StateRetry,
- }
- }
-
- // IsCompleted returns true if state is SUCCESS or FAILURE,
- // i.e. the task has finished processing and either succeeded or failed.
- func (taskState *TaskState) IsCompleted() bool {
- return taskState.IsSuccess() || taskState.IsFailure()
- }
-
- // IsSuccess returns true if state is SUCCESS
- func (taskState *TaskState) IsSuccess() bool {
- return taskState.State == StateSuccess
- }
-
- // IsFailure returns true if state is FAILURE
- func (taskState *TaskState) IsFailure() bool {
- return taskState.State == StateFailure
- }
|