11 type jobIdentifier int
14 JobIdCloseDecisions jobIdentifier = iota
17 var rescheduleChannel = make(chan jobIdentifier, 1)
19 func JobScheduler(quitChannel chan int) {
20 var jobs = map[jobIdentifier]Job{
21 JobIdCloseDecisions: NewCloseDecisionsJob(),
23 logger.Println("INFO started job scheduler")
27 case jobId := <-rescheduleChannel:
29 logger.Println("INFO reschedule job", job)
32 for _, job := range jobs {
35 logger.Println("INFO stop job scheduler")
41 type CloseDecisionsJob struct {
45 func NewCloseDecisionsJob() *CloseDecisionsJob {
46 job := &CloseDecisionsJob{}
51 func (j *CloseDecisionsJob) Schedule() {
52 var nextDue *time.Time
53 nextDue, err := GetNextPendingDecisionDue()
55 logger.Fatal("ERROR Could not get next pending due date")
68 logger.Println("INFO scheduling CloseDecisionsJob for", nextDue)
69 when := nextDue.Sub(time.Now())
73 j.timer = time.AfterFunc(when, j.Run)
78 func (j *CloseDecisionsJob) Stop() {
84 func (j *CloseDecisionsJob) Run() {
85 logger.Println("INFO running CloseDecisionsJob")
86 err := CloseDecisions()
88 logger.Println("ERROR closing decisions", err)
90 rescheduleChannel <- JobIdCloseDecisions
93 func (j *CloseDecisionsJob) String() string {
94 return "CloseDecisionsJob"