maintenance_tasks 2.10.1 → 2.13.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/README.md +160 -45
- data/app/controllers/maintenance_tasks/application_controller.rb +15 -5
- data/app/helpers/maintenance_tasks/application_helper.rb +1 -1
- data/app/helpers/maintenance_tasks/tasks_helper.rb +28 -11
- data/app/jobs/concerns/maintenance_tasks/task_job_concern.rb +33 -4
- data/app/models/maintenance_tasks/run.rb +103 -71
- data/app/models/maintenance_tasks/task.rb +42 -0
- data/app/models/maintenance_tasks/task_data_index.rb +2 -1
- data/app/views/layouts/maintenance_tasks/_navbar.html.erb +1 -1
- data/app/views/layouts/maintenance_tasks/application.html.erb +35 -4
- data/app/views/maintenance_tasks/runs/_arguments.html.erb +1 -1
- data/app/views/maintenance_tasks/runs/_run.html.erb +14 -8
- data/app/views/maintenance_tasks/runs/_serializable.html.erb +15 -18
- data/app/views/maintenance_tasks/tasks/_task.html.erb +5 -5
- data/app/views/maintenance_tasks/tasks/index.html.erb +6 -4
- data/app/views/maintenance_tasks/tasks/show.html.erb +16 -12
- data/db/migrate/20201211151756_create_maintenance_tasks_runs.rb +10 -2
- data/db/migrate/20210219212931_change_cursor_to_string.rb +1 -1
- data/db/migrate/20210225152418_remove_index_on_task_name.rb +1 -1
- data/db/migrate/20210517131953_add_arguments_to_maintenance_tasks_runs.rb +1 -1
- data/db/migrate/20211210152329_add_lock_version_to_maintenance_tasks_runs.rb +1 -1
- data/db/migrate/20220706101937_change_runs_tick_columns_to_bigints.rb +1 -1
- data/db/migrate/20220713131925_add_index_on_task_name_and_status_to_runs.rb +1 -1
- data/db/migrate/20230622035229_add_metadata_to_runs.rb +1 -1
- data/lib/maintenance_tasks/engine.rb +4 -0
- data/lib/maintenance_tasks.rb +50 -12
- metadata +13 -15
- data/lib/patches/active_record_batch_enumerator.rb +0 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
class ChangeRunsTickColumnsToBigints < ActiveRecord::Migration[
|
|
3
|
+
class ChangeRunsTickColumnsToBigints < ActiveRecord::Migration[7.0]
|
|
4
4
|
def up
|
|
5
5
|
change_table(:maintenance_tasks_runs, bulk: true) do |t|
|
|
6
6
|
t.change(:tick_count, :bigint)
|
|
@@ -21,6 +21,10 @@ module MaintenanceTasks
|
|
|
21
21
|
MaintenanceTasks.backtrace_cleaner = Rails.backtrace_cleaner
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
+
initializer "maintenance_tasks.deprecator" do
|
|
25
|
+
Rails.application.deprecators[:maintenance_tasks] = MaintenanceTasks.deprecator
|
|
26
|
+
end
|
|
27
|
+
|
|
24
28
|
config.to_prepare do
|
|
25
29
|
_ = TaskJobConcern # load this for JobIteration compatibility check
|
|
26
30
|
end
|
data/lib/maintenance_tasks.rb
CHANGED
|
@@ -8,8 +8,6 @@ require "active_record"
|
|
|
8
8
|
require "job-iteration"
|
|
9
9
|
require "maintenance_tasks/engine"
|
|
10
10
|
|
|
11
|
-
require "patches/active_record_batch_enumerator"
|
|
12
|
-
|
|
13
11
|
# The engine's namespace module. It provides isolation between the host
|
|
14
12
|
# application's code and the engine-specific code. Top-level engine constants
|
|
15
13
|
# and variables are defined under this module.
|
|
@@ -63,16 +61,6 @@ module MaintenanceTasks
|
|
|
63
61
|
# use when cleaning a Run's backtrace.
|
|
64
62
|
mattr_accessor :backtrace_cleaner
|
|
65
63
|
|
|
66
|
-
# @!attribute error_handler
|
|
67
|
-
# @scope class
|
|
68
|
-
#
|
|
69
|
-
# The callback to perform when an error occurs in the Task. See the
|
|
70
|
-
# {file:README#label-Customizing+the+error+handler} for details.
|
|
71
|
-
#
|
|
72
|
-
# @return [Proc] the callback to perform when an error occurs in the Task.
|
|
73
|
-
mattr_accessor :error_handler, default:
|
|
74
|
-
->(_error, _task_context, _errored_element) {}
|
|
75
|
-
|
|
76
64
|
# @!attribute parent_controller
|
|
77
65
|
# @scope class
|
|
78
66
|
#
|
|
@@ -96,4 +84,54 @@ module MaintenanceTasks
|
|
|
96
84
|
#
|
|
97
85
|
# @return [ActiveSupport::Duration] the threshold in seconds after which a task is considered stuck.
|
|
98
86
|
mattr_accessor :stuck_task_duration, default: 5.minutes
|
|
87
|
+
|
|
88
|
+
# @!attribute status_reload_frequency
|
|
89
|
+
# @scope class
|
|
90
|
+
# The frequency at which to reload the run status during iteration.
|
|
91
|
+
# Defaults to 1 second, meaning reload status every second.
|
|
92
|
+
#
|
|
93
|
+
# @return [ActiveSupport::Duration, Numeric] the time interval between status reloads.
|
|
94
|
+
mattr_accessor :status_reload_frequency, default: 1.second
|
|
95
|
+
|
|
96
|
+
# @!attribute report_errors_as_handled
|
|
97
|
+
# @scope class
|
|
98
|
+
# How unexpected errors are reported to Rails.error.report.
|
|
99
|
+
#
|
|
100
|
+
# When an error occurs that isn't explicitly handled (e.g., via `report_on`),
|
|
101
|
+
# it gets reported to Rails.error.report. This setting determines whether
|
|
102
|
+
# these errors are marked as "handled" or "unhandled".
|
|
103
|
+
#
|
|
104
|
+
# The current default of `true` is for backwards compatibility, but it prevents
|
|
105
|
+
# error subscribers from distinguishing between expected and unexpected errors.
|
|
106
|
+
# Setting this to `false` provides more accurate error reporting and will become the default in v3.0.
|
|
107
|
+
#
|
|
108
|
+
# @see https://api.rubyonrails.org/classes/ActiveSupport/ErrorReporter.html#method-i-report
|
|
109
|
+
# @return [Boolean] whether to report unexpected errors as handled (true) or unhandled (false).
|
|
110
|
+
mattr_accessor :report_errors_as_handled, default: true
|
|
111
|
+
|
|
112
|
+
class << self
|
|
113
|
+
DEPRECATION_MESSAGE = "MaintenanceTasks.error_handler is deprecated and will be removed in the 3.0 release. " \
|
|
114
|
+
"Instead, reports will be sent to the Rails error reporter. Do not set a handler and subscribe " \
|
|
115
|
+
"to the error reporter instead."
|
|
116
|
+
private_constant :DEPRECATION_MESSAGE
|
|
117
|
+
|
|
118
|
+
# @deprecated
|
|
119
|
+
def error_handler
|
|
120
|
+
deprecator.warn(DEPRECATION_MESSAGE)
|
|
121
|
+
|
|
122
|
+
@error_handler
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# @deprecated
|
|
126
|
+
def error_handler=(proc)
|
|
127
|
+
deprecator.warn(DEPRECATION_MESSAGE)
|
|
128
|
+
|
|
129
|
+
@error_handler = proc
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# @api-private
|
|
133
|
+
def deprecator
|
|
134
|
+
@deprecator ||= ActiveSupport::Deprecation.new("3.0", "MaintenanceTasks")
|
|
135
|
+
end
|
|
136
|
+
end
|
|
99
137
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: maintenance_tasks
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.13.0
|
|
5
5
|
platform: ruby
|
|
6
|
-
original_platform: ''
|
|
7
6
|
authors:
|
|
8
7
|
- Shopify Engineering
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: actionpack
|
|
@@ -16,42 +15,42 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '7.1'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '7.1'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
27
|
name: activejob
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
30
|
- - ">="
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
32
|
+
version: '7.1'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - ">="
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
39
|
+
version: '7.1'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
41
|
name: activerecord
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
44
|
- - ">="
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
46
|
+
version: '7.1'
|
|
48
47
|
type: :runtime
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - ">="
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
53
|
+
version: '7.1'
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
56
55
|
name: csv
|
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -86,14 +85,14 @@ dependencies:
|
|
|
86
85
|
requirements:
|
|
87
86
|
- - ">="
|
|
88
87
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
88
|
+
version: '7.1'
|
|
90
89
|
type: :runtime
|
|
91
90
|
prerelease: false
|
|
92
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
92
|
requirements:
|
|
94
93
|
- - ">="
|
|
95
94
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
95
|
+
version: '7.1'
|
|
97
96
|
- !ruby/object:Gem::Dependency
|
|
98
97
|
name: zeitwerk
|
|
99
98
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,13 +177,12 @@ files:
|
|
|
178
177
|
- lib/maintenance_tasks.rb
|
|
179
178
|
- lib/maintenance_tasks/cli.rb
|
|
180
179
|
- lib/maintenance_tasks/engine.rb
|
|
181
|
-
- lib/patches/active_record_batch_enumerator.rb
|
|
182
180
|
- lib/tasks/maintenance_tasks_tasks.rake
|
|
183
181
|
homepage: https://github.com/Shopify/maintenance_tasks
|
|
184
182
|
licenses:
|
|
185
183
|
- MIT
|
|
186
184
|
metadata:
|
|
187
|
-
source_code_uri: https://github.com/Shopify/maintenance_tasks/tree/v2.
|
|
185
|
+
source_code_uri: https://github.com/Shopify/maintenance_tasks/tree/v2.13.0
|
|
188
186
|
allowed_push_host: https://rubygems.org
|
|
189
187
|
rdoc_options: []
|
|
190
188
|
require_paths:
|
|
@@ -193,14 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
193
191
|
requirements:
|
|
194
192
|
- - ">="
|
|
195
193
|
- !ruby/object:Gem::Version
|
|
196
|
-
version: '3.
|
|
194
|
+
version: '3.2'
|
|
197
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
198
196
|
requirements:
|
|
199
197
|
- - ">="
|
|
200
198
|
- !ruby/object:Gem::Version
|
|
201
199
|
version: '0'
|
|
202
200
|
requirements: []
|
|
203
|
-
rubygems_version: 3.
|
|
201
|
+
rubygems_version: 3.7.2
|
|
204
202
|
specification_version: 4
|
|
205
203
|
summary: A Rails engine for queuing and managing maintenance tasks
|
|
206
204
|
test_files: []
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
if Rails.gem_version < Gem::Version.new("7.0")
|
|
4
|
-
# Add attribute readers.
|
|
5
|
-
module ActiveRecordBatchEnumerator
|
|
6
|
-
# The primary key value from which the BatchEnumerator starts,
|
|
7
|
-
# inclusive of the value.
|
|
8
|
-
attr_reader :start
|
|
9
|
-
|
|
10
|
-
# The primary key value at which the BatchEnumerator ends,
|
|
11
|
-
# inclusive of the value.
|
|
12
|
-
attr_reader :finish
|
|
13
|
-
|
|
14
|
-
# The relation from which the BatchEnumerator yields batches.
|
|
15
|
-
attr_reader :relation
|
|
16
|
-
|
|
17
|
-
# The size of the batches yielded by the BatchEnumerator.
|
|
18
|
-
def batch_size
|
|
19
|
-
@of
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
ActiveRecord::Batches::BatchEnumerator.include(ActiveRecordBatchEnumerator)
|
|
24
|
-
end
|