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 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.each_child do |acl_file|
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'
@@ -30,9 +30,12 @@ module Smith
30
30
  results = {}
31
31
  path_glob(path) do |p|
32
32
  if should_compile?(p)
33
- logger.info { "Compiling: #{p}" }
34
- # TODO put some error handling here.
35
- Protobuf::Compiler.compile(p.basename, p.dirname, @cache_path)
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
- message = {:state => 'acknowledge_start', :pid => $$, :name => self.class.to_s, :metadata => agent_options[:metadata], :started_at => Time.now.to_i}
154
- ack_start_queue.publish(ACL::Payload.new(:agent_lifecycle).content(agent_options.merge(message)))
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
 
@@ -69,7 +69,7 @@ module Smith
69
69
  def alive?
70
70
  if self.pid
71
71
  begin
72
- Process.kill(0, self.pid.to_i)
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.to_i)
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.to_i)
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
@@ -43,6 +43,10 @@ module Smith
43
43
  @parser.opt(*opt_spec)
44
44
  end
45
45
 
46
+ def conflicts(*syms)
47
+ @parser.conflicts(*syms)
48
+ end
49
+
46
50
  def options_spec
47
51
  banner "You should really set a proper banner notice for this command."
48
52
  end
@@ -20,7 +20,8 @@ module Smith
20
20
  end
21
21
  end
22
22
  end.flatten
23
- (agent_paths.empty?) ? "" : agent_paths.sort.join(" ")
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
- (long) ? tabulate(long_format(a), :header => "total #{a.count}") : short_format(a)
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 :long, "the number of times to send the message", :short => :l
45
- opt :all, "show all agents in all states", :short => :a
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 not about target at end of this file !!!!!!!!!!!!!!
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 not about target at end of this file !!!!!!!!!!!!!!
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 Acls < CommandBase
7
+ class Acl < CommandBase
8
8
  def execute
9
9
  responder.value do
10
- if options[:show]
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, "format the listing", :short => :l
57
- opt :show, "show the contents of the acl file", :short => :s
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
- data = case
15
- when options[:json_given]
16
- options[:json]
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
- work = proc do |n,iter|
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
- EM::Iterator.new(0..options[:number] - 1).each(work, done)
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 :json, "supply the json representation with this flag", :type => :string, :conflicts => :file, :short => :j
63
- opt :file, "read the data from the named file", :type => :string, :conflicts => :json, :short => :f
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
@@ -1,3 +1,3 @@
1
1
  module Smith
2
- VERSION = "0.5.10"
2
+ VERSION = "0.5.11"
3
3
  end
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.10
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-02-22 00:00:00.000000000 Z
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: &13497700 !ruby/object:Gem::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.5.pre
21
+ version: 0.9.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *13497700
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: &13497200 !ruby/object:Gem::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: *13497200
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: &12710700 !ruby/object:Gem::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: *12710700
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: &12710240 !ruby/object:Gem::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: *12710240
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: &12709780 !ruby/object:Gem::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: *12709780
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: &12709320 !ruby/object:Gem::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.beta.4
101
+ version: 1.0.0
77
102
  type: :runtime
78
103
  prerelease: false
79
- version_requirements: *12709320
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: &12708860 !ruby/object:Gem::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: *12708860
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: &12708400 !ruby/object:Gem::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: *12708400
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: &12707940 !ruby/object:Gem::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: *12707940
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: &12707480 !ruby/object:Gem::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: *12707480
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: &12707020 !ruby/object:Gem::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: *12707020
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: &12706560 !ruby/object:Gem::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: *12706560
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: &12706100 !ruby/object:Gem::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: *12706100
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: &12705640 !ruby/object:Gem::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: *12705640
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/smithctl/acls.rb
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/commands/common.rb
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/acl_compiler.rb
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.11
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