X-Git-Url: http://git.onelab.eu/?p=monitor.git;a=blobdiff_plain;f=plcquery.py;h=235662eb0382aeb8e8982282075f4455a1e2e07a;hp=05400986c4b212f360b641aac6d17558f699265f;hb=45c45cc6ae12eb7863612ab833b0facbfb2c37bb;hpb=3e5e0976e8bdc7b1cb4f7cde8da67641fbcec015 diff --git a/plcquery.py b/plcquery.py index 0540098..235662e 100755 --- a/plcquery.py +++ b/plcquery.py @@ -1,6 +1,7 @@ #!/usr/bin/python +import sys from monitor.wrapper import plc api = plc.api @@ -26,11 +27,24 @@ def parse_filter(filter): else: return None -def print_fields(obj, fields): - for f in fields: - if f in obj: - print obj[f], - print "" +def print_fields(obj, fields, format): + if format: + print format % obj + else: + for f in fields: + if f in obj: + print obj[f], + print "" + +def list_fields(l): + if len(l) > 0: + o = l[0] + for k in o.keys(): + print k + sys.exit(1) + else: + print "no objects returned to list fields" + sys.exit(1) def main(): @@ -40,7 +54,12 @@ def main(): parser.set_defaults(get=True, type='node', filter=None, - fields='node_id,hostname,last_contact' + fields=None, + format=None, + listfields=False, + withsitename=False, + byloginbase=None, + byrole=None, ) parser.add_option("", "--get", dest="get", action="store_true", @@ -55,9 +74,19 @@ def main(): parser.add_option("", "--filter", dest="filter", metavar="name=value", help="Filter passed to Get* calls") + parser.add_option("", "--format", dest="format", + help="Format string to use to print") + + parser.add_option("", "--byloginbase", dest="byloginbase", + help="") + parser.add_option("", "--byrole", dest="byrole", + help="") + parser.add_option("", "--withsitename", dest="withsitename", + action="store_true", help="") + parser.add_option("", "--nodelist", dest="nodelist", metavar="nodelist.txt", help="A list of nodes to bring out of debug mode.") - parser.add_option("", "--listkeys", dest="listkeys", action="store_true", + parser.add_option("", "--listfields", dest="listfields", action="store_true", help="A list of nodes to bring out of debug mode.") #parser = parsermodule.getParser(['defaults'], parser) @@ -71,9 +100,40 @@ def main(): fields = parse_fields(config.fields) if config.type == 'node': + if config.fields is None: + fields='node_id,hostname,last_contact', + fields = parse_fields(config.fields) + n = api.GetNodes(f, fields) + if config.listfields: list_fields(n) for i in n: - print_fields(i, fields) + print_fields(i, fields, config.format) + + if config.type == 'person': + + if config.byloginbase: + s = api.GetSites({'login_base' : config.byloginbase}, ['person_ids']) + f = s[0]['person_ids'] + if config.byrole: + p = api.GetPersons(None, ['person_id', 'roles']) + p = filter(lambda x: config.byrole in x['roles'], p) + f = [ x['person_id'] for x in p ] + + if config.withsitename: + n = api.GetPersons(f, fields) + if config.listfields: list_fields(n) + for i in n: + sitelist = api.GetSites(i['site_ids'], ['person_ids', 'name']) + if len(sitelist) > 0: + s = sitelist[0] + if i['person_id'] in s['person_ids']: + i['name'] = s['name'] + print_fields(i, fields, config.format) + else: + n = api.GetPersons(f, fields) + if config.listfields: list_fields(n) + for i in n: + print_fields(i, fields, config.format) if __name__ == "__main__": main()