solid_queue_interface 0.1.0 → 0.3.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 +17 -3
  3. data/app/assets/stylesheets/solid_queue_interface/application.css +74 -1
  4. data/app/assets/stylesheets/solid_queue_interface/overrides.css +6 -0
  5. data/app/controllers/solid_queue_interface/application_controller.rb +1 -0
  6. data/app/controllers/solid_queue_interface/jobs_controller.rb +7 -7
  7. data/app/helpers/solid_queue_interface/application_helper.rb +1 -0
  8. data/app/views/layouts/solid_queue_interface/_navbar.html.erb +3 -1
  9. data/app/views/layouts/solid_queue_interface/application.html.erb +3 -0
  10. data/app/views/solid_queue_interface/jobs/blocked.html.erb +22 -20
  11. data/app/views/solid_queue_interface/jobs/claimed.html.erb +16 -14
  12. data/app/views/solid_queue_interface/jobs/failed.html.erb +22 -20
  13. data/app/views/solid_queue_interface/jobs/index.html.erb +28 -26
  14. data/app/views/solid_queue_interface/jobs/ready.html.erb +18 -16
  15. data/app/views/solid_queue_interface/jobs/recurring.html.erb +18 -16
  16. data/app/views/solid_queue_interface/jobs/scheduled.html.erb +20 -18
  17. data/app/views/solid_queue_interface/jobs/show.html.erb +15 -15
  18. data/app/views/solid_queue_interface/processes/index.html.erb +21 -21
  19. data/app/views/solid_queue_interface/queues/index.html.erb +13 -13
  20. data/app/views/solid_queue_interface/queues/paused.html.erb +11 -11
  21. data/lib/generators/solid_queue_interface/override_css/USAGE +8 -0
  22. data/lib/generators/solid_queue_interface/override_css/override_css_generator.rb +14 -0
  23. data/lib/generators/solid_queue_interface/override_layout_and_navbar/USAGE +8 -0
  24. data/lib/generators/solid_queue_interface/override_layout_and_navbar/override_layout_and_navbar_generator.rb +13 -0
  25. data/lib/generators/solid_queue_interface/override_views/USAGE +20 -0
  26. data/lib/generators/solid_queue_interface/override_views/override_views_generator.rb +13 -0
  27. data/lib/solid_queue_interface/engine.rb +2 -0
  28. data/lib/solid_queue_interface/version.rb +1 -1
  29. metadata +24 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f4867a44e6340fff2c02f6410ca2de07b19322dd0072f5817e3fbe6f5743f616
4
- data.tar.gz: 52dd205bc38a532bc788962c393ac5b0b903c4f4030bac851ab12ae623196f39
3
+ metadata.gz: c2f1030315cba7e5ae6e5651afd357afc5a70767a8ef3003d43706399e698142
4
+ data.tar.gz: 5dde197063e2c8f8c5bd8aee8e71ba730ce29cde54c215d32ed62bcf3a2fe619
5
5
  SHA512:
6
- metadata.gz: 69c518fab0517a039b8789036175779c0dc87274cb8a49942da42f905fb84d3e2648579d08384d1f1942e9d7c526834ee442375c69fb1caed3798e5bfe46b888
7
- data.tar.gz: 2f345acfbcee720a32d92b50b1f7319385cf2105c3f8d57b5b8ccc2ea13d26d5184fcf567b49a23c1ca27daa83a0b2e834d7b062472ab365b037090fefa7f930
6
+ metadata.gz: 15e91622f1408e83905440648a23e3fa622e29f83cea1e79952ac6829c9f34d612f8210d517ae10b6f24a313724bf4a868f1f6a2f5705fabdbd4f5874343dbaa
7
+ data.tar.gz: 970874a42e77bebf4ed13c5431a78e07a978ed04f147885755a73dede61e272b5b51e73ea51a7e01f9f32d40ad7f66419099454d54052cd98cf8982a2d2a2385
data/README.md CHANGED
@@ -24,12 +24,26 @@ Update `config/routes.rb` to mount `SolidQueueInterface::Engine` like so:
24
24
  ```
25
25
  Now you can access SolidQueueInterface at `<YOUR_URL>/solid_queue_interface`
26
26
 
27
+ ## Customization
28
+ ### CSS/UI Styling
29
+ You can use `bin/rails g solid_queue_interface:override_css` which will create `overrides.css` in your project.
30
+ You can then add your styles to that file and it will get reflected on SolidQueueInterface portal.
31
+ You can even overrides default styles of navbar, tables or pagy (pagination) for the portal.
32
+ You can refer to default styles are present in [solid_queue_interface/application.css](https://github.com/AquisTech/solid_queue_interface/blob/main/app/assets/stylesheets/solid_queue_interface/application.css)
33
+ For easy customization, `<body>` of the portal is assigned with `id` as `solid_queue_interface`.
34
+ Also, `class` is assigned in format `solid_queue_interface-<controller_name>-<action_name>` so that you can customize styles on controller-action basis.
35
+ ### Views/UI
36
+ You can use `bin/rails g solid_queue_interface:override_views` to copy views to your project.
37
+ You can then customize view code as per your needs and it will get reflected on SolidQueueInterface portal.
38
+ You can keep only views that you need customization and you can delete other views so that they will be fetched from gem.
39
+ ### Layout and Navbar
40
+ You can use `bin/rails g solid_queue_interface:override_layout_and_navbar` to copy layout template and navbar partial to your project.
41
+ You can then customize layout and navbar code as per your needs and it will get reflected on SolidQueueInterface portal.
42
+
27
43
  ## ToDo
28
- * Pagination with `pagy` gem
29
- * Basic styling support
30
44
  * Sorting on columns
31
45
  * Searching on columns
32
- * Generator to copy views to your project for overriding
46
+ * Authorization
33
47
 
34
48
  ## Contributing
35
49
  Bug reports, feature requests and pull requests are welcome on GitHub at [https://github.com/aquistech/solid_queue_interface](https://github.com/aquistech/solid_queue_interface). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/aquistech/solid_queue_interface/blob/main/CODE_OF_CONDUCT.md).
@@ -12,4 +12,77 @@
12
12
  *
13
13
  *= require_tree .
14
14
  *= require_self
15
- */
15
+ *= require 'solid_queue_interface/overrides'
16
+ */
17
+ body {
18
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
19
+ }
20
+ /* Table styling */
21
+ #solid_queue_interface table {
22
+ border-collapse: collapse;
23
+ border-spacing: 0;
24
+ text-align: left;
25
+ width: 100%;
26
+ }
27
+ /* Show alternate striped table rows */
28
+ #solid_queue_interface table thead tr,
29
+ #solid_queue_interface table tbody tr:nth-of-type(even) {
30
+ background: #f7f8f9;
31
+ }
32
+ /* Highlight hovered table row */
33
+ #solid_queue_interface table tbody tr:hover {
34
+ background: #eef0f3;
35
+ }
36
+ /* Table TD styling */
37
+ #solid_queue_interface table td {
38
+ border-bottom: .05rem solid #dadee4;
39
+ padding: .6rem .4rem;
40
+ vertical-align: top;
41
+ }
42
+ /* Table TH styling */
43
+ #solid_queue_interface table th {
44
+ border-top: .1rem solid #dadee4;
45
+ border-bottom: .1rem solid #dadee4;
46
+ padding: .6rem .4rem;
47
+ vertical-align: top;
48
+ }
49
+
50
+ /* Navbar styling */
51
+ #solid_queue_interface .navbar {
52
+ align-items: stretch;
53
+ display: -ms-flexbox;
54
+ display: flex;
55
+ -ms-flex-align: stretch;
56
+ -ms-flex-pack: justify;
57
+ -ms-flex-wrap: wrap;
58
+ flex-wrap: wrap;
59
+ justify-content: space-between;
60
+ }
61
+ /* Navbar Logo */
62
+ #solid_queue_interface .navbar .navbar-brand {
63
+ font-weight: bold;
64
+ text-decoration: none;
65
+ }
66
+ /* Navbar Link */
67
+ #solid_queue_interface .navbar .navbar-link {
68
+ padding: 0 0.5em;
69
+ }
70
+ /* Styling for action buttons */
71
+ #solid_queue_interface .btn {
72
+ border-width: 1px;
73
+ border-radius: 0.25rem;
74
+ border-style: solid;
75
+ color: white;
76
+ }
77
+ #solid_queue_interface .btn.retry-btn {
78
+ background: #198754;
79
+ border-color: #198754;
80
+ }
81
+ #solid_queue_interface .btn.pause-btn {
82
+ background: #dc3545;
83
+ border-color: #dc3545;
84
+ }
85
+ #solid_queue_interface .btn.resume-btn {
86
+ background: #198754;
87
+ border-color: #198754;
88
+ }
@@ -0,0 +1,6 @@
1
+ /* ************************** overrides.css ************************** */
2
+ /* This CSS file is just a placeholder in gem.
3
+ You can customize styles of elements by putting your styles in a file
4
+ `solid_queue_interface/overrides.css` in your project.
5
+ You can use rake task to copy this file to your project.
6
+ Use command `rails g solid_queue_interface:override_css` */
@@ -1,4 +1,5 @@
1
1
  module SolidQueueInterface
2
2
  class ApplicationController < ActionController::Base
3
+ include Pagy::Backend
3
4
  end
4
5
  end
@@ -1,31 +1,31 @@
1
1
  module SolidQueueInterface
2
2
  class JobsController < ApplicationController
3
3
  def index
4
- @jobs = SolidQueue::Job.order(created_at: :desc)
4
+ @pagy, @jobs = pagy(SolidQueue::Job.order(created_at: :desc))
5
5
  end
6
6
 
7
7
  def scheduled
8
- @jobs = SolidQueue::ScheduledExecution.order(created_at: :desc)
8
+ @pagy, @jobs = pagy(SolidQueue::ScheduledExecution.order(created_at: :desc))
9
9
  end
10
10
 
11
11
  def failed
12
- @jobs = SolidQueue::FailedExecution.order(created_at: :desc)
12
+ @pagy, @jobs = pagy(SolidQueue::FailedExecution.order(created_at: :desc))
13
13
  end
14
14
 
15
15
  def blocked
16
- @jobs = SolidQueue::BlockedExecution.order(created_at: :desc)
16
+ @pagy, @jobs = pagy(SolidQueue::BlockedExecution.order(created_at: :desc))
17
17
  end
18
18
 
19
19
  def claimed
20
- @jobs = SolidQueue::ClaimedExecution.order(created_at: :desc)
20
+ @pagy, @jobs = pagy(SolidQueue::ClaimedExecution.order(created_at: :desc))
21
21
  end
22
22
 
23
23
  def ready
24
- @jobs = SolidQueue::ReadyExecution.order(created_at: :desc)
24
+ @pagy, @jobs = pagy(SolidQueue::ReadyExecution.order(created_at: :desc))
25
25
  end
26
26
 
27
27
  def recurring
28
- @jobs = SolidQueue::RecurringExecution.order(created_at: :desc)
28
+ @pagy, @jobs = pagy(SolidQueue::RecurringExecution.order(created_at: :desc))
29
29
  end
30
30
 
31
31
  def show
@@ -1,4 +1,5 @@
1
1
  module SolidQueueInterface
2
2
  module ApplicationHelper
3
+ include Pagy::Frontend
3
4
  end
4
5
  end
@@ -1,5 +1,7 @@
1
1
  <header class='navbar'>
2
- <%= link_to 'SolidQueueInterface', root_path, class: 'navbar-link' %>
2
+ <%= link_to root_path, class: 'navbar-brand' do %>
3
+ <b>SolidQueueInterface</b>
4
+ <% end %>
3
5
  <%= link_to 'Processes', solid_queue_interface_processes_path, class: 'navbar-link' %>
4
6
  <%= link_to 'All Queues', solid_queue_interface_queues_path, class: 'navbar-link' %>
5
7
  <%= link_to 'Paused Queues', paused_solid_queue_interface_queues_path, class: 'navbar-link' %>
@@ -5,6 +5,9 @@
5
5
  <%= csrf_meta_tags %>
6
6
  <%= csp_meta_tag %>
7
7
 
8
+ <style type="text/css">
9
+ <%== Pagy.root.join('stylesheets', 'pagy.css').read %>
10
+ </style>
8
11
  <%= stylesheet_link_tag "solid_queue_interface/application", media: "all" %>
9
12
  </head>
10
13
  <body id='solid_queue_interface' class='solid_queue_interface-<%= controller_name %>-<%= action_name %>'>
@@ -1,27 +1,29 @@
1
1
  <h1>Blocked Executions</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Job ID</th>
7
- <th class='thead-th'>Queue</th>
8
- <th class='thead-th'>Priority</th>
9
- <th class='thead-th'>Concurrency Key</th>
10
- <th class='thead-th'>Created</th>
11
- <th class='thead-th'>Expires</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Job ID</th>
7
+ <th>Queue</th>
8
+ <th>Priority</th>
9
+ <th>Concurrency Key</th>
10
+ <th>Created</th>
11
+ <th>Expires</th>
12
12
  </tr>
13
13
  </thead>
14
- <tbody class='tbody'>
14
+ <tbody>
15
15
  <% @jobs.each do |job| %>
16
- <tr class='tbody-tr'>
17
- <td class='tbody-td'><%= job.id %></td>
18
- <td class='tbody-td'><%= job.job_id %></td>
19
- <td class='tbody-td'><%= job.queue_name %></td>
20
- <td class='tbody-td'><%= job.priority %></td>
21
- <td class='tbody-td'><%= job.concurrency_key %></td>
22
- <td class='tbody-td'><%= job.created_at %></td>
23
- <td class='tbody-td'><%= job.expires_at %></td>
16
+ <tr>
17
+ <td><%= job.id %></td>
18
+ <td><%= job.job_id %></td>
19
+ <td><%= job.queue_name %></td>
20
+ <td><%= job.priority %></td>
21
+ <td><%= job.concurrency_key %></td>
22
+ <td><%= job.created_at %></td>
23
+ <td><%= job.expires_at %></td>
24
24
  </tr>
25
25
  <% end %>
26
26
  </tbody>
27
- </table>
27
+ </table>
28
+ <%== pagy_info(@pagy) %>
29
+ <%== pagy_nav(@pagy) %>
@@ -1,21 +1,23 @@
1
1
  <h1>Claimed Executions</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Job ID</th>
7
- <th class='thead-th'>Process ID</th>
8
- <th class='thead-th'>Created</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Job ID</th>
7
+ <th>Process ID</th>
8
+ <th>Created</th>
9
9
  </tr>
10
10
  </thead>
11
- <tbody class='tbody'>
11
+ <tbody>
12
12
  <% @jobs.each do |job| %>
13
- <tr class='tbody-tr'>
14
- <td class='tbody-td'><%= job.id %></td>
15
- <td class='tbody-td'><%= job.job_id %></td>
16
- <td class='tbody-td'><%= job.process_id %></td>
17
- <td class='tbody-td'><%= job.created_at %></td>
13
+ <tr>
14
+ <td><%= job.id %></td>
15
+ <td><%= job.job_id %></td>
16
+ <td><%= job.process_id %></td>
17
+ <td><%= job.created_at %></td>
18
18
  </tr>
19
19
  <% end %>
20
20
  </tbody>
21
- </table>
21
+ </table>
22
+ <%== pagy_info(@pagy) %>
23
+ <%== pagy_nav(@pagy) %>
@@ -1,27 +1,29 @@
1
1
  <h1>Failed Executions</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Job ID</th>
7
- <th class='thead-th'>Exception Class</th>
8
- <th class='thead-th'>Exception Message</th>
9
- <th class='thead-th'>Error Details</th>
10
- <th class='thead-th'>Created</th>
11
- <th class='thead-th'>Retry</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Job ID</th>
7
+ <th>Exception Class</th>
8
+ <th>Exception Message</th>
9
+ <th>Error Details</th>
10
+ <th>Created</th>
11
+ <th>Retry</th>
12
12
  </tr>
13
13
  </thead>
14
- <tbody class='tbody'>
14
+ <tbody>
15
15
  <% @jobs.each do |job| %>
16
- <tr class='tbody-tr'>
17
- <td class='tbody-td'><%= job.id %></td>
18
- <td class='tbody-td'><%= job.job_id %></td>
19
- <td class='tbody-td'><%= job.exception_class %></td>
20
- <td class='tbody-td'><%= job.message %></td>
21
- <td class='tbody-td'><%= link_to 'Backtrace', solid_queue_interface_job_path(job) %></td>
22
- <td class='tbody-td'><%= job.created_at %></td>
23
- <td class='tbody-td'><%= button_to "Retry Job", retry_solid_queue_interface_job_path(job) %></td>
16
+ <tr>
17
+ <td><%= job.id %></td>
18
+ <td><%= job.job_id %></td>
19
+ <td><%= job.exception_class %></td>
20
+ <td><%= job.message %></td>
21
+ <td><%= link_to 'Backtrace', solid_queue_interface_job_path(job) %></td>
22
+ <td><%= job.created_at %></td>
23
+ <td><%= button_to "Retry Job", retry_solid_queue_interface_job_path(job), class: 'btn retry-btn' %></td>
24
24
  </tr>
25
25
  <% end %>
26
26
  </tbody>
27
- </table>
27
+ </table>
28
+ <%== pagy_info(@pagy) %>
29
+ <%== pagy_nav(@pagy) %>
@@ -1,33 +1,35 @@
1
1
  <h1>All Jobs</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Class</th>
7
- <th class='thead-th'>Queue</th>
8
- <th class='thead-th'>Arguments</th>
9
- <th class='thead-th'>Priority</th>
10
- <th class='thead-th'>Active Job ID</th>
11
- <th class='thead-th'>Concurrency Key</th>
12
- <th class='thead-th'>Created</th>
13
- <th class='thead-th'>Scheduled</th>
14
- <th class='thead-th'>Finished</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Class</th>
7
+ <th>Queue</th>
8
+ <th>Arguments</th>
9
+ <th>Priority</th>
10
+ <th>Active Job ID</th>
11
+ <th>Concurrency Key</th>
12
+ <th>Created</th>
13
+ <th>Scheduled</th>
14
+ <th>Finished</th>
15
15
  </tr>
16
16
  </thead>
17
- <tbody class='tbody'>
17
+ <tbody>
18
18
  <% @jobs.each do |job| %>
19
- <tr class='tbody-tr'>
20
- <td class='tbody-td'><%= job.id %></td>
21
- <td class='tbody-td'><%= job.class_name %></td>
22
- <td class='tbody-td'><%= job.queue_name %></td>
23
- <td class='tbody-td'><%= job.arguments %></td>
24
- <td class='tbody-td'><%= job.priority %></td>
25
- <td class='tbody-td'><%= job.active_job_id %></td>
26
- <td class='tbody-td'><%= job.concurrency_key %></td>
27
- <td class='tbody-td'><%= job.created_at %></td>
28
- <td class='tbody-td'><%= job.scheduled_at %></td>
29
- <td class='tbody-td'><%= job.finished_at %></td>
19
+ <tr>
20
+ <td><%= job.id %></td>
21
+ <td><%= job.class_name %></td>
22
+ <td><%= job.queue_name %></td>
23
+ <td><%= job.arguments %></td>
24
+ <td><%= job.priority %></td>
25
+ <td><%= job.active_job_id %></td>
26
+ <td><%= job.concurrency_key %></td>
27
+ <td><%= job.created_at %></td>
28
+ <td><%= job.scheduled_at %></td>
29
+ <td><%= job.finished_at %></td>
30
30
  </tr>
31
31
  <% end %>
32
32
  </tbody>
33
- </table>
33
+ </table>
34
+ <%== pagy_info(@pagy) %>
35
+ <%== pagy_nav(@pagy) %>
@@ -1,23 +1,25 @@
1
1
  <h1>Ready Executions</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Job ID</th>
7
- <th class='thead-th'>Queue</th>
8
- <th class='thead-th'>Priority</th>
9
- <th class='thead-th'>Created</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Job ID</th>
7
+ <th>Queue</th>
8
+ <th>Priority</th>
9
+ <th>Created</th>
10
10
  </tr>
11
11
  </thead>
12
- <tbody class='tbody'>
12
+ <tbody>
13
13
  <% @jobs.each do |job| %>
14
- <tr class='tbody-tr'>
15
- <td class='tbody-td'><%= job.id %></td>
16
- <td class='tbody-td'><%= job.job_id %></td>
17
- <td class='tbody-td'><%= job.queue_name %></td>
18
- <td class='tbody-td'><%= job.priority %></td>
19
- <td class='tbody-td'><%= job.created_at %></td>
14
+ <tr>
15
+ <td><%= job.id %></td>
16
+ <td><%= job.job_id %></td>
17
+ <td><%= job.queue_name %></td>
18
+ <td><%= job.priority %></td>
19
+ <td><%= job.created_at %></td>
20
20
  </tr>
21
21
  <% end %>
22
22
  </tbody>
23
- </table>
23
+ </table>
24
+ <%== pagy_info(@pagy) %>
25
+ <%== pagy_nav(@pagy) %>
@@ -1,23 +1,25 @@
1
1
  <h1>Recurring Executions</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Job ID</th>
7
- <th class='thead-th'>Task Key</th>
8
- <th class='thead-th'>Run At</th>
9
- <th class='thead-th'>Created</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Job ID</th>
7
+ <th>Task Key</th>
8
+ <th>Run At</th>
9
+ <th>Created</th>
10
10
  </tr>
11
11
  </thead>
12
- <tbody class='tbody'>
12
+ <tbody>
13
13
  <% @jobs.each do |job| %>
14
- <tr class='tbody-tr'>
15
- <td class='tbody-td'><%= job.id %></td>
16
- <td class='tbody-td'><%= job.job_id %></td>
17
- <td class='tbody-td'><%= job.task_key %></td>
18
- <td class='tbody-td'><%= job.run_at %></td>
19
- <td class='tbody-td'><%= job.created_at %></td>
14
+ <tr>
15
+ <td><%= job.id %></td>
16
+ <td><%= job.job_id %></td>
17
+ <td><%= job.task_key %></td>
18
+ <td><%= job.run_at %></td>
19
+ <td><%= job.created_at %></td>
20
20
  </tr>
21
21
  <% end %>
22
22
  </tbody>
23
- </table>
23
+ </table>
24
+ <%== pagy_info(@pagy) %>
25
+ <%== pagy_nav(@pagy) %>
@@ -1,25 +1,27 @@
1
1
  <h1>Scheduled Executions</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Job ID</th>
7
- <th class='thead-th'>Queue</th>
8
- <th class='thead-th'>Priority</th>
9
- <th class='thead-th'>Created</th>
10
- <th class='thead-th'>Scheduled</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Job ID</th>
7
+ <th>Queue</th>
8
+ <th>Priority</th>
9
+ <th>Created</th>
10
+ <th>Scheduled</th>
11
11
  </tr>
12
12
  </thead>
13
- <tbody class='tbody'>
13
+ <tbody>
14
14
  <% @jobs.each do |job| %>
15
- <tr class='tbody-tr'>
16
- <td class='tbody-td'><%= job.id %></td>
17
- <td class='tbody-td'><%= job.job_id %></td>
18
- <td class='tbody-td'><%= job.queue_name %></td>
19
- <td class='tbody-td'><%= job.priority %></td>
20
- <td class='tbody-td'><%= job.created_at %></td>
21
- <td class='tbody-td'><%= job.scheduled_at %></td>
15
+ <tr>
16
+ <td><%= job.id %></td>
17
+ <td><%= job.job_id %></td>
18
+ <td><%= job.queue_name %></td>
19
+ <td><%= job.priority %></td>
20
+ <td><%= job.created_at %></td>
21
+ <td><%= job.scheduled_at %></td>
22
22
  </tr>
23
23
  <% end %>
24
24
  </tbody>
25
- </table>
25
+ </table>
26
+ <%== pagy_info(@pagy) %>
27
+ <%== pagy_nav(@pagy) %>
@@ -1,26 +1,26 @@
1
1
  <h1>Failed Executions Details For #<%= @job.id %></h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>Attribute</th>
6
- <th class='thead-th'>Details</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>Attribute</th>
6
+ <th>Details</th>
7
7
  </tr>
8
8
  </thead>
9
- <tbody class='tbody'>
9
+ <tbody>
10
10
  <% attributes = { id: 'ID', job_id: 'Job ID', created_at: 'Created', exception_class: 'Exception Class', message: 'Exception Message' } %>
11
11
  <% attributes.each do |method, title| %>
12
- <tr class='tbody-tr'>
13
- <td class='tbody-td'><b><%= title %></b></td>
14
- <td class='tbody-td'><%= @job.send(method) %></td>
12
+ <tr>
13
+ <td><b><%= title %></b></td>
14
+ <td><%= @job.send(method) %></td>
15
15
  </tr>
16
16
  <% end %>
17
- <tr class='tbody-tr'>
18
- <td class='tbody-td'><b>Backtrace</b></td>
19
- <td class='tbody-td'><%= @job.backtrace.join("<br>").html_safe %></td>
17
+ <tr>
18
+ <td><b>Backtrace</b></td>
19
+ <td><%= @job.backtrace.join("<br>").html_safe %></td>
20
20
  </tr>
21
- <tr class='tbody-tr'>
22
- <td class='tbody-td'><b>Action</b></td>
23
- <td class='tbody-td'><%= button_to "Retry Job", retry_solid_queue_interface_job_path(@job) %></td>
21
+ <tr>
22
+ <td><b>Action</b></td>
23
+ <td><%= button_to "Retry Job", retry_solid_queue_interface_job_path(@job), class: 'btn retry-btn' %></td>
24
24
  </tr>
25
25
  </tbody>
26
26
  </table>
@@ -1,34 +1,34 @@
1
1
  <h1>Processes</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>ID</th>
6
- <th class='thead-th'>Kind</th>
7
- <th class='thead-th'>Last Heartbeat At</th>
8
- <th class='thead-th'>Supervisor</th>
9
- <th class='thead-th'>PID</th>
10
- <th class='thead-th'>Hostname</th>
11
- <th class='thead-th'>Metadata</th>
12
- <th class='thead-th'>Created</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>ID</th>
6
+ <th>Kind</th>
7
+ <th>Last Heartbeat At</th>
8
+ <th>Supervisor</th>
9
+ <th>PID</th>
10
+ <th>Hostname</th>
11
+ <th>Metadata</th>
12
+ <th>Created</th>
13
13
  </tr>
14
14
  </thead>
15
- <tbody class='tbody'>
15
+ <tbody>
16
16
  <% @processes.each do |process| %>
17
- <tr class='tbody-tr'>
18
- <td class='tbody-td'><%= process.id %></td>
19
- <td class='tbody-td'><%= process.kind %></td>
20
- <td class='tbody-td'><%= process.last_heartbeat_at %></td>
21
- <td class='tbody-td'><%= process.supervisor_id %></td>
22
- <td class='tbody-td'><%= process.pid %></td>
23
- <td class='tbody-td'><%= process.hostname %></td>
24
- <td class='tbody-td'>
17
+ <tr>
18
+ <td><%= process.id %></td>
19
+ <td><%= process.kind %></td>
20
+ <td><%= process.last_heartbeat_at %></td>
21
+ <td><%= process.supervisor_id %></td>
22
+ <td><%= process.pid %></td>
23
+ <td><%= process.hostname %></td>
24
+ <td>
25
25
  <ul>
26
26
  <% process.metadata.each do |setting, value| %>
27
27
  <li><%= setting %>: <%= value %></li>
28
28
  <% end %>
29
29
  </ul>
30
30
  </td>
31
- <td class='tbody-td'><%= process.created_at %></td>
31
+ <td><%= process.created_at %></td>
32
32
  </tr>
33
33
  <% end %>
34
34
  </tbody>
@@ -1,22 +1,22 @@
1
1
  <h1>All Queues</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>Name</th>
6
- <th class='thead-th'>Size</th>
7
- <th class='thead-th'>Action</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>Name</th>
6
+ <th>Size</th>
7
+ <th>Action</th>
8
8
  </tr>
9
9
  </thead>
10
- <tbody class='tbody'>
10
+ <tbody>
11
11
  <% @queues.each do |queue| %>
12
- <tr class='tbody-tr'>
13
- <td class='tbody-td'><%= queue.name %></td>
14
- <td class='tbody-td'><%= queue.size %></td>
15
- <td class='tbody-td'>
12
+ <tr>
13
+ <td><%= queue.name %></td>
14
+ <td><%= queue.size %></td>
15
+ <td>
16
16
  <% if queue.paused? %>
17
- <%= button_to 'Resume', resume_solid_queue_interface_queue_path(queue.name) %>
17
+ <%= button_to 'Resume', resume_solid_queue_interface_queue_path(queue.name), class: 'btn resume-btn' %>
18
18
  <% else %>
19
- <%= button_to 'Pause', pause_solid_queue_interface_queue_path(queue.name) %>
19
+ <%= button_to 'Pause', pause_solid_queue_interface_queue_path(queue.name), class: 'btn pause-btn' %>
20
20
  <% end %>
21
21
  </td>
22
22
  </tr>
@@ -1,18 +1,18 @@
1
1
  <h1>Paused Queues</h1>
2
- <table class='table'>
3
- <thead class='thead'>
4
- <tr class='thead-tr'>
5
- <th class='thead-th'>#</th>
6
- <th class='thead-th'>Name</th>
7
- <th class='thead-th'>Created</th>
2
+ <table>
3
+ <thead>
4
+ <tr>
5
+ <th>#</th>
6
+ <th>Name</th>
7
+ <th>Created</th>
8
8
  </tr>
9
9
  </thead>
10
- <tbody class='tbody'>
10
+ <tbody>
11
11
  <% @queues.each do |queue| %>
12
- <tr class='tbody-tr'>
13
- <td class='tbody-td'><%= queue.id %></td>
14
- <td class='tbody-td'><%= queue.queue_name %></td>
15
- <td class='tbody-td'><%= queue.created_at %></td>
12
+ <tr>
13
+ <td><%= queue.id %></td>
14
+ <td><%= queue.queue_name %></td>
15
+ <td><%= queue.created_at %></td>
16
16
  </tr>
17
17
  <% end %>
18
18
  </tbody>
@@ -0,0 +1,8 @@
1
+ Description:
2
+ This generator is used to create `solid_queue_interface/overrides.css` in your project's `app/assets/stylesheets` folder where you can add custom styles to override default styles of tables, navbar and pagy for SolidQueueInterface portal.
3
+
4
+ Example:
5
+ bin/rails g solid_queue_interface:override_css
6
+
7
+ This will create:
8
+ `solid_queue_interface/overrides.css` in your project's `app/assets/stylesheets` folder
@@ -0,0 +1,14 @@
1
+ require 'rails/generators/base'
2
+
3
+ class SolidQueueInterface::OverrideCssGenerator < Rails::Generators::Base
4
+ source_root File.expand_path(".", __dir__)
5
+
6
+ desc <<-DESC
7
+ Creates blank `overrides.css` into your project.
8
+ You can add styles to that file to override default styling of table, navbar and pagy for SolidQueueInterface portal.
9
+ DESC
10
+
11
+ def copy_overrides_css_file
12
+ copy_file "../../../../app/assets/stylesheets/solid_queue_interface/overrides.css", "app/assets/stylesheets/solid_queue_interface/overrides.css"
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ This generator is used to copy solid_queue_interface layout template and navbar partial to your project where you can customize SolidQueueInterface portal as per your needs.
3
+
4
+ Example:
5
+ bin/rails g solid_queue_interface:override_layout_and_navbar
6
+
7
+ This will create:
8
+ Layout template `application.html.erb` and navbar partial `_navbar.html.erb` to `app/views/layouts/solid_queue_interface` of your project
@@ -0,0 +1,13 @@
1
+ require 'rails/generators/base'
2
+
3
+ class SolidQueueInterface::OverrideLayoutAndNavbarGenerator < Rails::Generators::Base
4
+ source_root File.expand_path(".", __dir__)
5
+
6
+ desc <<-DESC
7
+ This generator is used to copy solid_queue_interface layout template and navbar partial to your project where you can customize SolidQueueInterface portal as per your needs.
8
+ DESC
9
+
10
+ def copy_layout_and_navbar
11
+ directory "../../../../app/views/layouts/solid_queue_interface", "app/views/layouts/solid_queue_interface"
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ Description:
2
+ This generator is used to copy solid_queue_interface views to your project's `app/views` folder where you can customize SolidQueueInterface portal as per your needs.
3
+
4
+ Example:
5
+ bin/rails g solid_queue_interface:override_views
6
+
7
+ This will create:
8
+ Following files in your project's `app/views/solid_queue_interface` folder:
9
+ - jobs/blocked.html.erb
10
+ - jobs/claimed.html.erb
11
+ - jobs/failed.html.erb
12
+ - jobs/index.html.erb
13
+ - jobs/ready.html.erb
14
+ - jobs/recurring.html.erb
15
+ - jobs/scheduled.html.erb
16
+ - jobs/show.html.erb
17
+ - processes/index.html.erb
18
+ - queues/index.html.erb
19
+ - queues/paused.html.erb
20
+ - semaphores/index.html.erb
@@ -0,0 +1,13 @@
1
+ require 'rails/generators/base'
2
+
3
+ class SolidQueueInterface::OverrideViewsGenerator < Rails::Generators::Base
4
+ source_root File.expand_path(".", __dir__)
5
+
6
+ desc <<-DESC
7
+ This generator is used to copy solid_queue_interface views to your project's `app/views` folder where you can customize SolidQueueInterface portal as per your needs.
8
+ DESC
9
+
10
+ def copy_views
11
+ directory "../../../../app/views/solid_queue_interface", "app/views/solid_queue_interface"
12
+ end
13
+ end
@@ -1,3 +1,5 @@
1
+ require "pagy"
2
+
1
3
  module SolidQueueInterface
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace SolidQueueInterface
@@ -1,3 +1,3 @@
1
1
  module SolidQueueInterface
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_queue_interface
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AquisTech
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-11 00:00:00.000000000 Z
11
+ date: 2024-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: pagy
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '8.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '8.1'
41
55
  description: UI for monitoring solid_queue
42
56
  email:
43
57
  - aquis.tech@gmail.com
@@ -51,6 +65,7 @@ files:
51
65
  - app/assets/config/solid_queue_interface_manifest.js
52
66
  - app/assets/javascripts/solid_queue_interface/application.js
53
67
  - app/assets/stylesheets/solid_queue_interface/application.css
68
+ - app/assets/stylesheets/solid_queue_interface/overrides.css
54
69
  - app/controllers/solid_queue_interface/application_controller.rb
55
70
  - app/controllers/solid_queue_interface/jobs_controller.rb
56
71
  - app/controllers/solid_queue_interface/processes_controller.rb
@@ -79,6 +94,12 @@ files:
79
94
  - app/views/solid_queue_interface/queues/paused.html.erb
80
95
  - app/views/solid_queue_interface/semaphores/index.html.erb
81
96
  - config/routes.rb
97
+ - lib/generators/solid_queue_interface/override_css/USAGE
98
+ - lib/generators/solid_queue_interface/override_css/override_css_generator.rb
99
+ - lib/generators/solid_queue_interface/override_layout_and_navbar/USAGE
100
+ - lib/generators/solid_queue_interface/override_layout_and_navbar/override_layout_and_navbar_generator.rb
101
+ - lib/generators/solid_queue_interface/override_views/USAGE
102
+ - lib/generators/solid_queue_interface/override_views/override_views_generator.rb
82
103
  - lib/solid_queue_interface.rb
83
104
  - lib/solid_queue_interface/engine.rb
84
105
  - lib/solid_queue_interface/version.rb
@@ -105,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
126
  - !ruby/object:Gem::Version
106
127
  version: '0'
107
128
  requirements: []
108
- rubygems_version: 3.1.2
129
+ rubygems_version: 3.4.6
109
130
  signing_key:
110
131
  specification_version: 4
111
132
  summary: UI for monitoring solid_queue