class StatusChecker::Check

Public Class Methods

new(email=["technical_root@mail.ru"], per=10, domain=["https://ukr.net", "https://yandex.ru"]) click to toggle source
# File lib/status_checker/check.rb, line 9
def initialize(email=["technical_root@mail.ru"], per=10,
               domain=["https://ukr.net", "https://yandex.ru"])
  # initialize all instanse variables
  extend MonitorMixin
  @email    = email
  @delay    = per
  @domain   = domain
  @timer    = StatusChecker::Timer.new(@delay)
  @resp_stack = Hash.new
end

Public Instance Methods

check_url(url) click to toggle source
# File lib/status_checker/check.rb, line 38
def check_url(url)
  response = check_http_status_of(url)
  if response.code != 200.to_s && !recurrent_code?(url, response.code)
    add_code_to_resp_stack(response.code, url)
    send_email(url, response)
  end
  [url, response.code, response.message]
end
start() click to toggle source
# File lib/status_checker/check.rb, line 20
def start
  # run checker loop
  threads = []
  @timer.start do
    @domain.each do |dom|
      threads << Thread.new(dom) do |url|
        check_url(url)
      end
    end
    threads.each { |thr| thr.join }
  end
end
stop() click to toggle source
# File lib/status_checker/check.rb, line 33
def stop
  # stop checker loop
  @timer.stop
end

Private Instance Methods

add_code_to_resp_stack(code, url) click to toggle source
# File lib/status_checker/check.rb, line 66
def add_code_to_resp_stack(code, url)
  synchronize do
    @resp_stack.merge!("#{code}" => url)
  end
end
check_http_status_of(url) click to toggle source
# File lib/status_checker/check.rb, line 49
def check_http_status_of(url)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true if uri.scheme == "https"
  request = Net::HTTP::Get.new(uri.request_uri)
  http.request(request)
end
recurrent_code?(url, resp_code) click to toggle source
# File lib/status_checker/check.rb, line 57
def recurrent_code?(url, resp_code)
  synchronize do
    @resp_stack.each_pair do |key, val|
      return true if key==resp_code && val==url
    end
  end
  return false
end
send_email(url, resp) click to toggle source
# File lib/status_checker/check.rb, line 72
def send_email(url, resp)
  StatusChecker::Email.new(@email).send(url, resp)
end