concron/src/tasks/scheduler.go
2019-03-28 18:02:02 +03:00

55 lines
923 B
Go

package tasks
import (
"errors"
"github.com/robfig/cron"
log "github.com/sirupsen/logrus"
)
type Scheduler struct {
tasks []*Task
cron *cron.Cron
started bool
}
func (s *Scheduler) AddTasks(taskList []*Task) error {
s.tasks = taskList
for _, task := range s.tasks {
if err := s.cron.AddFunc(task.Crontab, task.Run); err != nil {
return err
}
}
return nil
}
func (s *Scheduler) Start() error {
if s.started {
return errors.New("cannot start scheduler, already started")
}
s.cron.Start()
log.Info("scheduler was started")
s.started = true
return nil
}
func (s *Scheduler) Stop() error {
if s.started {
return errors.New("cannot stop scheduler, already stopped")
}
s.cron.Stop()
log.Info("scheduler was stopped")
s.started = false
return nil
}
func NewScheduler() (*Scheduler, error) {
sched := Scheduler{}
sched.cron = cron.New()
sched.started = false
return &sched, nil
}