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 +4 -4
- data/lib/radagast/config.rb +4 -2
- data/lib/radagast/manager.rb +17 -16
- data/lib/radagast/rabbit_helper.rb +1 -1
- data/lib/radagast/result.rb +11 -1
- data/lib/radagast/worker.rb +7 -7
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a3aeecf960c69e2b139b0c8a3768ea662617742
|
4
|
+
data.tar.gz: f822537df36098ae47ee5b887375bbbce4273e1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 500012876ff082a92f70ffe389fc0a4f4cb033842d5be517b5cdd2c7e02dcdb9a24d3cb174c1ae4938ceb6e859b6085cdac947fb1340baacfa348c8228f27c0c
|
7
|
+
data.tar.gz: 2637232e4857d35172b31a7a178f8d9dc84153c4cd805bddb65bb170bf75688029b80cbe7666526aa2f3783e3f512bec51f79eb92c49cf262d512ed364cb438f
|
data/lib/radagast/config.rb
CHANGED
@@ -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::
|
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
|
data/lib/radagast/manager.rb
CHANGED
@@ -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
|
-
|
24
|
-
|
25
|
-
|
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
|
-
|
49
|
-
|
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(
|
17
|
+
@logger = Logger.new(config.log_file)
|
18
18
|
@logger.level = config.log_level
|
19
19
|
end
|
20
20
|
|
data/lib/radagast/result.rb
CHANGED
@@ -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
|
data/lib/radagast/worker.rb
CHANGED
@@ -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
|
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
|
-
|
24
|
-
meta: data['meta'],
|
25
|
-
stdout: stdout,
|
26
|
-
stderr: stderr,
|
27
|
-
|
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.
|
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-
|
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.
|
71
|
+
version: '2.2'
|
72
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ">="
|