sidekiq_queue_manager 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 +7 -0
- data/.github/workflows/ci.yml +41 -0
- data/INSTALLATION.md +191 -0
- data/README.md +376 -0
- data/app/assets/javascripts/sidekiq_queue_manager/application.js +1836 -0
- data/app/assets/stylesheets/sidekiq_queue_manager/application.css +1018 -0
- data/app/assets/stylesheets/sidekiq_queue_manager/modals.css +838 -0
- data/app/controllers/sidekiq_queue_manager/application_controller.rb +190 -0
- data/app/controllers/sidekiq_queue_manager/assets_controller.rb +87 -0
- data/app/controllers/sidekiq_queue_manager/dashboard_controller.rb +373 -0
- data/app/services/sidekiq_queue_manager/queue_service.rb +475 -0
- data/app/views/layouts/sidekiq_queue_manager/application.html.erb +132 -0
- data/app/views/sidekiq_queue_manager/dashboard/index.html.erb +208 -0
- data/config/routes.rb +48 -0
- data/lib/sidekiq_queue_manager/configuration.rb +157 -0
- data/lib/sidekiq_queue_manager/engine.rb +151 -0
- data/lib/sidekiq_queue_manager/logging_middleware.rb +29 -0
- data/lib/sidekiq_queue_manager/version.rb +12 -0
- data/lib/sidekiq_queue_manager.rb +122 -0
- metadata +227 -0
@@ -0,0 +1,122 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'sidekiq_queue_manager/version'
|
4
|
+
require_relative 'sidekiq_queue_manager/configuration'
|
5
|
+
require_relative 'sidekiq_queue_manager/logging_middleware'
|
6
|
+
require_relative 'sidekiq_queue_manager/engine'
|
7
|
+
|
8
|
+
# SidekiqQueueManager provides a professional, real-time web interface
|
9
|
+
# for monitoring and managing Sidekiq queues in Ruby on Rails applications.
|
10
|
+
#
|
11
|
+
# Features:
|
12
|
+
# - Real-time queue statistics and monitoring
|
13
|
+
# - Pause/resume individual queues or bulk operations
|
14
|
+
# - Process limit management and job control
|
15
|
+
# - Modern, responsive UI with live updates
|
16
|
+
# - Zero-configuration setup with sensible defaults
|
17
|
+
# - Production-ready with enterprise-grade reliability
|
18
|
+
#
|
19
|
+
# @example Basic usage
|
20
|
+
# # In your Gemfile
|
21
|
+
# gem 'sidekiq_queue_manager'
|
22
|
+
#
|
23
|
+
# # In config/routes.rb
|
24
|
+
# mount SidekiqQueueManager::Engine, at: '/queue_manager'
|
25
|
+
#
|
26
|
+
# @example Advanced configuration
|
27
|
+
# SidekiqQueueManager.configure do |config|
|
28
|
+
# config.authentication_method = :authenticate_admin!
|
29
|
+
# config.critical_queues = ['mailer', 'high_priority']
|
30
|
+
# config.refresh_interval = 3000
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
module SidekiqQueueManager
|
34
|
+
# Configuration error raised when invalid settings are provided
|
35
|
+
class ConfigurationError < StandardError; end
|
36
|
+
|
37
|
+
# Service error raised when Sidekiq operations fail
|
38
|
+
class ServiceError < StandardError; end
|
39
|
+
|
40
|
+
class << self
|
41
|
+
# Global configuration instance
|
42
|
+
# @return [Configuration] the current configuration
|
43
|
+
attr_writer :configuration
|
44
|
+
|
45
|
+
# Returns the global configuration instance
|
46
|
+
# @return [Configuration] the current configuration
|
47
|
+
def configuration
|
48
|
+
@configuration ||= Configuration.new
|
49
|
+
end
|
50
|
+
|
51
|
+
# Yields the global configuration for modification
|
52
|
+
#
|
53
|
+
# @example
|
54
|
+
# SidekiqQueueManager.configure do |config|
|
55
|
+
# config.authentication_method = :authenticate_admin!
|
56
|
+
# config.critical_queues = ['mailer']
|
57
|
+
# end
|
58
|
+
#
|
59
|
+
# @yield [Configuration] the configuration instance
|
60
|
+
# @return [Configuration] the updated configuration
|
61
|
+
def configure
|
62
|
+
yield(configuration) if block_given?
|
63
|
+
configuration.tap(&:validate!) # Ruby idiom: tap for side effects
|
64
|
+
end
|
65
|
+
|
66
|
+
# Resets configuration to defaults (primarily for testing)
|
67
|
+
# @return [Configuration] a new configuration instance
|
68
|
+
def reset_configuration!
|
69
|
+
@configuration = Configuration.new
|
70
|
+
end
|
71
|
+
|
72
|
+
# Validates that required dependencies are available
|
73
|
+
# @return [Boolean] true if all dependencies are satisfied
|
74
|
+
# @raise [ConfigurationError] if dependencies are missing
|
75
|
+
def validate_dependencies!
|
76
|
+
# Use Ruby's case statement for cleaner flow control
|
77
|
+
if !defined?(Rails)
|
78
|
+
raise ConfigurationError, 'Rails is required but not loaded'
|
79
|
+
elsif !defined?(Sidekiq)
|
80
|
+
raise ConfigurationError, 'Sidekiq is required but not loaded'
|
81
|
+
elsif rails_version_insufficient?
|
82
|
+
raise ConfigurationError, "Rails 7.0+ is required, got #{Rails.version}"
|
83
|
+
elsif sidekiq_version_insufficient?
|
84
|
+
raise ConfigurationError, "Sidekiq 7.0+ is required, got #{Sidekiq::VERSION}"
|
85
|
+
else
|
86
|
+
true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Check if the gem is properly configured (Ruby's truthiness approach)
|
91
|
+
def configured?
|
92
|
+
validate_dependencies!
|
93
|
+
configuration.valid?
|
94
|
+
rescue StandardError
|
95
|
+
false
|
96
|
+
end
|
97
|
+
|
98
|
+
# Delegated configuration methods for cleaner API
|
99
|
+
# These delegate to the configuration instance with proper error handling
|
100
|
+
delegate :critical_queue?, to: :configuration
|
101
|
+
|
102
|
+
delegate :queue_priority, to: :configuration
|
103
|
+
|
104
|
+
delegate :basic_auth_enabled?, to: :configuration
|
105
|
+
|
106
|
+
delegate :enable_logging?, to: :configuration
|
107
|
+
|
108
|
+
delegate :enable_caching?, to: :configuration
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
# Ruby idiom: break complex conditions into intention-revealing methods
|
113
|
+
def rails_version_insufficient?
|
114
|
+
Rails.version < '7.0.0'
|
115
|
+
end
|
116
|
+
|
117
|
+
def sidekiq_version_insufficient?
|
118
|
+
Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new('7.0.0')
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
metadata
ADDED
@@ -0,0 +1,227 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sidekiq_queue_manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jamal Awad
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-07-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 7.0.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '8.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 7.0.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '8.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: sidekiq
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 7.0.0
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '8.0'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 7.0.0
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '8.0'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: redis
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 4.8.0
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '6.0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 4.8.0
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '6.0'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: sidekiq-limit_fetch
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '4.4'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.4.0
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.4'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 4.4.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: multi_json
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '1.15'
|
100
|
+
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '1.15'
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: rake
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - "~>"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '13.0'
|
114
|
+
type: :development
|
115
|
+
prerelease: false
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - "~>"
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '13.0'
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: rubocop
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - "~>"
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '1.60'
|
128
|
+
type: :development
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - "~>"
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '1.60'
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: rubocop-performance
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - "~>"
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '1.20'
|
142
|
+
type: :development
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '1.20'
|
149
|
+
- !ruby/object:Gem::Dependency
|
150
|
+
name: rubocop-rails
|
151
|
+
requirement: !ruby/object:Gem::Requirement
|
152
|
+
requirements:
|
153
|
+
- - "~>"
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '2.23'
|
156
|
+
type: :development
|
157
|
+
prerelease: false
|
158
|
+
version_requirements: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - "~>"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '2.23'
|
163
|
+
description: |
|
164
|
+
A modern, real-time web interface for monitoring and managing Sidekiq queues.
|
165
|
+
Features include live queue statistics, pause/resume operations, process limit management,
|
166
|
+
bulk operations, and a responsive UI with zero configuration required.
|
167
|
+
|
168
|
+
Perfect for production environments requiring professional queue monitoring capabilities.
|
169
|
+
Built with Rails 7+ and shadcn-inspired design system for optimal user experience.
|
170
|
+
email:
|
171
|
+
- jamal.a@crawlbase.com
|
172
|
+
executables: []
|
173
|
+
extensions: []
|
174
|
+
extra_rdoc_files: []
|
175
|
+
files:
|
176
|
+
- ".github/workflows/ci.yml"
|
177
|
+
- INSTALLATION.md
|
178
|
+
- README.md
|
179
|
+
- app/assets/javascripts/sidekiq_queue_manager/application.js
|
180
|
+
- app/assets/stylesheets/sidekiq_queue_manager/application.css
|
181
|
+
- app/assets/stylesheets/sidekiq_queue_manager/modals.css
|
182
|
+
- app/controllers/sidekiq_queue_manager/application_controller.rb
|
183
|
+
- app/controllers/sidekiq_queue_manager/assets_controller.rb
|
184
|
+
- app/controllers/sidekiq_queue_manager/dashboard_controller.rb
|
185
|
+
- app/services/sidekiq_queue_manager/queue_service.rb
|
186
|
+
- app/views/layouts/sidekiq_queue_manager/application.html.erb
|
187
|
+
- app/views/sidekiq_queue_manager/dashboard/index.html.erb
|
188
|
+
- config/routes.rb
|
189
|
+
- lib/sidekiq_queue_manager.rb
|
190
|
+
- lib/sidekiq_queue_manager/configuration.rb
|
191
|
+
- lib/sidekiq_queue_manager/engine.rb
|
192
|
+
- lib/sidekiq_queue_manager/logging_middleware.rb
|
193
|
+
- lib/sidekiq_queue_manager/version.rb
|
194
|
+
homepage: https://github.com/jamalawd/sidekiq_queue_manager
|
195
|
+
licenses:
|
196
|
+
- MIT
|
197
|
+
metadata:
|
198
|
+
homepage_uri: https://github.com/jamalawd/sidekiq_queue_manager
|
199
|
+
source_code_uri: https://github.com/jamalawd/sidekiq_queue_manager/tree/master
|
200
|
+
changelog_uri: https://github.com/jamalawd/sidekiq_queue_manager/blob/master/CHANGELOG.md
|
201
|
+
bug_tracker_uri: https://github.com/jamalawd/sidekiq_queue_manager/issues
|
202
|
+
documentation_uri: https://github.com/jamalawd/sidekiq_queue_manager/blob/master/README.md
|
203
|
+
wiki_uri: https://github.com/jamalawd/sidekiq_queue_manager/wiki
|
204
|
+
mailing_list_uri: https://github.com/jamalawd/sidekiq_queue_manager/discussions
|
205
|
+
funding_uri: https://github.com/jamalawd/sidekiq_queue_manager/sponsors
|
206
|
+
rubygems_mfa_required: 'true'
|
207
|
+
allowed_push_host: https://rubygems.org
|
208
|
+
post_install_message:
|
209
|
+
rdoc_options: []
|
210
|
+
require_paths:
|
211
|
+
- lib
|
212
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
213
|
+
requirements:
|
214
|
+
- - ">="
|
215
|
+
- !ruby/object:Gem::Version
|
216
|
+
version: 3.0.0
|
217
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
|
+
requirements:
|
219
|
+
- - ">="
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
222
|
+
requirements: []
|
223
|
+
rubygems_version: 3.6.0.dev
|
224
|
+
signing_key:
|
225
|
+
specification_version: 4
|
226
|
+
summary: Professional Sidekiq queue monitoring and management interface
|
227
|
+
test_files: []
|