feat: update cronjob
This commit is contained in:
@@ -72,7 +72,7 @@ func Parse(source string) []Provider {
|
|||||||
return []Provider{}
|
return []Provider{}
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.HasSuffix(source, "/provider.go") {
|
if strings.HasSuffix(source, "/provider.gen.go") {
|
||||||
return []Provider{}
|
return []Provider{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package jobs
|
|||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/riverqueue/river"
|
||||||
. "github.com/riverqueue/river"
|
. "github.com/riverqueue/river"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
_ "go.ipao.vip/atom"
|
_ "go.ipao.vip/atom"
|
||||||
@@ -16,35 +17,17 @@ type CronJob struct {
|
|||||||
log *logrus.Entry `inject:"false"`
|
log *logrus.Entry `inject:"false"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (j *CronJob) Prepare() error {
|
|
||||||
j.log = logrus.WithField("module", "cron")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (CronJob) Kind() string {
|
|
||||||
return "cron_job"
|
|
||||||
}
|
|
||||||
|
|
||||||
// InsertOpts implements contracts.CronJob.
|
|
||||||
func (CronJob) InsertOpts() InsertOpts {
|
|
||||||
return InsertOpts{
|
|
||||||
MaxAttempts: 1,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// JobArgs implements contracts.CronJob.
|
// JobArgs implements contracts.CronJob.
|
||||||
func (CronJob) JobArgs() JobArgs {
|
func (CronJob) Args() []contracts.CronJobArg {
|
||||||
return SortArgs{
|
return []contracts.CronJobArg{
|
||||||
Strings: []string{"a", "c", "b", "d"},
|
{
|
||||||
}
|
Arg: SortArgs{
|
||||||
}
|
Strings: []string{"a", "b", "c", "d"},
|
||||||
|
},
|
||||||
|
|
||||||
// Periodic implements contracts.CronJob.
|
Kind: "cron_job",
|
||||||
func (cron *CronJob) Periodic() PeriodicSchedule {
|
PeriodicInterval: river.PeriodicInterval(time.Second * 10),
|
||||||
return PeriodicInterval(time.Minute)
|
RunOnStart: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// RunOnStart implements contracts.CronJob.
|
|
||||||
func (CronJob) RunOnStart() bool {
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
"{{.ModuleName}}/providers/job"
|
"{{.ModuleName}}/providers/job"
|
||||||
"{{.ModuleName}}/providers/postgres"
|
"{{.ModuleName}}/providers/postgres"
|
||||||
|
|
||||||
"github.com/riverqueue/river"
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"go.uber.org/dig"
|
"go.uber.org/dig"
|
||||||
@@ -56,37 +55,10 @@ func Serve(cmd *cobra.Command, args []string) error {
|
|||||||
log.SetLevel(log.DebugLevel)
|
log.SetLevel(log.DebugLevel)
|
||||||
}
|
}
|
||||||
|
|
||||||
client, err := svc.Job.Client()
|
if err := svc.Job.Start(ctx); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer svc.Job.Close(ctx)
|
||||||
for _, cronJob := range svc.CronJobs {
|
|
||||||
log.
|
|
||||||
WithField("module", "cron").
|
|
||||||
WithField("name", cronJob.Description()).
|
|
||||||
WithField("duration", cronJob.Periodic().Seconds()).
|
|
||||||
Info("registering cron job")
|
|
||||||
|
|
||||||
for _, jobArgs := range cronJob.JobArgs() {
|
|
||||||
client.PeriodicJobs().Add(
|
|
||||||
river.NewPeriodicJob(
|
|
||||||
river.PeriodicInterval(cronJob.Periodic()),
|
|
||||||
func() (river.JobArgs, *river.InsertOpts) {
|
|
||||||
return jobArgs, cronJob.InsertOpts()
|
|
||||||
},
|
|
||||||
&river.PeriodicJobOpts{
|
|
||||||
RunOnStart: cronJob.RunOnStart(),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := client.Start(ctx); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer client.StopAndCancel(ctx)
|
|
||||||
|
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -113,19 +113,23 @@ func (q *Job) StopAndCancel(ctx context.Context) error {
|
|||||||
return client.StopAndCancel(ctx)
|
return client.StopAndCancel(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Job) AddPeriodicJobs(job contracts.CronJob) (rivertype.PeriodicJobHandle, error) {
|
func (q *Job) AddPeriodicJobs(job contracts.CronJob) (map[string]rivertype.PeriodicJobHandle, error) {
|
||||||
client, err := q.Client()
|
client, err := q.Client()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return client.PeriodicJobs().Add(river.NewPeriodicJob(
|
handles := make(map[string]rivertype.PeriodicJobHandle)
|
||||||
job.Periodic(),
|
for _, job := range job.Args() {
|
||||||
|
handles[job.Kind] = client.PeriodicJobs().Add(river.NewPeriodicJob(
|
||||||
|
job.PeriodicInterval,
|
||||||
func() (river.JobArgs, *river.InsertOpts) {
|
func() (river.JobArgs, *river.InsertOpts) {
|
||||||
return job.JobArgs(), lo.ToPtr(job.InsertOpts())
|
return job.Arg, lo.ToPtr(job.Arg.InsertOpts())
|
||||||
},
|
},
|
||||||
&river.PeriodicJobOpts{
|
&river.PeriodicJobOpts{
|
||||||
RunOnStart: job.RunOnStart(),
|
RunOnStart: job.RunOnStart,
|
||||||
},
|
},
|
||||||
)), nil
|
))
|
||||||
|
}
|
||||||
|
return handles, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user