diff --git a/lib/sidekiq/grouping.rb b/lib/sidekiq/grouping.rb index 3e6b908..d827de8 100644 --- a/lib/sidekiq/grouping.rb +++ b/lib/sidekiq/grouping.rb @@ -2,7 +2,7 @@ require "active_support" require "active_support/core_ext/string" -require "active_support/configurable" +require "active_support/ordered_options" require "active_support/core_ext/numeric/time" require "sidekiq" require "sidekiq/grouping/version" @@ -55,6 +55,8 @@ def start! config.client_middleware do |chain| chain.add Sidekiq::Grouping::Middleware end -end -Sidekiq::Grouping.start! if Sidekiq.server? + config.on(:startup) do + Sidekiq::Grouping.start! + end +end diff --git a/lib/sidekiq/grouping/config.rb b/lib/sidekiq/grouping/config.rb index 6bde5b6..b5db40f 100644 --- a/lib/sidekiq/grouping/config.rb +++ b/lib/sidekiq/grouping/config.rb @@ -3,38 +3,43 @@ module Sidekiq module Grouping module Config - include ActiveSupport::Configurable - - def self.options - if Sidekiq.respond_to?(:[]) # Sidekiq 6.x - Sidekiq[:grouping] || {} - elsif Sidekiq.respond_to?(:options) # Sidekiq <= 5.x - Sidekiq.options[:grouping] || Sidekiq.options["grouping"] || {} - else # Sidekiq 7.x - Sidekiq.default_configuration[:grouping] || {} + class << self + %i[lock_ttl max_batch_size poll_interval tests_env].each do |method_name| + define_method(method_name) do + config[method_name] + end + define_method(:"#{method_name}=") do |value| + config[method_name] = value + end end - end - - # Queue size overflow check polling interval - config_accessor :poll_interval do - options[:poll_interval] || 3 - end - # Maximum batch size - config_accessor :max_batch_size do - options[:max_batch_size] || 1000 - end + private - # Batch queue flush lock timeout - config_accessor :lock_ttl do - options[:lock_ttl] || 1 - end + def config + @config ||= ActiveSupport::InheritableOptions.new( + lock_ttl: options[:lock_ttl] || 1, + max_batch_size: options[:max_batch_size] || 1_000, + poll_interval: options[:poll_interval] || 3, + tests_env: options[:tests_env] || ( + defined?(::Rails) && ::Rails.respond_to?(:env) && ::Rails.env.test? + ) + ) + end - # Option to override how Sidekiq::Grouping know about tests env - config_accessor :tests_env do - options[:tests_env] || ( - defined?(::Rails) && Rails.respond_to?(:env) && Rails.env.test? - ) + def options + @options ||= + begin + if Sidekiq.respond_to?(:[]) # Sidekiq 6.x + Sidekiq[:grouping] || {} + elsif Sidekiq.respond_to?(:options) # Sidekiq <= 5.x + Sidekiq.options[:grouping] || Sidekiq.options["grouping"] || {} + elsif Sidekiq.server? # Sidekiq >= 7.x + Sidekiq::CLI.instance.config[:grouping] || {} + else + Sidekiq.default_configuration[:grouping] || {} + end + end + end end end end diff --git a/lib/sidekiq/grouping/views/index.erb b/lib/sidekiq/grouping/views/index.erb index b261ad2..e155458 100644 --- a/lib/sidekiq/grouping/views/index.erb +++ b/lib/sidekiq/grouping/views/index.erb @@ -25,8 +25,9 @@ <%= batch.last_execution_time || "–"%> <%= batch.next_execution_time || "–"%> -
" method="post"> + " method="post"> <%= csrf_tag %> +
diff --git a/lib/sidekiq/grouping/web.rb b/lib/sidekiq/grouping/web.rb index 007e6f0..5a13ea5 100644 --- a/lib/sidekiq/grouping/web.rb +++ b/lib/sidekiq/grouping/web.rb @@ -14,10 +14,11 @@ def self.registered(app) locals: { view_path: VIEWS } end - app.post "/grouping/:name/delete" do + app.delete "/grouping/:name64" do + name = Base64.decode64(params["name64"]) worker_class, queue = Sidekiq::Grouping::Batch.extract_worker_klass_and_queue( - params["name"] + name ) batch = Sidekiq::Grouping::Batch.new(worker_class, queue) batch.delete @@ -28,5 +29,17 @@ def self.registered(app) end end -Sidekiq::Web.register(Sidekiq::Grouping::Web) -Sidekiq::Web.tabs["Grouping"] = "grouping" +args = { + name: "grouping", + tab: ["Grouping"], + index: ["grouping"], + root_dir: File.dirname(__FILE__) +} + +if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("8.0.0") + Sidekiq::Web.configure do |cfg| + cfg.register(Sidekiq::Grouping::Web, **args) + end +else + Sidekiq::Web.register(Sidekiq::Grouping::Web, **args) +end