Class: Freyr::Pinger

Inherits:
Object
  • Object
show all
Defined in:
lib/freyr/pinger.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(service) ⇒ Pinger

Returns a new instance of Pinger.



12
13
14
15
# File 'lib/freyr/pinger.rb', line 12

def initialize(service)
  @service = service
  @url = service.info.ping
end

Instance Attribute Details

#responseObject (readonly)

Response object



10
11
12
# File 'lib/freyr/pinger.rb', line 10

def response
  @response
end

#timeObject (readonly)

Time that the ping took



8
9
10
# File 'lib/freyr/pinger.rb', line 8

def time
  @time
end

#urlObject (readonly)

URL to ping



6
7
8
# File 'lib/freyr/pinger.rb', line 6

def url
  @url
end

Instance Method Details

#codeObject



55
56
57
# File 'lib/freyr/pinger.rb', line 55

def code
  response.code if response
end

#pingObject

Send a ping to the url



46
47
48
49
50
51
52
53
# File 'lib/freyr/pinger.rb', line 46

def ping
  t = Time.now
  @response = Net::HTTP.get_response(uri)
rescue Errno::ECONNREFUSED
ensure
  @time = Time.now-t
  @response
end

#server_error?Boolean

Did the response recieve a 500 error

Returns:

  • (Boolean)


65
66
67
# File 'lib/freyr/pinger.rb', line 65

def server_error?
  response.is_a?(Net::HTTPInternalServerError)
end

#server_probably_launched?Boolean

Did it receive 2xx or 500

Returns:

  • (Boolean)


70
71
72
# File 'lib/freyr/pinger.rb', line 70

def server_probably_launched?
  success? || server_error?
end

#success?Boolean

Did the response recieve a success http code

Returns:

  • (Boolean)


60
61
62
# File 'lib/freyr/pinger.rb', line 60

def success?
  response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPRedirection)
end

#uriObject

The URI object for the given URL



41
42
43
# File 'lib/freyr/pinger.rb', line 41

def uri
  @uri ||= URI.parse(url)
end

#wait_for_resp(wait = 40, interval = 0.6, &blk) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/freyr/pinger.rb', line 17

def wait_for_resp wait=40, interval = 0.6, &blk
  OUT.puts "\nWaiting for response from #{url}"
  start = Time.now

  blk ||= lambda {true}

  begin
    OUT.print '.'; OUT.flush
    ping
    sleep(interval)
  end until server_probably_launched? || (Time.now-start) > wait || !blk.call

  if blk.call
    if response
      OUT.puts '*', "Last response received with code #{response.code}"
    else
      OUT.puts 'x', "Couldn't reach #{@service.name} service"
    end
  else
    OUT.puts 'x',"Service died durring launch"
  end
end