class Eye::Checker::Http

Attributes

uri[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method Eye::Checker::new
# File lib/eye/checker/http.rb, line 17
def initialize(*args)
  super

  @uri = URI.parse(url)
  @kind = case kind
            when Fixnum then Net::HTTPResponse::CODE_TO_OBJ[kind]
            when String, Symbol then Net.const_get("HTTP#{kind.to_s.camelize}") rescue Net::HTTPSuccess
          else
            Net::HTTPSuccess
          end
  @open_timeout = (open_timeout || 3).to_f
  @read_timeout = (read_timeout || timeout || 15).to_f
end

Public Instance Methods

get_value() click to toggle source
# File lib/eye/checker/http.rb, line 31
def get_value
  res = session.start{ |http| http.get(@uri.request_uri) }
  {:result => res}

rescue Timeout::Error => ex
  debug ex.inspect

  if defined?(Net::OpenTimeout) # for ruby 2.0
    mes = ex.class.is_a?(Net::OpenTimeout) ? "OpenTimeout<#{@open_timeout}>" : "ReadTimeout<#{@read_timeout}>"
    {:exception => mes}
  else
    {:exception => "Timeout<#{@open_timeout},#{@read_timeout}>"}
  end

rescue => ex
  {:exception => "Error<#{ex.message}>"}
end
good?(value) click to toggle source
# File lib/eye/checker/http.rb, line 49
def good?(value)
  return false unless value[:result]

  unless value[:result].kind_of?(@kind)
    return false
  end

  if pattern
    matched = if pattern.is_a?(Regexp)
      pattern === value[:result].body
    else
      value[:result].body.include?(pattern.to_s)
    end
    value[:notice] = "missing '#{pattern.to_s}'" unless matched
    matched
  else
    true
  end
end
human_value(value) click to toggle source
# File lib/eye/checker/http.rb, line 69
def human_value(value)
  if !value.is_a?(Hash)
    '-'
  elsif value[:exception]
    value[:exception]
  else
    body_size = value[:result].body.size / 1024
    msg = "#{value[:result].code}=#{body_size}Kb"
    msg += "<#{value[:notice]}>" if value[:notice]
    msg
  end
end

Private Instance Methods

session() click to toggle source
# File lib/eye/checker/http.rb, line 84
def session
  Net::HTTP.new(@uri.host, @uri.port).tap do |session|
    if @uri.scheme == 'https'
      require 'net/https'
      session.use_ssl = true
      session.verify_mode = OpenSSL::SSL::VERIFY_NONE
    end
    session.open_timeout = @open_timeout
    session.read_timeout = @read_timeout
  end
end