sidekiq-scheduler 2.1.1 → 2.1.2

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
  SHA1:
3
- metadata.gz: e699dac84cd996f77b54a71564a2e888a5444c6d
4
- data.tar.gz: 597847f71ef33050a54ded0d313204d3604f2742
3
+ metadata.gz: ae34c739c46b8fbf1ff40509dbdd8cca94f736c5
4
+ data.tar.gz: 4bfb4cc75fc85ee2cd5a3fee274820f14241f8eb
5
5
  SHA512:
6
- metadata.gz: 933d343adcbb79210f95308de2b4612d4c0dd1185ea1b2b1d0fa9ae810b2e4a10031ef0d7b5ef90d95cf9168d742c9a9f4fa5369a87b3157397e9de0cc8b730f
7
- data.tar.gz: 6813ae6ab82f3ffc24446734071114ad0ed446d15060bf8789b8ae98f6cfb44941c209bb9a1eb5875e8f6bc90a55a8050629ba15546c4972835f09421d63290a
6
+ metadata.gz: a922a153b0c8c6fbfc894557f5f90564a0120c66205e6ffffd9f520aa9fd1a4f4e40e4c677c20830e5224f1c9767daf757c1adcb8ed1dcf2ebcb21d0e57bf749
7
+ data.tar.gz: 40ad60c1df2b902a748d297a89d5571839f074e7407efc3f44d28a7f1cc240049d1e9cdd7e4ce40bedc485766aec5dfd799596821a3a48ffa812fb868ad9095c
data/README.md CHANGED
@@ -117,10 +117,42 @@ The schedule is configured through the `:schedule` config entry in the sidekiq c
117
117
  args: ['*.pdf']
118
118
  description: "This job queues pdf content for indexing in solr"
119
119
 
120
+ # Enable the `metadata` argument which will pass a Hash containing the schedule metadata
121
+ # as the last argument of the `perform` method. `false` by default.
122
+ include_metadata: true
123
+
120
124
  # Enable / disable a job. All jobs are enabled by default.
121
125
  enabled: true
122
126
  ```
123
127
 
128
+ ### Schedule metadata
129
+ You can configure Sidekiq-scheduler to pass an argument with metadata about the scheduling process
130
+ to the worker's `perform` method.
131
+
132
+ In the configuration file add the following on each worker class entry:
133
+
134
+ ```yaml
135
+
136
+ SampleWorker:
137
+ include_metadata: true
138
+ ```
139
+
140
+ On your `perform` method, expect an additional argument:
141
+
142
+ ```ruby
143
+ def perform(args, ..., metadata)
144
+ # Do something with the metadata
145
+ end
146
+ ```
147
+
148
+ The `metadata` hash contains the following keys:
149
+
150
+ ```ruby
151
+ metadata.keys =>
152
+ [
153
+ :scheduled_at # The epoch when the job was scheduled to run
154
+ ]
155
+ ```
124
156
 
125
157
  ## Schedule types
126
158
 
@@ -18,7 +18,7 @@ module SidekiqScheduler
18
18
  Sidekiq::Scheduler.enabled = options[:enabled]
19
19
  Sidekiq::Scheduler.dynamic = options[:dynamic]
20
20
  Sidekiq::Scheduler.listened_queues_only = options[:listened_queues_only]
21
- Sidekiq.schedule = options[:schedule]
21
+ Sidekiq.schedule = options[:schedule] if Sidekiq::Scheduler.enabled
22
22
  end
23
23
 
24
24
  def stop
@@ -1,5 +1,5 @@
1
1
  module SidekiqScheduler
2
2
 
3
- VERSION = '2.1.1'
3
+ VERSION = '2.1.2'
4
4
 
5
5
  end
@@ -124,7 +124,7 @@ module Sidekiq
124
124
  if registered
125
125
  logger.info "queueing #{config['class']} (#{job_name})"
126
126
 
127
- handle_errors { enqueue_job(config) }
127
+ handle_errors { enqueue_job(config, time) }
128
128
 
129
129
  remove_elder_job_instances(job_name)
130
130
  else
@@ -157,13 +157,20 @@ module Sidekiq
157
157
  end
158
158
 
159
159
  # Enqueue a job based on a config hash
160
- def enqueue_job(job_config)
160
+ #
161
+ # @param job_config [Hash] the job configuration
162
+ # @param time [Time] time the job is enqueued
163
+ def enqueue_job(job_config, time=Time.now)
161
164
  config = prepare_arguments(job_config.dup)
162
165
 
166
+ if config.delete('include_metadata')
167
+ config['args'] = arguments_with_metadata(config['args'], scheduled_at: time.to_f)
168
+ end
169
+
163
170
  if active_job_enqueue?(config['class'])
164
- enque_with_active_job(config)
171
+ enqueue_with_active_job(config)
165
172
  else
166
- enque_with_sidekiq(config)
173
+ enqueue_with_sidekiq(config)
167
174
  end
168
175
  end
169
176
 
@@ -222,11 +229,12 @@ module Sidekiq
222
229
  end
223
230
  end
224
231
 
225
- def enque_with_active_job(config)
226
- initialize_active_job(config['class'], config['args']).enqueue(config)
232
+ def enqueue_with_active_job(config)
233
+ # TODO Does ActiveJob really need to get the config data in the `enqueue` call?
234
+ initialize_active_job(config['class'], config['args']).enqueue(sanitize_job_config(config))
227
235
  end
228
236
 
229
- def enque_with_sidekiq(config)
237
+ def enqueue_with_sidekiq(config)
230
238
  Sidekiq::Client.push(sanitize_job_config(config))
231
239
  end
232
240
 
@@ -385,6 +393,25 @@ module Sidekiq
385
393
  Sidekiq.redis { |r| r.hset(schedules_state_key, name, JSON.generate(state)) }
386
394
  end
387
395
 
396
+ # Adds a Hash with schedule metadata as the last argument to call the worker.
397
+ # It currently returns the schedule time as a Float number representing the milisencods
398
+ # since epoch.
399
+ #
400
+ # @example with hash argument
401
+ # arguments_with_metadata({value: 1}, scheduled_at: Time.now)
402
+ # #=> [{value: 1}, {scheduled_at: <miliseconds since epoch>}]
403
+ #
404
+ # @param args [Array|Hash]
405
+ # @param metadata [Hash]
406
+ # @return [Array] arguments with added metadata
407
+ def arguments_with_metadata(args, metadata)
408
+ if args.is_a? Array
409
+ [*args, metadata]
410
+ else
411
+ [args, metadata]
412
+ end
413
+ end
414
+
388
415
  end
389
416
  end
390
417
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Morton Jonuschat
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-02-03 00:00:00.000000000 Z
12
+ date: 2017-02-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie