Class: Sidekiq::Web::Application
- Inherits:
-
Object
- Object
- Sidekiq::Web::Application
- Extended by:
- Router
- Includes:
- Router
- Defined in:
- lib/sidekiq/web/application.rb
Constant Summary collapse
- REDIS_KEYS =
%w[redis_version uptime_in_days connected_clients used_memory_human used_memory_peak_human]
- CSP_HEADER_TEMPLATE =
[ "default-src 'self' https: http:", "child-src 'self'", "connect-src 'self' https: http: wss: ws:", "font-src 'none'", "frame-src 'self'", "img-src 'self' https: http: data:", "manifest-src 'self'", "media-src 'self'", "object-src 'none'", "script-src 'self' 'nonce-!placeholder!'", "style-src 'self' 'nonce-!placeholder!'", "worker-src 'self'", "base-uri 'self'" ].join("; ").freeze
- METRICS_PERIODS =
{ "1h" => {minutes: 60}, "2h" => {minutes: 120}, "4h" => {minutes: 240}, "8h" => {minutes: 480}, "24h" => {hours: 24}, "48h" => {hours: 48}, "72h" => {hours: 72} }
- QUEUE_NAME =
/\A[a-z_:.\-0-9]+\z/i
Class Method Summary collapse
-
.helpers(mod) ⇒ Object
Used by extensions to add helper methods accessible to any defined endpoints in Application.
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(inst) ⇒ Application
constructor
A new instance of Application.
- #process_csp(env, input) ⇒ Object
- #redis ⇒ Object
Methods included from Router
delete, get, head, match, patch, post, put, route, route_cache
Constructor Details
#initialize(inst) ⇒ Application
Returns a new instance of Application.
40 41 42 |
# File 'lib/sidekiq/web/application.rb', line 40 def initialize(inst) @app = inst end |
Class Method Details
.helpers(mod) ⇒ Object
Used by extensions to add helper methods accessible to any defined endpoints in Application. Careful with generic method naming as there’s no namespacing so collisions are possible.
464 465 466 |
# File 'lib/sidekiq/web/application.rb', line 464 def self.helpers(mod) Sidekiq::Web::Action.send(:include, mod) end |
Instance Method Details
#call(env) ⇒ Object
426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 |
# File 'lib/sidekiq/web/application.rb', line 426 def call(env) action = match(env) return [404, {"content-type" => "text/plain", "x-cascade" => "pass"}, ["Not Found"]] unless action headers = { "content-type" => "text/html", "cache-control" => "private, no-store", "content-language" => action.locale, "content-security-policy" => process_csp(env, CSP_HEADER_TEMPLATE), "x-content-type-options" => "nosniff" } env["response_headers"] = headers resp = catch(:halt) do Thread.current[:sidekiq_redis_pool] = env[:redis_pool] action.instance_exec env, &action.block ensure Thread.current[:sidekiq_redis_pool] = nil end case resp when Array # redirects go here resp else # rendered content goes here # we'll let Rack calculate Content-Length for us. [200, env["response_headers"], [resp]] end end |
#process_csp(env, input) ⇒ Object
456 457 458 |
# File 'lib/sidekiq/web/application.rb', line 456 def process_csp(env, input) input.gsub("!placeholder!", env[:csp_nonce]) end |
#redis ⇒ Object
422 423 424 |
# File 'lib/sidekiq/web/application.rb', line 422 def redis(&) Thread.current[:sidekiq_redis_pool].with(&) end |