--- /dev/null
+#!/usr/bin/python
+
+import commands
+import os
+import re
+import socket
+import struct
+import DNS
+import time
+from history import *
+
+
+def get_success_ratio(measured):
+ return float(len(filter(lambda x: x > 0, measured)))/float(len(measured))
+
+def timed(method):
+
+ def timeit(*args, **kw):
+ ts = time.time()
+ result = method(*args, **kw)
+ te = time.time()
+
+ #print '%r (%r, %r) %2.2f sec' % \
+ # (method.__name__, args, kw, te-ts)
+ return (result, te-ts)
+
+ return timeit
+
+@timed
+def check_dns(ip, protocol='udp'):
+ try:
+ #ip = ip[:-1] + "0"
+ ro = DNS.Request(name="www.yahoo.com", qtype="A", server=ip, timeout=45)
+ r = ro.req(protocol=protocol)
+ r = "OK"
+ except DNS.Base.DNSError, e:
+ r = "Error: %s" % e
+ return r
+
+def get_nameserver_ips(filename):
+ ip_re = re.compile("\d+\.\d+\.\d+\.\d+")
+ ret = {}
+ if not os.path.exists(filename):
+ return ret
+
+ f = open(filename, 'r')
+
+ if 'resolv' in filename:
+ for l in f:
+ for field in l.strip().split():
+ if ip_re.match(field) and field not in ret:
+ ret[field] = 0
+
+ if 'ifcfg' in filename:
+ for l in f:
+ if 'DNS' not in l:
+ continue
+ for field in l.strip().split('='):
+ field = field.replace('"', '')
+ field = field.replace("'", '')
+ if ip_re.match(field) and field not in ret:
+ ret[field] = 0
+ return ret
+
+def main():
+
+ root_ips = get_nameserver_ips('/etc/resolv.conf')
+ slice_ips = get_nameserver_ips( '/vservers/princeton_comon/etc/resolv.conf')
+
+ context_list = ['root', 'slice']
+ proto_list = ['udp', 'tcp']
+
+ sequence_list = zip(sorted(context_list*2), zip(root_ips.keys(),sorted(proto_list*2)[::-1]))
+ sequence_list += zip(sorted(context_list*2), zip(slice_ips.keys(),sorted(proto_list*2)[::-1]))
+
+ if set(root_ips.keys()) == set(slice_ips.keys()):
+ print "CONF-ROOT_SLICE-MATCH",
+ else:
+ print "CONF-ROOT_SLICE-MISMATCH",
+
+ for i,(context,(ip,proto)) in enumerate(sequence_list):
+ (s,t) = check_dns(ip, proto)
+ if "Error" in s: t = -1
+ dns = HistoryFile("dns_history_%s_%s%s.dat" % (context, proto, i), DNSHistory)
+ dns.append(t)
+ print get_success_ratio(dns.get()),
+ dns.close()
+
+ c_dns = os.popen("curl -s http://localhost:3121 | grep -a DNSFail").read().strip()
+ if len(c_dns) > 9 and "DNS" in c_dns:
+ c_dns = "cm " + c_dns[9:]
+ else:
+ c_dns = ""
+ print c_dns,
+
+ print ""
+
+
+if __name__ == "__main__":
+ main()
+