solid_queue_interface 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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