smith 0.7.3 → 0.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/smith/agent_cache.rb +1 -1
- data/lib/smith/command_base.rb +6 -7
- data/lib/smith/commands/agency/agents.rb +17 -14
- data/lib/smith/commands/agency/group.rb +5 -2
- data/lib/smith/commands/agency/kill.rb +17 -2
- data/lib/smith/commands/agency/list.rb +1 -1
- data/lib/smith/commands/agency/logger.rb +1 -1
- data/lib/smith/commands/agency/metadata.rb +1 -1
- data/lib/smith/commands/agency/start.rb +2 -2
- data/lib/smith/commands/agency/stop.rb +2 -2
- data/lib/smith/commands/common.rb +1 -1
- data/lib/smith/commands/smithctl/acl.rb +1 -1
- data/lib/smith/commands/smithctl/dump.rb +8 -4
- data/lib/smith/commands/smithctl/firehose.rb +5 -4
- data/lib/smith/commands/smithctl/pop.rb +1 -1
- data/lib/smith/commands/smithctl/push.rb +2 -2
- data/lib/smith/commands/smithctl/rm.rb +1 -1
- data/lib/smith/commands/smithctl/subscribe.rb +1 -1
- data/lib/smith/messaging/sender.rb +3 -1
- data/lib/smith/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79102bfef4bada48d73758f32078771d6100e759
|
4
|
+
data.tar.gz: 8405a9460440fdc43abc5072f0f1566848a30741
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 201c524f5a686fe1372d264b46ee665a78143ea17335ad7eab6bf50cd6ea27c424f991a5037224f65c03521442b3911cbd121fdcabad3deb56e0629ee390ebcc
|
7
|
+
data.tar.gz: 087cd24ebce5fca132d8ac5b79a1e4054efeb91bb52ce2a2bdcd3106a2655b9553d141654e9ce5c95a2e86df6e21db2d4be8df2df9573d544c0695efa65a22eb
|
data/lib/smith/agent_cache.rb
CHANGED
data/lib/smith/command_base.rb
CHANGED
@@ -28,12 +28,12 @@ module Smith
|
|
28
28
|
end.read
|
29
29
|
end
|
30
30
|
|
31
|
-
def banner(banner=nil, opts={})
|
31
|
+
def banner(banner=nil, additional_text=nil, opts={})
|
32
32
|
if banner.nil?
|
33
33
|
@banner
|
34
34
|
else
|
35
35
|
@banner = banner
|
36
|
-
@parser.banner((opts[:no_template]) ? banner : banner_template(banner))
|
36
|
+
@parser.banner((opts[:no_template]) ? banner : banner_template(banner, additional_text))
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -57,16 +57,15 @@ module Smith
|
|
57
57
|
|
58
58
|
private
|
59
59
|
|
60
|
-
def banner_template(text)
|
61
|
-
return
|
62
|
-
|
60
|
+
def banner_template(text, additional_text)
|
61
|
+
return %(
|
63
62
|
#{text}
|
64
63
|
|
65
64
|
Usage:
|
66
|
-
smithctl #{self.class.to_s.split('::').last.downcase} [Options]
|
65
|
+
smithctl #{self.class.to_s.split('::').last.downcase} [Options]#{(additional_text) ? " #{additional_text}" : ''}
|
67
66
|
|
68
67
|
[Options] are:
|
69
|
-
|
68
|
+
)
|
70
69
|
end
|
71
70
|
end
|
72
71
|
end
|
@@ -1,28 +1,30 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require_relative '../common'
|
3
|
+
|
2
4
|
module Smith
|
3
5
|
module Commands
|
4
6
|
class Agents < CommandBase
|
7
|
+
include Common
|
8
|
+
|
5
9
|
def execute
|
6
10
|
responder.succeed(_agents)
|
7
11
|
end
|
8
12
|
|
13
|
+
# Return the fully qualified class of all avaiable agents
|
9
14
|
def _agents
|
10
|
-
# FIXME make sure that if the path doesn't exist don't blow up.
|
11
15
|
separator = (options[:one_column]) ? "\n" : " "
|
12
16
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
else
|
22
|
-
return "Agent path doesn't exist: #{path}"
|
17
|
+
if options[:group]
|
18
|
+
agent_group(options[:group]).sort.join(separator)
|
19
|
+
else
|
20
|
+
Smith.agent_directories.each_with_object([]) do |agent_root_path, acc|
|
21
|
+
Pathname.glob(agent_root_path.join("**/*")).each do |agent_path|
|
22
|
+
if !agent_path.symlink? && !agent_path.directory?
|
23
|
+
acc << Utils.class_name_from_path(agent_path, agent_root_path)
|
24
|
+
end
|
23
25
|
end
|
24
|
-
end
|
25
|
-
end
|
26
|
+
end.sort.join(separator)
|
27
|
+
end
|
26
28
|
end
|
27
29
|
|
28
30
|
private
|
@@ -30,7 +32,8 @@ module Smith
|
|
30
32
|
def options_spec
|
31
33
|
banner "List all available agents."
|
32
34
|
|
33
|
-
opt :one_column, "
|
35
|
+
opt :one_column, "List one agent per line", :short => :s
|
36
|
+
opt :group, "list only agents in this group", :type => :string, :short => :g
|
34
37
|
end
|
35
38
|
end
|
36
39
|
end
|
@@ -14,15 +14,18 @@ module Smith
|
|
14
14
|
|
15
15
|
# Returns the agents in a group.
|
16
16
|
def group(&blk)
|
17
|
+
separator = (options[:one_column]) ? "\n" : " "
|
17
18
|
begin
|
18
|
-
blk.call(agent_group(target.first).join(
|
19
|
+
blk.call(agent_group(target.first).join(separator))
|
19
20
|
rescue RuntimeError => e
|
20
21
|
blk.call(e.message)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
25
|
def options_spec
|
25
|
-
banner "Lists the agents in a group."
|
26
|
+
banner "Lists the agents in a group.", "<group>"
|
27
|
+
|
28
|
+
opt :one_column, "Lists one agent per line", :short => :s
|
26
29
|
end
|
27
30
|
end
|
28
31
|
end
|
@@ -1,7 +1,12 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require_relative '../common'
|
3
|
+
|
2
4
|
module Smith
|
3
5
|
module Commands
|
4
6
|
class Kill < CommandBase
|
7
|
+
|
8
|
+
include Common
|
9
|
+
|
5
10
|
def execute
|
6
11
|
work = ->(acc, uuid, iter) do
|
7
12
|
if agents.exist?(uuid)
|
@@ -15,11 +20,19 @@ module Smith
|
|
15
20
|
|
16
21
|
done = ->(errors) { responder.succeed(format_error_message(errors)) }
|
17
22
|
|
18
|
-
EM::Iterator.new(
|
23
|
+
EM::Iterator.new(agents_to_kill).inject([], work, done)
|
19
24
|
end
|
20
25
|
|
21
26
|
private
|
22
27
|
|
28
|
+
def agents_to_kill
|
29
|
+
if options[:group]
|
30
|
+
agents.find_by_name(agent_group(options[:group])).map(&:uuid)
|
31
|
+
else
|
32
|
+
target
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
23
36
|
def format_error_message(errors)
|
24
37
|
errors = errors.compact
|
25
38
|
case errors.size
|
@@ -33,7 +46,9 @@ module Smith
|
|
33
46
|
end
|
34
47
|
|
35
48
|
def options_spec
|
36
|
-
banner "Kill an agent/agents."
|
49
|
+
banner "Kill an agent/agents.", "<uuid[s]>"
|
50
|
+
|
51
|
+
opt :group, "kill agents in this group", :type => :string, :short => :g
|
37
52
|
end
|
38
53
|
end
|
39
54
|
end
|
@@ -64,7 +64,7 @@ module Smith
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def options_spec
|
67
|
-
banner "List the running agents."
|
67
|
+
banner "List the running agents.", "<agent name[s]>"
|
68
68
|
|
69
69
|
opt :long, "shows full details of running agents", :short => :l
|
70
70
|
opt :group, "list only agents in this group", :type => :string, :short => :g
|
@@ -57,7 +57,7 @@ module Smith
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def options_spec
|
60
|
-
banner "Change the log and trace level of the agents or the agency."
|
60
|
+
banner "Change the log and trace level of the agents or the agency.", "<uuid[s]>"
|
61
61
|
|
62
62
|
opt :level, "the log level you want to set", :type => :string, :short => :l
|
63
63
|
opt :trace, "turn trace on or off", :type => :boolean, :short => :t
|
@@ -25,7 +25,7 @@ module Smith
|
|
25
25
|
begin
|
26
26
|
agents_to_start = agent_group(options[:group])
|
27
27
|
if agents_to_start.empty?
|
28
|
-
blk.call("
|
28
|
+
blk.call("Empty group: #{options[:group]}. No agents started")
|
29
29
|
else
|
30
30
|
start_agents(agents_to_start, &blk)
|
31
31
|
end
|
@@ -63,7 +63,7 @@ module Smith
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def options_spec
|
66
|
-
banner "Start an agent/agents or group of agents."
|
66
|
+
banner "Start an agent/agents or group of agents.", "<agent[s]>"
|
67
67
|
|
68
68
|
opt :group, "Start everything in the specified group", :type => :string, :short => :g
|
69
69
|
end
|
@@ -55,7 +55,7 @@ module Smith
|
|
55
55
|
begin
|
56
56
|
agents_to_stop = agents.find_by_name(agent_group(options[:group])).map(&:uuid)
|
57
57
|
if agents_to_stop.empty?
|
58
|
-
blk.call("
|
58
|
+
blk.call("Empty group: #{options[:group]}. No agents stopped")
|
59
59
|
end
|
60
60
|
rescue RuntimeError => e
|
61
61
|
return blk.call(e.message)
|
@@ -98,7 +98,7 @@ module Smith
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def options_spec
|
101
|
-
banner "Stop an agent/agents."
|
101
|
+
banner "Stop an agent/agents.", "<uuid[s]>"
|
102
102
|
|
103
103
|
opt :group, "Stop everything in the specified group", :type => :string, :short => :g
|
104
104
|
opt :name, "Stop an agent(s) by name", :type => :string, :short => :n
|
@@ -18,7 +18,7 @@ module Smith
|
|
18
18
|
if group_directory.exist? && group_directory.directory?
|
19
19
|
agents = Pathname.glob(group_directory.join("*.rb")).map(&:expand_path)
|
20
20
|
|
21
|
-
agents.
|
21
|
+
agents.inject([]) do |acc, agent|
|
22
22
|
if agent.symlink?
|
23
23
|
expanded_agent_path = resolve_agent_path(group_directory, agent)
|
24
24
|
acc << Utils.class_name_from_path(expanded_agent_path, agent_directory)
|
@@ -5,7 +5,11 @@ module Smith
|
|
5
5
|
module Commands
|
6
6
|
class Dump < CommandBase
|
7
7
|
def execute
|
8
|
-
|
8
|
+
if options[:'yes-i-want-to-remove-all-acls-from-the-queue']
|
9
|
+
dump
|
10
|
+
else
|
11
|
+
responder.succeed("Missing option. You need to supply the ridiculously long anti-fuckup option.")
|
12
|
+
end
|
9
13
|
end
|
10
14
|
|
11
15
|
def dump
|
@@ -67,10 +71,10 @@ module Smith
|
|
67
71
|
private
|
68
72
|
|
69
73
|
def options_spec
|
70
|
-
banner "Dump a queue to STDOUT.\n\n This is a very DANGEROUS command in that it removes all messages from a queue."
|
74
|
+
banner "Dump a queue to STDOUT.\n\n This is a very DANGEROUS command in that it removes all messages from a queue.", "<queue>"
|
71
75
|
|
72
|
-
opt :'yes-i-want-to-remove-all-
|
73
|
-
opt :verbose,
|
76
|
+
opt :'yes-i-want-to-remove-all-acls-from-the-queue', "Remove all acls from the queue and print to stdout", :type => :boolean, :short => :none
|
77
|
+
opt :verbose, "Print the number of acls dumped.", :type => :boolean, :short => :v
|
74
78
|
end
|
75
79
|
end
|
76
80
|
end
|
@@ -26,10 +26,11 @@ module Smith
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def options_spec
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
banner %(Listens on the rabbitmq firehose for the named queue and prints decoded
|
30
|
+
message to stdout.
|
31
|
+
|
32
|
+
Be warned it can produce vast amounts of outpu. You _must_ run 'rabbitmqctl
|
33
|
+
trace_on' for this to work.), "<queue>"
|
33
34
|
|
34
35
|
opt :json, "return the JSON representation of the message", :short => :j
|
35
36
|
opt :direction, "Show messages that are leaving the broker [deliver|publish]", :short => :d, :type => :string, :default => 'deliver'
|
@@ -74,7 +74,7 @@ module Smith
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def options_spec
|
77
|
-
banner "Pop messages off the named queue."
|
77
|
+
banner "Pop messages off the named queue.", "<queue>"
|
78
78
|
|
79
79
|
opt :print, "print the message", :short => :p
|
80
80
|
opt :json , "return the JSON representation of the message", :short => :j
|
@@ -88,9 +88,9 @@ module Smith
|
|
88
88
|
end
|
89
89
|
|
90
90
|
def options_spec
|
91
|
-
banner "
|
91
|
+
banner "Pushs an ACL on to a queue.", "<queue>"
|
92
92
|
|
93
|
-
opt :type, "message type", :type => :string, :
|
93
|
+
opt :type, "message type", :type => :string, :required => true, :short => :t
|
94
94
|
opt :message, "the message, as json", :type => :string, :short => :m
|
95
95
|
opt :file, "read messages from the named file", :type => :string, :short => :f
|
96
96
|
opt :number, "the number of times to send the message", :type => :integer, :default => 1, :short => :n
|
@@ -23,7 +23,7 @@ module Smith
|
|
23
23
|
private
|
24
24
|
|
25
25
|
def options_spec
|
26
|
-
banner "Display or remove a message from the named queue."
|
26
|
+
banner "Display or remove a message from the named queue.", "<queue>"
|
27
27
|
|
28
28
|
opt :force, "force the removal even if there are messages on the queue", :short => :f
|
29
29
|
opt :ignore_errors, "ignore any errors.", :default => false
|
@@ -25,7 +25,7 @@ module Smith
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def options_spec
|
28
|
-
banner "Subcribe to the named queue and print and received messages to stdout."
|
28
|
+
banner "Subcribe to the named queue and print and received messages to stdout.", "<queue>"
|
29
29
|
|
30
30
|
opt :durable, "amqp durable option", :default => false
|
31
31
|
opt :auto_delete, "amqp auto-delete option", :default => false
|
@@ -97,7 +97,9 @@ module Smith
|
|
97
97
|
|
98
98
|
@timeout ||= Timeout.new(Smith.config.smith.timeout, :queue_name => @queue_def.denormalise)
|
99
99
|
|
100
|
-
|
100
|
+
reply_queue = opts.delete(:reply_queue_name) { random("#{@queue_def.denormalise}.") }
|
101
|
+
|
102
|
+
queue_def = QueueDefinition.new(reply_queue, opts.merge(:auto_delete => true, :durable => false))
|
101
103
|
logger.debug { "reply queue: #{queue_def.denormalise}" }
|
102
104
|
|
103
105
|
@reply_queue_completion ||= EM::Completion.new.tap do |completion|
|
data/lib/smith/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smith
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Heycock
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|
@@ -190,6 +190,20 @@ dependencies:
|
|
190
190
|
- - '='
|
191
191
|
- !ruby/object:Gem::Version
|
192
192
|
version: 0.1.4
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: hashie
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - "~>"
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '2.1'
|
200
|
+
type: :runtime
|
201
|
+
prerelease: false
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - "~>"
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '2.1'
|
193
207
|
- !ruby/object:Gem::Dependency
|
194
208
|
name: curses
|
195
209
|
requirement: !ruby/object:Gem::Requirement
|