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.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/bin/agency +19 -7
  3. data/bin/pry-smith +11 -0
  4. data/bin/smithctl +19 -21
  5. data/lib/smith/acl_compiler.rb +101 -56
  6. data/lib/smith/acl_parser.rb +75 -0
  7. data/lib/smith/agent.rb +28 -43
  8. data/lib/smith/agent_cache.rb +43 -17
  9. data/lib/smith/agent_monitoring.rb +1 -1
  10. data/lib/smith/agent_process.rb +148 -53
  11. data/lib/smith/application/agency.rb +44 -54
  12. data/lib/smith/bootstrap.rb +31 -17
  13. data/lib/smith/cache.rb +4 -0
  14. data/lib/smith/command.rb +1 -3
  15. data/lib/smith/commands/agency/kill.rb +22 -5
  16. data/lib/smith/commands/agency/list.rb +9 -4
  17. data/lib/smith/commands/agency/logger.rb +25 -12
  18. data/lib/smith/commands/agency/object_count.rb +19 -8
  19. data/lib/smith/commands/agency/start.rb +7 -10
  20. data/lib/smith/commands/agency/stop.rb +30 -12
  21. data/lib/smith/commands/common.rb +1 -1
  22. data/lib/smith/commands/smithctl/acl.rb +6 -3
  23. data/lib/smith/commands/smithctl/dump.rb +79 -0
  24. data/lib/smith/commands/smithctl/firehose.rb +2 -1
  25. data/lib/smith/commands/smithctl/push.rb +27 -12
  26. data/lib/smith/commands/smithctl/status.rb +27 -0
  27. data/lib/smith/config.rb +140 -28
  28. data/lib/smith/daemon.rb +16 -3
  29. data/lib/smith/exceptions.rb +6 -3
  30. data/lib/smith/logger.rb +12 -24
  31. data/lib/smith/messaging/acl/agent_keepalive.proto +2 -2
  32. data/lib/smith/messaging/acl/agent_lifecycle.proto +15 -9
  33. data/lib/smith/messaging/acl/agent_stats.proto +6 -5
  34. data/lib/smith/messaging/acl/default.rb +2 -7
  35. data/lib/smith/messaging/acl_type_cache.rb +77 -0
  36. data/lib/smith/messaging/factory.rb +29 -0
  37. data/lib/smith/messaging/queue.rb +12 -10
  38. data/lib/smith/messaging/queue_definition.rb +21 -4
  39. data/lib/smith/messaging/receiver.rb +55 -62
  40. data/lib/smith/messaging/requeue.rb +1 -5
  41. data/lib/smith/messaging/sender.rb +48 -43
  42. data/lib/smith/messaging/util.rb +0 -10
  43. data/lib/smith/queue_definitions.rb +7 -4
  44. data/lib/smith/version.rb +1 -1
  45. data/lib/smith.rb +57 -56
  46. metadata +77 -128
  47. 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.13.1
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-01-03 00:00:00.000000000 Z
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.9.8
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.9.8
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: optimism
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: 3.3.1
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: 3.3.1
96
+ version: 2.7.7
158
97
  - !ruby/object:Gem::Dependency
159
- name: ruby_protobuf
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: 0.4.11
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: 0.4.11
110
+ version: 1.1.2
174
111
  - !ruby/object:Gem::Dependency
175
- name: state_machine
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.1.2
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.1.2
124
+ version: 1.16.2
190
125
  - !ruby/object:Gem::Dependency
191
- name: trollop
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.16.2
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.16.2
138
+ version: 1.3.2
206
139
  - !ruby/object:Gem::Dependency
207
- name: yajl-ruby
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: 1.1.0
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: 1.1.0
152
+ version: 3.2.2
222
153
  - !ruby/object:Gem::Dependency
223
- name: multi_json
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: 1.3.2
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: 1.3.2
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
- - lib/smith/agent_config.rb
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/requeue.rb
285
- - lib/smith/messaging/payload.rb
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: 1.8.24
276
+ rubygems_version: 2.0.3
329
277
  signing_key:
330
- specification_version: 3
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