droid 1.0.3 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/Gemfile +3 -0
- data/Rakefile +6 -32
- data/droid.gemspec +22 -91
- data/lib/droid.rb +5 -4
- data/lib/droid/heroku.rb +0 -61
- data/lib/droid/json_server.rb +1 -1
- data/lib/droid/queue.rb +2 -1
- data/lib/droid/request.rb +1 -2
- data/lib/droid/version.rb +5 -0
- data/spec/publish_spec.rb +2 -2
- data/spec/response_spec.rb +5 -5
- data/spec/spec_helper.rb +3 -4
- data/spec/utils_spec.rb +11 -11
- data/spec/wait_for_port_spec.rb +3 -3
- metadata +109 -118
- data/VERSION +0 -1
- data/examples/async_reply.rb +0 -25
- data/examples/heroku_async_reply.rb +0 -22
- data/lib/droid/heroku/stats.rb +0 -14
- data/lib/heroku_droid.rb +0 -1
- data/lib/local_stats.rb +0 -1
- data/lib/memcache_cluster.rb +0 -1
- data/lib/stats.rb +0 -1
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -1,37 +1,11 @@
|
|
1
|
-
|
2
|
-
require
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
3
|
|
4
|
-
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "droid"
|
8
|
-
gem.summary = %Q{AMQP Wrapper Library}
|
9
|
-
gem.description = %Q{Easy to use AMQP Library with constructs for typical usage patterns}
|
10
|
-
gem.email = "ricardo@heroku.com"
|
11
|
-
gem.homepage = "http://heroku.com"
|
12
|
-
gem.authors = ["Ricardo Chimal, Jr."]
|
4
|
+
require "rake/testtask"
|
13
5
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
gem.add_dependency 'json_pure', '>= 1.2.0'
|
18
|
-
gem.add_dependency 'rest-client', '>= 1.2.0'
|
19
|
-
gem.add_dependency 'amqp', '0.6.7'
|
20
|
-
gem.add_dependency 'bunny', '~> 0.6.0'
|
21
|
-
gem.add_dependency 'eventmachine_httpserver', '0.2.0'
|
22
|
-
end
|
23
|
-
Jeweler::GemcutterTasks.new
|
24
|
-
rescue LoadError
|
25
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
26
|
-
end
|
27
|
-
|
28
|
-
require 'rake/testtask'
|
29
|
-
Rake::TestTask.new(:spec) do |spec|
|
30
|
-
spec.libs << 'lib' << 'spec'
|
31
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
32
|
-
spec.verbose = true
|
6
|
+
Rake::TestTask.new(:spec) do |t|
|
7
|
+
t.pattern = "spec/*_spec.rb"
|
8
|
+
t.verbose = true
|
33
9
|
end
|
34
10
|
|
35
|
-
task :spec => :check_dependencies
|
36
|
-
|
37
11
|
task :default => :spec
|
data/droid.gemspec
CHANGED
@@ -1,97 +1,28 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/droid/version', __FILE__)
|
5
3
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Ricardo Chimal, Jr."]
|
6
|
+
gem.email = ["ricardo@heroku.com"]
|
7
|
+
gem.description = %q{Easy to use AMQP Library with constructs for typical usage patterns}
|
8
|
+
gem.summary = %q{AMQP Wrapper Library}
|
9
|
+
gem.homepage = %q{http://www.heroku.com}
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
s.files = [
|
18
|
-
".gitignore",
|
19
|
-
"Rakefile",
|
20
|
-
"VERSION",
|
21
|
-
"bin/bleedq",
|
22
|
-
"droid.gemspec",
|
23
|
-
"examples/async_reply.rb",
|
24
|
-
"examples/heroku_async_reply.rb",
|
25
|
-
"examples/sync.rb",
|
26
|
-
"examples/worker.rb",
|
27
|
-
"lib/droid.rb",
|
28
|
-
"lib/droid/em.rb",
|
29
|
-
"lib/droid/heroku.rb",
|
30
|
-
"lib/droid/heroku/local_stats.rb",
|
31
|
-
"lib/droid/heroku/logger_client.rb",
|
32
|
-
"lib/droid/heroku/memcache_cluster.rb",
|
33
|
-
"lib/droid/heroku/stats.rb",
|
34
|
-
"lib/droid/json_server.rb",
|
35
|
-
"lib/droid/monkey.rb",
|
36
|
-
"lib/droid/publish.rb",
|
37
|
-
"lib/droid/queue.rb",
|
38
|
-
"lib/droid/request.rb",
|
39
|
-
"lib/droid/sync.rb",
|
40
|
-
"lib/droid/utilization.rb",
|
41
|
-
"lib/droid/utils.rb",
|
42
|
-
"lib/heroku_droid.rb",
|
43
|
-
"lib/local_stats.rb",
|
44
|
-
"lib/memcache_cluster.rb",
|
45
|
-
"lib/stats.rb",
|
46
|
-
"spec/publish_spec.rb",
|
47
|
-
"spec/response_spec.rb",
|
48
|
-
"spec/spec_helper.rb",
|
49
|
-
"spec/utils_spec.rb",
|
50
|
-
"spec/wait_for_port_spec.rb"
|
51
|
-
]
|
52
|
-
s.homepage = %q{http://heroku.com}
|
53
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
54
|
-
s.require_paths = ["lib"]
|
55
|
-
s.rubygems_version = %q{1.3.6}
|
56
|
-
s.summary = %q{AMQP Wrapper Library}
|
57
|
-
s.test_files = [
|
58
|
-
"spec/publish_spec.rb",
|
59
|
-
"spec/response_spec.rb",
|
60
|
-
"spec/spec_helper.rb",
|
61
|
-
"spec/utils_spec.rb",
|
62
|
-
"spec/wait_for_port_spec.rb",
|
63
|
-
"examples/async_reply.rb",
|
64
|
-
"examples/heroku_async_reply.rb",
|
65
|
-
"examples/sync.rb",
|
66
|
-
"examples/worker.rb"
|
67
|
-
]
|
11
|
+
gem.rubygems_version = %q{1.3.7}
|
12
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
13
|
+
gem.files = `git ls-files`.split("\n")
|
14
|
+
gem.test_files = `git ls-files -- {examples,spec}/*`.split("\n")
|
15
|
+
gem.name = "droid"
|
16
|
+
gem.require_paths = ["lib"]
|
17
|
+
gem.version = Droid.version
|
68
18
|
|
69
|
-
|
70
|
-
|
71
|
-
|
19
|
+
gem.add_dependency "json_pure", ">= 1.2.0"
|
20
|
+
gem.add_dependency "rest-client", ">= 1.2.0"
|
21
|
+
gem.add_dependency "amqp", "= 0.6.7"
|
22
|
+
gem.add_dependency "bunny", "~> 0.7.0"
|
23
|
+
gem.add_dependency "eventmachine_httpserver", "= 0.2.0"
|
72
24
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
s.add_runtime_dependency(%q<rest-client>, [">= 1.2.0"])
|
77
|
-
s.add_runtime_dependency(%q<amqp>, ["= 0.6.7"])
|
78
|
-
s.add_runtime_dependency(%q<bunny>, ["~> 0.6.0"])
|
79
|
-
s.add_runtime_dependency(%q<eventmachine_httpserver>, ["= 0.2.0"])
|
80
|
-
else
|
81
|
-
s.add_dependency(%q<baconmocha>, [">= 0"])
|
82
|
-
s.add_dependency(%q<json_pure>, [">= 1.2.0"])
|
83
|
-
s.add_dependency(%q<rest-client>, [">= 1.2.0"])
|
84
|
-
s.add_dependency(%q<amqp>, ["= 0.6.7"])
|
85
|
-
s.add_dependency(%q<bunny>, ["~> 0.6.0"])
|
86
|
-
s.add_dependency(%q<eventmachine_httpserver>, ["= 0.2.0"])
|
87
|
-
end
|
88
|
-
else
|
89
|
-
s.add_dependency(%q<baconmocha>, [">= 0"])
|
90
|
-
s.add_dependency(%q<json_pure>, [">= 1.2.0"])
|
91
|
-
s.add_dependency(%q<rest-client>, [">= 1.2.0"])
|
92
|
-
s.add_dependency(%q<amqp>, ["= 0.6.7"])
|
93
|
-
s.add_dependency(%q<bunny>, ["~> 0.6.0"])
|
94
|
-
s.add_dependency(%q<eventmachine_httpserver>, ["= 0.2.0"])
|
95
|
-
end
|
25
|
+
gem.add_development_dependency "rake"
|
26
|
+
gem.add_development_dependency "mocha"
|
27
|
+
gem.add_development_dependency "minitest"
|
96
28
|
end
|
97
|
-
|
data/lib/droid.rb
CHANGED
@@ -8,9 +8,11 @@ if RUBY_VERSION[0,3] == "1.8"
|
|
8
8
|
DroidTimer = SystemTimer
|
9
9
|
rescue LoadError
|
10
10
|
# systemtimer wasn't available, fall back to Timeout
|
11
|
+
require 'timeout'
|
11
12
|
DroidTimer = Timeout
|
12
13
|
end
|
13
14
|
else
|
15
|
+
require 'timeout'
|
14
16
|
DroidTimer = Timeout
|
15
17
|
end
|
16
18
|
|
@@ -20,6 +22,9 @@ if !defined?(JSON) && !defined?(JSON_LOADED)
|
|
20
22
|
require 'json/pure'
|
21
23
|
end
|
22
24
|
|
25
|
+
|
26
|
+
require 'droid/version'
|
27
|
+
|
23
28
|
require 'droid/monkey'
|
24
29
|
|
25
30
|
require 'droid/utils'
|
@@ -30,10 +35,6 @@ require 'droid/queue'
|
|
30
35
|
require 'droid/em'
|
31
36
|
|
32
37
|
class Droid
|
33
|
-
def self.version
|
34
|
-
@@version ||= File.read(File.dirname(__FILE__) + '/../VERSION').strip
|
35
|
-
end
|
36
|
-
|
37
38
|
def self.name
|
38
39
|
@@name ||= nil
|
39
40
|
end
|
data/lib/droid/heroku.rb
CHANGED
@@ -24,18 +24,6 @@ rescue LoadError => e
|
|
24
24
|
end
|
25
25
|
|
26
26
|
class HerokuDroid < Droid
|
27
|
-
attr_reader :extended_stats
|
28
|
-
|
29
|
-
def initialize(name, opts={}, &blk)
|
30
|
-
@extended_stats = !(opts[:extended_stats] == false)
|
31
|
-
|
32
|
-
super(name, opts) do |droid|
|
33
|
-
setup_standard_topics(self) unless opts[:standard_topics] == false
|
34
|
-
LocalStats.attach
|
35
|
-
blk.call(self)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
27
|
def stats(&blk)
|
40
28
|
@stats = blk
|
41
29
|
out = call_stats
|
@@ -50,53 +38,4 @@ class HerokuDroid < Droid
|
|
50
38
|
def name
|
51
39
|
Droid.name
|
52
40
|
end
|
53
|
-
|
54
|
-
def ruby_path
|
55
|
-
if File.exists?("/usr/ruby1.8.6/bin/ruby")
|
56
|
-
"/usr/ruby1.8.6/bin"
|
57
|
-
else
|
58
|
-
"/usr/local/bin"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def setup_standard_topics(droid)
|
63
|
-
setup_ping_topic(droid)
|
64
|
-
end
|
65
|
-
|
66
|
-
def setup_ping_topic(droid)
|
67
|
-
require 'time'
|
68
|
-
|
69
|
-
droid.listener('ping').subscribe do |req|
|
70
|
-
Droid::Utilization.latency = (Time.now.to_f - req['departed_at']).abs
|
71
|
-
end
|
72
|
-
|
73
|
-
blk = Proc.new do |d|
|
74
|
-
begin
|
75
|
-
t1 = Time.now
|
76
|
-
response = {}.merge(LocalStats.stats)
|
77
|
-
|
78
|
-
estats = nil
|
79
|
-
if self.extended_stats
|
80
|
-
estats = droid.call_stats
|
81
|
-
estats = { :notes => estats } unless estats.kind_of?(Hash)
|
82
|
-
estats[:notes] ||= estats.map { |k, v| "#{v} #{k}" }.join(", ")
|
83
|
-
estats.merge!(LocalStats.extended_stats)
|
84
|
-
end
|
85
|
-
|
86
|
-
response.merge!({
|
87
|
-
:extended_stats => estats,
|
88
|
-
:droid_name => Droid.name,
|
89
|
-
:latency => Droid::Utilization.latency,
|
90
|
-
})
|
91
|
-
|
92
|
-
d.publish('pong', response.merge(:stat_collection => (Time.now - t1)))
|
93
|
-
rescue Object => e
|
94
|
-
log.error "Ping Block Error: #{e.class} -> #{e.message}", :exception => e
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
EM.add_timer(2) { blk.call(droid) }
|
99
|
-
EM.add_periodic_timer(50 + (rand*15).to_i) { blk.call(droid) }
|
100
|
-
end
|
101
41
|
end
|
102
|
-
|
data/lib/droid/json_server.rb
CHANGED
@@ -17,7 +17,7 @@ class Droid
|
|
17
17
|
default_response
|
18
18
|
else
|
19
19
|
method_name = "get_#{@http_request_uri.split("/")[1]}".gsub(/[^\d\w_]/,'').downcase
|
20
|
-
if public_methods.include?(method_name)
|
20
|
+
if public_methods.map(&:to_sym).include?(method_name.to_sym)
|
21
21
|
generate_response(method_name)
|
22
22
|
else
|
23
23
|
not_found_response
|
data/lib/droid/queue.rb
CHANGED
@@ -29,6 +29,7 @@ class Droid
|
|
29
29
|
def tag
|
30
30
|
s = "queue=#{q.name}"
|
31
31
|
s += " exchange=#{ex.name}" if ex
|
32
|
+
s
|
32
33
|
end
|
33
34
|
|
34
35
|
def subscribe(amqp_opts={}, opts={})
|
@@ -106,7 +107,7 @@ class Droid
|
|
106
107
|
class ReplyQueue < BaseQueue
|
107
108
|
def initialize(queue_name, opts={})
|
108
109
|
opts[:auto_delete] = true
|
109
|
-
super
|
110
|
+
super(queue_name, opts)
|
110
111
|
end
|
111
112
|
|
112
113
|
def setup
|
data/lib/droid/request.rb
CHANGED
@@ -72,8 +72,7 @@ class Droid
|
|
72
72
|
def publish(name, data, opts={}, popts={}, &block)
|
73
73
|
opts = default_publish_opts.merge(opts)
|
74
74
|
if block
|
75
|
-
|
76
|
-
Droid::ReplyQueue.new(opts[:reply_to]).subscribe(&block)
|
75
|
+
raise StandardError, "async publish/reply no longer directly supported... for now."
|
77
76
|
end
|
78
77
|
Droid.publish(name, data, opts, popts)
|
79
78
|
end
|
data/spec/publish_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
describe 'AMQP Publish' do
|
4
4
|
before do
|
@@ -8,7 +8,7 @@ describe 'AMQP Publish' do
|
|
8
8
|
|
9
9
|
it "publishes a message to a queue" do
|
10
10
|
@q = mock('queue')
|
11
|
-
::MQ.expects(:queue).with('topic').returns(@q)
|
11
|
+
::MQ.expects(:queue).with('topic', :passive => true).returns(@q)
|
12
12
|
@q.expects(:publish).with(@json, @publish_opts)
|
13
13
|
Droid.publish_to_q('topic', :x => 1, :y => 2)
|
14
14
|
end
|
data/spec/response_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
describe 'Request' do
|
4
4
|
before do
|
@@ -19,10 +19,10 @@ describe 'Request' do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "allows access to response via symbols or strings in array access" do
|
22
|
-
@res['x'].
|
23
|
-
@res[:x].
|
24
|
-
@res['y'].
|
25
|
-
@res[:y].
|
22
|
+
@res['x'].must_be :==, 123
|
23
|
+
@res[:x].must_be :==, 123
|
24
|
+
@res['y'].must_be :==, 'abc'
|
25
|
+
@res[:y].must_be :==, 'abc'
|
26
26
|
end
|
27
27
|
|
28
28
|
it "calls ack on the header" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/spec'
|
3
|
+
require 'mocha'
|
3
4
|
|
4
5
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
6
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
@@ -7,5 +8,3 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
7
8
|
require 'droid'
|
8
9
|
|
9
10
|
Droid.log.level = Logger::FATAL
|
10
|
-
|
11
|
-
Bacon.summary_on_exit
|
data/spec/utils_spec.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
describe 'Utils' do
|
4
4
|
before do
|
5
5
|
end
|
6
6
|
|
7
7
|
it "parses a json message" do
|
8
|
-
Droid::Utils.parse_message('{"x":1,"y":2}').
|
8
|
+
Droid::Utils.parse_message('{"x":1,"y":2}').must_be :==, {'x' => 1, 'y' => 2}
|
9
9
|
end
|
10
10
|
|
11
11
|
it "parses custom headers and force integers on a few values" do
|
@@ -19,25 +19,25 @@ describe 'Utils' do
|
|
19
19
|
|
20
20
|
h = Droid::Utils.parse_custom_headers(headers)
|
21
21
|
|
22
|
-
h.size.
|
23
|
-
h[:ttl].
|
24
|
-
h[:reply_to].
|
25
|
-
h[:published_on].
|
26
|
-
h[:event_hash].
|
22
|
+
h.size.must_be :==, 6
|
23
|
+
h[:ttl].must_be :==, -1
|
24
|
+
h[:reply_to].must_be :==, 'q.random.reply'
|
25
|
+
h[:published_on].must_be :==, 12345
|
26
|
+
h[:event_hash].must_be :==, 'x123'
|
27
27
|
end
|
28
28
|
|
29
29
|
it "raises an exception if the data to format for publish is not a hash" do
|
30
|
-
lambda { Droid::Utils.format_publish('bad payload') }.
|
30
|
+
lambda { Droid::Utils.format_publish('bad payload') }.must_raise Droid::BadPayload
|
31
31
|
end
|
32
32
|
|
33
33
|
it "generates a name for the instance" do
|
34
34
|
Socket.stubs(:gethostname).returns('deepblue.123')
|
35
|
-
Droid::Utils.generate_name_for_instance('woo').
|
35
|
+
Droid::Utils.generate_name_for_instance('woo').must_be :==, 'woo.deepblue.123'
|
36
36
|
end
|
37
37
|
|
38
38
|
it "generates queue name, really more like a generic identifier" do
|
39
39
|
Socket.stubs(:gethostname).returns('deepblue.123')
|
40
|
-
Droid::Utils.generate_queue('topic').
|
41
|
-
Droid::Utils.generate_queue('topic', 'local').
|
40
|
+
Droid::Utils.generate_queue('topic').must_be :==, "topic.deepblue.123.#{$$}"
|
41
|
+
Droid::Utils.generate_queue('topic', 'local').must_be :==, "topic.deepblue.123.local"
|
42
42
|
end
|
43
43
|
end
|
data/spec/wait_for_port_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec_helper'
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
2
2
|
|
3
3
|
Thread.new do
|
4
4
|
sleep 2
|
@@ -10,7 +10,7 @@ describe 'Connectivity' do
|
|
10
10
|
start = Time.now
|
11
11
|
Droid.wait_for_tcp_port('localhost', 20_001)
|
12
12
|
finish = Time.now
|
13
|
-
(finish - start).
|
14
|
-
(finish - start).
|
13
|
+
(finish - start).must_be :>, 1
|
14
|
+
(finish - start).must_be :<, 3
|
15
15
|
end
|
16
16
|
end
|
metadata
CHANGED
@@ -1,120 +1,117 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: droid
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 1
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
version: 1.0.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Ricardo Chimal, Jr.
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
name: baconmocha
|
22
|
-
prerelease: false
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
segments:
|
28
|
-
- 0
|
29
|
-
version: "0"
|
30
|
-
type: :development
|
31
|
-
version_requirements: *id001
|
32
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
33
15
|
name: json_pure
|
34
|
-
|
35
|
-
|
36
|
-
requirements:
|
37
|
-
- -
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
segments:
|
40
|
-
- 1
|
41
|
-
- 2
|
42
|
-
- 0
|
16
|
+
requirement: &2160293160 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
43
21
|
version: 1.2.0
|
44
22
|
type: :runtime
|
45
|
-
version_requirements: *id002
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rest-client
|
48
23
|
prerelease: false
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
24
|
+
version_requirements: *2160293160
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rest-client
|
27
|
+
requirement: &2160292560 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
57
32
|
version: 1.2.0
|
58
33
|
type: :runtime
|
59
|
-
version_requirements: *id003
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: amqp
|
62
34
|
prerelease: false
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
35
|
+
version_requirements: *2160292560
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: amqp
|
38
|
+
requirement: &2160292040 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - =
|
42
|
+
- !ruby/object:Gem::Version
|
71
43
|
version: 0.6.7
|
72
44
|
type: :runtime
|
73
|
-
version_requirements: *id004
|
74
|
-
- !ruby/object:Gem::Dependency
|
75
|
-
name: bunny
|
76
45
|
prerelease: false
|
77
|
-
|
78
|
-
|
46
|
+
version_requirements: *2160292040
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bunny
|
49
|
+
requirement: &2160291540 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
79
52
|
- - ~>
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
- 0
|
83
|
-
- 6
|
84
|
-
- 0
|
85
|
-
version: 0.6.0
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.7.0
|
86
55
|
type: :runtime
|
87
|
-
version_requirements: *id005
|
88
|
-
- !ruby/object:Gem::Dependency
|
89
|
-
name: eventmachine_httpserver
|
90
56
|
prerelease: false
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
57
|
+
version_requirements: *2160291540
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: eventmachine_httpserver
|
60
|
+
requirement: &2160291080 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - =
|
64
|
+
- !ruby/object:Gem::Version
|
99
65
|
version: 0.2.0
|
100
66
|
type: :runtime
|
101
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2160291080
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: &2160290700 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2160290700
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: mocha
|
82
|
+
requirement: &2160290160 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *2160290160
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: minitest
|
93
|
+
requirement: &2160289680 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *2160289680
|
102
102
|
description: Easy to use AMQP Library with constructs for typical usage patterns
|
103
|
-
email:
|
104
|
-
|
103
|
+
email:
|
104
|
+
- ricardo@heroku.com
|
105
|
+
executables:
|
105
106
|
- bleedq
|
106
107
|
extensions: []
|
107
|
-
|
108
108
|
extra_rdoc_files: []
|
109
|
-
|
110
|
-
files:
|
109
|
+
files:
|
111
110
|
- .gitignore
|
111
|
+
- Gemfile
|
112
112
|
- Rakefile
|
113
|
-
- VERSION
|
114
113
|
- bin/bleedq
|
115
114
|
- droid.gemspec
|
116
|
-
- examples/async_reply.rb
|
117
|
-
- examples/heroku_async_reply.rb
|
118
115
|
- examples/sync.rb
|
119
116
|
- examples/worker.rb
|
120
117
|
- lib/droid.rb
|
@@ -123,7 +120,6 @@ files:
|
|
123
120
|
- lib/droid/heroku/local_stats.rb
|
124
121
|
- lib/droid/heroku/logger_client.rb
|
125
122
|
- lib/droid/heroku/memcache_cluster.rb
|
126
|
-
- lib/droid/heroku/stats.rb
|
127
123
|
- lib/droid/json_server.rb
|
128
124
|
- lib/droid/monkey.rb
|
129
125
|
- lib/droid/publish.rb
|
@@ -132,52 +128,47 @@ files:
|
|
132
128
|
- lib/droid/sync.rb
|
133
129
|
- lib/droid/utilization.rb
|
134
130
|
- lib/droid/utils.rb
|
135
|
-
- lib/
|
136
|
-
- lib/local_stats.rb
|
137
|
-
- lib/memcache_cluster.rb
|
138
|
-
- lib/stats.rb
|
131
|
+
- lib/droid/version.rb
|
139
132
|
- spec/publish_spec.rb
|
140
133
|
- spec/response_spec.rb
|
141
134
|
- spec/spec_helper.rb
|
142
135
|
- spec/utils_spec.rb
|
143
136
|
- spec/wait_for_port_spec.rb
|
144
|
-
|
145
|
-
homepage: http://heroku.com
|
137
|
+
homepage: http://www.heroku.com
|
146
138
|
licenses: []
|
147
|
-
|
148
139
|
post_install_message:
|
149
|
-
rdoc_options:
|
150
|
-
|
151
|
-
require_paths:
|
140
|
+
rdoc_options: []
|
141
|
+
require_paths:
|
152
142
|
- lib
|
153
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
143
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
segments:
|
158
150
|
- 0
|
159
|
-
|
160
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
151
|
+
hash: -591860115473353597
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
segments:
|
165
159
|
- 0
|
166
|
-
|
160
|
+
hash: -591860115473353597
|
167
161
|
requirements: []
|
168
|
-
|
169
162
|
rubyforge_project:
|
170
|
-
rubygems_version: 1.
|
163
|
+
rubygems_version: 1.8.11
|
171
164
|
signing_key:
|
172
165
|
specification_version: 3
|
173
166
|
summary: AMQP Wrapper Library
|
174
|
-
test_files:
|
167
|
+
test_files:
|
168
|
+
- examples/sync.rb
|
169
|
+
- examples/worker.rb
|
175
170
|
- spec/publish_spec.rb
|
176
171
|
- spec/response_spec.rb
|
177
172
|
- spec/spec_helper.rb
|
178
173
|
- spec/utils_spec.rb
|
179
174
|
- spec/wait_for_port_spec.rb
|
180
|
-
- examples/async_reply.rb
|
181
|
-
- examples/heroku_async_reply.rb
|
182
|
-
- examples/sync.rb
|
183
|
-
- examples/worker.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.0.3
|
data/examples/async_reply.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
$:.unshift File.dirname(__FILE__) + '/../lib'
|
2
|
-
require 'droid'
|
3
|
-
|
4
|
-
def log
|
5
|
-
Droid.log
|
6
|
-
end
|
7
|
-
|
8
|
-
Droid.new('Example Reply') do |droid|
|
9
|
-
droid.worker('example.target').subscribe do |req|
|
10
|
-
log.debug "headers: #{req.header.headers.inspect}"
|
11
|
-
log.debug "event_hash should be woot -> #{req.droid_headers[:event_hash]}"
|
12
|
-
req.reply(:target_received_at => Time.now.to_i)
|
13
|
-
req.ack
|
14
|
-
end
|
15
|
-
|
16
|
-
droid.listener('example.check.target').subscribe do |req|
|
17
|
-
req.publish('example.target', { :checking => Time.now.to_i }) do |req2|
|
18
|
-
log.debug "event_hash should be woot -> #{req2.droid_headers[:event_hash]}"
|
19
|
-
log.info "We're done checking!"
|
20
|
-
Droid.stop_safe
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
droid.timer(2) { Droid.publish('example.check.target', {:sent_at => Time.now.to_i}, {:event_hash => "woot"}) }
|
25
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
$:.unshift File.dirname(__FILE__) + '/../lib/'
|
2
|
-
require 'heroku_droid'
|
3
|
-
|
4
|
-
def log
|
5
|
-
Droid.log
|
6
|
-
end
|
7
|
-
|
8
|
-
HerokuDroid.new('Example Reply') do |droid|
|
9
|
-
droid.worker('example.target').subscribe do |req|
|
10
|
-
req.reply(:target_received_at => Time.now.to_i)
|
11
|
-
req.ack
|
12
|
-
end
|
13
|
-
|
14
|
-
droid.listener('example.check.target').subscribe do |req|
|
15
|
-
req.publish('example.target', { :checking => Time.now.to_i }) do |req2|
|
16
|
-
log.info "We're done checking!"
|
17
|
-
Droid.stop_safe
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
EM.add_timer(2) { Droid.publish('example.check.target', :sent_at => Time.now.to_i ) }
|
22
|
-
end
|
data/lib/droid/heroku/stats.rb
DELETED
data/lib/heroku_droid.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku'
|
data/lib/local_stats.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku/local_stats'
|
data/lib/memcache_cluster.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku/memcache_cluster'
|
data/lib/stats.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'droid/heroku/stats'
|