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:
parent
821abb230f
commit
20e1035bea
2 changed files with 53 additions and 20 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue