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: 0e2b37c0d8ce49360cb333bd3e5468f0c96c64bf
4
- data.tar.gz: 4b5be57f5f8a47415581f7c70182050891e5fbcb
3
+ metadata.gz: a9545fcacabab85924de6070358ad45b18b8ce0a
4
+ data.tar.gz: cf563160a416cd39d7e921a10d1168293988cfc4
5
5
  SHA512:
6
- metadata.gz: efcf179686dce26f852bfd443f8c0e9e5e624ae8630711b8ebce454fa8cf9b6e251220d729e255da034d33eeecd309cd272c5b8eb6d7b749bf7c773e5ed287c1
7
- data.tar.gz: 4d388300b3d9ff1fe0ccff4f7962fd5fd543522085bcde9170ab1ff08795ceaecfbb7b06b1ae16348167fc03fa054b006e54f3cb9bfdb1d2fd8c9bd8f21a404a
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
- @clock.ping(reference, Time.now.getlocal + @refresh_interval, :refresh_runner)
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 = Mutex.new
97
- @clock = 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
@@ -1,3 +1,3 @@
1
1
  module ForemanTasksCore
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.1.4'.freeze
3
3
  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.3
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-06-26 00:00:00.000000000 Z
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: []