smith 0.5.13.1 → 0.6.1
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 +7 -0
- data/bin/agency +19 -7
- data/bin/pry-smith +11 -0
- data/bin/smithctl +19 -21
- data/lib/smith/acl_compiler.rb +101 -56
- data/lib/smith/acl_parser.rb +75 -0
- data/lib/smith/agent.rb +28 -43
- data/lib/smith/agent_cache.rb +43 -17
- data/lib/smith/agent_monitoring.rb +1 -1
- data/lib/smith/agent_process.rb +148 -53
- data/lib/smith/application/agency.rb +44 -54
- data/lib/smith/bootstrap.rb +31 -17
- data/lib/smith/cache.rb +4 -0
- data/lib/smith/command.rb +1 -3
- data/lib/smith/commands/agency/kill.rb +22 -5
- data/lib/smith/commands/agency/list.rb +9 -4
- data/lib/smith/commands/agency/logger.rb +25 -12
- data/lib/smith/commands/agency/object_count.rb +19 -8
- data/lib/smith/commands/agency/start.rb +7 -10
- data/lib/smith/commands/agency/stop.rb +30 -12
- data/lib/smith/commands/common.rb +1 -1
- data/lib/smith/commands/smithctl/acl.rb +6 -3
- data/lib/smith/commands/smithctl/dump.rb +79 -0
- data/lib/smith/commands/smithctl/firehose.rb +2 -1
- data/lib/smith/commands/smithctl/push.rb +27 -12
- data/lib/smith/commands/smithctl/status.rb +27 -0
- data/lib/smith/config.rb +140 -28
- data/lib/smith/daemon.rb +16 -3
- data/lib/smith/exceptions.rb +6 -3
- data/lib/smith/logger.rb +12 -24
- data/lib/smith/messaging/acl/agent_keepalive.proto +2 -2
- data/lib/smith/messaging/acl/agent_lifecycle.proto +15 -9
- data/lib/smith/messaging/acl/agent_stats.proto +6 -5
- data/lib/smith/messaging/acl/default.rb +2 -7
- data/lib/smith/messaging/acl_type_cache.rb +77 -0
- data/lib/smith/messaging/factory.rb +29 -0
- data/lib/smith/messaging/queue.rb +12 -10
- data/lib/smith/messaging/queue_definition.rb +21 -4
- data/lib/smith/messaging/receiver.rb +55 -62
- data/lib/smith/messaging/requeue.rb +1 -5
- data/lib/smith/messaging/sender.rb +48 -43
- data/lib/smith/messaging/util.rb +0 -10
- data/lib/smith/queue_definitions.rb +7 -4
- data/lib/smith/version.rb +1 -1
- data/lib/smith.rb +57 -56
- metadata +77 -128
- data/lib/smith/messaging/payload.rb +0 -100
metadata
CHANGED
@@ -1,269 +1,215 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smith
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.6.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Richard Heycock
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-09-30 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: amqp
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
19
|
+
version: 1.0.2
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: dm-core
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - '='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 1.0.1
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - '='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 1.0.1
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: dm-observer
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - '='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 1.0.1
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - '='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0.1
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: dm-yaml-adapter
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - '='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 1.0.1
|
70
|
-
type: :runtime
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - '='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 1.0.1
|
26
|
+
version: 1.0.2
|
78
27
|
- !ruby/object:Gem::Dependency
|
79
28
|
name: daemons
|
80
29
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
30
|
requirements:
|
83
|
-
- -
|
31
|
+
- - '>='
|
84
32
|
- !ruby/object:Gem::Version
|
85
33
|
version: 1.1.4
|
86
34
|
type: :runtime
|
87
35
|
prerelease: false
|
88
36
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
37
|
requirements:
|
91
|
-
- -
|
38
|
+
- - '>='
|
92
39
|
- !ruby/object:Gem::Version
|
93
40
|
version: 1.1.4
|
94
41
|
- !ruby/object:Gem::Dependency
|
95
42
|
name: eventmachine
|
96
43
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
44
|
requirements:
|
99
|
-
- -
|
45
|
+
- - '>='
|
100
46
|
- !ruby/object:Gem::Version
|
101
47
|
version: 1.0.0
|
102
48
|
type: :runtime
|
103
49
|
prerelease: false
|
104
50
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
51
|
requirements:
|
107
|
-
- -
|
52
|
+
- - '>='
|
108
53
|
- !ruby/object:Gem::Version
|
109
54
|
version: 1.0.0
|
110
55
|
- !ruby/object:Gem::Dependency
|
111
56
|
name: extlib
|
112
57
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
58
|
requirements:
|
115
|
-
- -
|
59
|
+
- - '>='
|
116
60
|
- !ruby/object:Gem::Version
|
117
61
|
version: 0.9.15
|
118
62
|
type: :runtime
|
119
63
|
prerelease: false
|
120
64
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
65
|
requirements:
|
123
|
-
- -
|
66
|
+
- - '>='
|
124
67
|
- !ruby/object:Gem::Version
|
125
68
|
version: 0.9.15
|
126
69
|
- !ruby/object:Gem::Dependency
|
127
70
|
name: logging
|
128
71
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
72
|
requirements:
|
131
|
-
- -
|
73
|
+
- - '>='
|
132
74
|
- !ruby/object:Gem::Version
|
133
75
|
version: 1.6.1
|
134
76
|
type: :runtime
|
135
77
|
prerelease: false
|
136
78
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
79
|
requirements:
|
139
|
-
- -
|
80
|
+
- - '>='
|
140
81
|
- !ruby/object:Gem::Version
|
141
82
|
version: 1.6.1
|
142
83
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
84
|
+
name: protobuf
|
144
85
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
86
|
requirements:
|
147
|
-
- - '
|
87
|
+
- - '>='
|
148
88
|
- !ruby/object:Gem::Version
|
149
|
-
version:
|
89
|
+
version: 2.7.7
|
150
90
|
type: :runtime
|
151
91
|
prerelease: false
|
152
92
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
93
|
requirements:
|
155
|
-
- - '
|
94
|
+
- - '>='
|
156
95
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
96
|
+
version: 2.7.7
|
158
97
|
- !ruby/object:Gem::Dependency
|
159
|
-
name:
|
98
|
+
name: state_machine
|
160
99
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
100
|
requirements:
|
163
101
|
- - '='
|
164
102
|
- !ruby/object:Gem::Version
|
165
|
-
version:
|
103
|
+
version: 1.1.2
|
166
104
|
type: :runtime
|
167
105
|
prerelease: false
|
168
106
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
107
|
requirements:
|
171
108
|
- - '='
|
172
109
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
110
|
+
version: 1.1.2
|
174
111
|
- !ruby/object:Gem::Dependency
|
175
|
-
name:
|
112
|
+
name: trollop
|
176
113
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
114
|
requirements:
|
179
|
-
- - '
|
115
|
+
- - '>='
|
180
116
|
- !ruby/object:Gem::Version
|
181
|
-
version: 1.
|
117
|
+
version: 1.16.2
|
182
118
|
type: :runtime
|
183
119
|
prerelease: false
|
184
120
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
121
|
requirements:
|
187
|
-
- - '
|
122
|
+
- - '>='
|
188
123
|
- !ruby/object:Gem::Version
|
189
|
-
version: 1.
|
124
|
+
version: 1.16.2
|
190
125
|
- !ruby/object:Gem::Dependency
|
191
|
-
name:
|
126
|
+
name: multi_json
|
192
127
|
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
128
|
requirements:
|
195
|
-
- -
|
129
|
+
- - '>='
|
196
130
|
- !ruby/object:Gem::Version
|
197
|
-
version: 1.
|
131
|
+
version: 1.3.2
|
198
132
|
type: :runtime
|
199
133
|
prerelease: false
|
200
134
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
135
|
requirements:
|
203
|
-
- -
|
136
|
+
- - '>='
|
204
137
|
- !ruby/object:Gem::Version
|
205
|
-
version: 1.
|
138
|
+
version: 1.3.2
|
206
139
|
- !ruby/object:Gem::Dependency
|
207
|
-
name:
|
140
|
+
name: ruby_parser
|
208
141
|
requirement: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
142
|
requirements:
|
211
|
-
- -
|
143
|
+
- - '>='
|
212
144
|
- !ruby/object:Gem::Version
|
213
|
-
version:
|
145
|
+
version: 3.2.2
|
214
146
|
type: :runtime
|
215
147
|
prerelease: false
|
216
148
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
149
|
requirements:
|
219
|
-
- -
|
150
|
+
- - '>='
|
220
151
|
- !ruby/object:Gem::Version
|
221
|
-
version:
|
152
|
+
version: 3.2.2
|
222
153
|
- !ruby/object:Gem::Dependency
|
223
|
-
name:
|
154
|
+
name: tdb
|
224
155
|
requirement: !ruby/object:Gem::Requirement
|
225
|
-
none: false
|
226
156
|
requirements:
|
227
|
-
- -
|
157
|
+
- - '>='
|
228
158
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
159
|
+
version: '0'
|
230
160
|
type: :runtime
|
231
161
|
prerelease: false
|
232
162
|
version_requirements: !ruby/object:Gem::Requirement
|
233
|
-
none: false
|
234
163
|
requirements:
|
235
|
-
- -
|
164
|
+
- - '>='
|
236
165
|
- !ruby/object:Gem::Version
|
237
|
-
version:
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: murmurhash3
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - '>='
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
238
181
|
description: Simple multi-agent framework. It uses AMQP for it's messaging layer.
|
239
182
|
email: rgh@filterfish.org
|
240
183
|
executables:
|
241
184
|
- agency
|
242
185
|
- smithctl
|
186
|
+
- pry-smith
|
243
187
|
extensions: []
|
244
188
|
extra_rdoc_files: []
|
245
189
|
files:
|
246
190
|
- bin/agency
|
247
191
|
- bin/smithctl
|
248
|
-
-
|
192
|
+
- bin/pry-smith
|
249
193
|
- lib/smith/application/agency.rb
|
250
194
|
- lib/smith/commands/agency/agents.rb
|
251
|
-
- lib/smith/commands/agency/logger.rb
|
252
195
|
- lib/smith/commands/agency/metadata.rb
|
253
|
-
- lib/smith/commands/agency/object_count.rb
|
254
196
|
- lib/smith/commands/agency/version.rb
|
255
197
|
- lib/smith/commands/agency/kill.rb
|
256
198
|
- lib/smith/commands/agency/list.rb
|
199
|
+
- lib/smith/commands/agency/logger.rb
|
200
|
+
- lib/smith/commands/agency/object_count.rb
|
257
201
|
- lib/smith/commands/agency/restart.rb
|
258
202
|
- lib/smith/commands/agency/start.rb
|
259
203
|
- lib/smith/commands/agency/stop.rb
|
260
|
-
- lib/smith/commands/smithctl/acl.rb
|
261
204
|
- lib/smith/commands/smithctl/commands.rb
|
262
|
-
- lib/smith/commands/smithctl/firehose.rb
|
263
205
|
- lib/smith/commands/smithctl/pop.rb
|
264
206
|
- lib/smith/commands/smithctl/rm.rb
|
265
207
|
- lib/smith/commands/smithctl/subscribe.rb
|
208
|
+
- lib/smith/commands/smithctl/acl.rb
|
209
|
+
- lib/smith/commands/smithctl/dump.rb
|
210
|
+
- lib/smith/commands/smithctl/firehose.rb
|
266
211
|
- lib/smith/commands/smithctl/push.rb
|
212
|
+
- lib/smith/commands/smithctl/status.rb
|
267
213
|
- lib/smith/commands/smithctl/top.rb
|
268
214
|
- lib/smith/commands/template.rb
|
269
215
|
- lib/smith/commands/common.rb
|
@@ -279,18 +225,21 @@ files:
|
|
279
225
|
- lib/smith/messaging/responder.rb
|
280
226
|
- lib/smith/messaging/amqp_options.rb
|
281
227
|
- lib/smith/messaging/message_counter.rb
|
282
|
-
- lib/smith/messaging/queue.rb
|
283
228
|
- lib/smith/messaging/queue_factory.rb
|
284
|
-
- lib/smith/messaging/
|
285
|
-
- lib/smith/messaging/
|
229
|
+
- lib/smith/messaging/acl_type_cache.rb
|
230
|
+
- lib/smith/messaging/factory.rb
|
231
|
+
- lib/smith/messaging/queue.rb
|
286
232
|
- lib/smith/messaging/queue_definition.rb
|
287
233
|
- lib/smith/messaging/receiver.rb
|
234
|
+
- lib/smith/messaging/requeue.rb
|
288
235
|
- lib/smith/messaging/sender.rb
|
289
236
|
- lib/smith/messaging/util.rb
|
237
|
+
- lib/smith/agent_config.rb
|
290
238
|
- lib/smith/object_count.rb
|
291
239
|
- lib/smith/amqp_errors.rb
|
292
240
|
- lib/smith/command_base.rb
|
293
241
|
- lib/smith/acl_compiler.rb
|
242
|
+
- lib/smith/acl_parser.rb
|
294
243
|
- lib/smith/agent.rb
|
295
244
|
- lib/smith/agent_cache.rb
|
296
245
|
- lib/smith/agent_monitoring.rb
|
@@ -305,28 +254,28 @@ files:
|
|
305
254
|
- lib/smith/queue_definitions.rb
|
306
255
|
- lib/smith/version.rb
|
307
256
|
- lib/smith.rb
|
308
|
-
homepage: http://github.com/filterfish/smith2
|
257
|
+
homepage: http://github.com/filterfish/smith2
|
309
258
|
licenses: []
|
259
|
+
metadata: {}
|
310
260
|
post_install_message:
|
311
261
|
rdoc_options: []
|
312
262
|
require_paths:
|
313
263
|
- lib
|
314
264
|
required_ruby_version: !ruby/object:Gem::Requirement
|
315
|
-
none: false
|
316
265
|
requirements:
|
317
|
-
- -
|
266
|
+
- - '>='
|
318
267
|
- !ruby/object:Gem::Version
|
319
268
|
version: '0'
|
320
269
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
321
|
-
none: false
|
322
270
|
requirements:
|
323
|
-
- -
|
271
|
+
- - '>='
|
324
272
|
- !ruby/object:Gem::Version
|
325
273
|
version: '0'
|
326
274
|
requirements: []
|
327
275
|
rubyforge_project: smith
|
328
|
-
rubygems_version:
|
276
|
+
rubygems_version: 2.0.3
|
329
277
|
signing_key:
|
330
|
-
specification_version:
|
278
|
+
specification_version: 4
|
331
279
|
summary: Multi-agent framework
|
332
280
|
test_files: []
|
281
|
+
has_rdoc: false
|
@@ -1,100 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
module Smith
|
3
|
-
|
4
|
-
module ACL
|
5
|
-
module ACLInstanceMethods
|
6
|
-
def inspect
|
7
|
-
"<#{self.class.to_s}> -> #{self.to_hash}"
|
8
|
-
end
|
9
|
-
|
10
|
-
def to_json
|
11
|
-
Yajl.dump(self.to_hash)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Factory
|
16
|
-
include Logger
|
17
|
-
|
18
|
-
@@acl_classes = {:default => Default}
|
19
|
-
|
20
|
-
class << self
|
21
|
-
def create(type, content=nil, &blk)
|
22
|
-
type = type.to_s
|
23
|
-
|
24
|
-
unless @@acl_classes.include?(type)
|
25
|
-
logger.debug { "Loading ACL: #{type}" }
|
26
|
-
# decorate the ACL class
|
27
|
-
@@acl_classes[type] = clazz(type).send(:include, ACLInstanceMethods)
|
28
|
-
@@acl_classes[type].send(:define_method, :_type) { type }
|
29
|
-
end
|
30
|
-
|
31
|
-
if blk
|
32
|
-
if content.nil?
|
33
|
-
@@acl_classes[type].new.tap { |m| blk.call(m) }
|
34
|
-
else
|
35
|
-
raise ArgumentError, "You cannot give a content hash and a block."
|
36
|
-
end
|
37
|
-
else
|
38
|
-
if content.respond_to?(:serialize_to_string)
|
39
|
-
content
|
40
|
-
elsif content.nil?
|
41
|
-
@@acl_classes[type].new
|
42
|
-
else
|
43
|
-
@@acl_classes[type].new(content)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def clazz(type)
|
49
|
-
type.split(/::/).inject(ACL) do |a,m|
|
50
|
-
a.const_get(Extlib::Inflection.camelize(m))
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
class Payload
|
57
|
-
include Logger
|
58
|
-
|
59
|
-
# content can be an existing ACL class.
|
60
|
-
def initialize(acl, opts={})
|
61
|
-
if acl.respond_to?(:serialize_to_string)
|
62
|
-
@acl = acl
|
63
|
-
else
|
64
|
-
raise ArgumentError, "ACL does not have a serialize_to_string method."
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
# The type of content.
|
69
|
-
def _type
|
70
|
-
@acl._type
|
71
|
-
end
|
72
|
-
|
73
|
-
# Returns a hash of the payload.
|
74
|
-
def to_hash
|
75
|
-
@acl.to_hash
|
76
|
-
end
|
77
|
-
|
78
|
-
# Encode the content, returning the encoded data.
|
79
|
-
def encode
|
80
|
-
@acl.serialize_to_string
|
81
|
-
end
|
82
|
-
|
83
|
-
# Returns true if the payload has all its required fields set.
|
84
|
-
def initialized?
|
85
|
-
raise RuntimeError, "You probably forgot to call #content or give the :from option when instantiating the object." if @acl.nil?
|
86
|
-
@acl.initialized?
|
87
|
-
end
|
88
|
-
|
89
|
-
# Convert the payload to a pretty string.
|
90
|
-
def to_s
|
91
|
-
@acl.inspect
|
92
|
-
end
|
93
|
-
|
94
|
-
# Decode the content using the specified decoder.
|
95
|
-
def self.decode(payload, type=:default)
|
96
|
-
Factory.create(type).parse_from_string(payload)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|