Add CPU pinning support for node context
[yardstick.git] / yardstick / dispatcher / base.py
1 # Copyright 2013 IBM Corp
2 # All Rights Reserved.
3 #
4 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
5 #    not use this file except in compliance with the License. You may obtain
6 #    a copy of the License at
7 #
8 #         http://www.apache.org/licenses/LICENSE-2.0
9 #
10 #    Unless required by applicable law or agreed to in writing, software
11 #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 #    License for the specific language governing permissions and limitations
14 #    under the License.
15
16 # yardstick comment: this is a modified copy of
17 # ceilometer/ceilometer/dispatcher/__init__.py
18
19 from __future__ import absolute_import
20 import abc
21 import six
22
23 import yardstick.common.utils as utils
24
25
26 @six.add_metaclass(abc.ABCMeta)
27 class Base(object):
28
29     def __init__(self, conf):
30         self.conf = conf
31
32     @staticmethod
33     def get_cls(dispatcher_type):
34         """Return class of specified type."""
35         for dispatcher in utils.itersubclasses(Base):
36             if dispatcher_type == dispatcher.__dispatcher_type__:
37                 return dispatcher
38         raise RuntimeError("No such dispatcher_type %s" % dispatcher_type)
39
40     @staticmethod
41     def get(conf, config):
42         """Returns instance of a dispatcher for dispatcher type.
43         """
44         return Base.get_cls(conf["type"])(conf, config)
45
46     @abc.abstractmethod
47     def record_result_data(self, data):
48         """Recording result data interface."""
49
50     @abc.abstractmethod
51     def flush_result_data(self):
52         """Flush result data into permanent storage media interface."""