foreman-tasks-core 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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: []