good_job 3.17.3 → 3.18.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 +4 -4
- data/CHANGELOG.md +20 -0
- data/README.md +4 -0
- data/app/models/good_job/base_record.rb +1 -1
- data/app/models/good_job/cron_entry.rb +25 -19
- data/lib/good_job/cron_manager.rb +4 -3
- data/lib/good_job/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cb40c03312f09c2cb91e77bce2ab3aacf87c62a18125d62b50bdc92b312d34f5
|
|
4
|
+
data.tar.gz: c1c73c9264b8bd6454aad7685d326d082c00d5c3f14667ab89e1f77cce9059ea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9825b6d3c5a496c7fdee3aec3f0b5653a6c68d40b15487bb43d21b48817ae077052b3c3520b6ac0dd54354cc68b1157800270e95119240260ef68ab55046b293
|
|
7
|
+
data.tar.gz: a903a5cac7a8b753e457d7e98018ca575825dcb1be515702cd30bd92494f3fc22740e09e48c4b3a8312fae2824021e86d6f6d9e431d0b10f39c05ea97457baca
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v3.18.0](https://github.com/bensheldon/good_job/tree/v3.18.0) (2023-08-30)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.17.4...v3.18.0)
|
|
6
|
+
|
|
7
|
+
**Implemented enhancements:**
|
|
8
|
+
|
|
9
|
+
- Support configuring cron schedule dynamically with a block [\#1051](https://github.com/bensheldon/good_job/pull/1051) ([DanielHeath](https://github.com/DanielHeath))
|
|
10
|
+
|
|
11
|
+
## [v3.17.4](https://github.com/bensheldon/good_job/tree/v3.17.4) (2023-08-24)
|
|
12
|
+
|
|
13
|
+
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.17.3...v3.17.4)
|
|
14
|
+
|
|
15
|
+
**Fixed bugs:**
|
|
16
|
+
|
|
17
|
+
- Handle edge case of logger not responding to silence [\#1049](https://github.com/bensheldon/good_job/pull/1049) ([bensheldon](https://github.com/bensheldon))
|
|
18
|
+
|
|
19
|
+
**Closed issues:**
|
|
20
|
+
|
|
21
|
+
- An idea for better .silence handling [\#1046](https://github.com/bensheldon/good_job/issues/1046)
|
|
22
|
+
|
|
3
23
|
## [v3.17.3](https://github.com/bensheldon/good_job/tree/v3.17.3) (2023-08-19)
|
|
4
24
|
|
|
5
25
|
[Full Changelog](https://github.com/bensheldon/good_job/compare/v3.17.2...v3.17.3)
|
data/README.md
CHANGED
|
@@ -504,6 +504,10 @@ config.good_job.cron = {
|
|
|
504
504
|
cron: "0 0,12 * * *",
|
|
505
505
|
class: "AnotherJob",
|
|
506
506
|
},
|
|
507
|
+
complex_schedule: {
|
|
508
|
+
class: "ComplexScheduleJob",
|
|
509
|
+
cron: -> (last_ran) { (last_ran.blank? ? Time.now : last_ran + 14.hours).at_beginning_of_minute }
|
|
510
|
+
}
|
|
507
511
|
# etc.
|
|
508
512
|
}
|
|
509
513
|
```
|
|
@@ -33,7 +33,7 @@ module GoodJob
|
|
|
33
33
|
def self.with_logger_silenced(&block)
|
|
34
34
|
# Assign to a local variable, just in case it's modified in another thread concurrently
|
|
35
35
|
logger = self.logger
|
|
36
|
-
if logger
|
|
36
|
+
if logger.respond_to? :silence
|
|
37
37
|
logger.silence(&block)
|
|
38
38
|
else
|
|
39
39
|
yield
|
|
@@ -27,6 +27,7 @@ module GoodJob # :nodoc:
|
|
|
27
27
|
def initialize(params = {})
|
|
28
28
|
@params = params
|
|
29
29
|
|
|
30
|
+
return if cron_proc?
|
|
30
31
|
raise ArgumentError, "Invalid cron format: '#{cron}'" unless fugit.instance_of?(Fugit::Cron)
|
|
31
32
|
end
|
|
32
33
|
|
|
@@ -41,10 +42,6 @@ module GoodJob # :nodoc:
|
|
|
41
42
|
params.fetch(:class)
|
|
42
43
|
end
|
|
43
44
|
|
|
44
|
-
def cron
|
|
45
|
-
params.fetch(:cron)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
45
|
def set
|
|
49
46
|
params[:set]
|
|
50
47
|
end
|
|
@@ -61,16 +58,21 @@ module GoodJob # :nodoc:
|
|
|
61
58
|
params[:description]
|
|
62
59
|
end
|
|
63
60
|
|
|
64
|
-
def next_at
|
|
61
|
+
def next_at(previously_at: nil)
|
|
62
|
+
if cron_proc?
|
|
63
|
+
result = Rails.application.executor.wrap { cron.call(previously_at || last_at) }
|
|
64
|
+
return Fugit.parse(result).next_time.to_t if result.is_a?(String)
|
|
65
|
+
|
|
66
|
+
return result
|
|
67
|
+
|
|
68
|
+
end
|
|
65
69
|
fugit.next_time.to_t
|
|
66
70
|
end
|
|
67
71
|
|
|
68
72
|
def schedule
|
|
69
|
-
|
|
70
|
-
end
|
|
73
|
+
return "Custom schedule" if cron_proc?
|
|
71
74
|
|
|
72
|
-
|
|
73
|
-
@_fugit ||= Fugit.parse(cron)
|
|
75
|
+
fugit.original
|
|
74
76
|
end
|
|
75
77
|
|
|
76
78
|
def jobs
|
|
@@ -80,11 +82,7 @@ module GoodJob # :nodoc:
|
|
|
80
82
|
def last_at
|
|
81
83
|
return if last_job.blank?
|
|
82
84
|
|
|
83
|
-
|
|
84
|
-
(last_job.cron_at || last_job.created_at).localtime
|
|
85
|
-
else
|
|
86
|
-
last_job.created_at
|
|
87
|
-
end
|
|
85
|
+
(last_job.cron_at || last_job.created_at).localtime
|
|
88
86
|
end
|
|
89
87
|
|
|
90
88
|
def enabled?
|
|
@@ -116,11 +114,7 @@ module GoodJob # :nodoc:
|
|
|
116
114
|
end
|
|
117
115
|
|
|
118
116
|
def last_job
|
|
119
|
-
|
|
120
|
-
jobs.order("cron_at DESC NULLS LAST").first
|
|
121
|
-
else
|
|
122
|
-
jobs.order(created_at: :asc).last
|
|
123
|
-
end
|
|
117
|
+
jobs.order("cron_at DESC NULLS LAST").first
|
|
124
118
|
end
|
|
125
119
|
|
|
126
120
|
def display_properties
|
|
@@ -138,6 +132,18 @@ module GoodJob # :nodoc:
|
|
|
138
132
|
|
|
139
133
|
private
|
|
140
134
|
|
|
135
|
+
def cron
|
|
136
|
+
params.fetch(:cron)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def cron_proc?
|
|
140
|
+
cron.respond_to?(:call)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def fugit
|
|
144
|
+
@_fugit ||= Fugit.parse(cron)
|
|
145
|
+
end
|
|
146
|
+
|
|
141
147
|
def set_value
|
|
142
148
|
value = set || {}
|
|
143
149
|
value.respond_to?(:call) ? value.call : value
|
|
@@ -82,12 +82,13 @@ module GoodJob # :nodoc:
|
|
|
82
82
|
|
|
83
83
|
# Enqueues a scheduled task
|
|
84
84
|
# @param cron_entry [CronEntry] the CronEntry object to schedule
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
# @param previously_at [Date, Time, ActiveSupport::TimeWithZone, nil] the last, +in-memory+, scheduled time the cron task was intended to run
|
|
86
|
+
def create_task(cron_entry, previously_at: nil)
|
|
87
|
+
cron_at = cron_entry.next_at(previously_at: previously_at)
|
|
87
88
|
delay = [(cron_at - Time.current).to_f, 0].max
|
|
88
89
|
future = Concurrent::ScheduledTask.new(delay, args: [self, cron_entry, cron_at], executor: @executor) do |thr_scheduler, thr_cron_entry, thr_cron_at|
|
|
89
90
|
# Re-schedule the next cron task before executing the current task
|
|
90
|
-
thr_scheduler.create_task(thr_cron_entry)
|
|
91
|
+
thr_scheduler.create_task(thr_cron_entry, previously_at: thr_cron_at)
|
|
91
92
|
|
|
92
93
|
Rails.application.executor.wrap do
|
|
93
94
|
cron_entry.enqueue(thr_cron_at) if thr_cron_entry.enabled?
|
data/lib/good_job/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: good_job
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.18.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ben Sheldon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-08-
|
|
11
|
+
date: 2023-08-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activejob
|