X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=nodehistory.py;h=e554e0a8fd88bbeaf4debeddd3491947135b219c;hb=6f2351e4b44590221425fa9b4bfa77c92db49b6a;hp=b6d0a58e329f043cecdcfa577b6440a7881e34b2;hpb=77f84f1e8242cdc45eb091ab65eef940a23493a6;p=monitor.git diff --git a/nodehistory.py b/nodehistory.py index b6d0a58..e554e0a 100755 --- a/nodehistory.py +++ b/nodehistory.py @@ -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,19 +14,22 @@ 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): @@ -43,9 +45,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 +75,60 @@ 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: + #import traceback; print traceback.print_exc() + print d.strftime("%Y-%m-%d"), "No record" + + d = d + tdelta + if d > datetime.now(): break + +if __name__ == "__main__": + main()