#!/usr/bin/python
+import sys
from monitor.wrapper import plc
api = plc.api
else:
return None
-def print_fields(obj, fields):
- for f in fields:
- if f in obj:
- print obj[f],
- print ""
+def conv(s):
+ # strip non-ascii characters to prvent errors
+ r = "".join([x for x in s if ord(x) < 128])
+ return r
+
+def print_fields(obj, fields, format):
+ if format:
+ for f in obj:
+ if type(obj[f]) in (str, unicode):
+ obj[f] = conv(obj[f])
+
+ print format % obj
+ else:
+ for f in fields:
+ if f in obj:
+ obj[f] = conv(obj[f])
+ 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():
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",
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)
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'] = conv(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()