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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +160 -45
  3. data/app/controllers/maintenance_tasks/application_controller.rb +15 -5
  4. data/app/helpers/maintenance_tasks/application_helper.rb +1 -1
  5. data/app/helpers/maintenance_tasks/tasks_helper.rb +28 -11
  6. data/app/jobs/concerns/maintenance_tasks/task_job_concern.rb +33 -4
  7. data/app/models/maintenance_tasks/run.rb +103 -71
  8. data/app/models/maintenance_tasks/task.rb +42 -0
  9. data/app/models/maintenance_tasks/task_data_index.rb +2 -1
  10. data/app/views/layouts/maintenance_tasks/_navbar.html.erb +1 -1
  11. data/app/views/layouts/maintenance_tasks/application.html.erb +35 -4
  12. data/app/views/maintenance_tasks/runs/_arguments.html.erb +1 -1
  13. data/app/views/maintenance_tasks/runs/_run.html.erb +14 -8
  14. data/app/views/maintenance_tasks/runs/_serializable.html.erb +15 -18
  15. data/app/views/maintenance_tasks/tasks/_task.html.erb +5 -5
  16. data/app/views/maintenance_tasks/tasks/index.html.erb +6 -4
  17. data/app/views/maintenance_tasks/tasks/show.html.erb +16 -12
  18. data/db/migrate/20201211151756_create_maintenance_tasks_runs.rb +10 -2
  19. data/db/migrate/20210219212931_change_cursor_to_string.rb +1 -1
  20. data/db/migrate/20210225152418_remove_index_on_task_name.rb +1 -1
  21. data/db/migrate/20210517131953_add_arguments_to_maintenance_tasks_runs.rb +1 -1
  22. data/db/migrate/20211210152329_add_lock_version_to_maintenance_tasks_runs.rb +1 -1
  23. data/db/migrate/20220706101937_change_runs_tick_columns_to_bigints.rb +1 -1
  24. data/db/migrate/20220713131925_add_index_on_task_name_and_status_to_runs.rb +1 -1
  25. data/db/migrate/20230622035229_add_metadata_to_runs.rb +1 -1
  26. data/lib/maintenance_tasks/engine.rb +4 -0
  27. data/lib/maintenance_tasks.rb +50 -12
  28. metadata +13 -15
  29. data/lib/patches/active_record_batch_enumerator.rb +0 -24
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class AddArgumentsToMaintenanceTasksRuns < ActiveRecord::Migration[6.0]
3
+ class AddArgumentsToMaintenanceTasksRuns < ActiveRecord::Migration[7.0]
4
4
  def change
5
5
  add_column(:maintenance_tasks_runs, :arguments, :text)
6
6
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class AddLockVersionToMaintenanceTasksRuns < ActiveRecord::Migration[6.0]
3
+ class AddLockVersionToMaintenanceTasksRuns < ActiveRecord::Migration[7.0]
4
4
  def change
5
5
  add_column(
6
6
  :maintenance_tasks_runs,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class ChangeRunsTickColumnsToBigints < ActiveRecord::Migration[6.0]
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)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class AddIndexOnTaskNameAndStatusToRuns < ActiveRecord::Migration[6.0]
3
+ class AddIndexOnTaskNameAndStatusToRuns < ActiveRecord::Migration[7.0]
4
4
  def change
5
5
  remove_index(
6
6
  :maintenance_tasks_runs,
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class AddMetadataToRuns < ActiveRecord::Migration[6.0]
3
+ class AddMetadataToRuns < ActiveRecord::Migration[7.0]
4
4
  def change
5
5
  add_column(:maintenance_tasks_runs, :metadata, :text)
6
6
  end
@@ -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
@@ -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.10.1
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: 2024-12-18 00:00:00.000000000 Z
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: '6.1'
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: '6.1'
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: '6.1'
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: '6.1'
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: '6.1'
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: '6.1'
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: '6.1'
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: '6.1'
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.10.1
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.1'
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.6.1
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