Sha256: 6ec54bf7b5640f71055f3c8268629a027de26d327fd0b10b7bdfc2355679d852

Contents?: true

Size: 1.96 KB

Versions: 10

Compression:

Stored size: 1.96 KB

Contents

require 'vault-tools/log'

module Vault
  # Base class for HTTP API services.
  class Web < Sinatra::Base
    # Store the action for logging purposes.
    def self.route(verb, action, *)
      condition { @action = action }
      super
    end

    # Start timing the request.
    before do
      @start_request = Time.now
    end

    # Log details about the request including how long it took.
    after do
      Log.count_status(response.status)
      Log.time(@action, Time.now - @start_request)
    end

    # Make sure error handler blocks are invoked in tests.
    set :show_exceptions, false
    set :raise_errors, false

    # Require HTTPS connections when production mode is enabled.
    use Rack::SslEnforcer if (Config.enable_ssl? && Config.production?)

    # Return an *HTTP 500 Internal Server Error* with a traceback in the
    # body for easy debugging of errors.
    error do
      e = env['sinatra.error']
      content = "#{e.class}: #{e.message}\n\n"
      content << e.backtrace.join("\n")
      [500, content]
    end

    # Determine if the service is running and responding to requests.
    #
    # @method status-check
    # @return The following responses may be returned by this method:
    #
    #   - *HTTP 200 OK*: Returned if the request was successful.
    head '/' do
      status(200)
    end

    # Determine if the service is running and responding to requests.
    #
    # @method health-check
    # @return The following responses may be returned by this method:
    #
    #   - *HTTP 200 OK*: Returned if the request was successful with `OK` in
    #     the body.
    get '/health' do
      [200, 'OK']
    end

    # Trigger an internal server error (to test monitoring and paging tools).
    #
    # @method boom
    # @return The following responses may be returned by this method:
    #
    #   - *HTTP 500 Internal Server Error*: Returned with a traceback in the
    #     body.
    get '/boom' do
      raise "An expected error occurred."
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
vault-tools-0.3.7 lib/vault-tools/web.rb
vault-tools-0.3.6 lib/vault-tools/web.rb
vault-tools-0.3.5 lib/vault-tools/web.rb
vault-tools-0.3.4 lib/vault-tools/web.rb
vault-tools-0.3.3 lib/vault-tools/web.rb
vault-tools-0.3.2 lib/vault-tools/web.rb
vault-tools-0.3.1 lib/vault-tools/web.rb
vault-tools-0.3.0 lib/vault-tools/web.rb
vault-tools-0.2.1 lib/vault-tools/web.rb
vault-tools-0.2.0 lib/vault-tools/web.rb