X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=config.py;h=0a66b75fa0ef92ebaece56a83fc783ecd629e284;hb=d5b0651a666c9a6b2deb4103ed15c3c06075395d;hp=c9613ff185c958f94a2369a2f1b523a3791708d1;hpb=673a6a4329e705de18007ce32c560e5b6f0ed1a2;p=monitor.git diff --git a/config.py b/config.py index c9613ff..0a66b75 100644 --- a/config.py +++ b/config.py @@ -4,29 +4,135 @@ import os import getopt import sys import __main__ +from optparse import OptionParser + +config_command = False XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/" +def parse_bool(option, opt_str, value, parser): + if opt_str in ["--debug"]: + parser.values.debug = int(int(value)) + elif opt_str in ["--mail"]: + parser.values.mail = int(int(value)) + elif opt_str in ["--bcc"]: + parser.values.bcc = int(int(value)) + elif opt_str in ["--policysavedb"]: + parser.values.policysavedb = int(int(value)) + elif opt_str in ["--squeeze"]: + parser.values.squeeze = int(int(value)) + else: + print "blue" + +def setFileFromList(file, list): + f = open(file, 'w') + for line in list: + f.write(line + "\n") + f.close() + return True + +def getListFromFile(file): + f = open(file, 'r') + list = [] + for line in f: + line = line.strip() + list += [line] + return list class config: - debug = True - mail = False - bcc = True - email = "soltesz@cs.utk.edu" - userlist = None - cachert = True - cachenodes = True - cachesites = True - squeeze = False - policysavedb = True + debug=0 + mail=0 + bcc=0 + email="soltesz@cs.utk.edu" + run=False + checkopt=False + squeeze=0 + policysavedb=0 __file = ".config" - def __init__(self): - if os.path.exists(self.__file): # file exists, read that. - f = open(self.__file, 'r') + def __init__(self, parser=None): + if os.path.exists(self.__file): # file exists, read that. + f = open(self.__file, 'r') o = pickle.load(f) self.__dict__.update(o) f.close() + if parser == None: + self.parser = OptionParser() + else: + self.parser = parser + + self.parser.set_defaults(debug = self.debug, + mail = self.mail, + bcc = self.bcc, + email = self.email, + run = self.run, + checkopt = False, + squeeze = self.squeeze, + policysavedb = self.policysavedb) + + self.parser.add_option("", "--debug", dest="debug", + help="Enable debugging", + type="int", + metavar="[0|1]", + action="callback", + callback=parse_bool) + self.parser.add_option("", "--mail", dest="mail", + help="Enable sending email", + type="int", + metavar="[0|1]", + action="callback", + callback=parse_bool) + self.parser.add_option("", "--bcc", dest="bcc", + help="Include BCC to user", + type="int", + metavar="[0|1]", + action="callback", + callback=parse_bool) + self.parser.add_option("", "--squeeze", dest="squeeze", + help="Squeeze sites or not", + type="int", + metavar="[0|1]", + action="callback", + callback=parse_bool) + self.parser.add_option("", "--policysavedb", dest="policysavedb", + help="Save the policy event database after a run", + type="int", + metavar="[0|1]", + action="callback", + callback=parse_bool) + self.parser.add_option("", "--checkopt", dest="checkopt", + action="store_true", + help="print current options") + self.parser.add_option("", "--run", dest="run", + action="store_true", + help="Perform monitor or print configs") + self.parser.add_option("", "--email", dest="email", + help="Specify an email address to use for mail when "+\ + "debug is enabled or for bcc when it is not") + + # config_command is needed to keep subsequent loads of config() from + # trying to parse the arguments that have already been parsed by + # the new main(). + if parser == None and config_command: + print "calling parse_args" + self.parse_args() + + def parse_args(self): + #print "self: %s" % self + #import traceback + #print traceback.print_stack() + #print "Ccalling parse_args" + (options, args) = self.parser.parse_args() + #for o in options.__dict__: + # print "optin: %s == %s" % (o, options.__dict__[o]) + self.__dict__.update(options.__dict__) + self.__dict__['args'] = args + self.save(options) + if options.checkopt: + self.usage() + # print "\nAdd --run to actually perform the command" + sys.exit(1) + def getListFromFile(self, file): f = open(file, 'r') list = [] @@ -34,109 +140,50 @@ class config: line = line.strip() list += [line] return list + + def print_values(self): + exclude = ['parser'] + for key in self.__dict__.keys(): + if key not in exclude: + print "%20s == %s" % (key, self.__dict__[key]) - def save(self): + def save(self, options=None): f = open(self.__file, 'w') - o = {'debug': self.debug, - 'mail': self.mail, - 'bcc': self.bcc, - 'email':self.email, - 'userlist': self.userlist, - 'cachert': self.cachert, - 'cachenodes' : self.cachenodes, - 'cachesites': self.cachesites, - 'squeeze':self.squeeze, - 'policysavedb':self.policysavedb} + if options == None: + o = {'debug': self.debug, + 'mail': self.mail, + 'bcc': self.bcc, + 'email':self.email, + 'squeeze':self.squeeze, + 'policysavedb':self.policysavedb} + else: + o = options.__dict__ + pickle.dump(o, f) f.close() + def usage(self): + self.print_values() + self.parser.print_help() -def usage(): - config = __main__.config() - # --cachesites=[0|1] Cache Sites from PLC (current: %s) - # --status Print memory usage statistics and exit - print """ -Settings: - --debug=[0|1] Set debugging (current: %s) - --mail=[0|1] Send mail or not (current: %s) - --bcc=[0|1] Include bcc of user (current: %s) - --email=[email] Email to use above (current: %s) - --userlist=[filename] Use a list of nodes (current: %s) - --cachert=[0|1] Cache the RT db (current: %s) - --cachenodes=[0|1] Cache Nodes from PLC (current: %s) - --squeeze=[0|1] Squeeze sites or not (current: %s) - --policysavedb=[0|1] Save policy DBs (current: %s) - -h, --help This message -""".lstrip() % (config.debug, - config.mail, - config.bcc, - config.email, - config.userlist, - config.cachert, - config.cachenodes, - config.squeeze, - config.policysavedb) def main(): """ Start threads, do some housekeeping, then daemonize. """ # Defaults + global config_command + config_command = True config = __main__.config() try: - longopts = [ "debug=", - "mail=", - "email=", - "bcc=", - "userlist=", - "cachert=", - "cachesites=", - "cachenodes=", - "squeeze=", - "policysavedb=", - "status", - "help"] - (opts, argv) = getopt.getopt(sys.argv[1:], "h", longopts) - except getopt.GetoptError, err: - print "Error: " + err.msg - usage() + print "acalling parse_args" + config.parse_args() + + except Exception, err: + print "Error: %s " % err + config.usage() sys.exit(1) - for (opt, optval) in opts: - if opt in ["--debug"]: - config.debug = bool(int(optval)) - print "Running in DEBUG mode. Copying DB & " - print "caching correspondences. NO SQUEEZING." - elif opt in ["--mail"]: - config.mail = bool(int(optval)) - print "NO EMAILS SENT." - elif opt in ["--email"]: - config.email = optval - elif opt in ["--bcc"]: - config.bcc = bool(int(optval)) - elif opt in ["--userlist"]: - if len(optval) == 0: - config.userlist = None - else: - config.userlist = optval - elif opt in ["--cachert"]: - config.cachert = bool(int(optval)) - elif opt in ["--cachesites"]: - config.cachesites = bool(int(optval)) - elif opt in ["--cachenodes"]: - config.cachenodes = bool(int(optval)) - elif opt in ["--policysavedb"]: - config.policysavedb = bool(int(optval)) - elif opt in ["--squeeze"]: - config.squeeze = bool(int(optval)) - elif opt in ["--status"]: - #print summary(names) - sys.exit(0) - else: - usage() - sys.exit(0) - - config.save() - usage() + config.usage() if __name__ == '__main__':