smith 0.5.10 → 0.5.11

Sign up to get free protection for your applications and to get access to all the features.
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