changes for 3.0
[monitor.git] / nodehistory.py
index b6d0a58..f68d7b9 100755 (executable)
@@ -1,10 +1,9 @@
 #!/usr/bin/python
 
 import plc
-import auth
-api = plc.PLC(auth.auth, auth.plc)
+api = plc.getAuthAPI()
 
-import soltesz
+import database
 import reboot
 import time
 from datetime import datetime, timedelta
@@ -15,25 +14,29 @@ import time
 from model import *
 from nodecommon import *
 
-from config import config
-from optparse import OptionParser
-
-parser = OptionParser()
-parser.set_defaults(node=None, fields='state', fromtime=None)
-parser.add_option("", "--node", dest="node", metavar="nodename.edu", 
-                                       help="A single node name to add to the nodegroup")
-parser.add_option("", "--fields", dest="fields", metavar="key",
-                                       help="Which record field to extract from all files.")
-parser.add_option("", "--fromtime", dest="fromtime", metavar="YYYY-MM-DD",
-                                       help="Specify a starting date from which to begin the query.")
-config = config(parser)
-config.parse_args()
+def get_filefromglob(d, str):
+       import os
+       import glob
+       # TODO: This is aweful.
+       path = "archive-pdb"
+       archive = database.SPickle(path)
+       glob_str = "%s*.%s.pkl" % (d.strftime("%Y-%m-%d"), str)
+       os.chdir(path)
+       #print glob_str
+       #file = glob.glob(glob_str)[0]
+       files = glob.glob(glob_str)
+       #print "loading %s" % file
+       os.chdir("..")
+       files_chng = [ file[:-4] for file in files ]
+       return files_chng
+       #fb = archive.load(file[:-4])
 
 
 def fb_print_nodeinfo(fbnode, verbose, date=None):
        if verbose: print "              state |  ssh  |  pcu  | bootcd | category | kernel"
        if 'checked' in fbnode:
-               print "%11.11s " % diff_time(fbnode['checked']),
+               if date: print date,
+               #print "%11.11s " % diff_time(fbnode['checked']),
        else:
                if date: print date,
                else: print "Unknown",
@@ -43,9 +46,10 @@ def fb_print_nodeinfo(fbnode, verbose, date=None):
        else:
                fbnode['bootcd'] = "unknown"
        fbnode['state'] = color_boot_state(get_current_state(fbnode))
+       fbnode['boot_state'] = getvalue(fbnode, 'plcnode/boot_state')
        if len(fbnode['kernel'].split()) >= 3:
                fbnode['kernel'] = fbnode['kernel'].split()[2]
-       print "    %(state)5s | %(ssh)5.5s | %(pcu)5.5s | %(bootcd)6.6s | %(category)8.8s | %(kernel)s" % fbnode
+       print "    %(state)5s | %(boot_state)s | %(ssh)5.5s | %(pcu)5.5s | %(bootcd)6.6s | %(category)8.8s | %(kernel)s" % fbnode
 
 def pcu_print_info(pcuinfo, hostname):
        print "   Checked: ",
@@ -72,59 +76,59 @@ def pcu_print_info(pcuinfo, hostname):
                        print "\t cmdhttps/locfg.pl -s %s -f iloxml/Reset_Server.xml -u %s -p '%s' | grep MESSAGE" % \
                                (reboot.pcu_name(pcuinfo), pcuinfo['username'], pcuinfo['password'])
 
-path = "archive-pdb"
-archive = soltesz.SPickle(path)
+def main():
+       import parser as parsermodule
 
-if config.fromtime:
-       begin = config.fromtime
-else:
-       begin = "2007-11-06"
+       parser = parsermodule.getParser()
+       parser.set_defaults(node=None, fields='state', fromtime=None)
+       parser.add_option("", "--node", dest="node", metavar="nodename.edu", 
+                                               help="A single node name to add to the nodegroup")
+       parser.add_option("", "--fields", dest="fields", metavar="key",
+                                               help="Which record field to extract from all files.")
+       parser.add_option("", "--fromtime", dest="fromtime", metavar="YYYY-MM-DD",
+                                               help="Specify a starting date from which to begin the query.")
+       config = parsermodule.parse_args(parser)
 
-if config.node is None and len(config.args) > 0:
-       config.node = config.args[0]
-elif config.node is None:
-       print "Add a hostname to arguments"
-       print "exit."
-       sys.exit(1)
+       path = "archive-pdb"
+       archive = database.SPickle(path)
 
-d = datetime_fromstr(begin)
-tdelta = timedelta(1)
-verbose = 1
+       if config.fromtime:
+               begin = config.fromtime
+       else:
+               begin = "2007-11-06"
 
-def get_filefromglob(d, str):
-       import os
-       import glob
-       # TODO: This is aweful.
-       path = "archive-pdb"
-       archive = soltesz.SPickle(path)
-       glob_str = "%s*.%s.pkl" % (d.strftime("%Y-%m-%d"), str)
-       os.chdir(path)
-       #print glob_str
-       file = glob.glob(glob_str)[0]
-       #print "loading %s" % file
-       os.chdir("..")
-       return file[:-4]
-       #fb = archive.load(file[:-4])
-       
-
-while True:
-       file = get_filefromglob(d, "production.findbad")
-       #file = "%s.production.findbad" % d.strftime("%Y-%m-%d")
-       
-       try:
-               fb = archive.load(file)
-               if config.node in fb['nodes']:
-                       fb_nodeinfo  = fb['nodes'][config.node]['values']
-                       fb_print_nodeinfo(fb_nodeinfo, verbose, d.strftime("%Y-%m-%d"))
-
-               del fb
-               verbose = 0
-       except KeyboardInterrupt:
+       if config.node is None and len(config.args) > 0:
+               config.node = config.args[0]
+       elif config.node is None:
+               print "Add a hostname to arguments"
+               print "exit."
                sys.exit(1)
-       except:
-               #import traceback; print traceback.print_exc()
-               print d.strftime("%Y-%m-%d"), "No record"
 
-       d = d + tdelta
-       if d > datetime.now(): break
+       d = datetime_fromstr(begin)
+       tdelta = timedelta(1)
+       verbose = 1
 
+       while True:
+               
+               try:
+                       for file in get_filefromglob(d, "production.findbad"):
+                               #file = get_filefromglob(d, "production.findbad")
+                               #file = "%s.production.findbad" % d.strftime("%Y-%m-%d")
+                               fb = archive.load(file)
+                               if config.node in fb['nodes']:
+                                       fb_nodeinfo  = fb['nodes'][config.node]['values']
+                                       fb_print_nodeinfo(fb_nodeinfo, verbose, d.strftime("%Y-%m-%d"))
+
+                               del fb
+                               verbose = 0
+
+               except KeyboardInterrupt:
+                       sys.exit(1)
+               except:
+                       print d.strftime("%Y-%m-%d"), "No record"
+
+               d = d + tdelta
+               if d > datetime.now(): break
+
+if __name__ == "__main__":
+       main()