From 6e8dc5297e9f900bdc5d92ba10617464e85de1a1 Mon Sep 17 00:00:00 2001 From: Alexandr Stavitskiy Date: Mon, 29 Aug 2016 12:38:03 +0300 Subject: [PATCH] Merge scoring base files Merge scoring_engine.py and scoring_container.py to base.py Change-Id: I5cada2c9f7832827c1bccfdea1b0a2138b18bfc9 Closes-Bug: #1617376 --- .../scoring/{scoring_engine.py => base.py} | 29 +++++++++++ .../decision_engine/scoring/dummy_scorer.py | 4 +- .../scoring/dummy_scoring_container.py | 7 ++- .../scoring/scoring_container.py | 51 ------------------- 4 files changed, 34 insertions(+), 57 deletions(-) rename watcher/decision_engine/scoring/{scoring_engine.py => base.py} (77%) delete mode 100644 watcher/decision_engine/scoring/scoring_container.py diff --git a/watcher/decision_engine/scoring/scoring_engine.py b/watcher/decision_engine/scoring/base.py similarity index 77% rename from watcher/decision_engine/scoring/scoring_engine.py rename to watcher/decision_engine/scoring/base.py index 30352071f..3fcc68b6a 100644 --- a/watcher/decision_engine/scoring/scoring_engine.py +++ b/watcher/decision_engine/scoring/base.py @@ -95,3 +95,32 @@ class ScoringEngine(loadable.Loadable): :rtype: list of :class:`oslo_config.cfg.Opt` instances """ return [] + + +@six.add_metaclass(abc.ABCMeta) +class ScoringEngineContainer(loadable.Loadable): + """A base class for all the Scoring Engines Containers. + + A Scoring Engine Container is an abstraction which allows to plugin + multiple Scoring Engines as a single Stevedore plugin. This enables some + more advanced scenarios like dynamic reloading of Scoring Engine + implementations without having to restart any Watcher services. + """ + + @classmethod + @abc.abstractmethod + def get_scoring_engine_list(self): + """Returns a list of Scoring Engine instances. + + :return: A list of Scoring Engine instances + :rtype: :class: `~.scoring_engine.ScoringEngine` + """ + + @classmethod + def get_config_opts(cls): + """Defines the configuration options to be associated to this loadable + + :return: A list of configuration options relative to this Loadable + :rtype: list of :class:`oslo_config.cfg.Opt` instances + """ + return [] diff --git a/watcher/decision_engine/scoring/dummy_scorer.py b/watcher/decision_engine/scoring/dummy_scorer.py index 51cc69a3a..cb0d87692 100644 --- a/watcher/decision_engine/scoring/dummy_scorer.py +++ b/watcher/decision_engine/scoring/dummy_scorer.py @@ -22,12 +22,12 @@ from oslo_serialization import jsonutils from oslo_utils import units from watcher._i18n import _ -from watcher.decision_engine.scoring import scoring_engine +from watcher.decision_engine.scoring import base LOG = log.getLogger(__name__) -class DummyScorer(scoring_engine.ScoringEngine): +class DummyScorer(base.ScoringEngine): """Sample Scoring Engine implementing simplified workload classification. Typically a scoring engine would be implemented using machine learning diff --git a/watcher/decision_engine/scoring/dummy_scoring_container.py b/watcher/decision_engine/scoring/dummy_scoring_container.py index be5a533a7..5b89bdf52 100644 --- a/watcher/decision_engine/scoring/dummy_scoring_container.py +++ b/watcher/decision_engine/scoring/dummy_scoring_container.py @@ -21,13 +21,12 @@ from oslo_log import log from oslo_serialization import jsonutils from watcher._i18n import _ -from watcher.decision_engine.scoring import scoring_container -from watcher.decision_engine.scoring import scoring_engine +from watcher.decision_engine.scoring import base LOG = log.getLogger(__name__) -class DummyScoringContainer(scoring_container.ScoringEngineContainer): +class DummyScoringContainer(base.ScoringEngineContainer): """Sample Scoring Engine container returning a list of scoring engines. Please note that it can be used in dynamic scenarios and the returned list @@ -55,7 +54,7 @@ class DummyScoringContainer(scoring_container.ScoringEngineContainer): ] -class SimpleFunctionScorer(scoring_engine.ScoringEngine): +class SimpleFunctionScorer(base.ScoringEngine): """A simple generic scoring engine for demonstration purposes only. A generic scoring engine implementation, which is expecting a JSON diff --git a/watcher/decision_engine/scoring/scoring_container.py b/watcher/decision_engine/scoring/scoring_container.py deleted file mode 100644 index b9ac29955..000000000 --- a/watcher/decision_engine/scoring/scoring_container.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- encoding: utf-8 -*- -# Copyright (c) 2016 Intel -# -# Authors: Tomasz Kaczynski -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import abc -import six - -from watcher.common.loader import loadable - - -@six.add_metaclass(abc.ABCMeta) -class ScoringEngineContainer(loadable.Loadable): - """A base class for all the Scoring Engines Containers. - - A Scoring Engine Container is an abstraction which allows to plugin - multiple Scoring Engines as a single Stevedore plugin. This enables some - more advanced scenarios like dynamic reloading of Scoring Engine - implementations without having to restart any Watcher services. - """ - - @classmethod - @abc.abstractmethod - def get_scoring_engine_list(self): - """Returns a list of Scoring Engine instances. - - :return: A list of Scoring Engine instances - :rtype: :class: `~.scoring_engine.ScoringEngine` - """ - - @classmethod - def get_config_opts(cls): - """Defines the configuration options to be associated to this loadable - - :return: A list of configuration options relative to this Loadable - :rtype: list of :class:`oslo_config.cfg.Opt` instances - """ - return []