Files
silo-server/internal/taskmanager/task.go
T

56 lines
1.4 KiB
Go

package taskmanager
import (
"context"
"encoding/json"
"errors"
)
var (
ErrTaskAlreadyRunning = errors.New("task is already running")
ErrTaskNotRunning = errors.New("task is not running")
ErrTaskNotFound = errors.New("task not found")
)
// TaskState represents the current runtime state of a task.
type TaskState string
const (
TaskStateIdle TaskState = "idle"
TaskStateRunning TaskState = "running"
TaskStateCancelling TaskState = "cancelling"
)
// TaskCategory groups tasks for display.
type TaskCategory string
const (
TaskCategoryLibrary TaskCategory = "library"
TaskCategoryMetadata TaskCategory = "metadata"
TaskCategorySystem TaskCategory = "system"
)
// Task is the interface that all background jobs implement.
type Task interface {
Key() string
Name() string
Description() string
Category() TaskCategory
IsHidden() bool
DefaultTriggers() []TriggerConfig
Execute(ctx context.Context, progress ProgressReporter) error
}
// ScheduledConditionalTask lets a task suppress automatic trigger executions
// when there is no work to do. Manual RunTask calls still execute normally so
// admins can force a check and see a result.
type ScheduledConditionalTask interface {
ShouldRun(ctx context.Context) (bool, error)
}
// ProgressReporter allows tasks to report progress and result data during execution.
type ProgressReporter interface {
Report(percent float64, message string)
SetResultData(data json.RawMessage)
}