Files
threshold/internal/scheduler/options.go
T
Louis Ruch feb5d7385d Louis job scheduler (#1197)
* Adds job repo
* Adds scheduler
* Adds plugin table which is a place holder for future expansion of the scheduler. Currently all jobs that are created are linked to the pi_system plugin which are jobs that are held in a local registeredJobs map populated at controller startup.
2021-05-06 14:54:10 -07:00

88 lines
2.5 KiB
Go

package scheduler
import "time"
const (
defaultRunJobsLimit = 1
defaultRunJobsInterval = time.Minute
defaultMonitorInterval = 30 * time.Second
defaultInterruptThreshold = 5 * time.Minute
)
// getOpts - iterate the inbound Options and return a struct
func getOpts(opt ...Option) options {
opts := getDefaultOptions()
for _, o := range opt {
o(&opts)
}
return opts
}
// Option - how Options are passed as arguments
type Option func(*options)
// options = how options are represented
type options struct {
withRunJobsLimit uint
withRunJobInterval time.Duration
withMonitorInterval time.Duration
withInterruptThreshold time.Duration
}
func getDefaultOptions() options {
return options{
withRunJobsLimit: defaultRunJobsLimit,
withRunJobInterval: defaultRunJobsInterval,
withMonitorInterval: defaultMonitorInterval,
withInterruptThreshold: defaultInterruptThreshold,
}
}
// WithRunJobsLimit provides an option to provide the number of jobs that will be requested
// by the scheduler when querying for jobs to run.
// If WithRunJobsLimit == 0, then default run jobs limit is used.
func WithRunJobsLimit(l uint) Option {
return func(o *options) {
o.withRunJobsLimit = l
if o.withRunJobsLimit == 0 {
o.withRunJobsLimit = defaultRunJobsLimit
}
}
}
// WithRunJobsInterval provides an option to provide the interval at which the scheduler
// will query the repository for jobs to run.
// If WithRunJobsInterval == 0, then default interval is used.
func WithRunJobsInterval(l time.Duration) Option {
return func(o *options) {
o.withRunJobInterval = l
if o.withRunJobInterval == 0 {
o.withRunJobInterval = defaultRunJobsInterval
}
}
}
// WithMonitorInterval provides an option to provide the interval at which the scheduler
// will query running jobs for status and update the repository accordingly.
// If WithMonitorInterval == 0, then default interval is used.
func WithMonitorInterval(l time.Duration) Option {
return func(o *options) {
o.withMonitorInterval = l
if o.withMonitorInterval == 0 {
o.withMonitorInterval = defaultMonitorInterval
}
}
}
// WithInterruptThreshold provides an option to provide the duration after which a controller
// will interrupt a running job that is not updating its status.
// If WithInterruptThreshold == 0, then default duration is used.
func WithInterruptThreshold(l time.Duration) Option {
return func(o *options) {
o.withInterruptThreshold = l
if o.withInterruptThreshold == 0 {
o.withInterruptThreshold = defaultInterruptThreshold
}
}
}