modern_queue_dashboard 0.3.1 → 0.5.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 +34 -4
- data/README.md +13 -13
- data/app/assets/builds/modern_queue_dashboard.css +1 -1
- data/app/controllers/modern_queue_dashboard/dashboard_controller.rb +1 -0
- data/app/controllers/modern_queue_dashboard/jobs_controller.rb +114 -0
- data/app/controllers/modern_queue_dashboard/queues_controller.rb +119 -3
- data/app/models/modern_queue_dashboard/job_summary.rb +272 -0
- data/app/models/modern_queue_dashboard/metrics.rb +43 -9
- data/app/models/modern_queue_dashboard/queue_summary.rb +102 -33
- data/app/views/modern_queue_dashboard/dashboard/index.html.erb +53 -2
- data/app/views/modern_queue_dashboard/jobs/show.html.erb +102 -0
- data/app/views/modern_queue_dashboard/queues/index.html.erb +1 -1
- data/app/views/modern_queue_dashboard/queues/show.html.erb +175 -14
- data/config/routes.rb +17 -1
- data/debug_load_order.rb +17 -0
- data/lib/modern_queue_dashboard/engine.rb +14 -0
- data/lib/modern_queue_dashboard/metrics.rb +8 -31
- data/lib/modern_queue_dashboard/version.rb +1 -1
- data/lib/modern_queue_dashboard.rb +7 -4
- data/package.json +1 -1
- data/screenshots/dashboard.png +0 -0
- metadata +20 -2
- data/lib/modern_queue_dashboard/queue_summary.rb +0 -38
data/config/routes.rb
CHANGED
@@ -3,5 +3,21 @@
|
|
3
3
|
ModernQueueDashboard::Engine.routes.draw do
|
4
4
|
root to: "dashboard#index"
|
5
5
|
|
6
|
-
resources :queues, only: %i[index show]
|
6
|
+
resources :queues, only: %i[index show] do
|
7
|
+
member do
|
8
|
+
post "retry_job/:job_id", to: "queues#retry_job", as: "retry_job"
|
9
|
+
delete "discard_job/:job_id", to: "queues#discard_job", as: "discard_job"
|
10
|
+
get "status/:status", to: "queues#show", as: "status"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
resources :jobs, only: [ :show ] do
|
15
|
+
member do
|
16
|
+
post "retry", to: "jobs#retry"
|
17
|
+
delete "discard", to: "jobs#discard"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Debug route for troubleshooting
|
22
|
+
get "debug", to: "dashboard#debug"
|
7
23
|
end
|
data/debug_load_order.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
|
6
|
+
puts "Loading files..."
|
7
|
+
require_relative 'lib/modern_queue_dashboard'
|
8
|
+
require_relative 'app/models/modern_queue_dashboard/queue_summary'
|
9
|
+
|
10
|
+
# Check if constants are loaded
|
11
|
+
puts "ModernQueueDashboard defined? #{defined?(ModernQueueDashboard) != nil}"
|
12
|
+
puts "QueueSummary defined? #{defined?(ModernQueueDashboard::QueueSummary) != nil}"
|
13
|
+
puts "QueueStatCollection defined? #{defined?(ModernQueueDashboard::QueueStatCollection) != nil}"
|
14
|
+
|
15
|
+
if defined?(ModernQueueDashboard::QueueSummary)
|
16
|
+
puts "ModernQueueDashboard::QueueSummary location: #{ModernQueueDashboard::QueueSummary.method(:with_stats).source_location}"
|
17
|
+
end
|
@@ -2,11 +2,15 @@
|
|
2
2
|
|
3
3
|
require "rails/engine"
|
4
4
|
require "tailwindcss-rails" if defined?(TailwindCss)
|
5
|
+
require "pagy"
|
5
6
|
|
6
7
|
module ModernQueueDashboard
|
7
8
|
class Engine < ::Rails::Engine
|
8
9
|
isolate_namespace ModernQueueDashboard
|
9
10
|
|
11
|
+
# Set up paths for models
|
12
|
+
config.paths.add "app/models", eager_load: true
|
13
|
+
|
10
14
|
# Precompile CSS & JS builds that ship with the gem
|
11
15
|
initializer "modern_queue_dashboard.assets" do |app|
|
12
16
|
# Check if the app uses the asset pipeline that requires explicit precompilation
|
@@ -20,5 +24,15 @@ module ModernQueueDashboard
|
|
20
24
|
app.config.tailwindcss.content_includes = [ "./views/**/*.html.erb", "./helpers/**/*.rb" ]
|
21
25
|
end
|
22
26
|
end
|
27
|
+
|
28
|
+
initializer "modern_queue_dashboard.include_pagy_module" do
|
29
|
+
ActiveSupport.on_load :action_controller_base do
|
30
|
+
include Pagy::Backend
|
31
|
+
end
|
32
|
+
|
33
|
+
ActiveSupport.on_load :action_view do
|
34
|
+
include Pagy::Frontend
|
35
|
+
end
|
36
|
+
end
|
23
37
|
end
|
24
38
|
end
|
@@ -1,43 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ModernQueueDashboard
|
4
|
+
# Represents a single metric
|
4
5
|
Metric = Struct.new(:key, :label, :value, keyword_init: true)
|
5
6
|
|
7
|
+
# Provides metrics related to jobs
|
6
8
|
class Metrics
|
7
9
|
def self.summary
|
8
10
|
[
|
9
|
-
Metric.new(key: :pending, label: "Pending", value:
|
10
|
-
Metric.new(key: :scheduled, label: "Scheduled", value:
|
11
|
-
Metric.new(key: :running, label: "Running", value:
|
12
|
-
Metric.new(key: :failed, label: "Failed", value:
|
13
|
-
Metric.new(key: :completed, label: "Completed", value:
|
14
|
-
Metric.new(key: :latency, label: "Latency", value:
|
11
|
+
Metric.new(key: :pending, label: "Pending", value: 0),
|
12
|
+
Metric.new(key: :scheduled, label: "Scheduled", value: 0),
|
13
|
+
Metric.new(key: :running, label: "Running", value: 0),
|
14
|
+
Metric.new(key: :failed, label: "Failed", value: 0),
|
15
|
+
Metric.new(key: :completed, label: "Completed", value: 0),
|
16
|
+
Metric.new(key: :latency, label: "Avg. Latency", value: 0)
|
15
17
|
]
|
16
18
|
end
|
17
|
-
|
18
|
-
# These methods are placeholders and will need to be implemented using the SolidQueue models
|
19
|
-
def self.count_pending_jobs
|
20
|
-
0
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.count_scheduled_jobs
|
24
|
-
0
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.count_running_jobs
|
28
|
-
0
|
29
|
-
end
|
30
|
-
|
31
|
-
def self.count_failed_jobs
|
32
|
-
0
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.count_completed_jobs
|
36
|
-
0
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.calculate_latency
|
40
|
-
0
|
41
|
-
end
|
42
19
|
end
|
43
20
|
end
|
@@ -4,9 +4,6 @@ require "rails"
|
|
4
4
|
require "action_controller/railtie"
|
5
5
|
require "active_support/dependencies"
|
6
6
|
require_relative "modern_queue_dashboard/version"
|
7
|
-
require_relative "modern_queue_dashboard/engine"
|
8
|
-
require_relative "modern_queue_dashboard/metrics"
|
9
|
-
require_relative "modern_queue_dashboard/queue_summary"
|
10
7
|
|
11
8
|
module ModernQueueDashboard
|
12
9
|
class Error < StandardError; end
|
@@ -31,5 +28,11 @@ module ModernQueueDashboard
|
|
31
28
|
yield(configuration)
|
32
29
|
end
|
33
30
|
end
|
34
|
-
# Your code goes here...
|
35
31
|
end
|
32
|
+
|
33
|
+
# Load engine which will handle autoloading of app files
|
34
|
+
require_relative "modern_queue_dashboard/engine"
|
35
|
+
|
36
|
+
# Explicitly require models for compatibility
|
37
|
+
require_relative "../app/models/modern_queue_dashboard/queue_summary"
|
38
|
+
require_relative "../app/models/modern_queue_dashboard/metrics"
|
data/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "modern_queue_dashboard",
|
3
3
|
"private": true,
|
4
|
-
"version": "0.
|
4
|
+
"version": "0.5.0",
|
5
5
|
"description": "Dashboard for Rails Solid Queue jobs",
|
6
6
|
"scripts": {
|
7
7
|
"build:css": "tailwindcss -i ./app/assets/stylesheets/modern_queue_dashboard.css -o ./app/assets/builds/modern_queue_dashboard.css --minify",
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modern_queue_dashboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clayton Lengel-Zigich
|
@@ -71,6 +71,20 @@ dependencies:
|
|
71
71
|
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
73
|
version: '2.0'
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: pagy
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '7.0'
|
81
|
+
type: :runtime
|
82
|
+
prerelease: false
|
83
|
+
version_requirements: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '7.0'
|
74
88
|
- !ruby/object:Gem::Dependency
|
75
89
|
name: minitest
|
76
90
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,22 +163,26 @@ files:
|
|
149
163
|
- app/assets/stylesheets/modern_queue_dashboard.css
|
150
164
|
- app/controllers/modern_queue_dashboard/application_controller.rb
|
151
165
|
- app/controllers/modern_queue_dashboard/dashboard_controller.rb
|
166
|
+
- app/controllers/modern_queue_dashboard/jobs_controller.rb
|
152
167
|
- app/controllers/modern_queue_dashboard/queues_controller.rb
|
168
|
+
- app/models/modern_queue_dashboard/job_summary.rb
|
153
169
|
- app/models/modern_queue_dashboard/metrics.rb
|
154
170
|
- app/models/modern_queue_dashboard/queue_summary.rb
|
155
171
|
- app/views/layouts/modern_queue_dashboard/application.html.erb
|
156
172
|
- app/views/modern_queue_dashboard/dashboard/index.html.erb
|
173
|
+
- app/views/modern_queue_dashboard/jobs/show.html.erb
|
157
174
|
- app/views/modern_queue_dashboard/queues/index.html.erb
|
158
175
|
- app/views/modern_queue_dashboard/queues/show.html.erb
|
159
176
|
- config/routes.rb
|
177
|
+
- debug_load_order.rb
|
160
178
|
- docs/PLAN.md
|
161
179
|
- lib/modern_queue_dashboard.rb
|
162
180
|
- lib/modern_queue_dashboard/engine.rb
|
163
181
|
- lib/modern_queue_dashboard/metrics.rb
|
164
|
-
- lib/modern_queue_dashboard/queue_summary.rb
|
165
182
|
- lib/modern_queue_dashboard/version.rb
|
166
183
|
- package-lock.json
|
167
184
|
- package.json
|
185
|
+
- screenshots/dashboard.png
|
168
186
|
- sig/modern_queue_dashboard.rbs
|
169
187
|
- tailwind.config.js
|
170
188
|
homepage: https://github.com/clayton/modern_queue_dashboard
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ModernQueueDashboard
|
4
|
-
QueueStat = Struct.new(:name, :pending, :scheduled, :running, :failed, :latency, keyword_init: true)
|
5
|
-
|
6
|
-
class QueueSummary
|
7
|
-
def self.with_stats
|
8
|
-
# This is a placeholder and will need actual implementation using SolidQueue
|
9
|
-
results = [
|
10
|
-
QueueStat.new(
|
11
|
-
name: "default",
|
12
|
-
pending: 0,
|
13
|
-
scheduled: 0,
|
14
|
-
running: 0,
|
15
|
-
failed: 0,
|
16
|
-
latency: 0
|
17
|
-
)
|
18
|
-
]
|
19
|
-
QueueStatCollection.new(results)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class QueueStatCollection
|
24
|
-
include Enumerable
|
25
|
-
|
26
|
-
def initialize(stats)
|
27
|
-
@stats = stats
|
28
|
-
end
|
29
|
-
|
30
|
-
def each(&)
|
31
|
-
@stats.each(&)
|
32
|
-
end
|
33
|
-
|
34
|
-
def limit(num)
|
35
|
-
QueueStatCollection.new(@stats.take(num))
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|