fanforce-worker 0.13.2 → 0.14.0
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 +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
|