class Discover::Registration

Constants

HEARTBEAT_INTERVAL

Public Class Methods

new(client, name, address, attributes = {}, standby = false) click to toggle source
# File lib/discover.rb, line 59
def initialize(client, name, address, attributes = {}, standby = false)
  @client     = client
  @name       = name
  @address    = address
  @attributes = attributes
  @standby    = standby
end

Public Instance Methods

register() click to toggle source
# File lib/discover.rb, line 67
def register
  send_register_request
  start_heartbeat
  wait_for_election if @standby
end
send_register_request() click to toggle source
# File lib/discover.rb, line 79
def send_register_request
  args = {
    "Name"  => @name,
    "Addr"  => @address,
    "Attrs" => @attributes
  }

  @client.request("Agent.Register", args).value
end
send_unregister_request() click to toggle source
# File lib/discover.rb, line 89
def send_unregister_request
  args = {
    "Name"  => @name,
    "Addr"  => @address
  }

  @client.request("Agent.Unregister", args).value
end
start_heartbeat() click to toggle source
# File lib/discover.rb, line 98
def start_heartbeat
  @heartbeat = every(HEARTBEAT_INTERVAL) do
    @client.request(
      "Agent.Heartbeat",
      "Name" => @name,
      "Addr" => @address
    )
  end
end
stop_heartbeat() click to toggle source
# File lib/discover.rb, line 108
def stop_heartbeat
  @heartbeat.cancel
end
unregister() click to toggle source
# File lib/discover.rb, line 73
def unregister
  stop_heartbeat
  send_unregister_request
  @client.remove_registration(self)
end
wait_for_election() click to toggle source
# File lib/discover.rb, line 112
def wait_for_election
  async.watch_leaders
  wait :elected
end
watch_leaders() click to toggle source
# File lib/discover.rb, line 117
def watch_leaders
  @client.service(@name).each_leader do |leader|
    if leader.address == @address
      signal :elected
    end
  end
end