radagast 0.0.1 → 0.0.2

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: 560f233b948a123e0fb646dceeb36fcb04d59e70
4
- data.tar.gz: 708db7870f7d5d310bc9075bd5a410d2e3892b1c
3
+ metadata.gz: 3a3aeecf960c69e2b139b0c8a3768ea662617742
4
+ data.tar.gz: f822537df36098ae47ee5b887375bbbce4273e1d
5
5
  SHA512:
6
- metadata.gz: 625289d4021c881f27e268fe41f202e02bddb279bb9cbdf7426444440382bc28d7f14964074c3d7811120b1e1bcfeb86ed46951d41fe378af41876017c9197b2
7
- data.tar.gz: bcdd6fabb52f4dee4e4fa2aeae653ca6059554011cc41f410ced512b9d4ebb141012e98117b378b3b9be92eea7e2717bf270f3c1def0403f85857bfd8e2c70ae
6
+ metadata.gz: 500012876ff082a92f70ffe389fc0a4f4cb033842d5be517b5cdd2c7e02dcdb9a24d3cb174c1ae4938ceb6e859b6085cdac947fb1340baacfa348c8228f27c0c
7
+ data.tar.gz: 2637232e4857d35172b31a7a178f8d9dc84153c4cd805bddb65bb170bf75688029b80cbe7666526aa2f3783e3f512bec51f79eb92c49cf262d512ed364cb438f
@@ -2,11 +2,12 @@ require 'optparse'
2
2
  require 'logger'
3
3
 
4
4
  module Radagast
5
- Config = Struct.new(:key, :rabbit, :log_level) do
5
+ Config = Struct.new(:key, :rabbit, :log_level, :log_file) do
6
6
  def initialize
7
7
  self.key = 'default'
8
8
  self.rabbit = 'amqp://guest:guest@127.0.0.1:5672'
9
- self.log_level = Logger::UNKNOWN
9
+ self.log_level = Logger::INFO
10
+ self.log_file = STDOUT
10
11
  end
11
12
 
12
13
  def self.parse_argv(argv = ARGV)
@@ -15,6 +16,7 @@ module Radagast
15
16
  opt.on('--key KEY') { |o| config.key = o }
16
17
  opt.on('--rabbit RABBIT') { |o| config.rabbit = o }
17
18
  opt.on('--log_level LOG_LEVEL') { |o| config.log_level = const_get(o) }
19
+ opt.on('--log_file LOG_FILE') { |o| config.log_file = o }
18
20
  end.parse!(argv)
19
21
  config
20
22
  end
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
2
+
1
3
  require_relative 'config'
2
4
  require_relative 'rabbit_helper'
3
5
  require_relative 'result'
@@ -5,7 +7,7 @@ require_relative 'result'
5
7
  module Radagast
6
8
  # Dispatches tasks and aggregates the results
7
9
  class Manager < RabbitHelper
8
- def initialize(config)
10
+ def initialize(config = Radagast::Config.new)
9
11
  super(
10
12
  queue_name: "results-#{config.key}",
11
13
  routing_key: "tasks-#{config.key}",
@@ -17,21 +19,12 @@ module Radagast
17
19
  @all_results = []
18
20
  end
19
21
 
20
- def task(cmd, &blk)
22
+ def task(cmd, meta = {}, &blk)
21
23
  logger.info 'Publishing task'
22
24
  @published_cnt += 1
23
- @callbacks[cmd] = blk
24
- publish(cmd: cmd)
25
- end
26
-
27
- def process_callback(data)
28
- logger.info "Result #{@processed_cnt}/#{@published_cnt} is here: #{data}"
29
- result = Result.new
30
- result.exit_code = data['exitstatus']
31
- result.stderr = data['stderr'].strip
32
- result.stdout = data['stdout'].strip
33
- result.meta = { cmd: data['cmd'] }
34
- @callbacks[data['cmd']].call result
25
+ task_id = SecureRandom.uuid
26
+ @callbacks[task_id] = blk if block_given?
27
+ publish(cmd: cmd, meta: meta, task_id: task_id)
35
28
  end
36
29
 
37
30
  def finish
@@ -45,8 +38,9 @@ module Radagast
45
38
  logger.info 'Manager subscribe to results queue'
46
39
  subscribe do |data|
47
40
  @processed_cnt += 1
48
- process_callback data
49
- @all_results << data
41
+ result = Result.from_hash data
42
+ process_callback result
43
+ @all_results << result
50
44
  if @processed_cnt == @published_cnt
51
45
  logger.info "All #{@processed_cnt} messages have been processed"
52
46
  cleanup
@@ -54,5 +48,12 @@ module Radagast
54
48
  end
55
49
  end
56
50
  end
51
+
52
+ private
53
+
54
+ def process_callback(result)
55
+ logger.info "Result #{@processed_cnt}/#{@published_cnt} : #{result}"
56
+ @callbacks[result.task_id].call(result) if @callbacks.key? result.task_id
57
+ end
57
58
  end
58
59
  end
@@ -14,7 +14,7 @@ module Radagast
14
14
  @channel = @rabbit.create_channel
15
15
  @exchange = @channel.default_exchange
16
16
  @queue = @channel.queue(queue_name, auto_delete: true)
17
- @logger = Logger.new(STDOUT)
17
+ @logger = Logger.new(config.log_file)
18
18
  @logger.level = config.log_level
19
19
  end
20
20
 
@@ -1,3 +1,13 @@
1
1
  module Radagast
2
- Result = Struct.new(:exit_code, :stdout, :stderr, :meta)
2
+ Result = Struct.new(:exit_code, :stdout, :stderr, :meta, :task_id) do
3
+ def self.from_hash(data)
4
+ o = new
5
+ o.exit_code = data['exit_code']
6
+ o.stderr = data['stderr']
7
+ o.stdout = data['stdout']
8
+ o.meta = data['meta']
9
+ o.task_id = data['task_id']
10
+ o
11
+ end
12
+ end
3
13
  end
@@ -7,7 +7,7 @@ require_relative 'rabbit_helper'
7
7
  module Radagast
8
8
  # Fetches the task, processes it and returns the result
9
9
  class Worker < RabbitHelper
10
- def initialize(config)
10
+ def initialize(config = Radagast::Config.new)
11
11
  super(
12
12
  queue_name: "tasks-#{config.key}",
13
13
  routing_key: "results-#{config.key}",
@@ -16,15 +16,15 @@ module Radagast
16
16
  end
17
17
 
18
18
  def start
19
- logger.info 'Worker setup, subscribing to tasks queue'
19
+ logger.info "Worker setup, subscribing to tasks queue #{@queue.name}"
20
20
  subscribe do |data|
21
21
  stdout, stderr, status = Open3.capture3(data['cmd'])
22
22
  response = {
23
- cmd: data['cmd'],
24
- meta: data['meta'],
25
- stdout: stdout,
26
- stderr: stderr,
27
- exitstatus: status.exitstatus
23
+ task_id: data['task_id'],
24
+ meta: data['meta'].merge(cmd: data['cmd']),
25
+ stdout: stdout.strip,
26
+ stderr: stderr.strip,
27
+ exit_code: status.exitstatus
28
28
  }
29
29
  publish(response)
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: radagast
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartek Wilczek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-20 00:00:00.000000000 Z
11
+ date: 2017-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -68,7 +68,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - "~>"
70
70
  - !ruby/object:Gem::Version
71
- version: '2.0'
71
+ version: '2.2'
72
72
  required_rubygems_version: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - ">="