updates to improve generalization and auto-installation.
[monitor.git] / www / printbadnodes.py
index af3f73d..24a6dc4 100755 (executable)
@@ -1,11 +1,7 @@
 #!/usr/bin/python
-import soltesz
-from config import config
-from optparse import OptionParser
+from monitor import database
+from monitor import config
 import string
-#from HyperText.HTML import A, BR, IMG, TABLE, TR, TH, TD, EM, quote_body
-#from HyperText.Documents import Document
-
 import sys
 
 categories = {}
@@ -66,11 +62,11 @@ def cmpState(l1, l2):
        return cmpMap(l1,l2,'state', map)
 
 def cmpCategoryVal(v1, v2):
-       map = array_to_priority_map([ None, 'ALPHA', 'PROD', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ])
+       map = array_to_priority_map([ None, 'ALPHA', 'PROD', 'OLDPROD', 'OLDBOOTCD', 'UNKNOWN', 'FORCED', 'ERROR', ])
        return cmpValMap(v1,v2,map)
 
 def cmpCategory(l1, l2):
-       map = array_to_priority_map([ 'ALPHA', 'PROD', 'OLDBOOTCD', 'UNKNOWN', 'ERROR', ])
+       map = array_to_priority_map([ 'ALPHA', 'PROD', 'OLDPROD', 'OLDBOOTCD', 'UNKNOWN', 'ERROR', ])
        return cmpMap(l1,l2,'category', map)
 
 def cmpPCU(l1, l2):
@@ -229,7 +225,7 @@ def fields_to_html(fields, vals):
                                #print "state: %s<br>" % pcu_state(vals['plcnode']['pcu_ids'][0])
                                #print "color: %s<br>" % pcu_colorMap[pcu_state(vals['plcnode']['pcu_ids'][0])]
                                bgcolor = "bgcolor='%s'" % pcu_colorMap[pcu_state(vals['plcnode']['pcu_ids'][0])]
-                               url = "<a href='/cgi-bin/printbadpcus.php#id%s'>PCU</a>" % vals['plcnode']['pcu_ids'][0]
+                               url = "<a href='/cgi-bin/monitor/printbadpcus.php?id=%s'>PCU</a>" % vals['plcnode']['pcu_ids'][0]
                                r_str += "<td nowrap %s>%s</td>" % (bgcolor, url)
                else:
                        r_str += "<td nowrap %s>%s</td>" % (bgcolor, f)
@@ -242,9 +238,20 @@ def fields_to_html(fields, vals):
 
 def main(sitefilter, catfilter, statefilter, comonfilter, nodeonlyfilter):
        global fb
+       import os
+       import datetime
+       if nodeonlyfilter == None:
+               print "<html><body>\n"
+
+               try:
+                       mtime = os.stat("/var/lib/monitor-server/production.findbad.pkl")[-2]
+                       print "Last Updated: %s GMT" % datetime.datetime.fromtimestamp(mtime)
+               except:
+                       pass
 
-       db = soltesz.dbLoad(config.dbname)
-       fb = soltesz.dbLoad("findbadpcus")
+
+       db = database.dbLoad(config.dbname)
+       fb = database.dbLoad("findbadpcus")
 
        ## Field widths used for printing
        maxFieldLengths = { 'nodename' : -45,
@@ -360,10 +367,12 @@ def main(sitefilter, catfilter, statefilter, comonfilter, nodeonlyfilter):
        if comonfilter != None: cmf = re.compile(comonfilter)
        else:                                   cmf = None
 
+
+       output_str = ""
        #l_loginbase = bysite.keys()
        #l_loginbase.sort()
        if nodeonlyfilter == None:
-               print "<table width=80% border=1>"
+               output_str += "<table width=80% border=1>"
 
        prev_sitestring = ""
        for row in d2:
@@ -380,16 +389,16 @@ def main(sitefilter, catfilter, statefilter, comonfilter, nodeonlyfilter):
                        continue
 
                if nodeonlyfilter != None:
-                       print vals['nodename']
+                       output_str += vals['nodename']
                        continue
 
                site_string = row['site_string']
                if site_string != prev_sitestring:
-                       print "<tr><td bgcolor=lightblue nowrap>" 
-                       print site_string
-                       print "</td>"
+                       output_str += "<tr><td bgcolor=lightblue nowrap>" 
+                       output_str += site_string
+                       output_str += "</td>"
                else:
-                       print "<tr><td>&nbsp;</td>"
+                       output_str += "<tr><td>&nbsp;</td>"
 
                prev_sitestring = site_string
 
@@ -432,7 +441,7 @@ def main(sitefilter, catfilter, statefilter, comonfilter, nodeonlyfilter):
                        vals['reboot'] = vals['reboot'].replace(" ", "_")
 
                if 'nodename' in vals:
-                       url = "<a href='https://www.planet-lab.org/db/nodes/index.php?nodepattern=%s'>%s</a>" % (vals['nodename'], vals['nodename'])
+                       url = "<a href='https://%s/db/nodes/index.php?nodepattern=%s'>%s</a>" % (config.MONITOR_HOSTNAME, vals['nodename'], vals['nodename'])
                        vals['nodename'] = url
 
                try:
@@ -445,15 +454,15 @@ def main(sitefilter, catfilter, statefilter, comonfilter, nodeonlyfilter):
                        print >>sys.stderr, vals
 
                s = fields_to_html(str_fields, vals)
-               print s
+               output_str += s
                        
-               print "\n</tr>"
+               output_str += "\n</tr>"
 
        if nodeonlyfilter == None:
-               print "</table>"
-               print "<table>"
+               output_str += "</table>"
        keys = categories.keys()
        keys.sort()
+       print "<table>"
        for cat in keys:
                print "<tr>"
                print "<th nowrap align=left>Total %s</th>" % cat
@@ -462,6 +471,10 @@ def main(sitefilter, catfilter, statefilter, comonfilter, nodeonlyfilter):
        if nodeonlyfilter == None:
                print "</table>"
 
+       print output_str
+       if nodeonlyfilter == None:
+               print "</body></html>\n"
+
 
 
 if __name__ == '__main__':
@@ -498,36 +511,18 @@ if __name__ == '__main__':
        else:
                mynodeonly = None
 
-       parser = OptionParser()
-       parser.set_defaults(cmpdays=False, 
-                                               comon="sshstatus", 
-                                               fields="nodename,ping,ssh,pcu,category,state,comonstats,kernel,bootcd", 
-                                               dbname="findbad", # -070724-1", 
-                                               cmpping=False, 
-                                               cmpdns=False, 
-                                               cmploginbase=False, 
-                                               cmpssh=False, 
-                                               cmpcategory=False,
-                                               cmpstate=False)
-       parser.add_option("", "--fields",       dest="fields", help="")
-       parser.add_option("", "--dbname",       dest="dbname", help="")
-       parser.add_option("", "--days",         dest="cmpdays", action="store_true", help="")
-       parser.add_option("", "--ping",         dest="cmpping", action="store_true", help="")
-       parser.add_option("", "--dns",          dest="cmpdns", action="store_true", help="")
-       parser.add_option("", "--ssh",          dest="cmpssh",  action="store_true", help="")
-       parser.add_option("", "--loginbase",dest="cmploginbase",action="store_true", help="")
-       parser.add_option("", "--category",     dest="cmpcategory", action="store_true", help="")
-       parser.add_option("", "--kernel",       dest="cmpkernel", action="store_true", help="")
-       parser.add_option("", "--state",        dest="cmpstate", action="store_true", help="")
-       parser.add_option("", "--comon",        dest="comon",   help="")
-       config = config(parser)
-       config.parse_args()
+       config.cmpdays=False
+       config.comon="sshstatus"
+       config.fields="nodename,ping,ssh,pcu,category,state,kernel,bootcd"
+       config.dbname="findbad"
+       config.cmpping=False 
+       config.cmpdns=False
+       config.cmploginbase=False
+       config.cmpssh=False 
+       config.cmpcategory=False
+
        print "Content-Type: text/html\r\n"
-       if mynodeonly == None:
-               print "<html><body>\n"
        if len(sys.argv) > 1:
                if sys.argv[1] == "ssherror":
                        ssherror = True
        main(myfilter, mycategory, mystate, mycomon,mynodeonly)
-       if mynodeonly == None:
-               print "</body></html>\n"