mirror of
https://github.com/navidrome/navidrome.git
synced 2026-02-28 04:46:18 -05:00
69 lines
2.6 KiB
Go
69 lines
2.6 KiB
Go
package host
|
|
|
|
import "context"
|
|
|
|
// TaskInfo holds the current state of a task.
|
|
type TaskInfo struct {
|
|
// Status is the current task status: "pending", "running",
|
|
// "completed", "failed", or "cancelled".
|
|
Status string `json:"status"`
|
|
// Message is the status/result message returned by the plugin callback.
|
|
Message string `json:"message"`
|
|
// Attempt is the current or last attempt number (1-based).
|
|
Attempt int32 `json:"attempt"`
|
|
}
|
|
|
|
// QueueConfig holds configuration for a task queue.
|
|
type QueueConfig struct {
|
|
// Concurrency is the max number of parallel workers. Default: 1.
|
|
// Capped by the plugin's manifest maxConcurrency.
|
|
Concurrency int32 `json:"concurrency"`
|
|
|
|
// MaxRetries is the number of times to retry a failed task. Default: 0.
|
|
MaxRetries int32 `json:"maxRetries"`
|
|
|
|
// BackoffMs is the initial backoff between retries in milliseconds.
|
|
// Doubles each retry (exponential: backoffMs * 2^(attempt-1)). Default: 1000.
|
|
BackoffMs int64 `json:"backoffMs"`
|
|
|
|
// DelayMs is the minimum delay between starting consecutive tasks
|
|
// in milliseconds. Useful for rate limiting. Default: 0.
|
|
DelayMs int64 `json:"delayMs"`
|
|
|
|
// RetentionMs is how long completed/failed/cancelled tasks are kept
|
|
// in milliseconds. Default: 3600000 (1h). Min: 60000 (1m). Max: 604800000 (1w).
|
|
RetentionMs int64 `json:"retentionMs"`
|
|
}
|
|
|
|
// TaskService provides persistent task queues for plugins.
|
|
//
|
|
// This service allows plugins to create named queues with configurable concurrency,
|
|
// retry policies, and rate limiting. Tasks are persisted to SQLite and survive
|
|
// server restarts. When a task is ready to execute, the host calls the plugin's
|
|
// nd_task_execute callback function.
|
|
//
|
|
//nd:hostservice name=Task permission=taskqueue
|
|
type TaskService interface {
|
|
// CreateQueue creates a named task queue with the given configuration.
|
|
// Zero-value fields in config use sensible defaults.
|
|
// If a queue with the same name already exists, returns an error.
|
|
// On startup, this also recovers any stale "running" tasks from a previous crash.
|
|
//nd:hostfunc
|
|
CreateQueue(ctx context.Context, name string, config QueueConfig) error
|
|
|
|
// Enqueue adds a task to the named queue. Returns the task ID.
|
|
// payload is opaque bytes passed back to the plugin on execution.
|
|
//nd:hostfunc
|
|
Enqueue(ctx context.Context, queueName string, payload []byte) (string, error)
|
|
|
|
// Get returns the current state of a task including its status,
|
|
// message, and attempt count.
|
|
//nd:hostfunc
|
|
Get(ctx context.Context, taskID string) (*TaskInfo, error)
|
|
|
|
// Cancel cancels a pending task. Returns error if already
|
|
// running, completed, or failed.
|
|
//nd:hostfunc
|
|
Cancel(ctx context.Context, taskID string) error
|
|
}
|