class Xtop::UrlChecker

Constants

INTERVAL
TIMEOUT

Public Class Methods

check(view, checkers={}) click to toggle source
# File lib/xtop/url_checker.rb, line 10
def self.check(view, checkers={})
  checker_threads = {}

  checkers.each do |url, checker|
    checker_threads[url] = Thread.new do
      case checker.call
      when :ok
        view.update_status(url, "green")
      when :error
        view.update_status(url, "red")
      else
        view.update_status(url, "yellow")
      end
    end

    Thread.new do
      time_elapsed = 0.0
      while true
        sleep(0.1)
        time_elapsed += INTERVAL

        if checker_threads[url].status == false # thread has exited
          break

        elsif time_elapsed > TIMEOUT
          view.update_status(url, "yellow")
          Thread.kill(checker_threads[url])
          break
        end
      end
    end
  end
end