cloudtasker 0.10.0 → 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a7bb0597bbd5656c6c6c273b4a65097c0b9c44be4b5944a5c1fbdf2d03f9c7c
4
- data.tar.gz: c1e1d33203c8dfa5a090427c91f7b94e6046fbc0037fbb74285e61851cab3f93
3
+ metadata.gz: c0f76715e1b778b035aba4e5bd6175b7d632bb114dcaa471f79e6be29013933e
4
+ data.tar.gz: 8d059110a3e90b04375410b7030d4773ea34d2cc8da0ac89cad20ba146939080
5
5
  SHA512:
6
- metadata.gz: a03d48359589520a040e8214ed40d778aece0e667de81bfb15b447c4f4f93f296955b08624c9fa1a5e8ca5e5cb6773389b490566f076f0e1f50ebbf0c46d376a
7
- data.tar.gz: 5f64a1e30faa954e2e046f787c216b9c02a992493561abe5dbbef9a7678833ef1644947b4e6f3743ebe43c79c62d90c48b46c91a6002088f88e94e7689b91a6d
6
+ metadata.gz: b6e33bd5cd5587baf20336445833938fcc01e12fa6f43f0236bcb90cf4f8fb8463545f89bca85f3511d95db8b0c05d4bcfe83f94b9a7da3ec2dca51f5f64e660
7
+ data.tar.gz: 7ac3e128edfd635b543160391b38bcb7acc840aa306cc6713e7f9aa5cd76ea01da3616d293f7f9222496449419392ac2d644bcd643315cd75661a93b1577ac0f
@@ -21,6 +21,10 @@ jobs:
21
21
  - 'google-cloud-tasks-1.3'
22
22
  - 'rails-5.2'
23
23
  - 'rails-6.0'
24
+ - 'semantic_logger-3.4'
25
+ - 'semantic_logger-4.6'
26
+ - 'semantic_logger-4.7.0'
27
+ - 'semantic_logger-4.7.2'
24
28
  steps:
25
29
  - name: Setup System
26
30
  run: sudo apt-get install libsqlite3-dev
data/Appraisals CHANGED
@@ -23,3 +23,19 @@ end
23
23
  appraise 'rails-6.0' do
24
24
  gem 'rails', '6.0'
25
25
  end
26
+
27
+ appraise 'semantic_logger-3.4' do
28
+ gem 'semantic_logger', '3.4.1'
29
+ end
30
+
31
+ appraise 'semantic_logger-4.6' do
32
+ gem 'semantic_logger', '4.6.1'
33
+ end
34
+
35
+ appraise 'semantic_logger-4.7.0' do
36
+ gem 'semantic_logger', '4.7.0'
37
+ end
38
+
39
+ appraise 'semantic_logger-4.7.2' do
40
+ gem 'semantic_logger', '4.7.2'
41
+ end
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.10.1](https://github.com/keypup-io/cloudtasker/tree/v0.10.1) (2020-10-05)
4
+
5
+ [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.10.0...v0.10.1)
6
+
7
+ **Fixed bugs:**
8
+ - Logging: fix log processing with `semantic_logger` `v4.7.2`. Accept any args on block passed to the logger.
9
+
3
10
  ## [v0.10.0](https://github.com/keypup-io/cloudtasker/tree/v0.10.0) (2020-09-02)
4
11
 
5
12
  [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/v0.9.3...v0.10.0)
@@ -96,7 +103,3 @@ For Sinatra applications please update your Cloudtasker controller according to
96
103
  ## [v0.1.0](https://github.com/keypup-io/cloudtasker/tree/v0.1.0) (2019-11-17)
97
104
 
98
105
  [Full Changelog](https://github.com/keypup-io/cloudtasker/compare/c137feb1ceaaaa4e2fecac0d1f0b4c73151ae002...v0.1.0)
99
-
100
-
101
-
102
- \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
data/README.md CHANGED
@@ -75,7 +75,7 @@ Cloudtasker.configure do |config|
75
75
  # Adapt the server port to be the one used by your Rails web process
76
76
  #
77
77
  config.processor_host = 'http://localhost:3000'
78
-
78
+
79
79
  #
80
80
  # If you do not have any Rails secret_key_base defined, uncomment the following
81
81
  # This secret is used to authenticate jobs sent to the processing endpoint
@@ -158,14 +158,14 @@ The gem can be configured through an initializer. See below all the available co
158
158
  Cloudtasker.configure do |config|
159
159
  #
160
160
  # If you do not have any Rails secret_key_base defined, uncomment the following.
161
- # This secret is used to authenticate jobs sent to the processing endpoint
161
+ # This secret is used to authenticate jobs sent to the processing endpoint
162
162
  # of your application.
163
163
  #
164
164
  # Default with Rails: Rails.application.credentials.secret_key_base
165
165
  #
166
166
  # config.secret = 'some-long-token'
167
167
 
168
- #
168
+ #
169
169
  # Specify the details of your Google Cloud Task location.
170
170
  #
171
171
  # This not required in development using the Cloudtasker local server.
@@ -189,21 +189,21 @@ Cloudtasker.configure do |config|
189
189
  #
190
190
  # Specific queues can be created in Cloud Tasks using the gcloud SDK or
191
191
  # via the `rake cloudtasker:setup_queue name=<queue_name>` task.
192
- #
192
+ #
193
193
  config.gcp_queue_prefix = 'my-app'
194
194
 
195
- #
195
+ #
196
196
  # Specify the publicly accessible host for your application
197
197
  #
198
198
  # > E.g. in development, using the cloudtasker local server
199
199
  # config.processor_host = 'http://localhost:3000'
200
- #
200
+ #
201
201
  # > E.g. in development, using `config.mode = :production` and ngrok
202
202
  # config.processor_host = 'https://111111.ngrok.io'
203
203
  #
204
204
  config.processor_host = 'https://app.mydomain.com'
205
205
 
206
- #
206
+ #
207
207
  # Specify the mode of operation:
208
208
  # - :development => jobs will be pushed to Redis and picked up by the Cloudtasker local server
209
209
  # - :production => jobs will be pushed to Google Cloud Tasks. Requires a publicly accessible domain.
@@ -212,20 +212,20 @@ Cloudtasker.configure do |config|
212
212
  #
213
213
  # config.mode = Rails.env.production? || Rails.env.my_other_env? ? :production : :development
214
214
 
215
- #
215
+ #
216
216
  # Specify the logger to use
217
- #
217
+ #
218
218
  # Default with Rails: Rails.logger
219
219
  # Default without Rails: Logger.new(STDOUT)
220
- #
220
+ #
221
221
  # config.logger = MyLogger.new(STDOUT)
222
222
 
223
- #
223
+ #
224
224
  # Specify how many retries are allowed on jobs. This number of retries excludes any
225
225
  # connectivity error due to the application being down or unreachable.
226
- #
226
+ #
227
227
  # Default: 25
228
- #
228
+ #
229
229
  # config.max_retries = 10
230
230
 
231
231
  #
@@ -262,7 +262,7 @@ Cloudtasker.configure do |config|
262
262
  end
263
263
  ```
264
264
 
265
- If the default queue `<gcp_queue_prefix>-default` does not exist in Cloud Tasks you should [create it using the gcloud sdk](https://cloud.google.com/tasks/docs/creating-queues).
265
+ If the default queue `<gcp_queue_prefix>-default` does not exist in Cloud Tasks you should [create it using the gcloud sdk](https://cloud.google.com/tasks/docs/creating-queues).
266
266
 
267
267
  Alternatively with Rails you can simply run the following rake task if you have queue admin permissions (`cloudtasks.queues.get` and `cloudtasks.queues.create`).
268
268
  ```bash
@@ -364,7 +364,7 @@ CriticalWorker.schedule(args: [1], queue: :important)
364
364
  Cloudtasker comes with three optional features:
365
365
  - Cron Jobs [[docs](docs/CRON_JOBS.md)]: Run jobs at fixed intervals.
366
366
  - Batch Jobs [[docs](docs/BATCH_JOBS.md)]: Run jobs in jobs and track completion of the overall batch.
367
- - Unique Jobs [[docs](docs/UNIQUE_JOBS.md)]: Ensure uniqueness of jobs based on job arguments.
367
+ - Unique Jobs [[docs](docs/UNIQUE_JOBS.md)]: Ensure uniqueness of jobs based on job arguments.
368
368
 
369
369
  ## Working locally
370
370
 
@@ -381,9 +381,9 @@ You can configure your application to use the Cloudtasker local server using the
381
381
 
382
382
  Cloudtasker.configure do |config|
383
383
  # ... other options
384
-
384
+
385
385
  # Push jobs to redis and let the Cloudtasker local server collect them
386
- # This is the default mode unless CLOUDTASKER_ENV or RAILS_ENV or RACK_ENV is set
386
+ # This is the default mode unless CLOUDTASKER_ENV or RAILS_ENV or RACK_ENV is set
387
387
  # to a non-development environment
388
388
  config.mode = :development
389
389
  end
@@ -427,7 +427,7 @@ Cloudtasker.configure do |config|
427
427
 
428
428
  # Use your ngrok domain as the processor host
429
429
  config.processor_host = 'https://your-tunnel-id.ngrok.io'
430
-
430
+
431
431
  # Force Cloudtasker to use Google Cloud Tasks in development
432
432
  config.mode = :production
433
433
  end
@@ -578,19 +578,17 @@ E.g. Set max number of retries globally via the cloudtasker initializer.
578
578
  # config/initializers/cloudtasker.rb
579
579
 
580
580
  Cloudtasker.configure do |config|
581
- #
581
+ #
582
582
  # Specify how many retries are allowed on jobs. This number of retries excludes any
583
583
  # connectivity error that would be due to the application being down or unreachable.
584
- #
584
+ #
585
585
  # Default: 25
586
- #
586
+ #
587
587
  config.max_retries = 10
588
588
  end
589
589
  ```
590
590
 
591
591
  E.g. Set max number of retries to 3 on a given worker
592
-
593
- E.g.
594
592
  ```ruby
595
593
  # app/workers/some_error_worker.rb
596
594
 
@@ -600,7 +598,30 @@ class SomeErrorWorker
600
598
  # This will override the global setting
601
599
  cloudtasker_options max_retries: 3
602
600
 
603
- def perform()
601
+ def perform
602
+ raise(ArgumentError)
603
+ end
604
+ end
605
+ ```
606
+
607
+ E.g. Evaluate the number of max retries at runtime (target: v0.11.0)
608
+ ```ruby
609
+ # app/workers/some_error_worker.rb
610
+
611
+ class SomeErrorWorker
612
+ include Cloudtasker::Worker
613
+
614
+ # Return the number of max retries based on
615
+ # worker arguments.
616
+ #
617
+ # If this method returns nil then max_retries
618
+ # will delegate to the class `max_retries` setting or Cloudtasker
619
+ # `max_retries` configuration otion.
620
+ def max_retries(arg1, arg2)
621
+ arg1 == 'foo' ? 13 : nil
622
+ end
623
+
624
+ def perform(arg1, arg2)
604
625
  raise(ArgumentError)
605
626
  end
606
627
  end
@@ -618,7 +639,7 @@ require 'cloudtasker/testing'
618
639
  # Mode 1 (default): Push jobs to Google Cloud Tasks (env != development) or Redis (env == development)
619
640
  Cloudtasker::Testing.enable!
620
641
 
621
- # Mode 2: Push jobs to an in-memory queue. Jobs will not be processed until you call
642
+ # Mode 2: Push jobs to an in-memory queue. Jobs will not be processed until you call
622
643
  # Cloudtasker::Worker.drain_all (process all jobs) or MyWorker.drain (process jobs for specific worker)
623
644
  Cloudtasker::Testing.fake!
624
645
 
@@ -682,9 +703,9 @@ Below are examples of rspec tests. It is assumed that `Cloudtasker::Testing.fake
682
703
  **Example 1**: Testing that a job is scheduled
683
704
  ```ruby
684
705
  describe 'worker scheduling'
685
- subject(:enqueue_job) { MyWorker.perform_async(1,2) }
686
-
687
- it { expect { enqueue_job }.to change(MyWorker.jobs, :size).by(1) }
706
+ subject(:enqueue_job) { MyWorker.perform_async(1,2) }
707
+
708
+ it { expect { enqueue_job }.to change(MyWorker.jobs, :size).by(1) }
688
709
  end
689
710
  ```
690
711
 
@@ -692,7 +713,7 @@ end
692
713
  ```ruby
693
714
  describe 'worker calls api'
694
715
  subject { Cloudtasker::Testing.inline! { MyApiWorker.perform_async(1,2) } }
695
-
716
+
696
717
  before { expect(MyApi).to receive(:fetch).and_return([]) }
697
718
  it { is_expected.to be_truthy }
698
719
  end
@@ -43,6 +43,7 @@ Gem::Specification.new do |spec|
43
43
  spec.add_development_dependency 'rspec', '~> 3.0'
44
44
  spec.add_development_dependency 'rubocop', '0.76.0'
45
45
  spec.add_development_dependency 'rubocop-rspec', '1.37.0'
46
+ spec.add_development_dependency 'semantic_logger'
46
47
  spec.add_development_dependency 'timecop'
47
48
  spec.add_development_dependency 'webmock'
48
49
 
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "semantic_logger", "3.4.1"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "semantic_logger", "4.6.1"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "semantic_logger", "4.7.0"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "semantic_logger", "4.7.2"
6
+
7
+ gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "semantic_logger", "4.7.2"
6
+
7
+ gemspec path: "../"
@@ -166,6 +166,9 @@ module Cloudtasker
166
166
  # Delete task
167
167
  self.class.delete(id)
168
168
  resp
169
+ rescue DeadWorkerError => e
170
+ self.class.delete(id)
171
+ raise(e) if self.class.inline_mode?
169
172
  rescue StandardError => e
170
173
  self.job_retries += 1
171
174
  raise(e) if self.class.inline_mode?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cloudtasker
4
- VERSION = '0.10.0'
4
+ VERSION = '0.10.1'
5
5
  end
@@ -296,6 +296,20 @@ module Cloudtasker
296
296
  other.is_a?(self.class) && other.job_id == job_id
297
297
  end
298
298
 
299
+ #
300
+ # Return the max number of retries allowed for this job.
301
+ #
302
+ # The order of precedence for retry lookup is:
303
+ # - Worker `max_retries` method
304
+ # - Class `max_retries` option
305
+ # - Cloudtasker `max_retries` config option
306
+ #
307
+ # @return [Integer] The number of retries
308
+ #
309
+ def job_max_retries
310
+ @job_max_retries ||= (try(:max_retries, *job_args) || self.class.max_retries)
311
+ end
312
+
299
313
  #
300
314
  # Return true if the job has excceeded its maximum number
301
315
  # of retries
@@ -303,7 +317,7 @@ module Cloudtasker
303
317
  # @return [Boolean] True if the job is dead
304
318
  #
305
319
  def job_dead?
306
- job_retries >= Cloudtasker.config.max_retries
320
+ job_retries >= job_max_retries
307
321
  end
308
322
 
309
323
  #
@@ -142,7 +142,7 @@ module Cloudtasker
142
142
  #
143
143
  def log_message(level, msg, &block)
144
144
  # Merge log-specific context into worker-specific context
145
- payload_block = -> { log_block.call.merge(block&.call || {}) }
145
+ payload_block = ->(*_args) { log_block.call.merge(block&.call || {}) }
146
146
 
147
147
  # ActiveSupport::Logger does not support passing a payload through a block on top
148
148
  # of a message.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudtasker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-02 00:00:00.000000000 Z
11
+ date: 2020-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -206,6 +206,20 @@ dependencies:
206
206
  - - '='
207
207
  - !ruby/object:Gem::Version
208
208
  version: 1.37.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: semantic_logger
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
209
223
  - !ruby/object:Gem::Dependency
210
224
  name: timecop
211
225
  requirement: !ruby/object:Gem::Requirement
@@ -324,6 +338,11 @@ files:
324
338
  - gemfiles/rails_5.2.gemfile.lock
325
339
  - gemfiles/rails_6.0.gemfile
326
340
  - gemfiles/rails_6.0.gemfile.lock
341
+ - gemfiles/semantic_logger_3.4.gemfile
342
+ - gemfiles/semantic_logger_4.6.gemfile
343
+ - gemfiles/semantic_logger_4.7.0.gemfile
344
+ - gemfiles/semantic_logger_4.7.2.gemfile
345
+ - gemfiles/semantic_logger_4.7.gemfile
327
346
  - lib/cloudtasker.rb
328
347
  - lib/cloudtasker/authentication_error.rb
329
348
  - lib/cloudtasker/authenticator.rb