em-jack 0.0.3 → 0.0.4
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/README.rdoc +10 -9
- data/lib/em-jack.rb +1 -1
- data/lib/em-jack/connection.rb +54 -31
- data/lib/em-jack/job.rb +4 -4
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -26,25 +26,24 @@ are no available jobs.
|
|
26
26
|
r = jack.reserve
|
27
27
|
r.callback do |job|
|
28
28
|
puts job.jobid
|
29
|
-
|
30
|
-
|
31
|
-
r2 = jack.delete(job)
|
32
|
-
r2.callback { puts "Successfully deleted" }
|
29
|
+
|
30
|
+
r2 = jack.delete(job) { puts "Successfully deleted" }
|
33
31
|
end
|
34
32
|
|
35
|
-
r = jack.put("my message", :ttr => 300)
|
36
|
-
r.callback { |jobid| puts "put successful #{jobid}" }
|
33
|
+
r = jack.put("my message", :ttr => 300) { |jobid| puts "put successful #{jobid}" }
|
37
34
|
|
38
35
|
r = jack.stats
|
39
|
-
r.callback { |stats| puts "Server up for #{stats['uptime']} seconds"
|
36
|
+
r.callback { |stats| puts "Server up for #{stats['uptime']} seconds" }
|
40
37
|
|
41
38
|
r = jack.stats(:tube, "mytube")
|
42
39
|
r.callback { |stats| puts "Total jobs #{stats['total-jobs']}" }
|
43
40
|
|
44
|
-
r = jack.list(:
|
41
|
+
r = jack.list(:used)
|
45
42
|
r.callback { |tubes| puts "There are #{tubes.length} tubes defined" }
|
46
43
|
}
|
47
44
|
|
45
|
+
Each of the Jack commands allows an optional block to be provided. If the block is given
|
46
|
+
it will be setup as the callback on the deferrable.
|
48
47
|
|
49
48
|
EMJack#each_job is useful for scenarios where the client is a job worker
|
50
49
|
and intended to process jobs continuously as they become available. Once
|
@@ -77,4 +76,6 @@ contact me by email at dj2 at everburning dot com.
|
|
77
76
|
|
78
77
|
|
79
78
|
= Contributors
|
80
|
-
|
79
|
+
Charles Melbye (cmelbye)
|
80
|
+
Peter Kieltyka (pkieltyka)
|
81
|
+
Martyn Loughran (mloughran)
|
data/lib/em-jack.rb
CHANGED
data/lib/em-jack/connection.rb
CHANGED
@@ -30,86 +30,87 @@ module EMJack
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def use(tube)
|
33
|
+
def use(tube, &blk)
|
34
34
|
return if @used_tube == tube
|
35
35
|
@used_tube = tube
|
36
36
|
@conn.send(:use, tube)
|
37
|
-
add_deferrable
|
37
|
+
add_deferrable(&blk)
|
38
38
|
end
|
39
39
|
|
40
|
-
def watch(tube)
|
40
|
+
def watch(tube, &blk)
|
41
41
|
return if @watched_tubes.include?(tube)
|
42
|
-
@watched_tubes.push(tube)
|
43
42
|
@conn.send(:watch, tube)
|
44
|
-
add_deferrable
|
43
|
+
df = add_deferrable(&blk)
|
44
|
+
df.callback { @watched_tubes.push(tube) }
|
45
|
+
df
|
45
46
|
end
|
46
47
|
|
47
|
-
def ignore(tube)
|
48
|
-
return
|
49
|
-
@watched_tubes.delete(tube)
|
48
|
+
def ignore(tube, &blk)
|
49
|
+
return unless @watched_tubes.include?(tube)
|
50
50
|
@conn.send(:ignore, tube)
|
51
|
-
add_deferrable
|
51
|
+
df = add_deferrable(&blk)
|
52
|
+
df.callback { @watched_tubes.delete(tube) }
|
53
|
+
df
|
52
54
|
end
|
53
55
|
|
54
|
-
def reserve(timeout = nil)
|
56
|
+
def reserve(timeout = nil, &blk)
|
55
57
|
if timeout
|
56
58
|
@conn.send(:'reserve-with-timeout', timeout)
|
57
59
|
else
|
58
60
|
@conn.send(:reserve)
|
59
61
|
end
|
60
|
-
add_deferrable
|
62
|
+
add_deferrable(&blk)
|
61
63
|
end
|
62
64
|
|
63
|
-
def each_job(&
|
65
|
+
def each_job(&blk)
|
64
66
|
work = Proc.new do
|
65
67
|
r = reserve
|
66
68
|
r.callback do |job|
|
67
|
-
|
69
|
+
blk.call(job)
|
70
|
+
|
68
71
|
EM.next_tick { work.call }
|
69
72
|
end
|
70
73
|
end
|
71
74
|
work.call
|
72
75
|
end
|
73
76
|
|
74
|
-
def stats(type = nil, val = nil)
|
77
|
+
def stats(type = nil, val = nil, &blk)
|
75
78
|
case(type)
|
76
79
|
when nil then @conn.send(:stats)
|
77
80
|
when :tube then @conn.send(:'stats-tube', val)
|
78
81
|
when :job then @conn.send(:'stats-job', val.jobid)
|
79
82
|
else raise EMJack::InvalidCommand.new
|
80
83
|
end
|
81
|
-
add_deferrable
|
84
|
+
add_deferrable(&blk)
|
82
85
|
end
|
83
86
|
|
84
|
-
def list(type = nil)
|
87
|
+
def list(type = nil, &blk)
|
85
88
|
case(type)
|
86
89
|
when nil then @conn.send(:'list-tubes')
|
87
90
|
when :used then @conn.send(:'list-tube-used')
|
88
91
|
when :watched then @conn.send(:'list-tubes-watched')
|
89
92
|
else raise EMJack::InvalidCommand.new
|
90
93
|
end
|
91
|
-
add_deferrable
|
94
|
+
add_deferrable(&blk)
|
92
95
|
end
|
93
96
|
|
94
|
-
def delete(job)
|
97
|
+
def delete(job, &blk)
|
95
98
|
return if job.nil?
|
96
99
|
@conn.send(:delete, job.jobid)
|
97
|
-
add_deferrable
|
100
|
+
add_deferrable(&blk)
|
98
101
|
end
|
99
102
|
|
100
|
-
def release(job)
|
103
|
+
def release(job, &blk)
|
101
104
|
return if job.nil?
|
102
105
|
@conn.send(:release, job.jobid, 0, 0)
|
103
|
-
add_deferrable
|
106
|
+
add_deferrable(&blk)
|
104
107
|
end
|
105
|
-
|
106
|
-
def put(msg, opts =
|
108
|
+
|
109
|
+
def put(msg, opts = nil, &blk)
|
110
|
+
opts = {} if opts.nil?
|
107
111
|
pri = (opts[:priority] || 65536).to_i
|
108
|
-
if pri< 0
|
109
|
-
|
110
|
-
elsif pri > (2 ** 32)
|
111
|
-
pri = 2 ** 32
|
112
|
-
end
|
112
|
+
pri = 65536 if pri< 0
|
113
|
+
pri = 2 ** 32 if pri > (2 ** 32)
|
113
114
|
|
114
115
|
delay = (opts[:delay] || 0).to_i
|
115
116
|
delay = 0 if delay < 0
|
@@ -120,7 +121,7 @@ module EMJack
|
|
120
121
|
m = msg.to_s
|
121
122
|
|
122
123
|
@conn.send_with_data(:put, m, pri, delay, ttr, m.length)
|
123
|
-
add_deferrable
|
124
|
+
add_deferrable(&blk)
|
124
125
|
end
|
125
126
|
|
126
127
|
def connected
|
@@ -136,14 +137,26 @@ module EMJack
|
|
136
137
|
EM.add_timer(1) { @conn.reconnect(@host, @port) }
|
137
138
|
end
|
138
139
|
|
139
|
-
def add_deferrable
|
140
|
+
def add_deferrable(&blk)
|
140
141
|
df = EM::DefaultDeferrable.new
|
141
|
-
df.errback
|
142
|
+
df.errback do |err|
|
143
|
+
if @error_callback
|
144
|
+
@error_callback.call(err)
|
145
|
+
else
|
146
|
+
puts "ERROR: #{err}"
|
147
|
+
end
|
148
|
+
end
|
142
149
|
|
150
|
+
df.callback &blk if block_given?
|
151
|
+
|
143
152
|
@deferrables.push(df)
|
144
153
|
df
|
145
154
|
end
|
146
155
|
|
156
|
+
def on_error(&blk)
|
157
|
+
@error_callback = blk
|
158
|
+
end
|
159
|
+
|
147
160
|
def received(data)
|
148
161
|
@data << data
|
149
162
|
|
@@ -176,6 +189,10 @@ module EMJack
|
|
176
189
|
df = @deferrables.shift
|
177
190
|
df.succeed($1.to_i)
|
178
191
|
|
192
|
+
when /^RELEASED\r\n/ then
|
193
|
+
df = @deferrables.shift
|
194
|
+
df.succeed
|
195
|
+
|
179
196
|
when /^BURIED\s+(\d+)\r\n/ then
|
180
197
|
df = @deferrables.shift
|
181
198
|
df.fail(:buried, $1.to_i)
|
@@ -188,6 +205,10 @@ module EMJack
|
|
188
205
|
df = @deferrables.shift
|
189
206
|
df.succeed($1.to_i)
|
190
207
|
|
208
|
+
when /^NOT_IGNORED\r\n/ then
|
209
|
+
df = @deferrables.shift
|
210
|
+
df.fail("Can't ignore only watched tube")
|
211
|
+
|
191
212
|
when /^OK\s+(\d+)\r\n/ then
|
192
213
|
bytes = $1.to_i
|
193
214
|
|
@@ -222,9 +243,11 @@ module EMJack
|
|
222
243
|
def extract_body(bytes, data)
|
223
244
|
rem = data[(data.index(/\r\n/) + 2)..-1]
|
224
245
|
return [nil, data] if rem.length < bytes
|
246
|
+
|
225
247
|
body = rem[0..(bytes - 1)]
|
226
248
|
data = rem[(bytes + 2)..-1]
|
227
249
|
data = "" if data.nil?
|
250
|
+
|
228
251
|
[body, data]
|
229
252
|
end
|
230
253
|
end
|
data/lib/em-jack/job.rb
CHANGED
@@ -8,12 +8,12 @@ module EMJack
|
|
8
8
|
@body = body
|
9
9
|
end
|
10
10
|
|
11
|
-
def delete
|
12
|
-
@conn.delete(self)
|
11
|
+
def delete(&blk)
|
12
|
+
@conn.delete(self, &blk)
|
13
13
|
end
|
14
14
|
|
15
|
-
def stats
|
16
|
-
@conn.stats(:job, self)
|
15
|
+
def stats(&blk)
|
16
|
+
@conn.stats(:job, self, &blk)
|
17
17
|
end
|
18
18
|
|
19
19
|
def to_s
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-jack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dan sinclair
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-17 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|