Some checks failed
Backend Tests / Static Checks (push) Has been cancelled
Backend Tests / Tests (other) (push) Has been cancelled
Backend Tests / Tests (plugin) (push) Has been cancelled
Backend Tests / Tests (server) (push) Has been cancelled
Backend Tests / Tests (store) (push) Has been cancelled
Build Canary Image / build-frontend (push) Has been cancelled
Build Canary Image / build-push (linux/amd64) (push) Has been cancelled
Build Canary Image / build-push (linux/arm64) (push) Has been cancelled
Build Canary Image / merge (push) Has been cancelled
Frontend Tests / Lint (push) Has been cancelled
Frontend Tests / Build (push) Has been cancelled
Proto Linter / Lint Protos (push) Has been cancelled
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package scheduler
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
// JobHandler is the function signature for scheduled job handlers.
|
|
// The context passed to the handler will be canceled if the scheduler is shutting down.
|
|
type JobHandler func(ctx context.Context) error
|
|
|
|
// Job represents a scheduled task.
|
|
type Job struct {
|
|
// Name is a unique identifier for this job (required).
|
|
// Used for logging and metrics.
|
|
Name string
|
|
|
|
// Schedule is a cron expression defining when this job runs (required).
|
|
// Supports standard 5-field format: "minute hour day month weekday"
|
|
// Examples: "0 * * * *" (hourly), "0 0 * * *" (daily at midnight)
|
|
Schedule string
|
|
|
|
// Timezone for schedule evaluation (optional, defaults to UTC).
|
|
// Use IANA timezone names: "America/New_York", "Europe/London", etc.
|
|
Timezone string
|
|
|
|
// Handler is the function to execute when the job triggers (required).
|
|
Handler JobHandler
|
|
|
|
// Description provides human-readable context about what this job does (optional).
|
|
Description string
|
|
|
|
// Tags allow categorizing jobs for filtering/monitoring (optional).
|
|
Tags []string
|
|
}
|
|
|
|
// Validate checks if the job definition is valid.
|
|
func (j *Job) Validate() error {
|
|
if j.Name == "" {
|
|
return errors.New("job name is required")
|
|
}
|
|
|
|
if j.Schedule == "" {
|
|
return errors.New("job schedule is required")
|
|
}
|
|
|
|
// Validate cron expression using parser
|
|
if _, err := ParseCronExpression(j.Schedule); err != nil {
|
|
return errors.Wrap(err, "invalid cron expression")
|
|
}
|
|
|
|
if j.Handler == nil {
|
|
return errors.New("job handler is required")
|
|
}
|
|
|
|
return nil
|
|
}
|