
Product
Introducing Tier 1 Reachability: Precision CVE Triage for Enterprise Teams
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.
Planned downtime management for Rack applications
Rack::Dowtime
does not add a maintenance page -there are plenty of ways to do this already. Instead,
it provides one with a variety of simple ways to trigger and takedown planned maintenance notifications while a site
is still up.
require "rack/downtime"
use Rack::Downtime
In your layout:
<% if ENV.include?("rack.downtime") %>
<div>
<p>
We will be down for maintenance on
<%= ENV["rack.downtime"][0].strftime("%b %e") %> from
<%= ENV["rack.downtime"][0].strftime("%l:%M %p") %> to
<%= ENV["rack.downtime"][1].strftime("%l:%M %p") %> EST.
</p>
</div>
<% end %>
Now set the downtime using the :file
strategy:
# 1 to 4 AM
> echo '2014-11-15T01:00/2014-11-15T04:00' > downtime.txt
If you prefer, Rack::Downtime
can insert the message for you:
# Inserts a downtime message
use Rack::Downtime, :insert => "my_template.erb"
# Specify where to insert message
use Rack::Downtime, :insert => "my_template.erb", :insert_at => "body #container"
The downtime can be set various ways:
# From the HTTP header X-Downtime
use Rack::Downtime, :strategy => :header
use Rack::Downtime, :strategy => { :header => "X-MyHeader" }
# Or from the query string
use Rack::Downtime, :strategy => :query
use Rack::Downtime, :strategy => { :query => "dwn__" }
Alternate configuration:
Rack::Downtime.strategy = :file
Rack::Downtime::Strategy::File.path = Rails.root.join("downtime.txt")
Control its behavior via environment variables:
SetEnv RACK_DOWNTIME 2014-11-15T01:00:00-05/2014-11-15T04:00:00-05
# Disable
SetEnv RACK_DOWNTIME_DISABLE 1
# Or, just turn of insertion
SetEnv RACK_DOWNTIME_INSERT 0
Downtime can be retrieved from various locations via a downtime strategy. When downtime is detected,
it's turned into 2 instances of DateTime
and added to the Rack environment at rack.downtime
. The 0th
element is the start time and the 1st element is the end time.
The dates must be given as an ISO 8601 time interval
in start/end
format. If no dates are found rack.downtime
will not be set.
Downtime messages can also be added to the response's body. See Inserting a Downtime Message.
Strategies are given via the :strategy
option. If none is provided then Rack::Downtime.strategy
is used, which defaults to :file
.
:file
Looks in the current directory for a file named downtime.txt
.
use Rack::Downtime :strategy => :file
To use a file named my_file.txt
:
use Rack::Downtime :strategy => { :file => "my_file.txt" }
:query
Looks for a query string parameter named __dt__
.
use Rack::Downtime :strategy => :query
To use a query string named q
:
use Rack::Downtime :strategy => { :query => "q" }
:header
Looks for an HTTP header named X-Downtime
.
use Rack::Downtime :strategy => :header
To look for a header named X-DT-4SHO
:
use Rack::Downtime :strategy => { :header => "X-DT-4SHO" }
Internally the header will be converted to match
what rack generates, e.g., HTTP_*
.
:env
Looks for an environment variable named RACK_DOWNTIME
.
:cookie
Looks for cookie named __dt__
.
use Rack::Downtime :strategy => :cookie
To use a cookie named oreo
:
use Rack::Downtime :strategy => { :cookie => "oreo" }
Just pass in something that responds to :call
, accepts a rack environment, and returns a downtime array.
use Rack::Downtime :strategy => ->(env) { YourDownTimeConfig.find_dowmtime }
A message can be inserted by Rack::Downtime
into your response's body whenever downtime is scheduled.
Just provide a path to an ERB template to the :insert
option. The downtime will be passed to the template
as start_time
and end_time
.
By default the template will be inserted after the body
tag. This can be changed by providing the
desired location to the :insert_at
option. The location can be given as a CSS selector or an XPath location.
Messages are only inserted into HTML responses with a 200
status code.
Note that when Rack::Downtime
inserts a message it will turn a streaming response into a buffered one.
If this is a problem you can always check for and insert the downtime yourself in your application.
Don't invalidate XHTML responses when inserting a downtime message.
Skye Shaw [sshaw AT gmail.com]
FAQs
Unknown package
We found that rack-downtime demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.
Research
/Security News
Ongoing npm supply chain attack spreads to DuckDB: multiple packages compromised with the same wallet-drainer malware.
Security News
The MCP Steering Committee has launched the official MCP Registry in preview, a central hub for discovering and publishing MCP servers.