maxwell_agent 0.0.5 → 0.0.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 863d245a67d0bfdd11a87128f6a8af5a05709a38
4
- data.tar.gz: 97c29f199f17c4f0824a3d4329583e4834dc6023
3
+ metadata.gz: 9aa26d6796cb79130f46288144c20ea309b0346a
4
+ data.tar.gz: 2c6a9ea962624a3eb023305e50c49b8cd69f116a
5
5
  SHA512:
6
- metadata.gz: d72ab0f533905ad15f9d492bc8645c37096a77c77a4e0494ef01434d898d56ad4ff89d35ee6c32911899bdf7ddc29bc0d3fb068553407d8d14d4e7184c364b39
7
- data.tar.gz: 958253f20f5081f2192c3bd09b0c60f304c38e93dd720bc1fadf1b4f1f302f9ef44383956b4bb1d11b26223c6a3fb9334ed0c22af69fd35a81f0666707ab8a21
6
+ metadata.gz: d4ee98b5428d23c31110aa1a5dc991dfc8f7295b140a1242341d4814cf14483c7c6517ff8947bd193e6a4822992c9935d8bac4e284d1b61d892935398f6b811f
7
+ data.tar.gz: 04a5d646281497f337b9b7e726bd967f221227886313829c11eab7ce280b5c7f286e434e7527575e4db407cfd87134f68ef7b9a45eb1b1f4d8397ff5dc9f4bd2
@@ -4,3 +4,5 @@ rvm:
4
4
  - 2.0.0
5
5
  - 1.9.3
6
6
  - jruby
7
+ services:
8
+ - redis-server
data/Gemfile CHANGED
@@ -8,12 +8,14 @@ group :development do
8
8
  end
9
9
 
10
10
  gem 'rspec', group: [:test, :development]
11
- gem 'rspec-given', group: [:test, :development]
11
+ gem 'rspec-given', "3.4.0", group: [:test, :development]
12
12
 
13
13
  gem 'celluloid'
14
- gem 'redis'
15
- gem 'fakeredis', group: [:test, :development], require: false
14
+ gem 'celluloid-io'
15
+ gem 'celluloid-redis'
16
+ gem 'redis', '~> 3.0.6'
16
17
  gem 'connection_pool'
17
18
  gem 'activesupport', require: ['active_support/core_ext/integer/time']
19
+ gem 'hashie'
18
20
 
19
21
  gem 'rake', group: :test
@@ -1,78 +1,83 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (4.0.1)
4
+ activesupport (4.0.3)
5
5
  i18n (~> 0.6, >= 0.6.4)
6
6
  minitest (~> 4.2)
7
7
  multi_json (~> 1.3)
8
8
  thread_safe (~> 0.1)
9
9
  tzinfo (~> 0.3.37)
10
- atomic (1.1.14)
11
- atomic (1.1.14-java)
10
+ atomic (1.1.15)
11
+ atomic (1.1.15-java)
12
12
  celluloid (0.15.2)
13
13
  timers (~> 1.1.0)
14
14
  celluloid-io (0.15.0)
15
15
  celluloid (>= 0.15.0)
16
16
  nio4r (>= 0.5.0)
17
- coderay (1.0.9)
18
- connection_pool (1.1.0)
19
- diff-lcs (1.2.4)
20
- fakeredis (0.4.2)
21
- redis (~> 3.0.0)
17
+ celluloid-redis (0.0.2)
18
+ celluloid-io (>= 0.13.0.pre)
19
+ redis
20
+ coderay (1.1.0)
21
+ connection_pool (1.2.0)
22
+ diff-lcs (1.2.5)
22
23
  ffi (1.9.3)
23
24
  ffi (1.9.3-java)
24
25
  ffi2-generators (0.1.1)
25
26
  formatador (0.2.4)
26
- given_core (3.1.1)
27
+ given_core (3.4.0)
27
28
  sorcerer (>= 0.3.7)
28
- guard (2.2.3)
29
+ guard (2.5.1)
29
30
  formatador (>= 0.2.4)
30
- listen (~> 2.1)
31
+ listen (~> 2.6)
31
32
  lumberjack (~> 1.0)
32
33
  pry (>= 0.9.12)
33
34
  thor (>= 0.18.1)
34
- guard-rspec (4.0.3)
35
- guard (>= 2.1.1)
36
- rspec (~> 2.14)
37
- i18n (0.6.5)
35
+ guard-rspec (4.2.7)
36
+ guard (~> 2.1)
37
+ rspec (>= 2.14, < 4.0)
38
+ hashie (2.0.5)
39
+ i18n (0.6.9)
38
40
  json (1.8.1)
39
41
  json (1.8.1-java)
40
- listen (2.2.0)
42
+ listen (2.6.2)
41
43
  celluloid (>= 0.15.2)
44
+ celluloid-io (>= 0.15.0)
42
45
  rb-fsevent (>= 0.9.3)
43
46
  rb-inotify (>= 0.9)
44
47
  lumberjack (1.0.4)
45
48
  method_source (0.8.2)
46
49
  minitest (4.7.5)
47
- multi_json (1.8.2)
48
- pry (0.9.12.2)
49
- coderay (~> 1.0.5)
50
+ multi_json (1.8.4)
51
+ nio4r (1.0.0)
52
+ nio4r (1.0.0-java)
53
+ pry (0.9.12.6)
54
+ coderay (~> 1.0)
50
55
  method_source (~> 0.8)
51
56
  slop (~> 3.4)
52
- pry (0.9.12.2-java)
53
- coderay (~> 1.0.5)
57
+ pry (0.9.12.6-java)
58
+ coderay (~> 1.0)
54
59
  method_source (~> 0.8)
55
60
  slop (~> 3.4)
56
61
  spoon (~> 0.0)
57
- rake (10.1.0)
58
- rb-fsevent (0.9.3)
59
- rb-inotify (0.9.2)
62
+ rake (10.1.1)
63
+ rb-fsevent (0.9.4)
64
+ rb-inotify (0.9.3)
60
65
  ffi (>= 0.5.0)
61
66
  rdoc (3.12.2)
62
67
  json (~> 1.4)
63
- redis (3.0.6)
68
+ redis (3.0.7)
64
69
  rspec (2.14.1)
65
70
  rspec-core (~> 2.14.0)
66
71
  rspec-expectations (~> 2.14.0)
67
72
  rspec-mocks (~> 2.14.0)
68
- rspec-core (2.14.7)
69
- rspec-expectations (2.14.3)
73
+ rspec-core (2.14.8)
74
+ rspec-expectations (2.14.5)
70
75
  diff-lcs (>= 1.1.3, < 2.0)
71
- rspec-given (3.1.1)
72
- given_core (= 3.1.1)
76
+ rspec-given (3.4.0)
77
+ given_core (= 3.4.0)
73
78
  rspec (>= 2.12)
74
- rspec-mocks (2.14.4)
75
- rubysl (2.0.12)
79
+ rspec-mocks (2.14.6)
80
+ rubysl (2.0.15)
76
81
  rubysl-abbrev (~> 2.0)
77
82
  rubysl-base64 (~> 2.0)
78
83
  rubysl-benchmark (~> 2.0)
@@ -107,7 +112,6 @@ GEM
107
112
  rubysl-io-wait (~> 2.0)
108
113
  rubysl-ipaddr (~> 2.0)
109
114
  rubysl-irb (~> 2.0)
110
- rubysl-json (~> 2.0)
111
115
  rubysl-logger (~> 2.0)
112
116
  rubysl-mathn (~> 2.0)
113
117
  rubysl-matrix (~> 2.0)
@@ -140,7 +144,6 @@ GEM
140
144
  rubysl-resolv (~> 2.0)
141
145
  rubysl-rexml (~> 2.0)
142
146
  rubysl-rinda (~> 2.0)
143
- rubysl-ripper (~> 2.0)
144
147
  rubysl-rss (~> 2.0)
145
148
  rubysl-scanf (~> 2.0)
146
149
  rubysl-securerandom (~> 2.0)
@@ -153,13 +156,11 @@ GEM
153
156
  rubysl-sync (~> 2.0)
154
157
  rubysl-syslog (~> 2.0)
155
158
  rubysl-tempfile (~> 2.0)
156
- rubysl-test-unit (~> 2.0)
157
159
  rubysl-thread (~> 2.0)
158
160
  rubysl-thwait (~> 2.0)
159
161
  rubysl-time (~> 2.0)
160
162
  rubysl-timeout (~> 2.0)
161
163
  rubysl-tmpdir (~> 2.0)
162
- rubysl-tracer (~> 2.0)
163
164
  rubysl-tsort (~> 2.0)
164
165
  rubysl-un (~> 2.0)
165
166
  rubysl-uri (~> 2.0)
@@ -168,36 +169,36 @@ GEM
168
169
  rubysl-xmlrpc (~> 2.0)
169
170
  rubysl-yaml (~> 2.0)
170
171
  rubysl-zlib (~> 2.0)
171
- rubysl-abbrev (2.0.2)
172
+ rubysl-abbrev (2.0.4)
172
173
  rubysl-base64 (2.0.0)
173
- rubysl-benchmark (2.0.0)
174
+ rubysl-benchmark (2.0.1)
174
175
  rubysl-bigdecimal (2.0.2)
175
- rubysl-cgi (2.0.0)
176
- rubysl-cgi-session (2.0.0)
176
+ rubysl-cgi (2.0.1)
177
+ rubysl-cgi-session (2.0.1)
177
178
  rubysl-cmath (2.0.0)
178
179
  rubysl-complex (2.0.0)
179
180
  rubysl-continuation (2.0.0)
180
181
  rubysl-coverage (2.0.3)
181
- rubysl-csv (2.0.1)
182
+ rubysl-csv (2.0.2)
182
183
  rubysl-english (~> 2.0)
183
- rubysl-curses (2.0.0)
184
+ rubysl-curses (2.0.1)
184
185
  rubysl-date (2.0.6)
185
- rubysl-delegate (2.0.0)
186
+ rubysl-delegate (2.0.1)
186
187
  rubysl-digest (2.0.3)
187
188
  rubysl-drb (2.0.1)
188
189
  rubysl-e2mmap (2.0.0)
189
190
  rubysl-english (2.0.0)
190
191
  rubysl-enumerator (2.0.0)
191
- rubysl-erb (2.0.0)
192
+ rubysl-erb (2.0.1)
192
193
  rubysl-etc (2.0.3)
193
194
  ffi2-generators (~> 0.1)
194
195
  rubysl-expect (2.0.0)
195
196
  rubysl-fcntl (2.0.4)
196
197
  ffi2-generators (~> 0.1)
197
198
  rubysl-fiber (2.0.0)
198
- rubysl-fileutils (2.0.2)
199
- rubysl-find (2.0.0)
200
- rubysl-forwardable (2.0.0)
199
+ rubysl-fileutils (2.0.3)
200
+ rubysl-find (2.0.1)
201
+ rubysl-forwardable (2.0.1)
201
202
  rubysl-getoptlong (2.0.0)
202
203
  rubysl-gserver (2.0.0)
203
204
  rubysl-socket (~> 2.0)
@@ -206,13 +207,11 @@ GEM
206
207
  rubysl-io-nonblock (2.0.0)
207
208
  rubysl-io-wait (2.0.0)
208
209
  rubysl-ipaddr (2.0.0)
209
- rubysl-irb (2.0.3)
210
+ rubysl-irb (2.0.4)
210
211
  rubysl-e2mmap (~> 2.0)
211
212
  rubysl-mathn (~> 2.0)
212
213
  rubysl-readline (~> 2.0)
213
214
  rubysl-thread (~> 2.0)
214
- rubysl-tracer (~> 2.0)
215
- rubysl-json (2.0.2)
216
215
  rubysl-logger (2.0.0)
217
216
  rubysl-mathn (2.0.0)
218
217
  rubysl-matrix (2.1.0)
@@ -236,23 +235,22 @@ GEM
236
235
  rubysl-observer (2.0.0)
237
236
  rubysl-open-uri (2.0.0)
238
237
  rubysl-open3 (2.0.0)
239
- rubysl-openssl (2.0.3)
238
+ rubysl-openssl (2.1.0)
240
239
  rubysl-optparse (2.0.1)
241
240
  rubysl-shellwords (~> 2.0)
242
241
  rubysl-ostruct (2.0.4)
243
242
  rubysl-pathname (2.0.0)
244
243
  rubysl-prettyprint (2.0.2)
245
- rubysl-prime (2.0.0)
244
+ rubysl-prime (2.0.1)
246
245
  rubysl-profile (2.0.0)
247
246
  rubysl-profiler (2.0.1)
248
247
  rubysl-pstore (2.0.0)
249
248
  rubysl-pty (2.0.2)
250
249
  rubysl-rational (2.0.1)
251
250
  rubysl-readline (2.0.2)
252
- rubysl-resolv (2.0.0)
251
+ rubysl-resolv (2.1.0)
253
252
  rubysl-rexml (2.0.2)
254
- rubysl-rinda (2.0.0)
255
- rubysl-ripper (2.0.0)
253
+ rubysl-rinda (2.0.1)
256
254
  rubysl-rss (2.0.0)
257
255
  rubysl-scanf (2.0.0)
258
256
  rubysl-securerandom (2.0.0)
@@ -266,14 +264,11 @@ GEM
266
264
  rubysl-syslog (2.0.1)
267
265
  ffi2-generators (~> 0.1)
268
266
  rubysl-tempfile (2.0.1)
269
- rubysl-test-unit (2.0.1)
270
- minitest (~> 4.7)
271
267
  rubysl-thread (2.0.2)
272
268
  rubysl-thwait (2.0.0)
273
269
  rubysl-time (2.0.3)
274
270
  rubysl-timeout (2.0.0)
275
271
  rubysl-tmpdir (2.0.0)
276
- rubysl-tracer (2.0.0)
277
272
  rubysl-tsort (2.0.1)
278
273
  rubysl-un (2.0.0)
279
274
  rubysl-fileutils (~> 2.0)
@@ -282,17 +277,17 @@ GEM
282
277
  rubysl-weakref (2.0.0)
283
278
  rubysl-webrick (2.0.0)
284
279
  rubysl-xmlrpc (2.0.0)
285
- rubysl-yaml (2.0.3)
280
+ rubysl-yaml (2.0.4)
286
281
  rubysl-zlib (2.0.1)
287
- slop (3.4.6)
282
+ slop (3.4.7)
288
283
  sorcerer (1.0.2)
289
284
  spoon (0.0.4)
290
285
  ffi
291
286
  thor (0.18.1)
292
- thread_safe (0.1.3)
293
- atomic
294
- thread_safe (0.1.3-java)
295
- atomic
287
+ thread_safe (0.2.0)
288
+ atomic (>= 1.1.7, < 2)
289
+ thread_safe (0.2.0-java)
290
+ atomic (>= 1.1.7, < 2)
296
291
  timers (1.1.0)
297
292
  tzinfo (0.3.38)
298
293
 
@@ -304,13 +299,15 @@ DEPENDENCIES
304
299
  activesupport
305
300
  bundler (~> 1.0)
306
301
  celluloid
302
+ celluloid-io
303
+ celluloid-redis
307
304
  connection_pool
308
- fakeredis
309
305
  guard
310
306
  guard-rspec
307
+ hashie
311
308
  rake
312
309
  rdoc (~> 3.12)
313
- redis
310
+ redis (~> 3.0.6)
314
311
  rspec
315
- rspec-given
312
+ rspec-given (= 3.4.0)
316
313
  rubysl (~> 2.0)
data/README.md CHANGED
@@ -23,7 +23,7 @@ This is still in early development, use at your own risk
23
23
 
24
24
  To use:
25
25
  ```ruby
26
- require 'maxwell/agent'
26
+ require 'maxwell_agent'
27
27
  Maxwell::Agent.start!
28
28
  ```
29
29
  Check out config/schedule.rb for an example on how to schedule work.<br />
@@ -67,6 +67,27 @@ Everything before the yield is called before passing on to the next middleware<b
67
67
  Everything after the yield is called after the rest of the middleware stack has run<br>
68
68
  If you do not yield in your middleware call it will break the chain (and likely the app)
69
69
 
70
+
71
+ ### Probes
72
+ Probes are the actual monitoring checks that get performed.<br />
73
+ To create a probe include "Maxwell::Agent::Probe" into your class.<br />
74
+ You must define a "perform" instnace method which is what gets called by Maxwell Agent.<br />
75
+ You can optionally define a "handle" instance method which gets run after perform, and should take a single argument<br />
76
+
77
+ By default when your probe is scheduled it is sent to a worker pool to complete.
78
+ Maxwell also has the ability to take advantage of evented I/O.<br />
79
+ If you know your probe uses evented/non-blocking IO compatible with Celluloid add the following to your class:
80
+ ```ruby
81
+ class Foo
82
+ include Maxwell::Agent::Probe
83
+
84
+ self.work_type = :evented
85
+ end
86
+ ```
87
+ The work type option will have your probe sent to the evented worker instead of the normal worker pool.<br />
88
+ Only set this option if your probe is doing mostly non-blocking I/O.<br />
89
+ Maxwell will come with several pre-built evented I/O probes that you can use.
90
+
70
91
  ## Contributing to agent
71
92
 
72
93
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '../lib'))
4
+ require 'maxwell/agent'
5
+
6
+ Maxwell::Agent.start
@@ -1,12 +1,16 @@
1
1
  require 'bundler/setup'
2
2
  require 'active_support/core_ext/integer/time'
3
3
  require 'celluloid'
4
+ require 'celluloid/io'
5
+ require 'celluloid/redis'
4
6
  require 'redis'
5
7
  require 'connection_pool'
6
8
  require 'json'
7
-
9
+ require 'hashie'
10
+ require 'maxwell/agent/attributes'
11
+ require 'maxwell/agent/coercable'
12
+ require 'maxwell/agent/redis_objects'
8
13
  require 'maxwell/agent/configuration'
9
- require 'maxwell/agent/dynamic_attributes'
10
14
  require 'maxwell/agent/middleware/chain'
11
15
  require 'maxwell/agent/middleware/logging'
12
16
  require 'maxwell/agent/work'
@@ -62,7 +66,7 @@ module Maxwell
62
66
  def redis(&block)
63
67
  @redis ||= ConnectionPool.new(
64
68
  size: (configuration.worker_concurrency + 2)) {
65
- Redis.new configuration.redis_options
69
+ Redis.new({driver: :celluloid}.merge(configuration.redis_options))
66
70
  }
67
71
  @redis.with(&block)
68
72
  end
@@ -85,8 +89,7 @@ module Maxwell
85
89
  end
86
90
  end
87
91
  end
88
-
89
- Dir[File.dirname(__FILE__) + '/../plugins/*.rb'].each do |file|
92
+ Dir[File.dirname(__FILE__) + '/../../plugins/*.rb'].each do |file|
90
93
  require file
91
94
  end
92
95
 
@@ -0,0 +1,5 @@
1
+ module Maxwell
2
+ module Agent
3
+ class Attributes < Hashie::Mash;end
4
+ end
5
+ end
@@ -0,0 +1,38 @@
1
+ module Maxwell
2
+ module Agent
3
+ module Coercable
4
+ def self.included(base)
5
+ base.extend ClassMethods
6
+ base.instance_variable_set('@coercions', {})
7
+ end
8
+
9
+
10
+ def coerce_values!(attrs)
11
+ attrs.each do |key, value|
12
+ attrs[key] = coerce_value(key, value) if self.class.coercions[key]
13
+ end
14
+ attrs
15
+ end
16
+
17
+ def coerce_value(key, value)
18
+ coercion_class = self.class.coercions[key]
19
+ case
20
+ when coercion_class.is_a?(Proc) then coercion_class.call(value)
21
+ else coercion_class.new(value)
22
+ end
23
+ end
24
+
25
+ module ClassMethods
26
+ def coercions
27
+ @coercions ||= {}
28
+ end
29
+
30
+ def coerce(key, as)
31
+ @coercions[key] = as
32
+ end
33
+
34
+ end
35
+ end
36
+ end
37
+ end
38
+