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 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