1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Implement several extension points

This commit is contained in:
Mike Perham 2016-07-26 22:19:56 -07:00
parent 821abb230f
commit 20e1035bea
2 changed files with 53 additions and 20 deletions

View file

@ -61,24 +61,18 @@ module Sidekiq
secret = Web.session_secret
if secret.nil?
# explicitly generating a session secret eagerly to play nice with preforking
begin
require 'securerandom'
secret = SecureRandom.hex(64)
rescue LoadError, NotImplementedError
# SecureRandom raises a NotImplementedError if no random device is available
secret = "%064x" % Kernel.rand(2**256-1)
end
require 'securerandom'
secret = SecureRandom.hex(64)
end
@app = Rack::Builder.new do
@app = ::Rack::Builder.new do
%w(stylesheets javascripts images).each do |asset_dir|
map "/#{asset_dir}" do
run Rack::File.new("#{ASSETS}/#{asset_dir}")
run ::Rack::File.new("#{ASSETS}/#{asset_dir}")
end
end
use Rack::Session::Cookie, secret: secret
use ::Rack::Session::Cookie, secret: secret
use ::Rack::Protection, use: :authenticity_token unless ENV['RACK_ENV'] == 'test'
run WebApplication.new
@ -94,6 +88,10 @@ module Sidekiq
@app.call(env)
end
def self.register(extension)
extension.registered(WebApplication)
end
ERB.new(File.read LAYOUT).def_method(WebAction, '_render')
end
end

View file

@ -42,7 +42,7 @@ module Sidekiq
get "/queues/:name" do
@name = route_params[:name]
next(not_found(env)) unless @name
next(NOPE) unless @name
@count = (params['count'] || 25).to_i
@queue = Sidekiq::Queue.new(@name)
@ -74,7 +74,7 @@ module Sidekiq
end
get "/morgue/:key" do
next not_found(env) unless key = route_params[:key]
next NOPE unless key = route_params[:key]
@dead = Sidekiq::DeadSet.new.fetch(*parse_params(key)).first
@ -109,7 +109,7 @@ module Sidekiq
end
post "/morgue/:key" do
next not_found(env) unless key = route_params[:key]
next NOPE unless key = route_params[:key]
job = Sidekiq::DeadSet.new.fetch(*parse_params(key)).first
retry_or_delete_or_kill job, params if job
@ -196,7 +196,7 @@ module Sidekiq
end
post "/scheduled/:key" do
next not_found(env) unless key = route_params[:key]
next NOPE unless key = route_params[:key]
job = Sidekiq::ScheduledSet.new.fetch(*parse_params(key)).first
delete_or_add_queue job, params if job
@ -232,14 +232,49 @@ module Sidekiq
json Sidekiq::Stats::Queues.new.lengths
end
def not_found(env)
[404, {}, []]
end
NOPE = [404, {}, []]
def call(env)
action = self.class.match(env) || WebAction.new(env, method(:not_found).to_proc)
action = self.class.match(env)
return NOPE unless action
action.instance_exec env, &action.app
self.class.run_befores(env)
resp = action.instance_exec env, &action.app
self.class.run_afters(env)
resp
end
def self.helpers(mod)
WebAction.send(:include, mod)
end
def self.before(&block)
befores << block
end
def self.after(&block)
afters << block
end
def self.run_befores(env)
befores.each do |b|
b.call(env)
end
end
def self.run_afters(env)
afters.each do |b|
b.call(env)
end
end
def self.befores
@befores ||= []
end
def self.afters
@afters ||= []
end
end
end