class Heartcheck::Checks::Webservice

Check for a webservice service Base is set in heartcheck gem

Constants

DEFAULT_OPEN_TIMEOUT
DEFAULT_READ_TIMEOUT

Public Instance Methods

uri_info() click to toggle source

list services uri info

@return [Array]

# File lib/heartcheck/checks/webservice.rb, line 18
def uri_info
  services.map do |s|
    uri = URI(s[:url])
    {
      host: uri.host,
      port: uri.port,
      scheme: uri.scheme
    }
  end
end
validate() click to toggle source

validate each service

@retun [void]

# File lib/heartcheck/checks/webservice.rb, line 9
def validate
  services.each do |service|
    execute service
  end
end

Private Instance Methods

custom_error(name, key_error) click to toggle source

customize the error message It's called in Heartcheck::Checks::Base#append_error

@param name [String] An identifier of service @param key_error [Symbol] name of action

@return [void]

# File lib/heartcheck/checks/webservice.rb, line 42
def custom_error(name, key_error)
  @errors << "#{name} fails to #{key_error}"
end
execute(service) click to toggle source

execute and validation request

@param service [Hash] An identifier of service

@return [void]

# File lib/heartcheck/checks/webservice.rb, line 51
def execute(service)
  response = request_for(service)
  error = valid?(response, service)

  append_error(service, error) if error
rescue SocketError
  append_error service, 'inaccessible'
rescue Timeout::Error
  append_error service, 'timeout'
rescue => e
  append_error service, e.message
end
request_for(service) click to toggle source

execute request

@param service [Hash] An identifier of service

@return [Net:HTTP]

# File lib/heartcheck/checks/webservice.rb, line 101
def request_for(service)
  Heartcheck::Webservice::HttpClient.new(
    service[:url],
    service[:proxy],
    service[:ignore_ssl_cert],
    service[:headers],
    service.fetch(:open_timeout, DEFAULT_OPEN_TIMEOUT),
    service.fetch(:read_timeout, DEFAULT_READ_TIMEOUT)
  ).get
end
valid?(response, service) click to toggle source

validate response

@param response [Net:HTTP] HTTP response @param service [Hash] An identifier of service

@return [String]

# File lib/heartcheck/checks/webservice.rb, line 70
def valid?(response, service)
  return nil if valid_status?(response) && valid_body?(response, service)
  'unexpected_response'
end
valid_body?(response, service) click to toggle source

validate if response body contains body_match params

@param response [Net:HTTP] HTTP response @param service [Hash] An identifier of service

@return [Bollean]

# File lib/heartcheck/checks/webservice.rb, line 90
def valid_body?(response, service)
  return true unless service[:body_match]

  response.body =~ service[:body_match]
end
valid_status?(response) click to toggle source

validate if response is Net::HTTPSuccess

@param response [Net:HTTP] HTTP response

@return [Bollean]

# File lib/heartcheck/checks/webservice.rb, line 80
def valid_status?(response)
  response.is_a?(Net::HTTPSuccess)
end