#
# Faiyaz Ahmed <faiyaza@cs.princeton.edu>
#
-# $Id: comon.py,v 1.5 2007/05/16 01:53:46 faiyaza Exp $
+# $Id: comon.py,v 1.7 2007/07/03 19:59:02 soltesz Exp $
#
# Get CoMon data, unsorted, in CSV, and create a huge hash.
#
# 3 == rins
# 4 == ins
+def _tohash(rawdata):
+ # First line Comon returns is list of keys with respect to index
+ try:
+ keys = rawdata.readline().rstrip().split(", ")
+ l_host = []
+ hash = {}
+ i_ignored = 0
+ for line in rawdata.readlines():
+ l_host = line.rstrip().split(", ") # split the line on ', '
+ hostname = l_host[0]
+ hash[hostname] = {}
+ for i in range(1,len(keys)):
+ hash[hostname][keys[i]]=l_host[i]
+
+ except Exception, err:
+ logger.debug("No hosts retrieved")
+ return {}
+ return hash
+
+def comonget(url):
+ rawdata = None
+ print "Getting: %s" % url
+ try:
+ coserv = urllib2.Request(url)
+ coserv.add_header('User-Agent', 'PL_Monitor +http://monitor.planet-lab.org/')
+ opener = urllib2.build_opener()
+ # Initial web get from summer.cs in CSV
+ rawdata = opener.open(coserv)
+ except urllib2.URLError, (err):
+ print "Attempting %s" %COMONURL
+ print "URL error (%s)" % (err)
+ rawdata = None
+ return _tohash(rawdata)
+
class Comon(Thread):
"""
all buckets is a queue of all problem nodes. This gets sent to rt to find
tickets open for host.
"""
- def __init__(self, cdb, d_allplc_nodes, q_allbuckets):
+ def __init__(self, cdb=None, d_allplc_nodes=None, q_allbuckets=None):
+
+ self.accept_all_nodes = False
+
+ if cdb == None:
+ cdb = {}
+ if d_allplc_nodes == None:
+ self.accept_all_nodes = True # TODO :get from plc.
+
self.codata = cdb
self.d_allplc_nodes = d_allplc_nodes
self.updated = time.time()
# "filerw": "filerw%3E0",
# "dbg" : "keyok==0"}
self.comon_buckets = {
- #"down" : "resptime==0 && keyok==null",
+ #"down" : "resptime==0&&keyok==null",
#"ssh": "sshstatus > 2h",
#"clock_drift": "drift > 1m",
#"dns": "dns1udp>80 && dns2udp>80",
#"filerw": "filerw > 0",
- "dbg" : "keyok==0"
+ #"all" : ""
+ "dbg" : "keyok==0",
}
Thread.__init__(self)
for line in rawdata.readlines():
l_host = line.rstrip().split(", ") # split the line on ', '
hostname = l_host[0]
- if hostname in self.d_allplc_nodes: # then we'll track it
+ add = False
+ if self.accept_all_nodes:
+ add=True
+ else:
+ if hostname in self.d_allplc_nodes: # then we'll track it
+ add = True
+
+ if add:
hash[hostname] = {}
for i in range(1,len(keys)):
hash[hostname][keys[i]]=l_host[i]
diag_node['message'] = None
diag_node['bucket'] = [bucket]
diag_node['stage'] = ""
+ #diag_node['ticket_id'] = ""
diag_node['args'] = None
diag_node['info'] = None
diag_node['time'] = time.time()
print("%-40s \t Bootstate %s nodetype %s kernver %s keyok %s" % (
host, cdb[host]['bootstate'], cdb[host]['nodetype'],
cdb[host]['kernver'], cdb[host]['keyok']))
- #ssh = soltesz.SSH('root', host)
- #try:
- # val = ssh.run("uname -r")
- # print "%s == %s" % (host, val),
- #except:
- # pass
# else:
# print("key mismatch at: %s" % host)
#print a.codata['michelangelo.ani.univie.ac.at']