mirror of https://github.com/shunfei/cronsun
cron: 支持删除 job
parent
04b17ec3db
commit
d3e88e39ba
|
@ -19,6 +19,7 @@ type Cron struct {
|
||||||
indexes map[string]int
|
indexes map[string]int
|
||||||
stop chan struct{}
|
stop chan struct{}
|
||||||
add chan *Entry
|
add chan *Entry
|
||||||
|
del chan string
|
||||||
snapshot chan []*Entry
|
snapshot chan []*Entry
|
||||||
running bool
|
running bool
|
||||||
ErrorLog *log.Logger
|
ErrorLog *log.Logger
|
||||||
|
@ -88,6 +89,7 @@ func NewWithLocation(location *time.Location) *Cron {
|
||||||
entries: nil,
|
entries: nil,
|
||||||
indexes: make(map[string]int),
|
indexes: make(map[string]int),
|
||||||
add: make(chan *Entry),
|
add: make(chan *Entry),
|
||||||
|
del: make(chan string),
|
||||||
stop: make(chan struct{}),
|
stop: make(chan struct{}),
|
||||||
snapshot: make(chan []*Entry),
|
snapshot: make(chan []*Entry),
|
||||||
running: false,
|
running: false,
|
||||||
|
@ -104,12 +106,12 @@ func (f FuncJob) GetID() string {
|
||||||
}
|
}
|
||||||
func (f FuncJob) Run() { f() }
|
func (f FuncJob) Run() { f() }
|
||||||
|
|
||||||
// AddFunc adds a func to the Cron to be run on the given schedule.
|
// AddFunc adds or updates a func to the Cron to be run on the given schedule.
|
||||||
func (c *Cron) AddFunc(spec string, cmd func()) error {
|
func (c *Cron) AddFunc(spec string, cmd func()) error {
|
||||||
return c.AddJob(spec, FuncJob(cmd))
|
return c.AddJob(spec, FuncJob(cmd))
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddJob adds a Job to the Cron to be run on the given schedule.
|
// AddJob adds or updates a Job to the Cron to be run on the given schedule.
|
||||||
func (c *Cron) AddJob(spec string, cmd Job) error {
|
func (c *Cron) AddJob(spec string, cmd Job) error {
|
||||||
schedule, err := Parse(spec)
|
schedule, err := Parse(spec)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -119,7 +121,7 @@ func (c *Cron) AddJob(spec string, cmd Job) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Schedule adds a Job to the Cron to be run on the given schedule.
|
// Schedule adds or updates a Job to the Cron to be run on the given schedule.
|
||||||
func (c *Cron) Schedule(schedule Schedule, cmd Job) {
|
func (c *Cron) Schedule(schedule Schedule, cmd Job) {
|
||||||
entry := &Entry{
|
entry := &Entry{
|
||||||
ID: cmd.GetID(),
|
ID: cmd.GetID(),
|
||||||
|
@ -138,6 +140,28 @@ func (c *Cron) Schedule(schedule Schedule, cmd Job) {
|
||||||
c.add <- entry
|
c.add <- entry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DelFunc deletes a Job from the Cron.
|
||||||
|
func (c *Cron) DelFunc(cmd func()) {
|
||||||
|
c.DelJob(FuncJob(cmd))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DelJob deletes a Job from the Cron.
|
||||||
|
func (c *Cron) DelJob(cmd Job) {
|
||||||
|
index, ok := c.indexes[cmd.GetID()]
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.running {
|
||||||
|
c.del <- cmd.GetID()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.entries = append(c.entries[:index], c.entries[index+1:]...)
|
||||||
|
delete(c.indexes, cmd.GetID())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Entries returns a snapshot of the cron entries.
|
// Entries returns a snapshot of the cron entries.
|
||||||
func (c *Cron) Entries() []*Entry {
|
func (c *Cron) Entries() []*Entry {
|
||||||
if c.running {
|
if c.running {
|
||||||
|
@ -228,6 +252,15 @@ func (c *Cron) run() {
|
||||||
}
|
}
|
||||||
newEntry.Next = newEntry.Schedule.Next(time.Now().In(c.location))
|
newEntry.Next = newEntry.Schedule.Next(time.Now().In(c.location))
|
||||||
|
|
||||||
|
case id := <-c.del:
|
||||||
|
index, ok := c.indexes[id]
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
c.entries = append(c.entries[:index], c.entries[index+1:]...)
|
||||||
|
delete(c.indexes, id)
|
||||||
|
|
||||||
case <-c.snapshot:
|
case <-c.snapshot:
|
||||||
c.snapshot <- c.entrySnapshot()
|
c.snapshot <- c.entrySnapshot()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue