Merge "Creating result checker classes"
[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 import abc
20 import six
21
22 import yardstick.common.utils as utils
23
24
25 @six.add_metaclass(abc.ABCMeta)
26 class Base(object):
27
28     def __init__(self, conf):
29         self.conf = conf
30
31     @staticmethod
32     def get_cls(dispatcher_type):
33         '''Return class of specified type.'''
34         for dispatcher in utils.itersubclasses(Base):
35             if dispatcher_type == dispatcher.__dispatcher_type__:
36                 return dispatcher
37         raise RuntimeError("No such dispatcher_type %s" % dispatcher_type)
38
39     @staticmethod
40     def get(config):
41         """Returns instance of a dispatcher for dispatcher type.
42         """
43         return Base.get_cls(config["type"])(config)
44
45     @abc.abstractmethod
46     def record_result_data(self, data):
47         """Recording result data interface."""
48
49     @abc.abstractmethod
50     def flush_result_data(self):
51         """Flush result data into permanent storage media interface."""