quebert 3.0.0 → 3.0.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/quebert/controller/beanstalk.rb +20 -38
- data/lib/quebert/job.rb +1 -2
- data/lib/quebert/logging.rb +2 -7
- data/lib/quebert/version.rb +1 -1
- data/spec/job_spec.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 016b1258661f9dbac4d3d3dd2c53b482d0d7c80f
|
4
|
+
data.tar.gz: ec28cd67f06d964274b67bccfb3605cf7fc49326
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: caf6fd9be90fbe25b6890864c031dce330cd30ffa14672ec25d02d04e46a08dd155081210e64bcb38f3383ead08ad588ece9c5a1be69a7b31c1a2c37ea83f191
|
7
|
+
data.tar.gz: b8140800516ec10fd31e6fe12a36e5db6b123be6e2942b5ef111f8dd0c05b7c44cf652daeb99c94c5e2e57575c403e5975fb24da51038b2cb779508d42bb5348
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Quebert
|
2
2
|
|
3
|
-
[](https://travis-ci.org/polleverywhere/quebert)
|
3
|
+
[](https://travis-ci.org/polleverywhere/quebert) [](https://codeclimate.com/repos/555266fc6956805b9e0033b5/feed)
|
4
4
|
|
5
5
|
async_observer is great, but is dated and doesn't really support running jobs outside of the async_send idiom. Quebert is an attempt to mix how jobs are run in other popular worker queue frameworks, like resque and dj, with async_observer so that you can have it both ways.
|
6
6
|
|
@@ -15,24 +15,15 @@ module Quebert
|
|
15
15
|
def initialize(beanstalk_job)
|
16
16
|
@beanstalk_job = beanstalk_job
|
17
17
|
@job = Job.from_json(beanstalk_job.body)
|
18
|
-
rescue Job::Delete
|
19
|
-
beanstalk_job.delete
|
20
|
-
job_log "Deleted on initialization", :error
|
21
|
-
rescue Job::Release
|
22
|
-
beanstalk_job.release job.priority, job.delay
|
23
|
-
job_log "Released on initialization with priority: #{job.priority} and delay: #{job.delay}", :error
|
24
|
-
rescue Job::Bury
|
25
|
-
beanstalk_job.bury
|
26
|
-
job_log "Buried on initialization", :error
|
27
18
|
rescue => e
|
28
19
|
beanstalk_job.bury
|
29
|
-
|
20
|
+
logger.error "Error caught on initialization. #{e.inspect}"
|
30
21
|
raise
|
31
22
|
end
|
32
23
|
|
33
24
|
def perform
|
34
|
-
|
35
|
-
|
25
|
+
logger.error(job) { "Performing with args #{job.args.inspect}" }
|
26
|
+
logger.error(job) { "Beanstalk Job Stats: #{beanstalk_job.stats.inspect}" }
|
36
27
|
|
37
28
|
result = false
|
38
29
|
time = Benchmark.realtime do
|
@@ -40,33 +31,33 @@ module Quebert
|
|
40
31
|
beanstalk_job.delete
|
41
32
|
end
|
42
33
|
|
43
|
-
|
34
|
+
logger.error(job) { "Completed in #{(time*1000*1000).to_i/1000.to_f} ms\n" }
|
44
35
|
result
|
45
36
|
rescue Job::Delete
|
46
|
-
|
37
|
+
logger.info(job) { "Deleting job" }
|
47
38
|
beanstalk_job.delete
|
48
|
-
|
39
|
+
logger.info(job) { "Job deleted" }
|
49
40
|
rescue Job::Release
|
50
|
-
|
41
|
+
logger.info(job) { "Releasing with priority: #{job.priority} and delay: #{job.delay}" }
|
51
42
|
beanstalk_job.release :pri => job.priority, :delay => job.delay
|
52
|
-
|
43
|
+
logger.info(job) { "Job released" }
|
53
44
|
rescue Job::Bury
|
54
|
-
|
45
|
+
logger.info(job) { "Burrying job" }
|
55
46
|
beanstalk_job.bury
|
56
|
-
|
47
|
+
logger.info(job) { "Job buried" }
|
57
48
|
rescue Job::Timeout => e
|
58
|
-
|
49
|
+
logger.info(job) { "Job timed out. Retrying with delay. #{e.inspect} #{e.backtrace.join("\n")}" }
|
59
50
|
retry_with_delay
|
60
51
|
raise
|
61
52
|
rescue Job::Retry
|
62
53
|
# The difference between the Retry and Timeout class is that
|
63
|
-
# Retry does not
|
64
|
-
|
54
|
+
# Retry does not logger.error(job) { an exception where as Timeout does }
|
55
|
+
logger.info(job) { "Manually retrying with delay" }
|
65
56
|
retry_with_delay
|
66
57
|
rescue => e
|
67
|
-
|
58
|
+
logger.error(job) { "Error caught on perform. Burying job. #{e.inspect} #{e.backtrace.join("\n")}" }
|
68
59
|
beanstalk_job.bury
|
69
|
-
|
60
|
+
logger.error(job) { "Job buried" }
|
70
61
|
raise
|
71
62
|
end
|
72
63
|
|
@@ -75,28 +66,19 @@ module Quebert
|
|
75
66
|
delay = TIMEOUT_RETRY_DELAY_SEED + TIMEOUT_RETRY_GROWTH_RATE**beanstalk_job.stats["releases"].to_i
|
76
67
|
|
77
68
|
if delay > MAX_TIMEOUT_RETRY_DELAY
|
78
|
-
|
69
|
+
logger.error(job) { "Max retry delay exceeded. Burrying job" }
|
79
70
|
beanstalk_job.bury
|
80
|
-
|
71
|
+
logger.error(job) { "Job buried" }
|
81
72
|
else
|
82
|
-
|
73
|
+
logger.error(job) { "TTR exceeded. Releasing with priority: #{job.priority} and delay: #{delay}" }
|
83
74
|
beanstalk_job.release :pri => job.priority, :delay => delay
|
84
|
-
|
75
|
+
logger.error(job) { "Job released" }
|
85
76
|
end
|
86
77
|
rescue ::Beaneater::NotFoundError
|
87
|
-
|
78
|
+
logger.error(job) { "Job ran longer than allowed. Beanstalk already deleted it!!!!" }
|
88
79
|
# Sometimes the timer doesn't behave correctly and this job actually runs longer than
|
89
80
|
# allowed. At that point the beanstalk job no longer exists anymore. Lets let it go and don't blow up.
|
90
81
|
end
|
91
|
-
|
92
|
-
def job_log(message, level=:info)
|
93
|
-
# Have the job write to the log file so that we catch the details of the job
|
94
|
-
if job
|
95
|
-
job.send(:log, message, level)
|
96
|
-
else
|
97
|
-
Quebert.logger.send(level, message)
|
98
|
-
end
|
99
|
-
end
|
100
82
|
end
|
101
83
|
end
|
102
84
|
end
|
data/lib/quebert/job.rb
CHANGED
@@ -23,7 +23,6 @@ module Quebert
|
|
23
23
|
|
24
24
|
# Exceptions are used for signaling job status... ewww. Yank this out and
|
25
25
|
# replace with a more well thought out controller.
|
26
|
-
NotImplemented = Class.new(StandardError)
|
27
26
|
Action = Class.new(Exception)
|
28
27
|
Bury = Class.new(Action)
|
29
28
|
Delete = Class.new(Action)
|
@@ -41,7 +40,7 @@ module Quebert
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def perform(*args)
|
44
|
-
raise
|
43
|
+
raise NotImplementedError
|
45
44
|
end
|
46
45
|
|
47
46
|
# Runs the perform method that somebody else should be implementing
|
data/lib/quebert/logging.rb
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
module Quebert
|
2
2
|
module Logging
|
3
|
-
|
3
|
+
private
|
4
4
|
def logger
|
5
|
-
|
6
|
-
end
|
7
|
-
|
8
|
-
# Making logging jobs a tiny bit easier..
|
9
|
-
def log(message, level=:info)
|
10
|
-
logger.send(level, "[##{self.object_id} #{self.class.name}] : #{message}")
|
5
|
+
Quebert.logger
|
11
6
|
end
|
12
7
|
end
|
13
8
|
end
|
data/lib/quebert/version.rb
CHANGED
data/spec/job_spec.rb
CHANGED
@@ -21,7 +21,7 @@ describe Quebert::Job do
|
|
21
21
|
it "should raise not implemented on base job" do
|
22
22
|
lambda {
|
23
23
|
Job.new.perform
|
24
|
-
}.should raise_exception(
|
24
|
+
}.should raise_exception(NotImplementedError)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should convert job to and from JSON" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quebert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brad Gessler
|
@@ -149,3 +149,4 @@ test_files:
|
|
149
149
|
- spec/support/jobs.rb
|
150
150
|
- spec/support_spec.rb
|
151
151
|
- spec/worker_spec.rb
|
152
|
+
has_rdoc:
|