Mercurial > gemma
annotate pkg/scheduler/scheduler.go @ 2294:b2de7a77b570
import soundingresult: fix URL
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Mon, 18 Feb 2019 11:11:12 +0100 |
parents | b51673c1e604 |
children | 6691bf76af1c |
rev | line source |
---|---|
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 // without warranty, see README.md and license for details. |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 // |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 // |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
7 // Copyright (C) 2018 by via donau |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 // Software engineering by Intevation GmbH |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 // |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 // Author(s): |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 package scheduler |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 import ( |
1551
d9eba69f6515
Registered a dummy callback function for scheduled fairway imports in the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1550
diff
changeset
|
17 "log" |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 "sync" |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 "github.com/robfig/cron" |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 ) |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
23 // Action is called with a configuration id. |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
24 type Action func(cfgID int64) |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
25 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
26 type userAction struct { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
27 scheduler *scheduler |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
28 name string |
1652
f39957ea08aa
Scheduled imports: The configuration id is not optional as it used to load the concrete configuration from the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1590
diff
changeset
|
29 cfgID int64 |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 } |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 type scheduler struct { |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 cr *cron.Cron |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
34 actions map[string]Action |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 mu sync.Mutex |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 } |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
38 // Run implements cron.Job. |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
39 func (ua *userAction) Run() { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
40 if a := ua.scheduler.action(ua.name); a != nil { |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
41 a(ua.cfgID) |
1556
6869eb94ead2
Don't error if an action is not defined if bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1551
diff
changeset
|
42 } else { |
6869eb94ead2
Don't error if an action is not defined if bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1551
diff
changeset
|
43 log.Printf("warn: scheduled action '%s' not found.", ua.name) |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
44 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
45 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
46 |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 var global = scheduler{ |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 cr: cron.New(), |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
49 actions: make(map[string]Action), |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
50 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
51 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
52 // RegisterAction registers a named action to the global scheduler. |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
53 func RegisterAction(name string, action Action) { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
54 global.registerAction(name, action) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
55 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
56 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
57 // UnregisterAction ungesiters a named action from the global scheduler. |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
58 func UnregisterAction(name string) { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
59 global.unregisterAction(name) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
60 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
61 |
1557
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
62 // BoundAction is a complete set of infos for |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
63 // an action to be bound to a schedule and |
1652
f39957ea08aa
Scheduled imports: The configuration id is not optional as it used to load the concrete configuration from the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1590
diff
changeset
|
64 // configuration id. |
1557
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
65 type BoundAction struct { |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
66 Name string |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
67 Spec string |
1652
f39957ea08aa
Scheduled imports: The configuration id is not optional as it used to load the concrete configuration from the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1590
diff
changeset
|
68 CfgID int64 |
1557
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
69 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
70 |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
71 // BootActions setup the global scheduler with a set |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
72 // of bound actions delivered by the next function. |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
73 func BootActions(next func(*BoundAction) (bool, error)) error { |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
74 return global.bootActions(next) |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
75 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
76 |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
77 func (s *scheduler) bootActions(next func(*BoundAction) (bool, error)) error { |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
78 |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
79 cr := cron.New() |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
80 |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
81 for { |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
82 var ba BoundAction |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
83 ok, err := next(&ba) |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
84 if err != nil { |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
85 return err |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
86 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
87 if !ok { |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
88 break |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
89 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
90 schedule, err := cron.Parse(ba.Spec) |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
91 if err != nil { |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
92 return err |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
93 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
94 job := &userAction{ |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
95 scheduler: s, |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
96 cfgID: ba.CfgID, |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
97 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
98 cr.Schedule(schedule, job) |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
99 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
100 |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
101 s.mu.Lock() |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
102 defer s.mu.Unlock() |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
103 |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
104 s.cr.Stop() |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
105 s.cr = cr |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
106 cr.Start() |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
107 |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
108 return nil |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
109 } |
62171cd9a42b
Import scheduler: Start scheduler a gemma boot time with configurations from database which have a schedule.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1556
diff
changeset
|
110 |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
111 // BindAction binds a named action to a cron spec and |
1652
f39957ea08aa
Scheduled imports: The configuration id is not optional as it used to load the concrete configuration from the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1590
diff
changeset
|
112 // a configuration id. |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
113 func BindAction(name, spec string, cfgID int64) error { |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
114 return global.bindAction(name, spec, cfgID) |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
115 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
116 |
1550
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
117 // UnbindAction unbinds a named action from a user and |
1652
f39957ea08aa
Scheduled imports: The configuration id is not optional as it used to load the concrete configuration from the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1590
diff
changeset
|
118 // a configuration id. |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
119 func UnbindAction(name string, cfgID int64) { |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
120 global.unbindAction(name, cfgID) |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
121 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
122 |
1590
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
123 // UnbindByID unbinds all schedules with a given id. |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
124 func UnbindByID(cfgID int64) { |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
125 global.unbindByID(cfgID) |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
126 } |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
127 |
1689
6caf5cd6249e
WFS: Made golint happy.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1654
diff
changeset
|
128 // UnbindByIDs unbinds all schedules for a given user. |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
129 func UnbindByIDs(ids map[int64]struct{}) { |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
130 global.unbindByIDs(ids) |
1544
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
131 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
132 |
1550
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
133 // HasAction asks if there is an action with a given name. |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
134 func HasAction(name string) bool { |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
135 return global.hasAction(name) |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
136 } |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
137 |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
138 func (s *scheduler) hasAction(name string) bool { |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
139 s.mu.Lock() |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
140 defer s.mu.Unlock() |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
141 return s.actions[name] != nil |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
142 } |
fe633765e05b
Started with JSON model for import configurations.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
143 |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
144 func (s *scheduler) unbindByIDs(ids map[int64]struct{}) { |
1544
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
145 s.mu.Lock() |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
146 defer s.mu.Unlock() |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
147 |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
148 entries := s.cr.Entries() |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
149 |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
150 if len(entries) == 0 { |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
151 return |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
152 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
153 |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
154 var found bool |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
155 for _, entry := range entries { |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
156 ua := entry.Job.(*userAction) |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
157 if _, found = ids[ua.cfgID]; found { |
1544
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
158 break |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
159 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
160 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
161 if !found { |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
162 return |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
163 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
164 |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
165 s.cr.Stop() |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
166 s.cr = cron.New() |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
167 for _, entry := range entries { |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
168 ua := entry.Job.(*userAction) |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
169 if _, found := ids[ua.cfgID]; !found { |
1544
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
170 s.cr.Schedule(entry.Schedule, entry.Job) |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
171 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
172 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
173 s.cr.Start() |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
174 } |
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1541
diff
changeset
|
175 |
1590
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
176 func (s *scheduler) unbindByID(cfgID int64) { |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
177 s.mu.Lock() |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
178 defer s.mu.Unlock() |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
179 |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
180 entries := s.cr.Entries() |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
181 |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
182 var found bool |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
183 for _, entry := range entries { |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
184 ua := entry.Job.(*userAction) |
1652
f39957ea08aa
Scheduled imports: The configuration id is not optional as it used to load the concrete configuration from the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1590
diff
changeset
|
185 if ua.cfgID == cfgID { |
1590
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
186 found = true |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
187 break |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
188 } |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
189 } |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
190 |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
191 if !found { |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
192 return |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
193 } |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
194 |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
195 s.cr.Stop() |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
196 s.cr = cron.New() |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
197 for _, entry := range entries { |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
198 ua := entry.Job.(*userAction) |
1652
f39957ea08aa
Scheduled imports: The configuration id is not optional as it used to load the concrete configuration from the database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1590
diff
changeset
|
199 if ua.cfgID != cfgID { |
1590
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
200 s.cr.Schedule(entry.Schedule, entry.Job) |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
201 } |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
202 } |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
203 s.cr.Start() |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
204 } |
2fdd8e57542d
Added DELETE /imports/scheduler/{id:[0-9]+} to delete a schedule from the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1557
diff
changeset
|
205 |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
206 func (s *scheduler) unbindAction(name string, cfgID int64) { |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
207 s.mu.Lock() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
208 defer s.mu.Unlock() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
209 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
210 entries := s.cr.Entries() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
211 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
212 var found *userAction |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
213 for _, entry := range entries { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
214 ua := entry.Job.(*userAction) |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
215 if ua.name == name && cfgID == ua.cfgID { |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
216 // Already have such a action/cfg tuple -> re-schedule. |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
217 found = ua |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
218 break |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
219 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
220 } |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
221 |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
222 if found == nil { |
1556
6869eb94ead2
Don't error if an action is not defined if bound.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1551
diff
changeset
|
223 return |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
224 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
225 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
226 s.cr.Stop() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
227 s.cr = cron.New() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
228 for _, entry := range entries { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
229 ua := entry.Job.(*userAction) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
230 if ua != found { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
231 s.cr.Schedule(entry.Schedule, entry.Job) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
232 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
233 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
234 s.cr.Start() |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
235 } |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
237 func (s *scheduler) bindAction(name, spec string, cfgID int64) error { |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
238 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
239 schedule, err := cron.Parse(spec) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
240 if err != nil { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
241 return err |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
242 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
243 |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
244 s.mu.Lock() |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
245 defer s.mu.Unlock() |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
246 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
247 entries := s.cr.Entries() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
248 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
249 var found *userAction |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
250 for _, entry := range entries { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
251 ua := entry.Job.(*userAction) |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
252 if ua.name == name && cfgID == ua.cfgID { |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
253 // Already have such a user/action/cfg tuple -> re-schedule. |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
254 found = ua |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
255 break |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
256 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
257 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
258 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
259 if found == nil { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
260 // Add to current plan. |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1652
diff
changeset
|
261 job := &userAction{scheduler: s, name: name, cfgID: cfgID} |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
262 s.cr.Schedule(schedule, job) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
263 } else { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
264 // If found re-build all. |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
265 s.cr.Stop() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
266 s.cr = cron.New() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
267 for _, entry := range entries { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
268 ua := entry.Job.(*userAction) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
269 var sch cron.Schedule |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
270 if found == ua { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
271 // replace with new schedule. |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
272 sch = schedule |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
273 } else { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
274 sch = entry.Schedule |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
275 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
276 s.cr.Schedule(sch, entry.Job) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
277 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
278 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
279 s.cr.Start() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
280 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
281 return nil |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
282 } |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
283 |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
284 func (s *scheduler) action(name string) Action { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
285 s.mu.Lock() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
286 defer s.mu.Unlock() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
287 return s.actions[name] |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
288 } |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
289 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
290 func (s *scheduler) registerAction(name string, action Action) { |
1551
d9eba69f6515
Registered a dummy callback function for scheduled fairway imports in the scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1550
diff
changeset
|
291 log.Printf("info: register action '%s' in scheduler.", name) |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
292 s.mu.Lock() |
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
293 defer s.mu.Unlock() |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
294 s.actions[name] = action |
1540
251ee25accce
Droped on scheduler in favor for a third party library.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
295 } |
1541
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
296 |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
297 func (s *scheduler) unregisterAction(name string) { |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
298 s.mu.Lock() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
299 defer s.mu.Unlock() |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
300 delete(s.actions, name) |
03fcad10104a
Added an internal cron job executor which binds actions to tuples of cron schedule, user name and an optional configuation id.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1540
diff
changeset
|
301 } |