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()