05400986c4b212f360b641aac6d17558f699265f
[monitor.git] / plcquery.py
1 #!/usr/bin/python
2
3
4 from monitor.wrapper import plc
5 api = plc.api
6
7 from monitor import config
8
9 def parse_fields(fields):
10     if fields:
11         s = fields.split(",")
12         if s == []:
13             return None
14         else:
15             return s
16     else:
17         return None
18
19 def parse_filter(filter):
20     if filter:
21         s = filter.split("=")
22         if len(s) == 2:
23             return {s[0] : s[1]}
24         else:
25             raise Exception("filter format should be name=value")
26     else:
27         return None
28
29 def print_fields(obj, fields):
30     for f in fields:
31         if f in obj:
32             print obj[f],
33     print ""
34
35 def main():
36
37     from monitor import parser as parsermodule
38     parser = parsermodule.getParser()
39
40     parser.set_defaults(get=True,
41                         type='node',
42                         filter=None,
43                         fields='node_id,hostname,last_contact'
44                         )
45
46     parser.add_option("", "--get", dest="get", action="store_true",
47                         help="just get values for object")
48
49     parser.add_option("", "--type", dest="type", metavar="[node|person|site]", 
50                         help="object type to query")
51
52     parser.add_option("", "--fields", dest="fields", metavar="key,list,...", 
53                         help="a list of keys to display for each object.")
54
55     parser.add_option("", "--filter", dest="filter", metavar="name=value", 
56                         help="Filter passed to Get* calls")
57
58     parser.add_option("", "--nodelist", dest="nodelist", metavar="nodelist.txt", 
59                         help="A list of nodes to bring out of debug mode.")
60     parser.add_option("", "--listkeys", dest="listkeys", action="store_true",
61                         help="A list of nodes to bring out of debug mode.")
62
63     #parser = parsermodule.getParser(['defaults'], parser)
64     config = parsermodule.parse_args(parser)
65     
66     if config.nodelist:
67         nodelist = utilfile.getListFromFile(config.nodelist)
68
69     if config.get:
70         f = parse_filter(config.filter)
71         fields = parse_fields(config.fields)
72
73     if config.type == 'node': 
74         n = api.GetNodes(f, fields)
75         for i in n:
76             print_fields(i, fields)
77
78 if __name__ == "__main__":
79     main()