Documentation ¶
Overview ¶
Package task provides a task system to handle synchronous tasks in a asynchronous manner.
Index ¶
Constants ¶
const (
// ContextTaskID is the key for the current task-id stored in the context.Context when executing tasks.
ContextTaskID = "task-id"
)
Variables ¶
This section is empty.
Functions ¶
func HasFailedStatus ¶
HasFailedStatus determines whether a task has failed or not. Note that this is about a final status.
func HasFinalStatus ¶
HasFinalStatus determines whether a task has a final status or not.
func HasSucceededStatus ¶
HasSucceededStatus determines whether a task has succeeded or not. Note that this is about a final status.
func IsTaskObjectNotFound ¶
IsTaskObjectNotFound checks whether the given error indicates the problem of an task object not being found or not. In case you want to lookup a task object that cannot be found in the underlying storage, an error that you can identify using this method is returned.
Types ¶
type ActiveStatus ¶
type ActiveStatus string
ActiveStatus represents a status indicating activation or deactivation.
const ( // StatusStarted represents a running task StatusStarted ActiveStatus = "started" // StatusStopped represents a stopped task, that has not been started yet StatusStopped ActiveStatus = "stopped" )
type Config ¶
type Config struct { Storage Storage // WaitSleep represents the time to sleep between state-check cycles. WaitSleep time.Duration // Logger provides an initialised logger. Logger logging.Logger }
Config represents the configurations for the task service that is going to be created.
func DefaultConfig ¶
func DefaultConfig() Config
DefaultConfig returns a best effort default configuration for the task service.
type FinalStatus ¶
type FinalStatus string
FinalStatus represents any status that is final. A task having this status will not change its status anymore.
const ( // StatusFailed represents a task where the action return an error. StatusFailed FinalStatus = "failed" // StatusSucceeded represents a task where the action returned nil. StatusSucceeded FinalStatus = "succeeded" )
type Service ¶
type Service interface { // Create creates a new task object configured with the given action. The // task object is immediately returned and its corresponding action is // executed asynchronously. Create(ctx context.Context, action Action) (*Task, error) // FetchState fetches and returns the current state and status for the given // task ID. FetchState(ctx context.Context, taskID string) (*Task, error) // MarkAsSucceeded marks the task object as succeeded and persists its state. // The returned task object is actually the refreshed version of the provided // one. MarkAsSucceeded(ctx context.Context, taskObject *Task) (*Task, error) // MarkAsFailedWithError marks the task object as failed, adds information of // thegiven error and persists the task objects's state. The returned task // object is actually the refreshed version of the provided one. MarkAsFailedWithError(ctx context.Context, taskObject *Task, err error) (*Task, error) // PersistState writes the given task object to the configured Storage. PersistState(ctx context.Context, taskObject *Task) error // WaitForFinalStatus blocks and waits for the given task to reach a final // status. The given closer can end the waiting and thus stop blocking the // call to WaitForFinalStatus. WaitForFinalStatus(ctx context.Context, taskID string, closer <-chan struct{}) (*Task, error) }
Service represents a task managing unit being able to act on task objects.
func NewTaskService ¶
NewTaskService returns a new configured task service instance.
type Storage ¶
type Storage interface { // Get fetches the corresponding task object for the given task ID. Get(taskID string) (*Task, error) // Set persists the given task object for its corresponding task ID. Set(taskObject *Task) error }
Storage represents some storage solution to persist task objects.
func NewMemoryStorage ¶
func NewMemoryStorage() Storage
NewMemoryStorage creates a backend implementation for pseudo in-memory persistence.
type Task ¶
type Task struct { // ActiveStatus represents a status indicating activation or deactivation. ActiveStatus ActiveStatus // Error represents the message of an error occurred during task execution, if // any. Error error // FinalStatus represents any status that is final. A task having this status // will not change its status anymore. FinalStatus FinalStatus // ID represents the task identifier. ID string }
Task represents a task that is executable.