class Dnsign::ResolveUpdateLoop

Public Class Methods

new(domain, dns_service, ip_resolver, opts={}) click to toggle source
# File lib/dnsign/resolve_update_loop.rb, line 12
def initialize(domain, dns_service, ip_resolver, opts={})
  @domain      = domain
  @ip_resolver = ip_resolver
  @dns_service = dns_service
  @timers      = Timers::Group.new

  @verbose     = opts[:verbose].nil? ? true : opts[:verbose]
  @interval    = opts[:interval] || 300
end

Public Instance Methods

kickoff() click to toggle source
# File lib/dnsign/resolve_update_loop.rb, line 22
def kickoff
  if @interval > 0
    @timer = @timers.every( @interval ) { update }
    loop { @timers.wait }
  end
end
update() click to toggle source
# File lib/dnsign/resolve_update_loop.rb, line 29
def update
  real_ip = resolve_real_ip
  dns_ip  = retrieve_dns_ip

  if real_ip != dns_ip
    update_dns_ip(real_ip)
    log "UPDATE:   Public #{real_ip} differs from the resolved #{dns_ip}"
    true
  else
    log "SKIPPING: Public #{real_ip} matches with the resolved #{dns_ip}"
    false
  end
end

Private Instance Methods

log(msg) click to toggle source
# File lib/dnsign/resolve_update_loop.rb, line 63
def log(msg)
  if @verbose == true
    puts ["[#{Time.now.utc}]", msg].join ' '
  end
end
resolve_real_ip() click to toggle source
# File lib/dnsign/resolve_update_loop.rb, line 45
def resolve_real_ip
  @ip_resolver.resolve
rescue InvalidResponseFromIpResolver => e
  log e
end
retrieve_dns_ip() click to toggle source
# File lib/dnsign/resolve_update_loop.rb, line 51
def retrieve_dns_ip
  @dns_service.retrieve_ip @domain
rescue RecordDoesNotExists => e
  log e
end
update_dns_ip(real_ip) click to toggle source
# File lib/dnsign/resolve_update_loop.rb, line 57
def update_dns_ip(real_ip)
  @dns_service.update_ip @domain, real_ip
rescue DomainDoesNotExists => e
  log e
end