blob: 588774893512247f3b085195efd2167c2efd4379 [file] [log] [blame]
#!/usr/bin/env ruby
# status methods
require 'socket'
require 'resolv'
# common methods
module Status
# Are we the active node?
def self.active?
Resolv::DNS.open do |rs|
active = rs.getaddress("whimsy.apache.org") # Official hostname as IP
current = rs.getaddress(Socket.gethostname) rescue nil # local as IP
return current == active
end
end
# this hostname
def self.hostname
`hostname`.chomp # TODO: could be cached?
end
# are we migrating?
def self.migrating?
false # Edit as needed
end
# are we a test node?
def self.testnode?
# Assume test nodes are not called whimsy...[.apache.org]
hostname !~ %r{^whimsy.*(\.apache\.org)?$}
end
# If local updates are not allowed, return reason string, else nil
# nil if:
# - active node
# - not migrating
# - or testnode
def self.updates_disallowed_reason
return nil if testnode?
return 'Service temporarily unavailable due to migration.' if migrating?
return 'Service unavailable on this node. Please ensure you have logged in to the correct host.' unless active?
nil
end
end
# for debugging purposes
if __FILE__ == $0
puts "active?: #{Status.active?} hostname: #{Status.hostname} migrating?: #{Status.migrating?}"
puts "reason: #{Status.updates_disallowed_reason}"
end