fanforce-worker 0.13.2 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/fanforce/worker/version.rb +1 -1
- data/lib/fanforce/worker/worker.rb +56 -23
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjFmOGE4MWZhYmE2MGVjZjYyZWIwYzA0M2Y0Njg4MzdkZTc3NGNiMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmNlNjY1NDRjODY2OThlYWIzMjEwNGZlN2JjODI0NDI4Yzg5NTA1Ng==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2Y0ODUwNDZjNjBlNTFmNjk1MGY5YjBmMTJhYTNiMDk0ZTI1ZmFlMDA5OTQz
|
10
|
+
OGMwNDg4ZDIxZWYxOWNkYThjMjJlMzNlNTYyMWYzODJkMmFlMDMxMjgyODBl
|
11
|
+
N2ZmNTBiZDUxZjI3NTY4YmVhMTk4YzUzMDM5MGZlMDRmYzExY2U=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MGE3ODE0ZmRhNDZlMzQ1NWY0YTg5OWI5MDRiM2MwODNkMzIyNGY3NTE1ZWFl
|
14
|
+
MjlkOGU5MWNhODVmNzY5YThjYjQ1NWU1MDMyZjE2ODFlNGUyNTMyMjIxZGIw
|
15
|
+
MmJlYjdlMjFhYzk3ZWI0ODBlY2I0NWY2MTM4YTAyZjkyNjhmNDQ=
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class Fanforce::Worker
|
2
2
|
|
3
3
|
LOAD_TIME = Time.now
|
4
|
+
MAX_EXECUTION_TIME = 3300
|
4
5
|
|
5
6
|
def initialize(opts={})
|
6
7
|
@opts = opts
|
@@ -143,7 +144,7 @@ class Fanforce::Worker
|
|
143
144
|
end
|
144
145
|
end
|
145
146
|
|
146
|
-
def self.run(worker_data, &code_block)
|
147
|
+
def self.run(worker_data, min_execution_time=300, &code_block)
|
147
148
|
puts 'LOADING ENV...'
|
148
149
|
load_env
|
149
150
|
require 'iron_mq'
|
@@ -155,53 +156,85 @@ class Fanforce::Worker
|
|
155
156
|
self.current_worker_env = worker_data['env_vars']
|
156
157
|
queue = IronMQ::Client.new.queue(current_queue_id)
|
157
158
|
|
158
|
-
job_num = 0
|
159
159
|
puts 'PROCESSING...'
|
160
|
-
|
160
|
+
job_num = 0
|
161
|
+
job_data = nil
|
162
|
+
while has_enough_time_to_run(min_execution_time) and (job = queue.get(timeout: 3600)) do
|
161
163
|
puts "- JOB #{job_num+=1}: #{job.body}"
|
162
|
-
|
164
|
+
timeout(time_remaining) do
|
165
|
+
job_data = nil
|
166
|
+
job_data = Fanforce.decode_json(job.body)
|
167
|
+
run_job(job, job_data, &code_block)
|
168
|
+
end
|
163
169
|
self.delete_job
|
164
170
|
end
|
165
171
|
self.delete_job
|
166
172
|
puts " FINISHED JOB #{job_num+=1}"
|
173
|
+
rescue Timeout::Error => e
|
174
|
+
handle_job_error(job, e, job_data)
|
175
|
+
rescue Exception => e
|
176
|
+
handle_job_loading_error(job, e, job_data)
|
177
|
+
end
|
178
|
+
|
179
|
+
def time_remaining
|
180
|
+
time_running = Time.now - LOAD_TIME
|
181
|
+
MAX_EXECUTION_TIME - time_running
|
182
|
+
end
|
183
|
+
|
184
|
+
def has_enough_time_to_run(min_execution_time)
|
185
|
+
time_running = Time.now - LOAD_TIME
|
186
|
+
return false if time_running < MAX_EXECUTION_TIME
|
187
|
+
return false if time_remaining < min_execution_time
|
188
|
+
return true
|
167
189
|
end
|
168
190
|
|
169
191
|
def self.retry(options)
|
170
192
|
self.new.enqueue(current_queue_id, current_params, options.merge(retries: current_retries + 1))
|
171
193
|
end
|
172
194
|
|
173
|
-
def self.run_job(job, &code_block)
|
195
|
+
def self.run_job(job, job_data, &code_block)
|
174
196
|
puts '----------------------------------------------------------'
|
175
|
-
|
197
|
+
puts 'PROCESSING JOB... '
|
176
198
|
|
177
|
-
task_data = Fanforce.decode_json(job.body)
|
178
199
|
self.current_job = job
|
179
|
-
self.current_params =
|
180
|
-
self.current_retries =
|
200
|
+
self.current_params = job_data[:params]
|
201
|
+
self.current_retries = job_data[:retries]
|
181
202
|
|
182
203
|
set_env_vars(current_worker_env)
|
183
|
-
code_block.call(
|
204
|
+
code_block.call(job_data[:params].clone, retries: job_data[:retries], queue_id: current_queue_id)
|
184
205
|
self.delete_job(job)
|
185
206
|
|
186
207
|
rescue Exception => e
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
208
|
+
handle_job_error(job, e, job_data)
|
209
|
+
end
|
210
|
+
|
211
|
+
def self.handle_job_loading_error(e, job, job_data)
|
212
|
+
raise($!, "#{$!}: THERE IS NO JOB", $!.backtrace) if job.nil?
|
213
|
+
|
214
|
+
self.delete_job(job)
|
215
|
+
puts 'REMOVED JOB FROM QUEUE'
|
216
|
+
|
217
|
+
puts 'CANNOT SAVE TO ERROR CACHE:'
|
218
|
+
raise($!, "#{$!}: #{job_data.to_json}", $!.backtrace)
|
219
|
+
end
|
220
|
+
|
221
|
+
def self.handle_job_error(e, job, job_data)
|
222
|
+
raise($!, "#{$!}: THERE IS NO JOB", $!.backtrace) if job.nil?
|
223
|
+
|
224
|
+
error = job_data.merge(
|
225
|
+
http_code: (e.code if e.respond_to?(:code)),
|
226
|
+
exception: e.class.name,
|
227
|
+
message: e.message,
|
228
|
+
backtrace: e.backtrace,
|
229
|
+
errored_at: Time.now,
|
230
|
+
env_vars: current_worker_env
|
198
231
|
)
|
199
232
|
error[:curl_command] = e.curl_command if e.respond_to?(:curl_command)
|
200
233
|
|
201
|
-
puts "ADDING TO ERROR CACHE: #{error.to_json}"
|
202
234
|
self.delete_job(job)
|
203
|
-
puts '
|
235
|
+
puts 'REMOVED JOB FROM QUEUE'
|
204
236
|
|
237
|
+
puts "SAVING TO ERROR CACHE: #{error.to_json}"
|
205
238
|
self.add_error current_queue_id, error
|
206
239
|
end
|
207
240
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fanforce-worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Caleb Clark
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: iron_mq
|