5 from monitor.wrapper import plc
8 from monitor import config
10 def parse_fields(fields):
20 def parse_filter(filter):
26 raise Exception("filter format should be name=value")
31 # strip non-ascii characters to prvent errors
32 r = "".join([x for x in s if ord(x) < 128])
35 def print_fields(obj, fields, format):
38 if type(obj[f]) in (str, unicode):
56 print "no objects returned to list fields"
61 from monitor import parser as parsermodule
62 parser = parsermodule.getParser()
64 parser.set_defaults(get=True,
75 parser.add_option("", "--get", dest="get", action="store_true",
76 help="just get values for object")
78 parser.add_option("", "--type", dest="type", metavar="[node|person|site]",
79 help="object type to query")
81 parser.add_option("", "--fields", dest="fields", metavar="key,list,...",
82 help="a list of keys to display for each object.")
84 parser.add_option("", "--filter", dest="filter", metavar="name=value",
85 help="Filter passed to Get* calls")
87 parser.add_option("", "--format", dest="format",
88 help="Format string to use to print")
90 parser.add_option("", "--byloginbase", dest="byloginbase",
92 parser.add_option("", "--byrole", dest="byrole",
94 parser.add_option("", "--withsitename", dest="withsitename",
95 action="store_true", help="")
97 parser.add_option("", "--nodelist", dest="nodelist", metavar="nodelist.txt",
98 help="A list of nodes to bring out of debug mode.")
99 parser.add_option("", "--listfields", dest="listfields", action="store_true",
100 help="A list of nodes to bring out of debug mode.")
102 #parser = parsermodule.getParser(['defaults'], parser)
103 config = parsermodule.parse_args(parser)
106 nodelist = utilfile.getListFromFile(config.nodelist)
109 f = parse_filter(config.filter)
110 fields = parse_fields(config.fields)
112 if config.type == 'node':
113 if config.fields is None:
114 fields='node_id,hostname,last_contact',
115 fields = parse_fields(config.fields)
117 n = api.GetNodes(f, fields)
118 if config.listfields: list_fields(n)
120 print_fields(i, fields, config.format)
122 if config.type == 'person':
124 if config.byloginbase:
125 s = api.GetSites({'login_base' : config.byloginbase}, ['person_ids'])
126 f = s[0]['person_ids']
128 p = api.GetPersons(None, ['person_id', 'roles'])
129 p = filter(lambda x: config.byrole in x['roles'], p)
130 f = [ x['person_id'] for x in p ]
132 if config.withsitename:
133 n = api.GetPersons(f, fields)
134 if config.listfields: list_fields(n)
136 sitelist = api.GetSites(i['site_ids'], ['person_ids', 'name'])
137 if len(sitelist) > 0:
139 if i['person_id'] in s['person_ids']:
140 i['name'] = conv(s['name'])
141 print_fields(i, fields, config.format)
143 n = api.GetPersons(f, fields)
144 if config.listfields: list_fields(n)
146 print_fields(i, fields, config.format)
148 if __name__ == "__main__":