import json
import re
import subprocess
from pingCheck import pingCheck

class checkDNS(pingCheck):

    hostregexp = re.compile("^.*\s+has address\s+(.*)\s*$")

    def resolveIP(self, host, nameserver):
        try:
            resolvestr = subprocess.Popen(['host',host,nameserver], stdout=subprocess.PIPE).communicate()[0]
            for line in resolvestr.split("\n"):
                m = self.hostregexp.match(line)
                if m != None:
                    return m.group(1)
            self.logMsg("Unable to resolve host %s on name server %s." % (host,nameserver))
        except Exception as e:
            self.logMsg("Unable to resolve host %s on name server %s." % (host,nameserver))
            self.logMsg("Exception: %s" % str(e))
        return ''

    def runCheck(self,config, debug):
        dns1=config["environment"]["dns1"]
        if not self.pingIP(dns1):
            self.addWarning("Unable to ping Primary DNS Server %s.  Please verify the IP address." % dns1)
        elif len(self.resolveIP('www.ericsson.com', dns1)) == 0:
            self.addWarning("Unable to use Primary DNS Server %s for name service resolution.  Please verify the IP address." % dns1)

        dns2=config["environment"]["dns2"]
        if not self.pingIP(dns2):
            self.addWarning("Unable to ping Secondary DNS Server %s.  Please verify the IP address." % dns2)
        elif len(self.resolveIP('www.ericsson.com', dns2)) == 0:
            self.addWarning("Unable to use Secondary DNS Server %s for name service resolution.  Please verify the IP address." % dns2)

        return 0

    def getHumanName(self):
        return "Check if DNS is alive"
