noah 0.1-jruby → 0.2-jruby

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/bin/noah-watcher.rb CHANGED
@@ -12,6 +12,7 @@ begin
12
12
  require 'eventmachine'
13
13
  require 'em-http-request'
14
14
  require 'noah'
15
+ require 'noah/agent'
15
16
  require 'json'
16
17
  rescue LoadError
17
18
  puts HELP
@@ -20,67 +21,13 @@ end
20
21
 
21
22
  LOGGER = Logger.new(STDOUT)
22
23
 
23
- class EventMachine::NoahAgent
24
- include EM::Deferrable
25
-
26
- @@watchers = Noah::Watcher.watch_list
27
-
28
- def initialize
29
- @logger = LOGGER
30
- @logger.debug("Initializing with #{@@watchers.size} registered watches")
31
- if EventMachine.reactor_running?
32
- @worker = EM.spawn {|event, message, watch_list|
33
- logger = LOGGER
34
- logger.info("Worker initiated")
35
- logger.debug("got event on http worker: #{event}")
36
- matches = watch_list.find_all{|w| event =~ /^#{Base64.decode64(w)}/}
37
- logger.debug("Found #{matches.size} matches for #{event}")
38
- EM::Iterator.new(matches).each do |watch, iter|
39
- p, ep = Base64.decode64(watch).split("|")
40
- logger.info("Sending message to: #{ep} for pattern: #{p}")
41
- http = EM::HttpRequest.new(ep, :connection_timeout => 2, :inactivity_timeout => 4).post :body => message
42
- http.callback {
43
- logger.info("Message posted to #{ep} successfully")
44
- }
45
- http.errback {
46
- logger.error("Something went wrong")
47
- }
48
- iter.next
49
- end
50
- }
51
- self.succeed("Succeed callback")
52
- else
53
- logger.fatal("Must be inside a reactor!")
54
- end
55
- end
56
-
57
- def watchers
58
- @@watchers.size
59
- end
60
-
61
- def reread_watchers
62
- @logger.debug("Found new watches")
63
- @logger.debug("Current watch count: #{@@watchers.size}")
64
- @@watchers = Noah::Watcher.watch_list
65
- @logger.debug("New watch count: #{@@watchers.size}")
66
- #@logger.debug(@@watchers)
67
- end
68
-
69
- def broker(msg)
70
- # This is just for testing for now
71
- e,m = msg.split("|")
72
- be = Base64.encode64(e).gsub("\n","")
73
- @worker.notify e, m, @@watchers.clone
74
- end
75
- end
76
-
77
24
  EventMachine.run do
78
25
  EM.error_handler do |e|
79
- Logger.new(STDOUT).warn(e)
26
+ LOGGER.warn(e)
80
27
  end
81
28
  logger = LOGGER
82
29
  trap("INT") { logger.debug("Shutting down. Watches will not be fired");EM.stop }
83
- noah = EventMachine::NoahAgent.new
30
+ noah = Noah::Agent.new
84
31
  noah.errback{|x| logger.error("Errback: #{x}")}
85
32
  noah.callback{|y| logger.info("Callback: #{y}")}
86
33
  # Passing messages...like a boss
@@ -93,7 +40,6 @@ EventMachine.run do
93
40
  r.on(:pmessage) do |pattern, event, message|
94
41
  noah.reread_watchers if event =~ /^\/\/noah\/watcher\/.*/
95
42
  master_channel.push "#{event}|#{message}"
96
- logger.debug("Saw[#{event}]")
97
43
  end
98
44
 
99
45
  sub = master_channel.subscribe {|msg|
data/config/warble.rb CHANGED
@@ -8,7 +8,7 @@ Warbler::Config.new do |config|
8
8
  config.includes = FileList["config.ru"]
9
9
  config.excludes = FileList["noah.gemspec", "Gemfile", "Gemfile.lock"]
10
10
  config.bundler = false
11
- config.gems += ["json", "ohm", "ohm-contrib", "sinatra", "sinatra-namespace", "haml"]
11
+ config.gems += ["json", "ohm", "ohm-contrib", "sinatra", "haml"]
12
12
  config.gem_excludes = [/^(test|spec)\//]
13
13
  config.public_html = FileList["views/**/*"]
14
14
  config.webxml.booter = :rack
data/lib/noah/agent.rb ADDED
@@ -0,0 +1,53 @@
1
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), "..", "lib")))
2
+ require 'rubygems'
3
+ require 'logger'
4
+ require 'noah'
5
+ require 'noah/agents/http_agent'
6
+ require 'noah/agents/dummy_agent'
7
+
8
+ module Noah
9
+ class Agent
10
+ include EM::Deferrable
11
+
12
+ Noah::Agents::HttpAgent.register
13
+ Noah::Agents::DummyAgent.register
14
+
15
+ @@watchers = Noah::Watcher.watch_list
16
+ @@agents = Noah::Watchers.agents
17
+
18
+ def initialize
19
+ @logger = LOGGER
20
+ @logger.debug("Initializing with #{@@watchers.size} registered watches")
21
+ @logger.debug("#{@@agents} agents registered")
22
+ if EventMachine.reactor_running?
23
+ self.succeed("Succeed callback")
24
+ else
25
+ logger.fatal("Must be inside a reactor!")
26
+ end
27
+ end
28
+
29
+ def watchers
30
+ @@watchers.size
31
+ end
32
+
33
+ def http_worker
34
+ @http_worker
35
+ end
36
+
37
+ def reread_watchers
38
+ @logger.debug("Found new watches")
39
+ @logger.debug("Current watch count: #{@@watchers.size}")
40
+ @@watchers = Noah::Watcher.watch_list
41
+ @logger.debug("New watch count: #{@@watchers.size}")
42
+ end
43
+
44
+ def broker(msg)
45
+ e,m = msg.split("|")
46
+ be = Base64.encode64(e).gsub("\n","")
47
+ EM::Iterator.new(@@agents).each do |agent, iter|
48
+ agent.send(:notify, e, m, @@watchers.clone)
49
+ iter.next
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,29 @@
1
+ module Noah::Agents
2
+ class DummyAgent
3
+ include EM::Deferrable
4
+
5
+ PREFIX = "dummy"
6
+ NAME = "dummy"
7
+
8
+ def self.register
9
+ Noah::Watchers.register_agent(self)
10
+ end
11
+
12
+ def self.notify(event, message, watch_list)
13
+ logger = LOGGER
14
+ logger.info("#{NAME}: Worker initiated")
15
+ logger.debug("#{NAME}: got event - #{event}")
16
+ matches = watch_list.find_all{|w| event =~ /^#{Base64.decode64(w)}/}
17
+ logger.debug("#{NAME}: Found #{matches.size} possible matches for #{event}")
18
+ EM::Iterator.new(matches).each do |watch, iter|
19
+ p, ep = Base64.decode64(watch).split("|")
20
+ if ep =~ /^#{PREFIX}/
21
+ logger.info("#{NAME}: Sending message to: #{ep} for pattern: #{p}")
22
+ logger.debug("#{NAME}: message received: #{message}")
23
+ end
24
+ iter.next
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,37 @@
1
+ require 'logger'
2
+
3
+ module Noah::Agents
4
+ class HttpAgent
5
+ include EM::Deferrable
6
+
7
+ PREFIX = "http"
8
+ NAME = "http"
9
+
10
+ def self.register
11
+ Noah::Watchers.register_agent(self)
12
+ end
13
+
14
+ def self.notify(event, message, watch_list)
15
+ logger = LOGGER
16
+ logger.info("#{NAME}: Worker initiated")
17
+ logger.debug("#{NAME}: got event - #{event}")
18
+ matches = watch_list.find_all{|w| event =~ /^#{Base64.decode64(w)}/}
19
+ logger.debug("#{PREFIX}: Found #{matches.size} possible matches for #{event}")
20
+ EM::Iterator.new(matches).each do |watch, iter|
21
+ p, ep = Base64.decode64(watch).split("|")
22
+ if ep =~ /^#{PREFIX}/
23
+ logger.info("#{NAME}: Sending message to (#{ep}) for pattern (#{p})")
24
+ http = EM::HttpRequest.new(ep, :connection_timeout => 2, :inactivity_timeout => 4).post :body => message
25
+ http.callback {
26
+ logger.info("#{NAME}: Message posted to #{ep} successfully")
27
+ }
28
+ http.errback {
29
+ logger.error("#{NAME}: Something went wrong with #{ep}")
30
+ }
31
+ iter.next
32
+ end
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -55,8 +55,17 @@ module Noah
55
55
  end
56
56
 
57
57
  class Watchers
58
+ @@agents = []
58
59
  def self.all(options = {})
59
60
  options.empty? ? Watcher.all.sort : Watcher.find(options).sort
60
61
  end
62
+
63
+ def self.register_agent(agent_class)
64
+ @@agents << agent_class
65
+ end
66
+
67
+ def self.agents
68
+ @@agents
69
+ end
61
70
  end
62
71
  end
data/lib/noah/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Noah
2
- VERSION = "0.1"
2
+ VERSION = "0.2"
3
3
  end
metadata CHANGED
@@ -1,8 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noah
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: "0.1"
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ version: "0.2"
6
9
  platform: jruby
7
10
  authors:
8
11
  - John E. Vincent
@@ -10,17 +13,22 @@ autorequire:
10
13
  bindir: bin
11
14
  cert_chain: []
12
15
 
13
- date: 2011-03-14 00:00:00 -04:00
16
+ date: 2011-03-15 00:00:00 -04:00
14
17
  default_executable:
15
18
  dependencies:
16
19
  - !ruby/object:Gem::Dependency
17
20
  name: eventmachine
18
21
  prerelease: false
19
22
  requirement: &id001 !ruby/object:Gem::Requirement
20
- none: false
21
23
  requirements:
22
24
  - - "="
23
25
  - !ruby/object:Gem::Version
26
+ segments:
27
+ - 1
28
+ - 0
29
+ - 0
30
+ - beta
31
+ - 3
24
32
  version: 1.0.0.beta.3
25
33
  type: :runtime
26
34
  version_requirements: *id001
@@ -28,10 +36,15 @@ dependencies:
28
36
  name: em-http-request
29
37
  prerelease: false
30
38
  requirement: &id002 !ruby/object:Gem::Requirement
31
- none: false
32
39
  requirements:
33
40
  - - "="
34
41
  - !ruby/object:Gem::Version
42
+ segments:
43
+ - 1
44
+ - 0
45
+ - 0
46
+ - beta
47
+ - 3
35
48
  version: 1.0.0.beta.3
36
49
  type: :runtime
37
50
  version_requirements: *id002
@@ -39,10 +52,13 @@ dependencies:
39
52
  name: redis
40
53
  prerelease: false
41
54
  requirement: &id003 !ruby/object:Gem::Requirement
42
- none: false
43
55
  requirements:
44
56
  - - "="
45
57
  - !ruby/object:Gem::Version
58
+ segments:
59
+ - 2
60
+ - 1
61
+ - 1
46
62
  version: 2.1.1
47
63
  type: :runtime
48
64
  version_requirements: *id003
@@ -50,10 +66,13 @@ dependencies:
50
66
  name: nest
51
67
  prerelease: false
52
68
  requirement: &id004 !ruby/object:Gem::Requirement
53
- none: false
54
69
  requirements:
55
70
  - - "="
56
71
  - !ruby/object:Gem::Version
72
+ segments:
73
+ - 1
74
+ - 1
75
+ - 0
57
76
  version: 1.1.0
58
77
  type: :runtime
59
78
  version_requirements: *id004
@@ -61,10 +80,13 @@ dependencies:
61
80
  name: rack
62
81
  prerelease: false
63
82
  requirement: &id005 !ruby/object:Gem::Requirement
64
- none: false
65
83
  requirements:
66
84
  - - "="
67
85
  - !ruby/object:Gem::Version
86
+ segments:
87
+ - 1
88
+ - 2
89
+ - 1
68
90
  version: 1.2.1
69
91
  type: :runtime
70
92
  version_requirements: *id005
@@ -72,10 +94,13 @@ dependencies:
72
94
  name: tilt
73
95
  prerelease: false
74
96
  requirement: &id006 !ruby/object:Gem::Requirement
75
- none: false
76
97
  requirements:
77
98
  - - "="
78
99
  - !ruby/object:Gem::Version
100
+ segments:
101
+ - 1
102
+ - 2
103
+ - 2
79
104
  version: 1.2.2
80
105
  type: :runtime
81
106
  version_requirements: *id006
@@ -83,10 +108,13 @@ dependencies:
83
108
  name: sinatra
84
109
  prerelease: false
85
110
  requirement: &id007 !ruby/object:Gem::Requirement
86
- none: false
87
111
  requirements:
88
112
  - - "="
89
113
  - !ruby/object:Gem::Version
114
+ segments:
115
+ - 1
116
+ - 1
117
+ - 2
90
118
  version: 1.1.2
91
119
  type: :runtime
92
120
  version_requirements: *id007
@@ -94,10 +122,13 @@ dependencies:
94
122
  name: ohm
95
123
  prerelease: false
96
124
  requirement: &id008 !ruby/object:Gem::Requirement
97
- none: false
98
125
  requirements:
99
126
  - - "="
100
127
  - !ruby/object:Gem::Version
128
+ segments:
129
+ - 0
130
+ - 1
131
+ - 3
101
132
  version: 0.1.3
102
133
  type: :runtime
103
134
  version_requirements: *id008
@@ -105,10 +136,13 @@ dependencies:
105
136
  name: ohm-contrib
106
137
  prerelease: false
107
138
  requirement: &id009 !ruby/object:Gem::Requirement
108
- none: false
109
139
  requirements:
110
140
  - - "="
111
141
  - !ruby/object:Gem::Version
142
+ segments:
143
+ - 0
144
+ - 1
145
+ - 1
112
146
  version: 0.1.1
113
147
  type: :runtime
114
148
  version_requirements: *id009
@@ -116,10 +150,13 @@ dependencies:
116
150
  name: haml
117
151
  prerelease: false
118
152
  requirement: &id010 !ruby/object:Gem::Requirement
119
- none: false
120
153
  requirements:
121
154
  - - "="
122
155
  - !ruby/object:Gem::Version
156
+ segments:
157
+ - 3
158
+ - 0
159
+ - 25
123
160
  version: 3.0.25
124
161
  type: :runtime
125
162
  version_requirements: *id010
@@ -127,10 +164,13 @@ dependencies:
127
164
  name: vegas
128
165
  prerelease: false
129
166
  requirement: &id011 !ruby/object:Gem::Requirement
130
- none: false
131
167
  requirements:
132
168
  - - "="
133
169
  - !ruby/object:Gem::Version
170
+ segments:
171
+ - 0
172
+ - 1
173
+ - 8
134
174
  version: 0.1.8
135
175
  type: :runtime
136
176
  version_requirements: *id011
@@ -138,10 +178,11 @@ dependencies:
138
178
  name: jruby-openssl
139
179
  prerelease: false
140
180
  requirement: &id012 !ruby/object:Gem::Requirement
141
- none: false
142
181
  requirements:
143
182
  - - ">="
144
183
  - !ruby/object:Gem::Version
184
+ segments:
185
+ - 0
145
186
  version: "0"
146
187
  type: :runtime
147
188
  version_requirements: *id012
@@ -149,10 +190,11 @@ dependencies:
149
190
  name: json
150
191
  prerelease: false
151
192
  requirement: &id013 !ruby/object:Gem::Requirement
152
- none: false
153
193
  requirements:
154
194
  - - ">="
155
195
  - !ruby/object:Gem::Version
196
+ segments:
197
+ - 0
156
198
  version: "0"
157
199
  type: :runtime
158
200
  version_requirements: *id013
@@ -160,10 +202,13 @@ dependencies:
160
202
  name: warbler
161
203
  prerelease: false
162
204
  requirement: &id014 !ruby/object:Gem::Requirement
163
- none: false
164
205
  requirements:
165
206
  - - "="
166
207
  - !ruby/object:Gem::Version
208
+ segments:
209
+ - 1
210
+ - 2
211
+ - 1
167
212
  version: 1.2.1
168
213
  type: :development
169
214
  version_requirements: *id014
@@ -171,10 +216,13 @@ dependencies:
171
216
  name: diff-lcs
172
217
  prerelease: false
173
218
  requirement: &id015 !ruby/object:Gem::Requirement
174
- none: false
175
219
  requirements:
176
220
  - - "="
177
221
  - !ruby/object:Gem::Version
222
+ segments:
223
+ - 1
224
+ - 1
225
+ - 2
178
226
  version: 1.1.2
179
227
  type: :development
180
228
  version_requirements: *id015
@@ -182,10 +230,13 @@ dependencies:
182
230
  name: sinatra-reloader
183
231
  prerelease: false
184
232
  requirement: &id016 !ruby/object:Gem::Requirement
185
- none: false
186
233
  requirements:
187
234
  - - "="
188
235
  - !ruby/object:Gem::Version
236
+ segments:
237
+ - 0
238
+ - 5
239
+ - 0
189
240
  version: 0.5.0
190
241
  type: :development
191
242
  version_requirements: *id016
@@ -193,10 +244,12 @@ dependencies:
193
244
  name: rspec
194
245
  prerelease: false
195
246
  requirement: &id017 !ruby/object:Gem::Requirement
196
- none: false
197
247
  requirements:
198
248
  - - ~>
199
249
  - !ruby/object:Gem::Version
250
+ segments:
251
+ - 2
252
+ - 5
200
253
  version: "2.5"
201
254
  type: :development
202
255
  version_requirements: *id017
@@ -204,10 +257,13 @@ dependencies:
204
257
  name: rcov
205
258
  prerelease: false
206
259
  requirement: &id018 !ruby/object:Gem::Requirement
207
- none: false
208
260
  requirements:
209
261
  - - "="
210
262
  - !ruby/object:Gem::Version
263
+ segments:
264
+ - 0
265
+ - 9
266
+ - 9
211
267
  version: 0.9.9
212
268
  type: :development
213
269
  version_requirements: *id018
@@ -215,10 +271,13 @@ dependencies:
215
271
  name: rack-test
216
272
  prerelease: false
217
273
  requirement: &id019 !ruby/object:Gem::Requirement
218
- none: false
219
274
  requirements:
220
275
  - - "="
221
276
  - !ruby/object:Gem::Version
277
+ segments:
278
+ - 0
279
+ - 5
280
+ - 7
222
281
  version: 0.5.7
223
282
  type: :development
224
283
  version_requirements: *id019
@@ -263,6 +322,9 @@ files:
263
322
  - examples/websocket.html
264
323
  - examples/websocket.rb
265
324
  - lib/noah.rb
325
+ - lib/noah/agent.rb
326
+ - lib/noah/agents/dummy_agent.rb
327
+ - lib/noah/agents/http_agent.rb
266
328
  - lib/noah/app.rb
267
329
  - lib/noah/application_routes.rb
268
330
  - lib/noah/ark.rb
@@ -315,21 +377,23 @@ rdoc_options: []
315
377
  require_paths:
316
378
  - lib
317
379
  required_ruby_version: !ruby/object:Gem::Requirement
318
- none: false
319
380
  requirements:
320
381
  - - ">="
321
382
  - !ruby/object:Gem::Version
383
+ segments:
384
+ - 0
322
385
  version: "0"
323
386
  required_rubygems_version: !ruby/object:Gem::Requirement
324
- none: false
325
387
  requirements:
326
388
  - - ">="
327
389
  - !ruby/object:Gem::Version
390
+ segments:
391
+ - 0
328
392
  version: "0"
329
393
  requirements: []
330
394
 
331
395
  rubyforge_project: noah
332
- rubygems_version: 1.5.2
396
+ rubygems_version: 1.3.6
333
397
  signing_key:
334
398
  specification_version: 3
335
399
  summary: Application registry based on Apache Zookeeper