|
|
@@ -27,6 +27,7 @@ type Job interface {
|
|
|
type Entry struct {
|
|
|
*Schedule
|
|
|
Next time.Time
|
|
|
+ Prev time.Time
|
|
|
Job Job
|
|
|
}
|
|
|
|
|
|
@@ -67,7 +68,10 @@ func (c *Cron) AddFunc(spec string, cmd func()) {
|
|
|
}
|
|
|
|
|
|
func (c *Cron) AddJob(spec string, cmd Job) {
|
|
|
- entry := &Entry{Parse(spec), time.Time{}, cmd}
|
|
|
+ entry := &Entry{
|
|
|
+ Schedule: Parse(spec),
|
|
|
+ Job: cmd,
|
|
|
+ }
|
|
|
if !c.running {
|
|
|
c.entries = append(c.entries, entry)
|
|
|
return
|
|
|
@@ -121,6 +125,7 @@ func (c *Cron) run() {
|
|
|
break
|
|
|
}
|
|
|
go e.Job.Run()
|
|
|
+ e.Prev = e.Next
|
|
|
e.Next = e.Schedule.Next(effective)
|
|
|
}
|
|
|
|
|
|
@@ -145,7 +150,12 @@ func (c *Cron) Stop() {
|
|
|
func (c *Cron) entrySnapshot() []*Entry {
|
|
|
entries := []*Entry{}
|
|
|
for _, e := range c.entries {
|
|
|
- entries = append(entries, &Entry{e.Schedule, e.Next, e.Job})
|
|
|
+ entries = append(entries, &Entry{
|
|
|
+ Schedule: e.Schedule,
|
|
|
+ Next: e.Next,
|
|
|
+ Prev: e.Prev,
|
|
|
+ Job: e.Job,
|
|
|
+ })
|
|
|
}
|
|
|
return entries
|
|
|
}
|