sidekiq-cron 1.4.0 → 1.6.0

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: 437dc35edb85224f5e77eaa73be4adac923adb313f755f3029a4037e92a9c523
4
- data.tar.gz: 517c8dd23943edb6c1e6e3059b4b6f7044ff85d13594447dbb097ff7438afc63
3
+ metadata.gz: ccf886f1cd7a1369e8a3dc9a9b9bff96c0742e22e751d9ae61e66f9fa376f873
4
+ data.tar.gz: 7ad6cd7f4637e0264cdfe529a960891275cd37c03e8bb3eb5e856bfadaa879a1
5
5
  SHA512:
6
- metadata.gz: 8d943877a3c9577b060ccbc86fca6e256ac6e12e7ab4ef5428091960d82d119b8087264b3fd20afcd2a191dc722f42deab5701557aa5d1fd9e0f2cfe10357b26
7
- data.tar.gz: 39f3b04c168c250f0273796fb1c6f20947114d92030d60fed74d2c5087ee401b35f0b3e1fdea00a6c7eac9116d76204ce439dae7a5ba965b60978034ae472d38
6
+ metadata.gz: 90d285a52788e04f6eb253f9f1b215e82a2ab68dc225eb3a4f4f6e2424cfbc190e629a9fa36238b03510cbcc1e2868d9dbf66efd8adbcd68d0aa48a5362e6ba2
7
+ data.tar.gz: cb48a228304927385f5ea69da2d233fb338efe85875c1e1bd14c3d8b52bf0cf286c307d0c841b04fc98b71453167cb4e932b7f67a15f27faadef580154be4a1f
@@ -2,6 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## 1.6.0
6
+
7
+ - Adds support for auto-loading the config/schedule.yml file (https://github.com/ondrejbartas/sidekiq-cron/pull/337)
8
+ - Fix Sidekiq.options deprecation warning (https://github.com/ondrejbartas/sidekiq-cron/pull/338)
9
+
10
+ ## 1.5.1
11
+
12
+ - Fixes an issue that prevented the gem to work in previous Sidekiq versions (https://github.com/ondrejbartas/sidekiq-cron/pull/335)
13
+
14
+ ## 1.5.0
15
+
16
+ - Integrate Sidekiq v6.5 breaking changes (https://github.com/ondrejbartas/sidekiq-cron/pull/331)
17
+ - Add portuguese translations (https://github.com/ondrejbartas/sidekiq-cron/pull/332)
18
+
5
19
  ## 1.4.0
6
20
 
7
21
  - Fix buttons order in job show view (https://github.com/ondrejbartas/sidekiq-cron/pull/302)
data/README.md CHANGED
@@ -27,7 +27,7 @@ Please be aware that Sidekiq-Cron < 1.0 was relying on rufus-scheduler < 3.5. Us
27
27
 
28
28
  ## Changelog
29
29
 
30
- Before upgrading to a new version, please read our [Changelog](Changes.md).
30
+ Before upgrading to a new version, please read our [Changelog](CHANGELOG.md).
31
31
 
32
32
  ## Installation
33
33
 
@@ -35,6 +35,7 @@ Before upgrading to a new version, please read our [Changelog](Changes.md).
35
35
 
36
36
  - Redis 2.8 or greater is required (Redis 3.0.3 or greater is recommended for large scale use)
37
37
  - Sidekiq 4.2 or greater is required (for Sidekiq < 4 use version sidekiq-cron 0.3.1)
38
+ - Sidekiq 6.5 requires Sidekiq-Cron 1.5+
38
39
 
39
40
  Install the gem:
40
41
 
@@ -45,7 +46,7 @@ $ gem install sidekiq-cron
45
46
  Or add to your `Gemfile` and run `bundle install`:
46
47
 
47
48
  ```ruby
48
- gem "sidekiq-cron", "~> 1.3"
49
+ gem "sidekiq-cron"
49
50
  ```
50
51
 
51
52
  **NOTE** If you are not using Rails, you need to add `require 'sidekiq-cron'` somewhere after `require 'sidekiq'`.
@@ -93,7 +94,7 @@ For example: `"*/30 * * * * *"` would schedule a job to run every 30 seconds.
93
94
  Note that if you plan to schedule jobs with second precision you may need to override the default schedule poll interval so it is lower than the interval of your jobs:
94
95
 
95
96
  ```ruby
96
- Sidekiq.options[:average_scheduled_poll_interval] = 10
97
+ Sidekiq[:average_scheduled_poll_interval] = 10
97
98
  ```
98
99
 
99
100
  The default value at time of writing is 30 seconds. See [under the hood](#under-the-hood) for more details.
@@ -226,21 +227,19 @@ second_job:
226
227
  hard: "stuff"
227
228
  ```
228
229
 
229
- ```ruby
230
- # config/initializers/sidekiq.rb
231
- schedule_file = "config/schedule.yml"
232
-
233
- if File.exist?(schedule_file) && Sidekiq.server?
234
- Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
235
- end
236
- ```
230
+ There are multiple ways to load the jobs from a YAML file
237
231
 
238
- From version 3.x it is better not to use separate initializer of schedule instead add `config.on(:startup)` to your Sidekiq configuration:
232
+ 1. The gem will automatically load the jobs mentioned in `config/schedule.yml` file.
233
+ 2. When you want to load jobs from a different filename, mention the filename in sidekiq configuration,
234
+ i.e. `cron_schedule_file: "config/users_schedule.yml"`
235
+ 3. Load the file manually as follows
239
236
 
240
237
  ```ruby
238
+ # config/initializers/sidekiq.rb
239
+
241
240
  Sidekiq.configure_server do |config|
242
241
  config.on(:startup) do
243
- schedule_file = "config/schedule.yml"
242
+ schedule_file = "config/users_schedule.yml"
244
243
 
245
244
  if File.exist?(schedule_file)
246
245
  Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
@@ -315,30 +314,6 @@ With this, you will get:
315
314
 
316
315
  ![Web UI](examples/web-cron-ui.png)
317
316
 
318
- ### Forking Processes or problem with `NotImplementedError`
319
-
320
- If you're using a forking web server like Unicorn you may run into an issue where the Redis connection is used
321
- before the process forks, causing the following exception to occur:
322
-
323
- ```
324
- Redis::InheritedError: Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.
325
- ```
326
-
327
- To avoid this, wrap your job creation in the call to `Sidekiq.configure_server`:
328
-
329
- ```ruby
330
- Sidekiq.configure_server do |config|
331
- config.on(:startup) do
332
- schedule_file = "config/schedule.yml"
333
-
334
- if File.exist?(schedule_file)
335
- Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
336
- end
337
- end
338
- end
339
- ```
340
-
341
- **NOTE** This API is only available in Sidekiq 3.x.
342
317
 
343
318
  ## Under the hood
344
319
 
@@ -349,7 +324,7 @@ Sidekiq-Cron adds itself into this start procedure and starts another thread wit
349
324
  Sidekiq-Cron is checking jobs to be enqueued every 30s by default, you can change it by setting:
350
325
 
351
326
  ```ruby
352
- Sidekiq.options[:average_scheduled_poll_interval] = 10
327
+ Sidekiq[:average_scheduled_poll_interval] = 10
353
328
  ```
354
329
 
355
330
  Sidekiq-Cron is safe to use with multiple Sidekiq processes or nodes. It uses a Redis sorted set to determine that only the first process who asks can enqueue scheduled jobs into the queue.
@@ -364,6 +339,7 @@ Sidekiq-Cron is safe to use with multiple Sidekiq processes or nodes. It uses a
364
339
  * Start a feature/bugfix branch.
365
340
  * Commit and push until you are happy with your contribution.
366
341
  * Make sure to add tests for it. This is important so we don't break it in a future version unintentionally.
342
+ * Open a pull request!
367
343
 
368
344
  ### Testing
369
345
 
@@ -1,15 +1,10 @@
1
1
  require 'fugit'
2
2
  require 'sidekiq'
3
- require 'sidekiq/util'
4
3
  require 'sidekiq/cron/support'
5
4
 
6
5
  module Sidekiq
7
6
  module Cron
8
-
9
7
  class Job
10
- include Util
11
- extend Util
12
-
13
8
  #how long we would like to store informations about previous enqueues
14
9
  REMEMBER_THRESHOLD = 24 * 60 * 60
15
10
  LAST_ENQUEUE_TIME_FORMAT = '%Y-%m-%d %H:%M:%S %z'
@@ -76,7 +71,7 @@ module Sidekiq
76
71
 
77
72
  save_last_enqueue_time
78
73
  add_jid_history jid
79
- logger.debug { "enqueued #{@name}: #{@message}" }
74
+ Sidekiq.logger.debug { "enqueued #{@name}: #{@message}" }
80
75
  end
81
76
 
82
77
  def is_active_job?
@@ -468,7 +463,7 @@ module Sidekiq
468
463
  time = Time.now.utc
469
464
  conn.zadd(job_enqueued_key, time.to_f.to_s, formated_last_time(time).to_s) unless conn.public_send(REDIS_EXISTS_METHOD, job_enqueued_key)
470
465
  end
471
- logger.info { "Cron Jobs - added job with name: #{@name}" }
466
+ Sidekiq.logger.info { "Cron Jobs - added job with name: #{@name}" }
472
467
  end
473
468
 
474
469
  def save_last_enqueue_time
@@ -483,7 +478,8 @@ module Sidekiq
483
478
  jid: jid,
484
479
  enqueued: @last_enqueue_time
485
480
  }
486
- @history_size ||= (Sidekiq.options[:cron_history_size] || 10).to_i - 1
481
+ cron_history_size = Sidekiq.respond_to?(:[]) ? Sidekiq[:cron_history_size] : Sidekiq.options[:cron_history_size]
482
+ @history_size ||= (cron_history_size || 10).to_i - 1
487
483
  Sidekiq.redis do |conn|
488
484
  conn.lpush jid_history_key,
489
485
  Sidekiq.dump_json(jid_history)
@@ -509,7 +505,7 @@ module Sidekiq
509
505
  #delete main job
510
506
  conn.del redis_key
511
507
  end
512
- logger.info { "Cron Jobs - deleted job with name: #{@name}" }
508
+ Sidekiq.logger.info { "Cron Jobs - deleted job with name: #{@name}" }
513
509
  end
514
510
 
515
511
  # remove all job from cron
@@ -517,7 +513,7 @@ module Sidekiq
517
513
  all.each do |job|
518
514
  job.destroy
519
515
  end
520
- logger.info { "Cron Jobs - deleted all jobs" }
516
+ Sidekiq.logger.info { "Cron Jobs - deleted all jobs" }
521
517
  end
522
518
 
523
519
  # remove "removed jobs" between current jobs and new jobs
@@ -0,0 +1,22 @@
1
+ pt:
2
+ Job: Tarefa
3
+ Cron: Cron
4
+ CronJobs: Tarefas do Cron
5
+ EnqueueNow: Enfileirar agora
6
+ EnableAll: Habilitar todos
7
+ DisableAll: Desabilitar todos
8
+ EnqueueAll: Enfileirar todos
9
+ DeleteAll: Excluir todos
10
+ 'Cron string': Cron
11
+ AreYouSureEnqueueCronJobs: Tem certeza de que deseja enfileirar TODOS as tarefas?
12
+ AreYouSureEnqueueCronJob: Tem certeza de que deseja enfileirar a tarefa %{job}?
13
+ AreYouSureDeleteCronJobs: Tem certeza de que deseja excluir TODOS as tarefas?
14
+ AreYouSureDeleteCronJob: Tem certeza de que deseja excluir a tarefa %{job}?
15
+ NoCronJobsWereFound: Nenhuma tarefa foi encontrada
16
+ Enable: Habilitar
17
+ Disable: Desabilitar
18
+ 'Last enqueued': Último enfileirado
19
+ disabled: desabilitado
20
+ enabled: habilitado
21
+ NoHistoryWereFound: Nenhum histórico foi encontrado
22
+ Description: Descrição
@@ -1,5 +1,4 @@
1
1
  require 'sidekiq'
2
- require 'sidekiq/util'
3
2
  require 'sidekiq/cron'
4
3
  require 'sidekiq/scheduled'
5
4
 
@@ -9,6 +8,23 @@ module Sidekiq
9
8
 
10
9
  # The Poller checks Redis every N seconds for sheduled cron jobs
11
10
  class Poller < Sidekiq::Scheduled::Poller
11
+ def initialize
12
+ Sidekiq.configure_server do |config|
13
+ if config.respond_to?(:[])
14
+ config[:poll_interval_average] = config[:average_scheduled_poll_interval] || POLL_INTERVAL
15
+ else
16
+ config.options[:poll_interval_average] = config.options[:average_scheduled_poll_interval] || POLL_INTERVAL
17
+ end
18
+ end
19
+
20
+ if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("6.5.0")
21
+ # Sidekiq Poller init requires a config argument
22
+ super(Sidekiq)
23
+ else
24
+ super
25
+ end
26
+ end
27
+
12
28
  def enqueue
13
29
  time = Time.now.utc
14
30
  Sidekiq::Cron::Job.all.each do |job|
@@ -32,10 +48,6 @@ module Sidekiq
32
48
  Sidekiq.logger.error "CRON JOB: #{ex.backtrace.first}"
33
49
  handle_exception(ex) if respond_to?(:handle_exception)
34
50
  end
35
-
36
- def poll_interval_average
37
- Sidekiq.options[:average_scheduled_poll_interval] || POLL_INTERVAL
38
- end
39
51
  end
40
52
  end
41
53
  end
@@ -0,0 +1,14 @@
1
+ require "sidekiq"
2
+ require "sidekiq/cron/job"
3
+
4
+ if Sidekiq.server?
5
+ Sidekiq.configure_server do |config|
6
+ schedule_file = config.options[:cron_schedule_file] || "config/schedule.yml"
7
+
8
+ if File.exist?(schedule_file)
9
+ config.on(:startup) do
10
+ Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sidekiq
4
4
  module Cron
5
- VERSION = "1.4.0"
5
+ VERSION = "1.6.0"
6
6
  end
7
7
  end
data/lib/sidekiq/cron.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "sidekiq/cron/job"
2
2
  require "sidekiq/cron/poller"
3
3
  require "sidekiq/cron/launcher"
4
+ require "sidekiq/cron/schedule_loader"
4
5
 
5
6
  module Sidekiq
6
7
  module Cron
data/sidekiq-cron.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |s|
6
6
  s.name = "sidekiq-cron"
7
7
  s.version = Sidekiq::Cron::VERSION
8
8
 
9
- s.required_ruby_version = ">= 2.5"
9
+ s.required_ruby_version = ">= 2.6"
10
10
  s.require_paths = ["lib"]
11
11
  s.authors = ["Ondrej Bartas"]
12
12
  s.description = "Enables to set jobs to be run in specified time (using CRON notation)"
@@ -16,14 +16,14 @@ Gem::Specification.new do |s|
16
16
  "README.md"
17
17
  ]
18
18
  s.files = Dir.glob('lib/**/*') + Dir.glob('test/**/*') + [
19
- "Changes.md",
19
+ "CHANGELOG.md",
20
20
  "Gemfile",
21
21
  "LICENSE.txt",
22
22
  "Rakefile",
23
23
  "README.md",
24
24
  "sidekiq-cron.gemspec",
25
25
  ]
26
-
26
+
27
27
  s.homepage = "https://github.com/ondrejbartas/sidekiq-cron"
28
28
  s.licenses = ["MIT"]
29
29
  s.summary = "Sidekiq-Cron helps to add repeated scheduled jobs"
@@ -31,11 +31,11 @@ Gem::Specification.new do |s|
31
31
  s.add_dependency("fugit", "~> 1")
32
32
  s.add_dependency("sidekiq", ">= 4.2.1")
33
33
 
34
- s.add_development_dependency("minitest")
35
- s.add_development_dependency("mocha")
36
- s.add_development_dependency("redis-namespace", ">= 1.5.2")
37
- s.add_development_dependency("rack", "~> 2.0")
38
- s.add_development_dependency("rack-test", "~> 1.0")
34
+ s.add_development_dependency("minitest", "~> 5.15")
35
+ s.add_development_dependency("mocha", "~> 1.14")
36
+ s.add_development_dependency("redis-namespace", "~> 1.8")
37
+ s.add_development_dependency("rack", "~> 2.2")
38
+ s.add_development_dependency("rack-test", "~> 1.1")
39
39
  s.add_development_dependency("rake", "~> 13.0")
40
- s.add_development_dependency("simplecov")
40
+ s.add_development_dependency("simplecov", "~> 0.21")
41
41
  end
@@ -1030,6 +1030,16 @@ describe "Cron Job" do
1030
1030
  assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 jobs after load"
1031
1031
  end
1032
1032
 
1033
+ it "duplicate jobs are not loaded" do
1034
+ out = Sidekiq::Cron::Job.load_from_hash @jobs_hash
1035
+ assert_equal out.size, 0, "should have no errors"
1036
+ assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 jobs after load"
1037
+
1038
+ out_2 = Sidekiq::Cron::Job.load_from_hash @jobs_hash
1039
+ assert_equal out_2.size, 0, "should have no errors"
1040
+ assert_equal Sidekiq::Cron::Job.all.size, 2, "Should have 2 jobs after loading again"
1041
+ end
1042
+
1033
1043
  it "return errors on loaded jobs" do
1034
1044
  assert_equal Sidekiq::Cron::Job.all.size, 0, "Should have 0 jobs before load"
1035
1045
  #set something bag to hash
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-cron
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ondrej Bartas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-28 00:00:00.000000000 Z
11
+ date: 2022-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fugit
@@ -42,72 +42,72 @@ dependencies:
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '5.15'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '5.15'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mocha
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.14'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.14'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: redis-namespace
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.5.2
75
+ version: '1.8'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.5.2
82
+ version: '1.8'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rack
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '2.0'
89
+ version: '2.2'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '2.0'
96
+ version: '2.2'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rack-test
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.0'
103
+ version: '1.1'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.0'
110
+ version: '1.1'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -126,16 +126,16 @@ dependencies:
126
126
  name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '0.21'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '0.21'
139
139
  description: Enables to set jobs to be run in specified time (using CRON notation)
140
140
  email: ondrej@bartas.cz
141
141
  executables: []
@@ -144,7 +144,7 @@ extra_rdoc_files:
144
144
  - LICENSE.txt
145
145
  - README.md
146
146
  files:
147
- - Changes.md
147
+ - CHANGELOG.md
148
148
  - Gemfile
149
149
  - LICENSE.txt
150
150
  - README.md
@@ -156,9 +156,11 @@ files:
156
156
  - lib/sidekiq/cron/locales/de.yml
157
157
  - lib/sidekiq/cron/locales/en.yml
158
158
  - lib/sidekiq/cron/locales/ja.yml
159
+ - lib/sidekiq/cron/locales/pt.yml
159
160
  - lib/sidekiq/cron/locales/ru.yml
160
161
  - lib/sidekiq/cron/locales/zh-CN.yml
161
162
  - lib/sidekiq/cron/poller.rb
163
+ - lib/sidekiq/cron/schedule_loader.rb
162
164
  - lib/sidekiq/cron/support.rb
163
165
  - lib/sidekiq/cron/version.rb
164
166
  - lib/sidekiq/cron/views/cron.erb
@@ -183,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
185
  requirements:
184
186
  - - ">="
185
187
  - !ruby/object:Gem::Version
186
- version: '2.5'
188
+ version: '2.6'
187
189
  required_rubygems_version: !ruby/object:Gem::Requirement
188
190
  requirements:
189
191
  - - ">="