Files
photoprism/internal/workers/scheduler.go
2025-11-22 10:22:05 +01:00

54 lines
925 B
Go

package workers
import (
"fmt"
"github.com/go-co-op/gocron/v2"
)
var (
// Jobs keeps the scheduled background jobs keyed by name.
Jobs map[string]gocron.Job
// Scheduler is the shared job scheduler instance.
Scheduler gocron.Scheduler
)
func init() {
Jobs = make(map[string]gocron.Job)
}
// NewJob adds a new background job to the scheduler, see https://pkg.go.dev/github.com/go-co-op/gocron/v2.
func NewJob(name, schedule string, function func(), parameters ...any) error {
if schedule == "" {
return nil
}
if name == "" {
return fmt.Errorf("new job requires a name")
}
if function == nil {
return fmt.Errorf("new job requires a task to run")
}
job, err := Scheduler.NewJob(
gocron.CronJob(
schedule,
false,
),
gocron.NewTask(
function,
parameters...,
),
gocron.WithSingletonMode(gocron.LimitModeWait),
)
if err != nil {
return err
}
Jobs[name] = job
return nil
}