smith 0.5.10 → 0.5.11
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.
- data/lib/smith.rb +2 -1
- data/lib/smith/acl_compiler.rb +6 -3
- data/lib/smith/agent.rb +13 -2
- data/lib/smith/agent_process.rb +3 -3
- data/lib/smith/command_base.rb +4 -0
- data/lib/smith/commands/agency/agents.rb +4 -1
- data/lib/smith/commands/agency/list.rb +14 -5
- data/lib/smith/commands/agency/object_count.rb +32 -0
- data/lib/smith/commands/agency/start.rb +1 -1
- data/lib/smith/commands/agency/stop.rb +1 -1
- data/lib/smith/commands/smithctl/{acls.rb → acl.rb} +12 -4
- data/lib/smith/commands/smithctl/push.rb +25 -9
- data/lib/smith/object_count.rb +17 -0
- data/lib/smith/version.rb +1 -1
- metadata +129 -58
data/lib/smith.rb
CHANGED
@@ -71,7 +71,7 @@ module Smith
|
|
71
71
|
# being it's how it's going to be. This will really start
|
72
72
|
# to be a problem when there are a lot of acls.
|
73
73
|
def load_acls
|
74
|
-
acl_cache_path.
|
74
|
+
Pathname.glob(Smith.acl_cache_path.join("*.pb.rb"))do |acl_file|
|
75
75
|
logger.verbose { "Loading acl file: #{acl_file}" }
|
76
76
|
require acl_file
|
77
77
|
end
|
@@ -222,6 +222,7 @@ module Smith
|
|
222
222
|
end
|
223
223
|
end
|
224
224
|
|
225
|
+
require_relative 'smith/object_count'
|
225
226
|
require_relative 'smith/cache'
|
226
227
|
require_relative 'smith/agent'
|
227
228
|
require_relative 'smith/agent_cache'
|
data/lib/smith/acl_compiler.rb
CHANGED
@@ -30,9 +30,12 @@ module Smith
|
|
30
30
|
results = {}
|
31
31
|
path_glob(path) do |p|
|
32
32
|
if should_compile?(p)
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
begin
|
34
|
+
logger.info { "Compiling: #{p}" }
|
35
|
+
Protobuf::Compiler.compile(p.basename, p.dirname, @cache_path)
|
36
|
+
rescue Racc::ParseError => e
|
37
|
+
logger.error { "Cannot parse: #{p}" }
|
38
|
+
end
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
data/lib/smith/agent.rb
CHANGED
@@ -4,6 +4,7 @@ module Smith
|
|
4
4
|
class Agent
|
5
5
|
|
6
6
|
include Logger
|
7
|
+
include Smith::ObjectCount
|
7
8
|
|
8
9
|
attr_reader :factory, :name, :pid
|
9
10
|
|
@@ -107,6 +108,8 @@ module Smith
|
|
107
108
|
logger.debug { "Command received on agent control queue: #{r.payload.command} #{r.payload.options}" }
|
108
109
|
|
109
110
|
case r.payload.command
|
111
|
+
when 'object_count'
|
112
|
+
object_count(r.payload.options.first.to_i).each{|o| logger.info{o}}
|
110
113
|
when 'stop'
|
111
114
|
acknowledge_stop { Smith.stop }
|
112
115
|
when 'log_level'
|
@@ -150,8 +153,16 @@ module Smith
|
|
150
153
|
|
151
154
|
def acknowledge_start
|
152
155
|
sender('agent.lifecycle', :auto_delete => false, :durable => false, :dont_cache => true) do |ack_start_queue|
|
153
|
-
|
154
|
-
|
156
|
+
payload = ACL::Payload.new(:agent_lifecycle).content do |p|
|
157
|
+
p.state = 'acknowledge_start'
|
158
|
+
p.pid = $$
|
159
|
+
p.name = self.class.to_s
|
160
|
+
p.metadata = agent_options[:metadata]
|
161
|
+
p.monitor = agent_options[:monitor]
|
162
|
+
p.singleton = agent_options[:singleton]
|
163
|
+
p.started_at = Time.now.to_i
|
164
|
+
end
|
165
|
+
ack_start_queue.publish(payload)
|
155
166
|
end
|
156
167
|
end
|
157
168
|
|
data/lib/smith/agent_process.rb
CHANGED
@@ -69,7 +69,7 @@ module Smith
|
|
69
69
|
def alive?
|
70
70
|
if self.pid
|
71
71
|
begin
|
72
|
-
Process.kill(0, self.pid
|
72
|
+
Process.kill(0, self.pid)
|
73
73
|
true
|
74
74
|
rescue Exception
|
75
75
|
false
|
@@ -121,7 +121,7 @@ module Smith
|
|
121
121
|
end
|
122
122
|
|
123
123
|
# We don't want any zombies.
|
124
|
-
Process.detach(agent_process.pid
|
124
|
+
Process.detach(agent_process.pid)
|
125
125
|
end
|
126
126
|
|
127
127
|
def self.acknowledge_start(agent_process)
|
@@ -146,7 +146,7 @@ module Smith
|
|
146
146
|
if agent_process.pid
|
147
147
|
logger.info { "Sending kill signal: #{agent_process.name}(#{agent_process.pid})" }
|
148
148
|
begin
|
149
|
-
Process.kill('TERM', agent_process.pid
|
149
|
+
Process.kill('TERM', agent_process.pid)
|
150
150
|
rescue
|
151
151
|
logger.error { "Process does not exist. PID is stale: #{agent_process.pid}: #{agent_process.name}" }
|
152
152
|
end
|
data/lib/smith/command_base.rb
CHANGED
@@ -20,7 +20,8 @@ module Smith
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end.flatten
|
23
|
-
(
|
23
|
+
separator = (options[:one_column]) ? "\n" : " "
|
24
|
+
(agent_paths.empty?) ? "" : agent_paths.sort.join(separator)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
@@ -28,6 +29,8 @@ module Smith
|
|
28
29
|
|
29
30
|
def options_spec
|
30
31
|
banner "List all available agents."
|
32
|
+
|
33
|
+
opt :one_column, "the number of times to send the message", :short => :s
|
31
34
|
end
|
32
35
|
end
|
33
36
|
end
|
@@ -13,7 +13,13 @@ module Smith
|
|
13
13
|
|
14
14
|
def format(a, long)
|
15
15
|
a = (target.empty?) ? a : a.select {|z| target.detect {|y| z.name == y } }.flatten
|
16
|
-
|
16
|
+
if options[:long_given]
|
17
|
+
tabulate(long_format(a), :header => "total #{a.count}")
|
18
|
+
elsif options[:one_column_given]
|
19
|
+
short_format(a, "\n")
|
20
|
+
else
|
21
|
+
short_format(a)
|
22
|
+
end
|
17
23
|
end
|
18
24
|
|
19
25
|
def long_format(a)
|
@@ -22,8 +28,8 @@ module Smith
|
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
25
|
-
def short_format(a)
|
26
|
-
a.map(&:name).sort.join(
|
31
|
+
def short_format(a, sep=' ')
|
32
|
+
a.map(&:name).sort.join(sep)
|
27
33
|
end
|
28
34
|
|
29
35
|
def format_time(t)
|
@@ -41,8 +47,11 @@ module Smith
|
|
41
47
|
def options_spec
|
42
48
|
banner "List the running agents."
|
43
49
|
|
44
|
-
opt
|
45
|
-
opt
|
50
|
+
opt :long, "the number of times to send the message", :short => :l
|
51
|
+
opt :one_column, "the number of times to send the message", :short => :s
|
52
|
+
opt :all, "show all agents in all states", :short => :a
|
53
|
+
|
54
|
+
conflicts :one_column, :long
|
46
55
|
end
|
47
56
|
end
|
48
57
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
module Smith
|
4
|
+
module Commands
|
5
|
+
class ObjectCount < CommandBase
|
6
|
+
def execute
|
7
|
+
responder.value do
|
8
|
+
target.each do |agent|
|
9
|
+
if agents[agent].running?
|
10
|
+
send_agent_control_message(agents[agent], :command => 'object_count', :options => [options[:threshold].to_s])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def send_agent_control_message(agent, message)
|
20
|
+
Messaging::Sender.new(agent.control_queue_name, :durable => false, :auto_delete => true, :persistent => true, :strict => true).ready do |sender|
|
21
|
+
sender.publish(ACL::Payload.new(:agent_command).content(message))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def options_spec
|
26
|
+
banner "Dump the ruby ObjectSpace stats. This is purely for debuging purposes only."
|
27
|
+
|
28
|
+
opt :threshold, "only print objects that have a count greater than the threshold", :type => :integer, :default => 100, :short => :t
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -11,7 +11,7 @@ module Smith
|
|
11
11
|
def execute
|
12
12
|
|
13
13
|
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
14
|
-
#!!!!!!!!!!!! See
|
14
|
+
#!!!!!!!!!!!! See note about target at end of this file !!!!!!!!!!!!!!
|
15
15
|
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
16
16
|
|
17
17
|
# Sort out any groups. If the group option is set it will override
|
@@ -11,7 +11,7 @@ module Smith
|
|
11
11
|
def execute
|
12
12
|
|
13
13
|
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
14
|
-
#!!!!!!!!!!!! See
|
14
|
+
#!!!!!!!!!!!! See note about target at end of this file !!!!!!!!!!!!!!
|
15
15
|
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
16
16
|
|
17
17
|
case target.first
|
@@ -4,10 +4,10 @@ require 'extlib/string'
|
|
4
4
|
|
5
5
|
module Smith
|
6
6
|
module Commands
|
7
|
-
class
|
7
|
+
class Acl < CommandBase
|
8
8
|
def execute
|
9
9
|
responder.value do
|
10
|
-
if options[:
|
10
|
+
if options[:show_given]
|
11
11
|
if target.empty?
|
12
12
|
"You must supply an ACL file name."
|
13
13
|
else
|
@@ -35,6 +35,12 @@ module Smith
|
|
35
35
|
end
|
36
36
|
end.join("\n")
|
37
37
|
end
|
38
|
+
elsif options[:clean_given]
|
39
|
+
Pathname.glob(Smith.acl_cache_path.join("*.pb.rb")).each {|p| p.unlink}
|
40
|
+
""
|
41
|
+
elsif options[:compile_given]
|
42
|
+
Pathname.glob(Smith.compile_acls)
|
43
|
+
""
|
38
44
|
else
|
39
45
|
join_string = (options[:long]) ? "\n" : " "
|
40
46
|
Pathname.glob(Smith.acl_path.map {|p| "#{p}#{File::SEPARATOR}*"}).map do |p|
|
@@ -53,8 +59,10 @@ module Smith
|
|
53
59
|
def options_spec
|
54
60
|
banner "List and display acl files."
|
55
61
|
|
56
|
-
opt :long,
|
57
|
-
opt :show,
|
62
|
+
opt :long, "format the listing", :short => :l
|
63
|
+
opt :show, "show the contents of the acl file", :short => :s
|
64
|
+
opt :clean, "remove all compiled acls", :short => :none
|
65
|
+
opt :compile, "compile all acls", :short => :none
|
58
66
|
end
|
59
67
|
end
|
60
68
|
end
|
@@ -11,22 +11,37 @@ module Smith
|
|
11
11
|
Smith.stop(true)
|
12
12
|
else
|
13
13
|
begin
|
14
|
-
|
15
|
-
when options[:
|
16
|
-
options[:
|
14
|
+
messages = case
|
15
|
+
when options[:message_given]
|
16
|
+
options[:message]
|
17
17
|
when options[:file_given]
|
18
|
+
responder.value("--number option cannot be used with the --file option.") if options[:number_given]
|
19
|
+
|
18
20
|
file = Pathname.new(options[:file])
|
19
21
|
if file.exist?
|
20
22
|
file.read
|
21
23
|
else
|
22
24
|
responder.value("File does not exist: #{file.display}")
|
23
25
|
end
|
26
|
+
else
|
27
|
+
responder.value("--number option cannot be used when reading messages from standard in.") if options[:number_given]
|
28
|
+
STDIN.read
|
24
29
|
end
|
25
30
|
|
31
|
+
if messages.nil? || messages && messages.empty?
|
32
|
+
responder.value("Message must be empty.")
|
33
|
+
end
|
34
|
+
|
35
|
+
# This is starting to get a bit messy. The iterator is being used
|
36
|
+
# for two purposes: the first is to send multiple messages, the
|
37
|
+
# second is send the same message multiple times.
|
38
|
+
# TODO Clean this up.
|
39
|
+
|
26
40
|
Messaging::Sender.new(target.first, :auto_delete => options[:dynamic], :persistent => true, :nowait => false, :strict => true).ready do |sender|
|
41
|
+
work = proc do |message,iter|
|
42
|
+
m = (options[:number_given]) ? messages : message
|
27
43
|
|
28
|
-
|
29
|
-
sender.publish(json_to_payload(data, options[:type])) do
|
44
|
+
sender.publish(json_to_payload(m, options[:type])) do
|
30
45
|
iter.next
|
31
46
|
end
|
32
47
|
end
|
@@ -35,8 +50,9 @@ module Smith
|
|
35
50
|
responder.value
|
36
51
|
end
|
37
52
|
|
38
|
-
|
53
|
+
data = (options[:number_given]) ? 0..options[:number] - 1 : messages.split("\n")
|
39
54
|
|
55
|
+
EM::Iterator.new(data).each(work, done)
|
40
56
|
end
|
41
57
|
rescue MultiJson::DecodeError => e
|
42
58
|
responder.value(e)
|
@@ -59,9 +75,9 @@ module Smith
|
|
59
75
|
banner "Send a message to a queue. The ACL can also be specified."
|
60
76
|
|
61
77
|
opt :type, "message type", :type => :string, :default => 'default', :short => :t
|
62
|
-
opt :
|
63
|
-
opt :file, "read the data from the named file", :type => :string, :conflicts => :
|
64
|
-
opt :number, "the number of times to send the message", :type => :integer, :default => 1, :short => :n
|
78
|
+
opt :message, "the message, as json", :type => :string, :conflicts => :file, :short => :m
|
79
|
+
opt :file, "read the data from the named file. One message per line", :type => :string, :conflicts => :message, :short => :f
|
80
|
+
opt :number, "the number of times to send the message", :type => :integer, :default => 1, :short => :n, :conflicts => :file
|
65
81
|
opt :dynamic, "send message to a dynamic queue", :type => :boolean, :default => false, :short => :d
|
66
82
|
end
|
67
83
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'pp'
|
2
|
+
|
3
|
+
module Smith
|
4
|
+
module ObjectCount
|
5
|
+
def object_count(threshold=10)
|
6
|
+
objects = ObjectSpace.each_object.inject(Hash.new(0)) do |a,o|
|
7
|
+
a.tap {|acc| acc[o.class.to_s] += 1}
|
8
|
+
end.sort {|(_,a),(_,b)| b <=> a}
|
9
|
+
|
10
|
+
max_table_width = objects.first[1].to_s.length + 3
|
11
|
+
|
12
|
+
objects.inject([]) do |a,(clazz,count)|
|
13
|
+
a.tap {|acc| acc << "%-#{max_table_width}s%s" % [count,clazz] if count > threshold}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/smith/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smith
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.11
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,55 +9,75 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: amqp
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - '='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.9.
|
21
|
+
version: 0.9.7
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - '='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.7
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: dm-core
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
|
-
- - =
|
35
|
+
- - '='
|
31
36
|
- !ruby/object:Gem::Version
|
32
37
|
version: 1.0.1
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.1
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: dm-observer
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
|
-
- - =
|
51
|
+
- - '='
|
42
52
|
- !ruby/object:Gem::Version
|
43
53
|
version: 1.0.1
|
44
54
|
type: :runtime
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.0.1
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: dm-yaml-adapter
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
|
-
- - =
|
67
|
+
- - '='
|
53
68
|
- !ruby/object:Gem::Version
|
54
69
|
version: 1.0.1
|
55
70
|
type: :runtime
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - '='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.0.1
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: daemons
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,21 +85,31 @@ dependencies:
|
|
65
85
|
version: 1.1.4
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 1.1.4
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: eventmachine
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
75
100
|
- !ruby/object:Gem::Version
|
76
|
-
version: 1.0.0
|
101
|
+
version: 1.0.0
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.0.0
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: extlib
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: 0.9.15
|
88
118
|
type: :runtime
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.9.15
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: logging
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: 1.6.1
|
99
134
|
type: :runtime
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.6.1
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: optimism
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,32 +149,47 @@ dependencies:
|
|
109
149
|
version: 3.1.2
|
110
150
|
type: :runtime
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 3.1.2
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: ruby_protobuf
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
|
-
- - =
|
163
|
+
- - '='
|
119
164
|
- !ruby/object:Gem::Version
|
120
165
|
version: 0.4.11
|
121
166
|
type: :runtime
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - '='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.4.11
|
124
174
|
- !ruby/object:Gem::Dependency
|
125
175
|
name: state_machine
|
126
|
-
requirement:
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
127
177
|
none: false
|
128
178
|
requirements:
|
129
|
-
- - =
|
179
|
+
- - '='
|
130
180
|
- !ruby/object:Gem::Version
|
131
181
|
version: 1.1.2
|
132
182
|
type: :runtime
|
133
183
|
prerelease: false
|
134
|
-
version_requirements:
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - '='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 1.1.2
|
135
190
|
- !ruby/object:Gem::Dependency
|
136
191
|
name: trollop
|
137
|
-
requirement:
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
138
193
|
none: false
|
139
194
|
requirements:
|
140
195
|
- - ! '>='
|
@@ -142,10 +197,15 @@ dependencies:
|
|
142
197
|
version: 1.16.2
|
143
198
|
type: :runtime
|
144
199
|
prerelease: false
|
145
|
-
version_requirements:
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: 1.16.2
|
146
206
|
- !ruby/object:Gem::Dependency
|
147
207
|
name: yajl-ruby
|
148
|
-
requirement:
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
149
209
|
none: false
|
150
210
|
requirements:
|
151
211
|
- - ! '>='
|
@@ -153,10 +213,15 @@ dependencies:
|
|
153
213
|
version: 1.1.0
|
154
214
|
type: :runtime
|
155
215
|
prerelease: false
|
156
|
-
version_requirements:
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: 1.1.0
|
157
222
|
- !ruby/object:Gem::Dependency
|
158
223
|
name: multi_json
|
159
|
-
requirement:
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
160
225
|
none: false
|
161
226
|
requirements:
|
162
227
|
- - ! '>='
|
@@ -164,7 +229,12 @@ dependencies:
|
|
164
229
|
version: 1.3.2
|
165
230
|
type: :runtime
|
166
231
|
prerelease: false
|
167
|
-
version_requirements:
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
234
|
+
requirements:
|
235
|
+
- - ! '>='
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: 1.3.2
|
168
238
|
description: Simple multi-agent framework. It uses AMQP for it's messaging layer.
|
169
239
|
email: rgh@filterfish.org
|
170
240
|
executables:
|
@@ -175,56 +245,58 @@ extra_rdoc_files: []
|
|
175
245
|
files:
|
176
246
|
- bin/agency
|
177
247
|
- bin/smithctl
|
248
|
+
- lib/smith.rb
|
249
|
+
- lib/smith/acl_compiler.rb
|
250
|
+
- lib/smith/agent.rb
|
178
251
|
- lib/smith/agent_cache.rb
|
179
252
|
- lib/smith/agent_config.rb
|
253
|
+
- lib/smith/agent_monitoring.rb
|
254
|
+
- lib/smith/agent_process.rb
|
180
255
|
- lib/smith/application/agency.rb
|
256
|
+
- lib/smith/bootstrap.rb
|
181
257
|
- lib/smith/cache.rb
|
258
|
+
- lib/smith/command.rb
|
259
|
+
- lib/smith/command_base.rb
|
182
260
|
- lib/smith/commands/agency/agents.rb
|
183
261
|
- lib/smith/commands/agency/kill.rb
|
184
262
|
- lib/smith/commands/agency/list.rb
|
185
263
|
- lib/smith/commands/agency/logger.rb
|
186
264
|
- lib/smith/commands/agency/metadata.rb
|
265
|
+
- lib/smith/commands/agency/object_count.rb
|
187
266
|
- lib/smith/commands/agency/restart.rb
|
188
267
|
- lib/smith/commands/agency/start.rb
|
189
268
|
- lib/smith/commands/agency/stop.rb
|
190
269
|
- lib/smith/commands/agency/version.rb
|
191
|
-
- lib/smith/commands/
|
270
|
+
- lib/smith/commands/common.rb
|
271
|
+
- lib/smith/commands/smithctl/acl.rb
|
192
272
|
- lib/smith/commands/smithctl/commands.rb
|
193
273
|
- lib/smith/commands/smithctl/pop.rb
|
194
274
|
- lib/smith/commands/smithctl/push.rb
|
195
275
|
- lib/smith/commands/smithctl/rm.rb
|
196
276
|
- lib/smith/commands/smithctl/top.rb
|
197
277
|
- lib/smith/commands/template.rb
|
198
|
-
- lib/smith/
|
278
|
+
- lib/smith/config.rb
|
279
|
+
- lib/smith/daemon.rb
|
280
|
+
- lib/smith/exceptions.rb
|
281
|
+
- lib/smith/logger.rb
|
199
282
|
- lib/smith/messaging/acl/agency_command.proto
|
200
283
|
- lib/smith/messaging/acl/agent_command.proto
|
201
284
|
- lib/smith/messaging/acl/agent_config_request.proto
|
202
285
|
- lib/smith/messaging/acl/agent_config_update.proto
|
203
|
-
- lib/smith/messaging/acl/agent_stats.proto
|
204
|
-
- lib/smith/messaging/acl/search.proto
|
205
286
|
- lib/smith/messaging/acl/agent_keepalive.proto
|
206
287
|
- lib/smith/messaging/acl/agent_lifecycle.proto
|
288
|
+
- lib/smith/messaging/acl/agent_stats.proto
|
207
289
|
- lib/smith/messaging/acl/default.rb
|
290
|
+
- lib/smith/messaging/acl/search.proto
|
208
291
|
- lib/smith/messaging/amqp_options.rb
|
292
|
+
- lib/smith/messaging/endpoint.rb
|
209
293
|
- lib/smith/messaging/payload.rb
|
210
294
|
- lib/smith/messaging/queue_factory.rb
|
211
|
-
- lib/smith/messaging/responder.rb
|
212
|
-
- lib/smith/messaging/endpoint.rb
|
213
295
|
- lib/smith/messaging/receiver.rb
|
296
|
+
- lib/smith/messaging/responder.rb
|
214
297
|
- lib/smith/messaging/sender.rb
|
215
|
-
- lib/smith/
|
216
|
-
- lib/smith/agent.rb
|
217
|
-
- lib/smith/agent_monitoring.rb
|
218
|
-
- lib/smith/agent_process.rb
|
219
|
-
- lib/smith/bootstrap.rb
|
220
|
-
- lib/smith/command.rb
|
221
|
-
- lib/smith/command_base.rb
|
222
|
-
- lib/smith/config.rb
|
223
|
-
- lib/smith/daemon.rb
|
224
|
-
- lib/smith/exceptions.rb
|
225
|
-
- lib/smith/logger.rb
|
298
|
+
- lib/smith/object_count.rb
|
226
299
|
- lib/smith/version.rb
|
227
|
-
- lib/smith.rb
|
228
300
|
homepage: http://github.com/filterfish/smith2/
|
229
301
|
licenses: []
|
230
302
|
post_install_message:
|
@@ -245,9 +317,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
317
|
version: '0'
|
246
318
|
requirements: []
|
247
319
|
rubyforge_project: nowarning
|
248
|
-
rubygems_version: 1.8.
|
320
|
+
rubygems_version: 1.8.24
|
249
321
|
signing_key:
|
250
322
|
specification_version: 3
|
251
323
|
summary: Multi-agent framework
|
252
324
|
test_files: []
|
253
|
-
has_rdoc: false
|