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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODU5NWUzMTI4ZmE2MTliYTkwMTkyNWY2NWVhZjI0YWQ0M2IwYzQyYw==
4
+ YjFmOGE4MWZhYmE2MGVjZjYyZWIwYzA0M2Y0Njg4MzdkZTc3NGNiMQ==
5
5
  data.tar.gz: !binary |-
6
- ZGEwODdhMGMwMmE1NDI4MWZiYjQzNjE2YWI1Zjg0YmJkYmE4M2E3Ng==
6
+ MmNlNjY1NDRjODY2OThlYWIzMjEwNGZlN2JjODI0NDI4Yzg5NTA1Ng==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NjBmMDgyYTIwMTFkZjliNGU3Y2E5ZTAxYzBhMzU1MTI5ZGE2MDQzZTUwNjkx
10
- NjI2OWY1ODYyNzlkNDAzMDU5ZWI0Mzk4ZmI2Yzg5ZDA1MDk0OWI4ZWExMDY2
11
- M2ExNjBiZWE1ODU5ODMwNzk4OGQ5N2U1ODkwYWQ1MmM2YmQ0YWI=
9
+ M2Y0ODUwNDZjNjBlNTFmNjk1MGY5YjBmMTJhYTNiMDk0ZTI1ZmFlMDA5OTQz
10
+ OGMwNDg4ZDIxZWYxOWNkYThjMjJlMzNlNTYyMWYzODJkMmFlMDMxMjgyODBl
11
+ N2ZmNTBiZDUxZjI3NTY4YmVhMTk4YzUzMDM5MGZlMDRmYzExY2U=
12
12
  data.tar.gz: !binary |-
13
- Y2QxYjNhOWMwYzI5Njk0Yjc3YTgwOTIxM2Y0MWQwYzllYzI4Y2RkNzVhMWIw
14
- NzcyMGZiM2YxZDk4NGQwNWRhZWRjNzM0ZGU4Yjc3NWI4MjdkZDQwNmQ2NzI4
15
- MzhmODVlMGFmMDA5ODkyZjc4MDdiYTIxMDNkMDI4MmU4N2I1Y2I=
13
+ MGE3ODE0ZmRhNDZlMzQ1NWY0YTg5OWI5MDRiM2MwODNkMzIyNGY3NTE1ZWFl
14
+ MjlkOGU5MWNhODVmNzY5YThjYjQ1NWU1MDMyZjE2ODFlNGUyNTMyMjIxZGIw
15
+ MmJlYjdlMjFhYzk3ZWI0ODBlY2I0NWY2MTM4YTAyZjkyNjhmNDQ=
@@ -1,5 +1,5 @@
1
1
  class Fanforce
2
2
  class Worker
3
- VERSION = '0.13.2'
3
+ VERSION = '0.14.0'
4
4
  end
5
5
  end
@@ -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
- while (Time.now - LOAD_TIME) < 1800 and (job = queue.get(timeout: 3600)) do
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
- run_job job, &code_block
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
- print 'PROCESSING MESSAGE: '
197
+ puts 'PROCESSING JOB... '
176
198
 
177
- task_data = Fanforce.decode_json(job.body)
178
199
  self.current_job = job
179
- self.current_params = task_data[:params]
180
- self.current_retries = task_data[: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(task_data[:params].clone, retries: task_data[:retries], queue_id: current_queue_id)
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
- if job.nil?
188
- puts 'MESSAGE IS NIL'
189
- return
190
- end
191
- error = task_data.merge(
192
- http_code: (e.code if e.respond_to?(:code)),
193
- exception: e.class.name,
194
- message: e.message,
195
- backtrace: e.backtrace,
196
- errored_at: Time.now,
197
- env_vars: current_worker_env
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 'DELETED MESSAGE'
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.13.2
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-13 00:00:00.000000000 Z
11
+ date: 2013-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: iron_mq