Mercurial > gemma
diff pkg/scheduler/scheduler.go @ 1590:2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 14 Dec 2018 12:34:12 +0100 |
parents | 62171cd9a42b |
children | f39957ea08aa |
line wrap: on
line diff
--- a/pkg/scheduler/scheduler.go Fri Dec 14 11:29:28 2018 +0100 +++ b/pkg/scheduler/scheduler.go Fri Dec 14 12:34:12 2018 +0100 @@ -128,6 +128,11 @@ global.unbindAction(name, user, cfgID) } +// UnbindByID unbinds all schedules with a given id. +func UnbindByID(cfgID int64) { + global.unbindByID(cfgID) +} + // UnbindUser unbinds all schedules for a given user. func UnbindUser(user string) { global.unbindUser(user) @@ -181,6 +186,36 @@ s.cr.Start() } +func (s *scheduler) unbindByID(cfgID int64) { + s.mu.Lock() + defer s.mu.Unlock() + + entries := s.cr.Entries() + + var found bool + for _, entry := range entries { + ua := entry.Job.(*userAction) + if ua.cfgID != nil && *ua.cfgID == cfgID { + found = true + break + } + } + + if !found { + return + } + + s.cr.Stop() + s.cr = cron.New() + for _, entry := range entries { + ua := entry.Job.(*userAction) + if ua.cfgID == nil || *ua.cfgID != cfgID { + s.cr.Schedule(entry.Schedule, entry.Job) + } + } + s.cr.Start() +} + func (s *scheduler) unbindAction(name, user string, cfgID *int64) { s.mu.Lock() defer s.mu.Unlock()