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.
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
@@ -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: count_pending_jobs),
10
- Metric.new(key: :scheduled, label: "Scheduled", value: count_scheduled_jobs),
11
- Metric.new(key: :running, label: "Running", value: count_running_jobs),
12
- Metric.new(key: :failed, label: "Failed", value: count_failed_jobs),
13
- Metric.new(key: :completed, label: "Completed", value: count_completed_jobs),
14
- Metric.new(key: :latency, label: "Latency", value: calculate_latency)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ModernQueueDashboard
4
- VERSION = "0.3.1"
4
+ VERSION = "0.5.0"
5
5
  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.3.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.3.1
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