rush_job 0.6.0 → 1.0.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 +4 -1
- data/app/assets/javascript/rush_job/application.js +10 -11
- data/app/assets/javascript/rush_job/controllers/rush_job_confirm_controller.js +11 -0
- data/app/assets/javascript/rush_job/controllers/rush_job_polling_controller.js +18 -17
- data/app/assets/javascript/rush_job/controllers/rush_job_reload_jobs_table_controller.js +2 -2
- data/app/assets/javascript/rush_job/controllers/rush_job_table_update_controller.js +14 -10
- data/app/controllers/rush_job/dashboard_controller.rb +7 -7
- data/app/controllers/rush_job/rush_jobs_controller.rb +5 -0
- data/app/helpers/rush_job/rush_jobs_helper.rb +4 -1
- data/app/models/rush_job/rush_job.rb +1 -1
- data/app/views/layouts/rush_job/_navbar.html.erb +12 -2
- data/app/views/rush_job/dashboard/_dashboard_tables.html.erb +83 -76
- data/app/views/rush_job/dashboard/index.turbo_stream.erb +9 -0
- data/app/views/rush_job/rush_jobs/_jobs_table.html.erb +45 -43
- data/app/views/rush_job/rush_jobs/index.turbo_stream.erb +6 -0
- data/config/importmap.rb +1 -1
- data/lib/rush_job/version.rb +1 -1
- metadata +45 -30
- data/app/views/rush_job/dashboard/index.js.erb +0 -2
- data/app/views/rush_job/rush_jobs/index.js.erb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1978822b98733bacfe9f2223674bc12a85caf28660ec3b520b3472671d294700
|
4
|
+
data.tar.gz: 1ce5abf613c6506a2b242b5db8d7c2a7047f4e36a3da7b51f97b1edf35e5cb6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 453687375125c2fe9982f82500dfc4dc8fe8531787ef962bc25619e894a39a6c7cfbf0e77e21b1676dafbc16ffe9a70f55f9f471d2511c681763abf2b827c6ba
|
7
|
+
data.tar.gz: 80066d6e7bd60b5d7402f472674bfe38005c121398f0c431f326f335562eb893b71e309f4fb09090c8c00ed17bbf8306e53a0d8b41bdae7a6d51034f26aec620
|
data/README.md
CHANGED
@@ -17,7 +17,7 @@ Navigate to the `/rush_job` route in your application to see the Delayed Jobs. L
|
|
17
17
|
Add this line to your Ruby on Rails application's Gemfile:
|
18
18
|
|
19
19
|
```ruby
|
20
|
-
gem 'rush_job', '~> 0.
|
20
|
+
gem 'rush_job', '~> 1.0.0'
|
21
21
|
```
|
22
22
|
|
23
23
|
And then execute:
|
@@ -40,5 +40,8 @@ Open an issue or
|
|
40
40
|
3. `bundle exec brakeman`
|
41
41
|
4. Open pull request
|
42
42
|
|
43
|
+
## Turbo
|
44
|
+
This gem uses turbo-rails, https://github.com/hotwired/turbo-rails. For Rails UJS fork from v0.6.1
|
45
|
+
|
43
46
|
## License
|
44
47
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -1,12 +1,11 @@
|
|
1
|
-
import '
|
2
|
-
import
|
3
|
-
|
1
|
+
import { Application } from '@hotwired/stimulus';
|
2
|
+
import RushJobConfirmController from './controllers/rush_job_confirm_controller';
|
3
|
+
import RushJobPollingController from './controllers/rush_job_polling_controller';
|
4
|
+
import RushJobReloadJobsTableController from './controllers/rush_job_reload_jobs_table_controller';
|
5
|
+
import 'bootstrap';
|
6
|
+
import '@hotwired/turbo-rails';
|
4
7
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
window.Stimulus = Application.start()
|
11
|
-
Stimulus.register('rush-job-polling', RushJobPollingController)
|
12
|
-
Stimulus.register('rush-job-reload-jobs-table', RushJobReloadJobsTableController)
|
8
|
+
window.Stimulus = Application.start();
|
9
|
+
Stimulus.register('rush-job-confirm', RushJobConfirmController);
|
10
|
+
Stimulus.register('rush-job-polling', RushJobPollingController);
|
11
|
+
Stimulus.register('rush-job-reload-jobs-table', RushJobReloadJobsTableController);
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Controller } from '@hotwired/stimulus';
|
2
|
+
|
3
|
+
export default class RushJobConfirmController extends Controller {
|
4
|
+
displayConfirm(e) {
|
5
|
+
const confirmMessage = e.target.dataset.confirmMessage;
|
6
|
+
|
7
|
+
if (confirm(confirmMessage) !== true) {
|
8
|
+
e.preventDefault();
|
9
|
+
}
|
10
|
+
}
|
11
|
+
}
|
@@ -1,49 +1,50 @@
|
|
1
|
-
import
|
1
|
+
import { RushJobTableUpdateController } from './rush_job_table_update_controller';
|
2
2
|
|
3
|
-
let intervalID
|
3
|
+
let intervalID;
|
4
4
|
|
5
5
|
export default class extends RushJobTableUpdateController {
|
6
|
-
static targets = [
|
6
|
+
static targets = ['pollingTime', 'pollingTimeLabel', 'pollingSlide'];
|
7
7
|
|
8
8
|
connect() {
|
9
|
-
this.pollingChange()
|
10
|
-
this.stopPolling()
|
9
|
+
this.pollingChange();
|
10
|
+
this.stopPolling();
|
11
11
|
}
|
12
12
|
|
13
13
|
pollingChange() {
|
14
14
|
const pollingLabelRegex = /\d+/;
|
15
|
-
|
16
|
-
|
15
|
+
const pollingTimeTargetHtml = this.pollingTimeLabelTarget.innerHTML;
|
16
|
+
const pollingLabelUpdate = pollingTimeTargetHtml.replace(pollingLabelRegex, this.pollingTime());
|
17
|
+
this.pollingTimeLabelTarget.innerHTML = pollingLabelUpdate;
|
17
18
|
}
|
18
19
|
|
19
20
|
pollingToggle() {
|
20
|
-
|
21
|
+
const pollingSlide = this.pollingSlideTarget;
|
21
22
|
|
22
23
|
if (pollingSlide.checked === true) {
|
23
|
-
this.startPolling()
|
24
|
+
this.startPolling();
|
24
25
|
} else {
|
25
|
-
this.stopPolling()
|
26
|
+
this.stopPolling();
|
26
27
|
}
|
27
28
|
}
|
28
29
|
|
29
30
|
startPolling() {
|
30
|
-
this.updateJobs()
|
31
|
+
this.updateJobs();
|
31
32
|
|
32
33
|
intervalID = setTimeout(() => {
|
33
|
-
this.startPolling()
|
34
|
-
}, this.pollingTime() * 1000)
|
34
|
+
this.startPolling();
|
35
|
+
}, this.pollingTime() * 1000);
|
35
36
|
}
|
36
37
|
|
37
38
|
stopPolling() {
|
38
39
|
if (intervalID) {
|
39
|
-
clearInterval(intervalID)
|
40
|
+
clearInterval(intervalID);
|
40
41
|
}
|
41
42
|
}
|
42
43
|
|
43
44
|
pollingTime() {
|
44
|
-
const pollingTimes = [3, 5, 8, 13, 21, 34, 55]
|
45
|
-
|
45
|
+
const pollingTimes = [3, 5, 8, 13, 21, 34, 55];
|
46
|
+
const pollingTime = this.pollingTimeTarget.value || 3;
|
46
47
|
|
47
|
-
return pollingTimes[pollingTime]
|
48
|
+
return pollingTimes[pollingTime];
|
48
49
|
}
|
49
50
|
}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import
|
1
|
+
import { RushJobTableUpdateController } from './rush_job_table_update_controller';
|
2
2
|
|
3
3
|
export default class extends RushJobTableUpdateController {
|
4
4
|
reloadJobs() {
|
5
|
-
this.updateJobs()
|
5
|
+
this.updateJobs();
|
6
6
|
}
|
7
7
|
}
|
@@ -1,19 +1,23 @@
|
|
1
|
-
import { Controller } from '@hotwired/stimulus'
|
2
|
-
import Rails from '@rails/ujs'
|
1
|
+
import { Controller } from '@hotwired/stimulus';
|
3
2
|
|
4
3
|
export class RushJobTableUpdateController extends Controller {
|
5
4
|
updateJobs() {
|
6
|
-
|
5
|
+
const headers = { 'Accept': 'text/vnd.turbo-stream.html' };
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
this.blurTable();
|
8
|
+
this.clearFlash();
|
9
|
+
|
10
|
+
fetch(document.location.href, { headers: headers })
|
11
|
+
.then(response => response.text())
|
12
|
+
.then(html => Turbo.renderStreamMessage(html));
|
13
13
|
}
|
14
14
|
|
15
15
|
blurTable() {
|
16
|
-
|
17
|
-
|
16
|
+
const jobsContainer = document.getElementById('rush-job-jobs-container');
|
17
|
+
jobsContainer.classList.add('table-refresh');
|
18
|
+
}
|
19
|
+
|
20
|
+
clearFlash() {
|
21
|
+
document.getElementById('rush-job-flash-messages').innerHTML = '';
|
18
22
|
}
|
19
23
|
}
|
@@ -5,14 +5,14 @@ module RushJob
|
|
5
5
|
rescue_from Pagy::OverflowError, with: :redirect_to_first_page
|
6
6
|
|
7
7
|
def index
|
8
|
-
@pagy_locked_jobs, @locked_jobs = pagy(RushJob.locked_jobs,
|
9
|
-
items: 10,
|
10
|
-
page_param: :locked_jobs_page)
|
11
|
-
|
8
|
+
@pagy_locked_jobs, @locked_jobs = pagy(RushJob.locked_jobs, items: 10, page_param: :locked_jobs_page)
|
12
9
|
@queue_groups = RushJob.queue_groups
|
13
|
-
@pagy_queue, @job_queues = pagy_array(@queue_groups.keys,
|
14
|
-
|
15
|
-
|
10
|
+
@pagy_queue, @job_queues = pagy_array(@queue_groups.keys, items: 10, page_param: :queue_page)
|
11
|
+
|
12
|
+
respond_to do |format|
|
13
|
+
format.html
|
14
|
+
format.turbo_stream
|
15
|
+
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def destroy
|
@@ -6,7 +6,10 @@ module RushJob
|
|
6
6
|
|
7
7
|
def sortable(column)
|
8
8
|
direction = column == sort_column && sort_direction == 'asc' ? 'desc' : 'asc'
|
9
|
-
link_to t(column),
|
9
|
+
link_to t(column),
|
10
|
+
rush_job.rush_jobs_path({ sort: column, direction: direction }),
|
11
|
+
class: "link-#{invert_theme}",
|
12
|
+
target: '_top'
|
10
13
|
end
|
11
14
|
|
12
15
|
def sort_arrow(column)
|
@@ -4,7 +4,7 @@ module RushJob
|
|
4
4
|
|
5
5
|
scope :locked_jobs, -> { where.not(locked_at: nil).order(locked_at: :desc) }
|
6
6
|
scope :queue_groups, -> { group(:queue, :priority).order(:priority).count }
|
7
|
-
scope :queue_group, ->(queue, priority) { where(queue:).and(where(priority:)) }
|
7
|
+
scope :queue_group, ->(queue, priority) { where(queue: queue).and(where(priority: priority)) }
|
8
8
|
|
9
9
|
def self.clear_queue(queue, priority)
|
10
10
|
queue_group(queue, priority).delete_all
|
@@ -32,13 +32,23 @@
|
|
32
32
|
</a>
|
33
33
|
<div class="dropdown-menu"
|
34
34
|
data-bs-popper="static">
|
35
|
-
<%= button_to t("#{invert_theme}_mode"),
|
35
|
+
<%= button_to t("#{invert_theme}_mode"),
|
36
|
+
settings_path,
|
37
|
+
class: "nav-link",
|
38
|
+
method: :patch,
|
39
|
+
params: { setting: 'theme' },
|
40
|
+
data: { turbo: false } %>
|
36
41
|
<%= button_to t("#{editing_enabled? ? 'disable_editing' : 'enable_editing'}"),
|
37
42
|
settings_path,
|
38
43
|
class: "nav-link",
|
39
44
|
method: :patch,
|
40
45
|
params: { setting: 'editing' },
|
41
|
-
data: {
|
46
|
+
data: {
|
47
|
+
turbo: false,
|
48
|
+
controller: 'rush-job-confirm',
|
49
|
+
action: 'click->rush-job-confirm#displayConfirm',
|
50
|
+
confirm_message: t("#{editing_enabled? ? 'disable_editing_confirmation' : 'enable_editing_confirmation'}")
|
51
|
+
} %>
|
42
52
|
</div>
|
43
53
|
</li>
|
44
54
|
</ul>
|
@@ -1,86 +1,93 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
<
|
6
|
-
|
7
|
-
|
8
|
-
<div class="
|
9
|
-
<
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
<
|
15
|
-
<th><%= t :id %></th>
|
16
|
-
<th><%= t :locked_at %></th>
|
17
|
-
<th><%= t :locked_by %></th>
|
18
|
-
<th><%= t :job_class %></th>
|
19
|
-
<th><%= t :arguments %></th>
|
20
|
-
</tr>
|
21
|
-
</thead>
|
22
|
-
<tbody class="table-group-divider">
|
23
|
-
<% @locked_jobs.each do |job| %>
|
1
|
+
<%= turbo_frame_tag 'rush_job_dashboard_frame' do %>
|
2
|
+
<div id="rush-job-jobs-container"
|
3
|
+
class="jobs-container"
|
4
|
+
role="main">
|
5
|
+
<div class="d-flex justify-content-left">
|
6
|
+
<h2 class="color-<%= invert_theme %>"><%= t :locked_jobs %></h2>
|
7
|
+
</div>
|
8
|
+
<div id="rush-job-dashboard-locked-jobs" class="mb-2 d-flex justify-content-left">
|
9
|
+
<div class="table-responsive">
|
10
|
+
<table class="table
|
11
|
+
table-bordered
|
12
|
+
table-striped
|
13
|
+
table-<%= current_theme %>">
|
14
|
+
<thead>
|
24
15
|
<tr>
|
25
|
-
<
|
26
|
-
<
|
27
|
-
<
|
28
|
-
<
|
29
|
-
<
|
16
|
+
<th><%= t :id %></th>
|
17
|
+
<th><%= t :locked_at %></th>
|
18
|
+
<th><%= t :locked_by %></th>
|
19
|
+
<th><%= t :job_class %></th>
|
20
|
+
<th><%= t :arguments %></th>
|
30
21
|
</tr>
|
31
|
-
|
32
|
-
|
33
|
-
|
22
|
+
</thead>
|
23
|
+
<tbody class="table-group-divider">
|
24
|
+
<% @locked_jobs.each do |job| %>
|
25
|
+
<tr>
|
26
|
+
<td><%= job.id %></td>
|
27
|
+
<td><%= job.locked_at %></td>
|
28
|
+
<td><%= job.locked_by %></td>
|
29
|
+
<td><%= job.job_class %></td>
|
30
|
+
<td><%= job.job_arguments %></td>
|
31
|
+
</tr>
|
32
|
+
<% end %>
|
33
|
+
</tbody>
|
34
|
+
</table>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
<div id="rush-job-locked-job-pagination"
|
38
|
+
class="d-flex justify-content-left"
|
39
|
+
data-bs-theme="<%= current_theme %>">
|
40
|
+
<%== pagy_bootstrap_nav(@pagy_locked_jobs) if @pagy_locked_jobs.pages > 1 %>
|
34
41
|
</div>
|
35
|
-
</div>
|
36
|
-
<div id="rush-job-locked-job-pagination"
|
37
|
-
class="d-flex justify-content-left"
|
38
|
-
data-bs-theme="<%= current_theme %>">
|
39
|
-
<%== pagy_bootstrap_nav(@pagy_locked_jobs) if @pagy_locked_jobs.pages > 1 %>
|
40
|
-
</div>
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
<tr>
|
53
|
-
<th><%= t :name %></th>
|
54
|
-
<th><%= t :priority %></th>
|
55
|
-
<th><%= t :count %></th>
|
56
|
-
<% if editing_enabled? %>
|
57
|
-
<th><%= t :clear %></th>
|
58
|
-
<% end %>
|
59
|
-
</tr>
|
60
|
-
</thead>
|
61
|
-
<tbody class="table-group-divider">
|
62
|
-
<% @job_queues.each do |queue| %>
|
43
|
+
<div class="d-flex justify-content-left">
|
44
|
+
<h2 class="color-<%= invert_theme %>"><%= t :queues %></h2>
|
45
|
+
</div>
|
46
|
+
<div id="rush-job-dashboard-queues" class="d-flex justify-content-left">
|
47
|
+
<div class="table-responsive">
|
48
|
+
<table class="table
|
49
|
+
table-bordered
|
50
|
+
table-striped
|
51
|
+
table-<%= current_theme %>">
|
52
|
+
<thead>
|
63
53
|
<tr>
|
64
|
-
<
|
65
|
-
<
|
66
|
-
<
|
54
|
+
<th><%= t :name %></th>
|
55
|
+
<th><%= t :priority %></th>
|
56
|
+
<th><%= t :count %></th>
|
67
57
|
<% if editing_enabled? %>
|
68
|
-
<
|
69
|
-
dashboard_path,
|
70
|
-
class: "btn btn-danger btn-sm",
|
71
|
-
method: :delete,
|
72
|
-
params: { queue: queue[0], priority: queue[1] },
|
73
|
-
data: { confirm: t(:clear_queue_confirmation, queue: queue[0]) } %></td>
|
58
|
+
<th><%= t :clear %></th>
|
74
59
|
<% end %>
|
75
60
|
</tr>
|
76
|
-
|
77
|
-
|
78
|
-
|
61
|
+
</thead>
|
62
|
+
<tbody class="table-group-divider">
|
63
|
+
<% @job_queues.each do |queue| %>
|
64
|
+
<tr>
|
65
|
+
<td><%= queue[0] %></td>
|
66
|
+
<td><%= queue[1] %></td>
|
67
|
+
<td><%= @queue_groups[queue] %></td>
|
68
|
+
<% if editing_enabled? %>
|
69
|
+
<td><%= button_to t(:clear),
|
70
|
+
dashboard_path,
|
71
|
+
class: "btn btn-danger btn-sm",
|
72
|
+
method: :delete,
|
73
|
+
params: { queue: queue[0], priority: queue[1] },
|
74
|
+
data: {
|
75
|
+
turbo: false,
|
76
|
+
controller: 'rush-job-confirm',
|
77
|
+
action: 'click->rush-job-confirm#displayConfirm',
|
78
|
+
confirm_message: t(:clear_queue_confirmation, queue: queue[0])
|
79
|
+
} %></td>
|
80
|
+
<% end %>
|
81
|
+
</tr>
|
82
|
+
<% end %>
|
83
|
+
</tbody>
|
84
|
+
</table>
|
85
|
+
</div>
|
86
|
+
</div>
|
87
|
+
<div id="rush-job-locked-queue-pagination"
|
88
|
+
class="d-flex justify-content-left"
|
89
|
+
data-bs-theme="<%= current_theme %>">
|
90
|
+
<%== pagy_bootstrap_nav(@pagy_queue) if @pagy_queue.pages > 1 %>
|
79
91
|
</div>
|
80
92
|
</div>
|
81
|
-
|
82
|
-
class="d-flex justify-content-left"
|
83
|
-
data-bs-theme="<%= current_theme %>">
|
84
|
-
<%== pagy_bootstrap_nav(@pagy_queue) if @pagy_queue.pages > 1 %>
|
85
|
-
</div>
|
86
|
-
</div>
|
93
|
+
<% end %>
|
@@ -1,47 +1,49 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
<
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
<
|
11
|
-
<th><%= sortable 'id' %><%= sort_arrow 'id' %></th>
|
12
|
-
<th><%= sortable 'priority' %><%= sort_arrow 'priority' %></th>
|
13
|
-
<th><%= sortable 'attempts' %><%= sort_arrow 'attempts' %></th>
|
14
|
-
<th><%= t :job_class %></th>
|
15
|
-
<th><%= t :arguments %></th>
|
16
|
-
<th><%= sortable 'last_error' %><%= sort_arrow 'last_error' %></th>
|
17
|
-
<th><%= sortable 'run_at' %><%= sort_arrow 'run_at' %></th>
|
18
|
-
<th><%= sortable 'locked_at' %><%= sort_arrow 'locked_at' %></th>
|
19
|
-
<th><%= sortable 'failed_at' %><%= sort_arrow 'failed_at' %></th>
|
20
|
-
<th><%= sortable 'locked_by' %><%= sort_arrow'locked_by' %></th>
|
21
|
-
<th><%= sortable 'queue' %><%= sort_arrow 'queue' %></th>
|
22
|
-
</tr>
|
23
|
-
</thead>
|
24
|
-
<tbody class="table-group-divider">
|
25
|
-
<% @rush_jobs.each do |job| %>
|
1
|
+
<%= turbo_frame_tag 'rush_job_jobs_frame' do %>
|
2
|
+
<div id="rush-job-jobs-container"
|
3
|
+
class="jobs-container"
|
4
|
+
role="main">
|
5
|
+
<div class="table-responsive">
|
6
|
+
<table class="table
|
7
|
+
table-bordered
|
8
|
+
table-striped
|
9
|
+
table-<%= current_theme %>">
|
10
|
+
<thead>
|
26
11
|
<tr>
|
27
|
-
<
|
28
|
-
<
|
29
|
-
<
|
30
|
-
<
|
31
|
-
<
|
32
|
-
<
|
33
|
-
<
|
34
|
-
<
|
35
|
-
<
|
36
|
-
<
|
37
|
-
<
|
12
|
+
<th><%= sortable 'id' %><%= sort_arrow 'id' %></th>
|
13
|
+
<th><%= sortable 'priority' %><%= sort_arrow 'priority' %></th>
|
14
|
+
<th><%= sortable 'attempts' %><%= sort_arrow 'attempts' %></th>
|
15
|
+
<th><%= t :job_class %></th>
|
16
|
+
<th><%= t :arguments %></th>
|
17
|
+
<th><%= sortable 'last_error' %><%= sort_arrow 'last_error' %></th>
|
18
|
+
<th><%= sortable 'run_at' %><%= sort_arrow 'run_at' %></th>
|
19
|
+
<th><%= sortable 'locked_at' %><%= sort_arrow 'locked_at' %></th>
|
20
|
+
<th><%= sortable 'failed_at' %><%= sort_arrow 'failed_at' %></th>
|
21
|
+
<th><%= sortable 'locked_by' %><%= sort_arrow'locked_by' %></th>
|
22
|
+
<th><%= sortable 'queue' %><%= sort_arrow 'queue' %></th>
|
38
23
|
</tr>
|
39
|
-
|
40
|
-
|
41
|
-
|
24
|
+
</thead>
|
25
|
+
<tbody class="table-group-divider">
|
26
|
+
<% @rush_jobs.each do |job| %>
|
27
|
+
<tr>
|
28
|
+
<td><%= job.id %></td>
|
29
|
+
<td><%= job.priority %></td>
|
30
|
+
<td><%= job.attempts %></td>
|
31
|
+
<td><%= job.job_class %></td>
|
32
|
+
<td><%= job.job_arguments %></td>
|
33
|
+
<td><%= job.last_error %></td>
|
34
|
+
<td><%= job.run_at %></td>
|
35
|
+
<td><%= job.locked_at %></td>
|
36
|
+
<td><%= job.failed_at %></td>
|
37
|
+
<td><%= job.locked_by %></td>
|
38
|
+
<td><%= job.queue %></td>
|
39
|
+
</tr>
|
40
|
+
<% end %>
|
41
|
+
</tbody>
|
42
|
+
</table>
|
43
|
+
</div>
|
42
44
|
</div>
|
43
|
-
</div>
|
44
45
|
|
45
|
-
<div class="footer-container" data-bs-theme="<%= current_theme %>">
|
46
|
-
|
47
|
-
</div>
|
46
|
+
<div class="footer-container" data-bs-theme="<%= current_theme %>">
|
47
|
+
<%== pagy_bootstrap_nav(@pagy) if @pagy.pages > 1 %>
|
48
|
+
</div>
|
49
|
+
<% end %>
|
data/config/importmap.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
pin 'rush_job/application', preload: true
|
2
2
|
pin 'bootstrap', to: 'https://ga.jspm.io/npm:bootstrap@5.3.1/dist/js/bootstrap.esm.js'
|
3
3
|
pin '@popperjs/core', to: 'https://ga.jspm.io/npm:@popperjs/core@2.11.8/lib/index.js'
|
4
|
-
pin '@rails/ujs', to: 'https://ga.jspm.io/npm:@rails/ujs@7.0.6/lib/assets/compiled/rails-ujs.js'
|
5
4
|
pin '@hotwired/stimulus', to: 'https://ga.jspm.io/npm:@hotwired/stimulus@3.2.2/dist/stimulus.js'
|
5
|
+
pin '@hotwired/turbo-rails', to: 'turbo.min.js', preload: true
|
data/lib/rush_job/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rush_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JavaKoala
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionview
|
@@ -58,28 +58,28 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.0'
|
62
62
|
type: :runtime
|
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: '
|
68
|
+
version: '2.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pagy
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '6
|
75
|
+
version: '8.6'
|
76
76
|
type: :runtime
|
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: '6
|
82
|
+
version: '8.6'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: sassc-rails
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '2.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: turbo-rails
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '2.0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: delayed_job
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,112 +142,112 @@ dependencies:
|
|
128
142
|
requirements:
|
129
143
|
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: '6.
|
145
|
+
version: '6.1'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: '6.
|
152
|
+
version: '6.1'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: capybara
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
157
|
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version: '3.
|
159
|
+
version: '3.40'
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
164
|
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
|
-
version: '3.
|
166
|
+
version: '3.40'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: debug
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - "~>"
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: '1.
|
173
|
+
version: '1.9'
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
178
|
- - "~>"
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: '1.
|
180
|
+
version: '1.9'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: puma
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
185
|
- - "~>"
|
172
186
|
- !ruby/object:Gem::Version
|
173
|
-
version: '6.
|
187
|
+
version: '6.4'
|
174
188
|
type: :development
|
175
189
|
prerelease: false
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
177
191
|
requirements:
|
178
192
|
- - "~>"
|
179
193
|
- !ruby/object:Gem::Version
|
180
|
-
version: '6.
|
194
|
+
version: '6.4'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: rubocop-capybara
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
184
198
|
requirements:
|
185
199
|
- - "~>"
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: '2.
|
201
|
+
version: '2.21'
|
188
202
|
type: :development
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
206
|
- - "~>"
|
193
207
|
- !ruby/object:Gem::Version
|
194
|
-
version: '2.
|
208
|
+
version: '2.21'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: rubocop-minitest
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
198
212
|
requirements:
|
199
213
|
- - "~>"
|
200
214
|
- !ruby/object:Gem::Version
|
201
|
-
version: 0.
|
215
|
+
version: 0.35.0
|
202
216
|
type: :development
|
203
217
|
prerelease: false
|
204
218
|
version_requirements: !ruby/object:Gem::Requirement
|
205
219
|
requirements:
|
206
220
|
- - "~>"
|
207
221
|
- !ruby/object:Gem::Version
|
208
|
-
version: 0.
|
222
|
+
version: 0.35.0
|
209
223
|
- !ruby/object:Gem::Dependency
|
210
224
|
name: rubocop-rails
|
211
225
|
requirement: !ruby/object:Gem::Requirement
|
212
226
|
requirements:
|
213
227
|
- - "~>"
|
214
228
|
- !ruby/object:Gem::Version
|
215
|
-
version: '2.
|
229
|
+
version: '2.25'
|
216
230
|
type: :development
|
217
231
|
prerelease: false
|
218
232
|
version_requirements: !ruby/object:Gem::Requirement
|
219
233
|
requirements:
|
220
234
|
- - "~>"
|
221
235
|
- !ruby/object:Gem::Version
|
222
|
-
version: '2.
|
236
|
+
version: '2.25'
|
223
237
|
- !ruby/object:Gem::Dependency
|
224
238
|
name: selenium-webdriver
|
225
239
|
requirement: !ruby/object:Gem::Requirement
|
226
240
|
requirements:
|
227
241
|
- - "~>"
|
228
242
|
- !ruby/object:Gem::Version
|
229
|
-
version: '4.
|
243
|
+
version: '4.22'
|
230
244
|
type: :development
|
231
245
|
prerelease: false
|
232
246
|
version_requirements: !ruby/object:Gem::Requirement
|
233
247
|
requirements:
|
234
248
|
- - "~>"
|
235
249
|
- !ruby/object:Gem::Version
|
236
|
-
version: '4.
|
250
|
+
version: '4.22'
|
237
251
|
- !ruby/object:Gem::Dependency
|
238
252
|
name: simplecov
|
239
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -254,28 +268,28 @@ dependencies:
|
|
254
268
|
requirements:
|
255
269
|
- - "~>"
|
256
270
|
- !ruby/object:Gem::Version
|
257
|
-
version: '3.
|
271
|
+
version: '3.5'
|
258
272
|
type: :development
|
259
273
|
prerelease: false
|
260
274
|
version_requirements: !ruby/object:Gem::Requirement
|
261
275
|
requirements:
|
262
276
|
- - "~>"
|
263
277
|
- !ruby/object:Gem::Version
|
264
|
-
version: '3.
|
278
|
+
version: '3.5'
|
265
279
|
- !ruby/object:Gem::Dependency
|
266
280
|
name: sqlite3
|
267
281
|
requirement: !ruby/object:Gem::Requirement
|
268
282
|
requirements:
|
269
283
|
- - "~>"
|
270
284
|
- !ruby/object:Gem::Version
|
271
|
-
version: '1.
|
285
|
+
version: '1.4'
|
272
286
|
type: :development
|
273
287
|
prerelease: false
|
274
288
|
version_requirements: !ruby/object:Gem::Requirement
|
275
289
|
requirements:
|
276
290
|
- - "~>"
|
277
291
|
- !ruby/object:Gem::Version
|
278
|
-
version: '1.
|
292
|
+
version: '1.4'
|
279
293
|
description: Rails web interface for delayed_job using Rails::Engine.
|
280
294
|
email:
|
281
295
|
- javakoala1@gmail.com
|
@@ -292,6 +306,7 @@ files:
|
|
292
306
|
- app/assets/images/rush_job/arrow-up-dark.svg
|
293
307
|
- app/assets/images/rush_job/arrow-up-light.svg
|
294
308
|
- app/assets/javascript/rush_job/application.js
|
309
|
+
- app/assets/javascript/rush_job/controllers/rush_job_confirm_controller.js
|
295
310
|
- app/assets/javascript/rush_job/controllers/rush_job_polling_controller.js
|
296
311
|
- app/assets/javascript/rush_job/controllers/rush_job_reload_jobs_table_controller.js
|
297
312
|
- app/assets/javascript/rush_job/controllers/rush_job_table_update_controller.js
|
@@ -318,10 +333,10 @@ files:
|
|
318
333
|
- app/views/layouts/rush_job/application.html.erb
|
319
334
|
- app/views/rush_job/dashboard/_dashboard_tables.html.erb
|
320
335
|
- app/views/rush_job/dashboard/index.html.erb
|
321
|
-
- app/views/rush_job/dashboard/index.
|
336
|
+
- app/views/rush_job/dashboard/index.turbo_stream.erb
|
322
337
|
- app/views/rush_job/rush_jobs/_jobs_table.html.erb
|
323
338
|
- app/views/rush_job/rush_jobs/index.html.erb
|
324
|
-
- app/views/rush_job/rush_jobs/index.
|
339
|
+
- app/views/rush_job/rush_jobs/index.turbo_stream.erb
|
325
340
|
- app/views/rush_job/shared/_polling.html.erb
|
326
341
|
- config/importmap.rb
|
327
342
|
- config/locales/en.yml
|
@@ -347,14 +362,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
347
362
|
requirements:
|
348
363
|
- - ">="
|
349
364
|
- !ruby/object:Gem::Version
|
350
|
-
version: 3.
|
365
|
+
version: '3.0'
|
351
366
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
352
367
|
requirements:
|
353
368
|
- - ">="
|
354
369
|
- !ruby/object:Gem::Version
|
355
370
|
version: '0'
|
356
371
|
requirements: []
|
357
|
-
rubygems_version: 3.
|
372
|
+
rubygems_version: 3.5.3
|
358
373
|
signing_key:
|
359
374
|
specification_version: 4
|
360
375
|
summary: User interface for delayed_job
|
@@ -1 +0,0 @@
|
|
1
|
-
document.getElementById('rush-job-jobs').innerHTML = "<%= j (render partial: 'jobs_table') %>"
|