mirror of
https://github.com/photoprism/photoprism.git
synced 2025-12-11 16:24:11 +01:00
54 lines
925 B
Go
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
|
|
}
|