1d543e6a1cc2ff58a92c11bbb58bbdec7a8e20d2
[bottlenecks.git] / vstf / vstf / controller / settings / tool_settings.py
1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
3 # author: wly
4 # date: 2015-09-18
5 # see license for license details
6
7 import logging
8 import pprint
9 import vstf.controller.settings.settings as sets
10 import vstf.common.decorator as deco
11 from vstf.common.input import raw_choice
12
13 LOG = logging.getLogger(__name__)
14
15
16 class ToolSettings(sets.Settings):
17     def __init__(self, path="/etc/vstf", filename="sw_perf.tool-settings", mode=sets.SETS_DEFAULT):
18         super(ToolSettings, self).__init__(path, filename, mode)
19
20     def _register_func(self):
21         body = set(
22             self._fset.keys()
23         )
24         LOG.debug(body)
25         for item in body:
26             item = item.encode()
27             func_name = "set_%s" % (item)
28             setattr(self, func_name,
29                     self._setting_file(func_name, self._mset, self._fset, item, check=self._check_keys))
30
31     def _check_keys(self, value):
32         keys = ['threads', 'wait', 'time']
33         if not isinstance(value, dict):
34             raise Exception("type is error: %s" % (str(value)))
35         for key in keys:
36             if key not in value.keys():
37                 raise Exception("keys[%s] is missing: %s" % (key, str(value)))
38
39     def sinput(self):
40         body = set(
41             self._fset.keys()
42         )
43         for tool in body:
44             info = "if set %s properties" % tool
45             if raw_choice(info):
46                 properties = self.raw_properties()
47                 func = getattr(self, "set_%s" % tool)
48                 func(properties)
49
50         print "%s set finish: " % self._filename
51         print "+++++++++++++++++++++++++++++++++++++++++"
52         pprint.pprint(self.settings, indent=4)
53         print "+++++++++++++++++++++++++++++++++++++++++"
54
55     @deco.vstf_input("time", types=int)
56     @deco.vstf_input("wait", types=int)
57     @deco.vstf_input("threads", types=int)
58     def raw_properties(self):
59         print "---------------------------------------"
60         print "Please vstf set tool properties like:"
61         print "    'threads': 2,"
62         print "    'wait': 2,"
63         print "    'time': 10,"
64         print "---------------------------------------"
65
66
67 def unit_test():
68     from vstf.common.log import setup_logging
69     setup_logging(level=logging.DEBUG, log_file="/var/log/vstf/tool-settings.log", clevel=logging.INFO)
70     tool_settings = ToolSettings()
71     value = {
72         "time": 10,
73         "wait": 4,
74         "threads": 1
75     }
76     tool_settings.set_pktgen(value)
77     tool_settings.set_netperf(value)
78     tool_settings.set_iperf(value)
79     tool_settings.set_qperf(value)
80     LOG.info(tool_settings.settings)
81
82
83 if __name__ == '__main__':
84     unit_test()