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.
@@ -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: []