foreman-tasks-core 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a9545fcacabab85924de6070358ad45b18b8ce0a
|
4
|
+
data.tar.gz: cf563160a416cd39d7e921a10d1168293988cfc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f662ebb982a6545dbf65fbe8e54b97928105ec1c8e9338207ca610e486fdf706aba2a326f090c3f9ff18217b09d2f970a0aafb8719d217b802b9a429f3cdbb1
|
7
|
+
data.tar.gz: a94805c8b5ce1762fc22f4d69aa0aa9ed3e93d729b46a460ef016792ab284a166055e554c59c6440b812b00355f9c1b94322ff941d7dafffb34818aa3a64187d
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'foreman_tasks_core/ticker'
|
2
|
+
|
1
3
|
module ForemanTasksCore
|
2
4
|
module Runner
|
3
5
|
class Dispatcher
|
@@ -11,6 +13,7 @@ module ForemanTasksCore
|
|
11
13
|
def initialize(dispatcher, suspended_action, runner, clock, logger, options = {})
|
12
14
|
@dispatcher = dispatcher
|
13
15
|
@clock = clock
|
16
|
+
@ticker = dispatcher.ticker
|
14
17
|
@logger = logger
|
15
18
|
@suspended_action = suspended_action
|
16
19
|
@runner = runner
|
@@ -82,7 +85,7 @@ module ForemanTasksCore
|
|
82
85
|
def plan_next_refresh
|
83
86
|
if !@finishing && !@refresh_planned
|
84
87
|
@logger.debug("planning to refresh #{@runner.id}")
|
85
|
-
@
|
88
|
+
@ticker.tell([:add_event, reference, :refresh_runner])
|
86
89
|
@refresh_planned = true
|
87
90
|
end
|
88
91
|
end
|
@@ -92,10 +95,12 @@ module ForemanTasksCore
|
|
92
95
|
end
|
93
96
|
end
|
94
97
|
|
98
|
+
attr_reader :ticker
|
95
99
|
def initialize(clock, logger)
|
96
|
-
@mutex
|
97
|
-
@clock
|
100
|
+
@mutex = Mutex.new
|
101
|
+
@clock = clock
|
98
102
|
@logger = logger
|
103
|
+
@ticker = ::ForemanTasksCore::Ticker.spawn('dispatcher-ticker', @clock, @logger)
|
99
104
|
@runner_actors = {}
|
100
105
|
@runner_suspended_actions = {}
|
101
106
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module ForemanTasksCore
|
2
|
+
class Ticker < ::Dynflow::Actor
|
3
|
+
attr_reader :clock
|
4
|
+
|
5
|
+
def initialize(clock, logger)
|
6
|
+
@clock = clock
|
7
|
+
@logger = logger
|
8
|
+
@events = []
|
9
|
+
@refresh_interval = 1
|
10
|
+
plan_next_tick
|
11
|
+
end
|
12
|
+
|
13
|
+
def tick
|
14
|
+
@logger.debug("Ticker ticking for #{@events.size} events")
|
15
|
+
@events.each do |(target, args)|
|
16
|
+
pass_event(target, args)
|
17
|
+
end
|
18
|
+
@events = []
|
19
|
+
ensure
|
20
|
+
@planned = false
|
21
|
+
plan_next_tick
|
22
|
+
end
|
23
|
+
|
24
|
+
def add_event(target, args)
|
25
|
+
@events << [target, args]
|
26
|
+
plan_next_tick
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def pass_event(target, args)
|
32
|
+
target.tell(args)
|
33
|
+
rescue => e
|
34
|
+
@logger.error("Failed passing event to #{target} with #{args}")
|
35
|
+
@logger.error(e)
|
36
|
+
end
|
37
|
+
|
38
|
+
def plan_next_tick
|
39
|
+
if !@planned && !@events.empty?
|
40
|
+
@clock.ping(reference, Time.now.getlocal + @refresh_interval, :tick)
|
41
|
+
@planned = true
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman-tasks-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Nečas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
Common code used both at Forman and Foreman proxy regarding tasks
|
@@ -29,6 +29,7 @@ files:
|
|
29
29
|
- lib/foreman_tasks_core/runner/update.rb
|
30
30
|
- lib/foreman_tasks_core/settings_loader.rb
|
31
31
|
- lib/foreman_tasks_core/shareable_action.rb
|
32
|
+
- lib/foreman_tasks_core/ticker.rb
|
32
33
|
- lib/foreman_tasks_core/version.rb
|
33
34
|
homepage: https://github.com/theforeman/foreman-tasks
|
34
35
|
licenses: []
|