class Cogent::Healthcheck::Check

Public Class Methods

new(app) click to toggle source
# File lib/healthcheck/check.rb, line 7
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/healthcheck/check.rb, line 11
def call(env)
  path_info = env['PATH_INFO']
  if path_info == '/checks'
    response('200', checks(env).to_json, env)
  elsif path_info =~ /\/checks\//
    check_name = path_info.split('/').last
    check(check_name, env)          
  else
    @app.call(env)
  end
end

Private Instance Methods

check(name, env) click to toggle source
# File lib/healthcheck/check.rb, line 24
def check(name, env)
  check = Cogent::Healthcheck.config.checks.find{|check| check.name  == name}
  begin
    check.new.execute
  rescue => e
    response('500', {error: e.backtrace}.to_json, env)
  end
    response('200', '', env)
end
checks(env) click to toggle source
# File lib/healthcheck/check.rb, line 34
def checks(env)
  base_uri = [env['rack.url_scheme'], '://',env['HTTP_HOST'], env['REQUEST_PATH']].join
  checks = Cogent::Healthcheck.config.checks.map do |check|
    uri = [base_uri, '/', check.name].join
    {
      name: check.name,
      description: check.description,
      href: uri
    }
  end
end
response(status_code, body, env) click to toggle source
# File lib/healthcheck/check.rb, line 46
def response(status_code, body, env)
  content_type = 'application/json'
  if env['QUERY_STRING'] && env['QUERY_STRING'] =~ /callback/
    query_string = env['QUERY_STRING'].gsub(/callback=/, '')
    callback = query_string.split('&')[0]
    body = "#{callback}(#{body})"
    content_type = 'application/javascript'
  end
  [status_code, {'Content-Type' => content_type}, [body]]
end