good_job 2.1.0 → 2.2.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 +29 -1
- data/README.md +32 -0
- data/engine/app/assets/vendor/bootstrap/bootstrap.bundle.min.js +2 -2
- data/engine/app/assets/vendor/bootstrap/bootstrap.min.css +2 -2
- data/engine/app/controllers/good_job/active_jobs_controller.rb +3 -2
- data/engine/app/controllers/good_job/cron_schedules_controller.rb +10 -0
- data/engine/app/controllers/good_job/dashboards_controller.rb +17 -16
- data/engine/app/controllers/good_job/executions_controller.rb +10 -0
- data/engine/app/views/good_job/active_jobs/show.html.erb +3 -1
- data/engine/app/views/good_job/cron_schedules/index.html.erb +28 -0
- data/engine/app/views/good_job/dashboards/index.html.erb +5 -5
- data/engine/app/views/good_job/shared/_executions_table.erb +56 -0
- data/engine/app/views/layouts/good_job/base.html.erb +9 -3
- data/engine/config/routes.rb +2 -1
- data/lib/good_job/active_job_extensions/concurrency.rb +6 -6
- data/lib/good_job/adapter.rb +8 -8
- data/lib/good_job/cron_manager.rb +3 -3
- data/lib/good_job/{current_execution.rb → current_thread.rb} +8 -8
- data/lib/good_job/execution.rb +308 -0
- data/lib/good_job/job.rb +6 -294
- data/lib/good_job/job_performer.rb +2 -2
- data/lib/good_job/log_subscriber.rb +4 -4
- data/lib/good_job/notifier.rb +3 -3
- data/lib/good_job/railtie.rb +2 -2
- data/lib/good_job/scheduler.rb +2 -2
- data/lib/good_job/version.rb +1 -1
- data/lib/good_job.rb +2 -2
- metadata +8 -5
- data/engine/app/controllers/good_job/jobs_controller.rb +0 -10
- data/engine/app/views/good_job/shared/_jobs_table.erb +0 -48
@@ -14,8 +14,8 @@ module GoodJob
|
|
14
14
|
def initialize(queue_string)
|
15
15
|
@queue_string = queue_string
|
16
16
|
|
17
|
-
@job_query = Concurrent::Delay.new { GoodJob::
|
18
|
-
@parsed_queues = Concurrent::Delay.new { GoodJob::
|
17
|
+
@job_query = Concurrent::Delay.new { GoodJob::Execution.queue_string(queue_string) }
|
18
|
+
@parsed_queues = Concurrent::Delay.new { GoodJob::Execution.queue_parser(queue_string) }
|
19
19
|
end
|
20
20
|
|
21
21
|
# A meaningful name to identify the performer in logs and for debugging.
|
@@ -19,10 +19,10 @@ module GoodJob
|
|
19
19
|
# @return [void]
|
20
20
|
def create(event)
|
21
21
|
# FIXME: This method does not match any good_job notifications.
|
22
|
-
|
22
|
+
execution = event.payload[:execution]
|
23
23
|
|
24
24
|
debug do
|
25
|
-
"GoodJob created job resource with id #{
|
25
|
+
"GoodJob created job resource with id #{execution.id}"
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -96,12 +96,12 @@ module GoodJob
|
|
96
96
|
|
97
97
|
# @!macro notification_responder
|
98
98
|
def perform_job(event)
|
99
|
-
|
99
|
+
execution = event.payload[:execution]
|
100
100
|
process_id = event.payload[:process_id]
|
101
101
|
thread_name = event.payload[:thread_name]
|
102
102
|
|
103
103
|
info(tags: [process_id, thread_name]) do
|
104
|
-
"Executed GoodJob #{
|
104
|
+
"Executed GoodJob #{execution.id}"
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
data/lib/good_job/notifier.rb
CHANGED
@@ -39,7 +39,7 @@ module GoodJob # :nodoc:
|
|
39
39
|
# Send a message via Postgres NOTIFY
|
40
40
|
# @param message [#to_json]
|
41
41
|
def self.notify(message)
|
42
|
-
connection =
|
42
|
+
connection = Execution.connection
|
43
43
|
connection.exec_query <<~SQL.squish
|
44
44
|
NOTIFY #{CHANNEL}, #{connection.quote(message.to_json)}
|
45
45
|
SQL
|
@@ -169,8 +169,8 @@ module GoodJob # :nodoc:
|
|
169
169
|
end
|
170
170
|
|
171
171
|
def with_listen_connection
|
172
|
-
ar_conn =
|
173
|
-
|
172
|
+
ar_conn = Execution.connection_pool.checkout.tap do |conn|
|
173
|
+
Execution.connection_pool.remove(conn)
|
174
174
|
end
|
175
175
|
pg_conn = ar_conn.raw_connection
|
176
176
|
raise AdapterCannotListenError unless pg_conn.respond_to? :wait_for_notify
|
data/lib/good_job/railtie.rb
CHANGED
@@ -14,11 +14,11 @@ module GoodJob
|
|
14
14
|
|
15
15
|
initializer "good_job.active_job_notifications" do
|
16
16
|
ActiveSupport::Notifications.subscribe "enqueue_retry.active_job" do |event|
|
17
|
-
GoodJob::
|
17
|
+
GoodJob::CurrentThread.error_on_retry = event.payload[:error]
|
18
18
|
end
|
19
19
|
|
20
20
|
ActiveSupport::Notifications.subscribe "discard.active_job" do |event|
|
21
|
-
GoodJob::
|
21
|
+
GoodJob::CurrentThread.error_on_discard = event.payload[:error]
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
data/lib/good_job/scheduler.rb
CHANGED
@@ -244,8 +244,8 @@ module GoodJob # :nodoc:
|
|
244
244
|
def instrument(name, payload = {}, &block)
|
245
245
|
payload = payload.reverse_merge({
|
246
246
|
scheduler: self,
|
247
|
-
process_id: GoodJob::
|
248
|
-
thread_name: GoodJob::
|
247
|
+
process_id: GoodJob::CurrentThread.process_id,
|
248
|
+
thread_name: GoodJob::CurrentThread.thread_name,
|
249
249
|
})
|
250
250
|
|
251
251
|
ActiveSupport::Notifications.instrument("#{name}.good_job", payload, &block)
|
data/lib/good_job/version.rb
CHANGED
data/lib/good_job.rb
CHANGED
@@ -20,7 +20,7 @@ require "good_job/railtie"
|
|
20
20
|
module GoodJob
|
21
21
|
# @!attribute [rw] active_record_parent_class
|
22
22
|
# @!scope class
|
23
|
-
# The ActiveRecord parent class inherited by +GoodJob::
|
23
|
+
# The ActiveRecord parent class inherited by +GoodJob::Execution+ (default: +ActiveRecord::Base+).
|
24
24
|
# Use this when using multiple databases or other custom ActiveRecord configuration.
|
25
25
|
# @return [ActiveRecord::Base]
|
26
26
|
# @example Change the base class:
|
@@ -129,7 +129,7 @@ module GoodJob
|
|
129
129
|
timestamp = Time.current - older_than
|
130
130
|
|
131
131
|
ActiveSupport::Notifications.instrument("cleanup_preserved_jobs.good_job", { older_than: older_than, timestamp: timestamp }) do |payload|
|
132
|
-
deleted_records_count = GoodJob::
|
132
|
+
deleted_records_count = GoodJob::Execution.finished(timestamp).delete_all
|
133
133
|
|
134
134
|
payload[:deleted_records_count] = deleted_records_count
|
135
135
|
end
|
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: 2.
|
4
|
+
version: 2.2.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: 2021-09-
|
11
|
+
date: 2021-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activejob
|
@@ -354,13 +354,15 @@ files:
|
|
354
354
|
- engine/app/controllers/good_job/active_jobs_controller.rb
|
355
355
|
- engine/app/controllers/good_job/assets_controller.rb
|
356
356
|
- engine/app/controllers/good_job/base_controller.rb
|
357
|
+
- engine/app/controllers/good_job/cron_schedules_controller.rb
|
357
358
|
- engine/app/controllers/good_job/dashboards_controller.rb
|
358
|
-
- engine/app/controllers/good_job/
|
359
|
+
- engine/app/controllers/good_job/executions_controller.rb
|
359
360
|
- engine/app/helpers/good_job/application_helper.rb
|
360
361
|
- engine/app/views/good_job/active_jobs/show.html.erb
|
362
|
+
- engine/app/views/good_job/cron_schedules/index.html.erb
|
361
363
|
- engine/app/views/good_job/dashboards/index.html.erb
|
362
364
|
- engine/app/views/good_job/shared/_chart.erb
|
363
|
-
- engine/app/views/good_job/shared/
|
365
|
+
- engine/app/views/good_job/shared/_executions_table.erb
|
364
366
|
- engine/app/views/good_job/shared/icons/_check.html.erb
|
365
367
|
- engine/app/views/good_job/shared/icons/_exclamation.html.erb
|
366
368
|
- engine/app/views/good_job/shared/icons/_trash.html.erb
|
@@ -380,8 +382,9 @@ files:
|
|
380
382
|
- lib/good_job/cli.rb
|
381
383
|
- lib/good_job/configuration.rb
|
382
384
|
- lib/good_job/cron_manager.rb
|
383
|
-
- lib/good_job/
|
385
|
+
- lib/good_job/current_thread.rb
|
384
386
|
- lib/good_job/daemon.rb
|
387
|
+
- lib/good_job/execution.rb
|
385
388
|
- lib/good_job/execution_result.rb
|
386
389
|
- lib/good_job/job.rb
|
387
390
|
- lib/good_job/job_performer.rb
|
@@ -1,10 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module GoodJob
|
3
|
-
class JobsController < GoodJob::BaseController
|
4
|
-
def destroy
|
5
|
-
deleted_count = GoodJob::Job.where(id: params[:id]).delete_all
|
6
|
-
message = deleted_count.positive? ? { notice: "Job deleted" } : { alert: "Job not deleted" }
|
7
|
-
redirect_to root_path, **message
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
<div class="card my-3">
|
2
|
-
<div class="table-responsive">
|
3
|
-
<table class="table card-table table-bordered table-hover table-sm mb-0">
|
4
|
-
<thead>
|
5
|
-
<tr>
|
6
|
-
<th>GoodJob ID</th>
|
7
|
-
<th>ActiveJob ID</th>
|
8
|
-
<th>Job Class</th>
|
9
|
-
<th>Queue</th>
|
10
|
-
<th>Scheduled At</th>
|
11
|
-
<th>Error</th>
|
12
|
-
<th>
|
13
|
-
ActiveJob Params
|
14
|
-
<%= tag.button "Toggle", type: "button", class: "btn btn-sm btn-outline-primary", role: "button",
|
15
|
-
data: { bs_toggle: "collapse", bs_target: ".job-params" },
|
16
|
-
aria: { expanded: false, controls: jobs.map { |job| "##{dom_id(job, "params")}" }.join(" ") }
|
17
|
-
%>
|
18
|
-
</th>
|
19
|
-
<th>Actions</th>
|
20
|
-
</tr>
|
21
|
-
</thead>
|
22
|
-
<tbody>
|
23
|
-
<% jobs.each do |job| %>
|
24
|
-
<tr id="<%= dom_id(job) %>">
|
25
|
-
<td><%= link_to job.id, active_job_path(job.serialized_params['job_id'], anchor: dom_id(job)) %></td>
|
26
|
-
<td><%= link_to job.serialized_params['job_id'], active_job_path(job.serialized_params['job_id']) %></td>
|
27
|
-
<td><%= job.serialized_params['job_class'] %></td>
|
28
|
-
<td><%= job.queue_name %></td>
|
29
|
-
<td><%= job.scheduled_at || job.created_at %></td>
|
30
|
-
<td class="text-break"><%= truncate(job.error, length: 1_000) %></td>
|
31
|
-
<td>
|
32
|
-
<%= tag.button "Preview", type: "button", class: "btn btn-sm btn-outline-primary", role: "button",
|
33
|
-
data: { bs_toggle: "collapse", bs_target: "##{dom_id(job, 'params')}" },
|
34
|
-
aria: { expanded: false, controls: dom_id(job, "params") }
|
35
|
-
%>
|
36
|
-
<%= tag.pre JSON.pretty_generate(job.serialized_params), id: dom_id(job, "params"), class: "collapse job-params" %>
|
37
|
-
</td>
|
38
|
-
<td>
|
39
|
-
<%= button_to job_path(job.id), method: :delete, class: "btn btn-sm btn-outline-danger", title: "Delete job" do %>
|
40
|
-
<%= render "good_job/shared/icons/trash" %>
|
41
|
-
<% end %>
|
42
|
-
</td>
|
43
|
-
</tr>
|
44
|
-
<% end %>
|
45
|
-
</tbody>
|
46
|
-
</table>
|
47
|
-
</div>
|
48
|
-
</div>
|