initial version
Change-Id: I699e0ab082657880998d8618fe29eb7f56c6c661
This commit is contained in:
0
watcher/decision_engine/api/__init__.py
Normal file
0
watcher/decision_engine/api/__init__.py
Normal file
0
watcher/decision_engine/api/collector/__init__.py
Normal file
0
watcher/decision_engine/api/collector/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
class ClusterStateCollector(object):
|
||||
def get_latest_state_cluster(self):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
# todo(jed) think abouts needed interfaces
|
||||
# todo(jed) stream incremental diff
|
||||
@@ -0,0 +1,35 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
class MetricsResourceCollector(object):
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def get_average_usage_vm_cpu(self, uuid):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
|
||||
def get_average_usage_vm_memory(self, uuid):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
|
||||
def get_virtual_machine_capacity(self, uuid):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
|
||||
def get_average_network_incomming(self, uuid):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
|
||||
def get_average_network_outcomming(self, uuid):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
0
watcher/decision_engine/api/messaging/__init__.py
Normal file
0
watcher/decision_engine/api/messaging/__init__.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
class DecisionEngineCommand(object):
|
||||
def execute(self):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
27
watcher/decision_engine/api/messaging/event_consumer.py
Normal file
27
watcher/decision_engine/api/messaging/event_consumer.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
class EventConsumer(object):
|
||||
|
||||
def __init__(self):
|
||||
self.messaging = None
|
||||
|
||||
def set_messaging(self, messaging):
|
||||
self.messaging = messaging
|
||||
|
||||
def execute(self, request_id, context, data):
|
||||
raise NotImplementedError('Not implemented ...')
|
||||
0
watcher/decision_engine/api/planner/__init__.py
Normal file
0
watcher/decision_engine/api/planner/__init__.py
Normal file
29
watcher/decision_engine/api/planner/planner.py
Normal file
29
watcher/decision_engine/api/planner/planner.py
Normal file
@@ -0,0 +1,29 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
class Planner(object):
|
||||
def schedule(self, context, audit_uuid, solution):
|
||||
"""The planner receives a solution to schedule
|
||||
|
||||
:param solution: the solution given by the strategy to
|
||||
:param audit_uuid: the audit uuid
|
||||
:return: ActionPlan ordered sequence of change requests
|
||||
such that all security, dependency,
|
||||
and performance requirements are met.
|
||||
"""
|
||||
# example: directed acyclic graph
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
0
watcher/decision_engine/api/selector/__init__.py
Normal file
0
watcher/decision_engine/api/selector/__init__.py
Normal file
19
watcher/decision_engine/api/selector/selector.py
Normal file
19
watcher/decision_engine/api/selector/selector.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
class Selector(object):
|
||||
pass
|
||||
0
watcher/decision_engine/api/solution/__init__.py
Normal file
0
watcher/decision_engine/api/solution/__init__.py
Normal file
35
watcher/decision_engine/api/solution/solution.py
Normal file
35
watcher/decision_engine/api/solution/solution.py
Normal file
@@ -0,0 +1,35 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
class Solution(object):
|
||||
def __init__(self):
|
||||
self.modelOrigin = None
|
||||
self.currentModel = None
|
||||
self.efficiency = 0
|
||||
|
||||
def get_efficiency(self):
|
||||
return self.efficiency
|
||||
|
||||
def set_efficiency(self, efficiency):
|
||||
self.efficiency = efficiency
|
||||
|
||||
def set_model(self, current_model):
|
||||
self.currentModel = current_model
|
||||
|
||||
def get_model(self):
|
||||
return self.currentModel
|
||||
21
watcher/decision_engine/api/solution/solution_comparator.py
Normal file
21
watcher/decision_engine/api/solution/solution_comparator.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
class Solution(object):
|
||||
def compare(self, sol1, sol2):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
21
watcher/decision_engine/api/solution/solution_evaluator.py
Normal file
21
watcher/decision_engine/api/solution/solution_evaluator.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
class SolutionEvaluator(object):
|
||||
def evaluate(self, solution):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
0
watcher/decision_engine/api/strategy/__init__.py
Normal file
0
watcher/decision_engine/api/strategy/__init__.py
Normal file
38
watcher/decision_engine/api/strategy/meta_action.py
Normal file
38
watcher/decision_engine/api/strategy/meta_action.py
Normal file
@@ -0,0 +1,38 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
from watcher.decision_engine.api.strategy.strategy import StrategyLevel
|
||||
|
||||
|
||||
class MetaAction(object):
|
||||
def __init__(self):
|
||||
self.level = StrategyLevel.conservative
|
||||
self.priority = 0
|
||||
|
||||
def get_level(self):
|
||||
return self.level
|
||||
|
||||
def set_level(self, level):
|
||||
self.level = level
|
||||
|
||||
def set_priority(self, priority):
|
||||
self.priority = priority
|
||||
|
||||
def get_priority(self):
|
||||
return self.priority
|
||||
|
||||
def __str__(self):
|
||||
return " "
|
||||
80
watcher/decision_engine/api/strategy/strategy.py
Normal file
80
watcher/decision_engine/api/strategy/strategy.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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
|
||||
from oslo_log import log
|
||||
|
||||
import six
|
||||
from watcher.decision_engine.api.strategy.strategy_level import StrategyLevel
|
||||
from watcher.decision_engine.framework.default_solution import DefaultSolution
|
||||
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
# todo(jed) add interface
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class Strategy(object):
|
||||
def __init__(self, name=None, description=None):
|
||||
self.name = name
|
||||
self.description = description
|
||||
# default strategy level
|
||||
self.strategy_level = StrategyLevel.conservative
|
||||
self.metrics_collector = None
|
||||
self.cluster_state_collector = None
|
||||
# the solution given by the strategy
|
||||
self.solution = DefaultSolution()
|
||||
|
||||
def get_solution(self):
|
||||
return self.solution
|
||||
|
||||
def set_name(self, name):
|
||||
self.name = name
|
||||
|
||||
def get_name(self):
|
||||
return self.name
|
||||
|
||||
def get_strategy_strategy_level(self):
|
||||
return self.strategy_level
|
||||
|
||||
def set_strategy_strategy_level(self, strategy_level):
|
||||
"""Convervative to Aggressive
|
||||
|
||||
the aims is to minimize le number of migrations
|
||||
:param threshold:
|
||||
"""
|
||||
self.strategy_level = strategy_level
|
||||
|
||||
@abc.abstractmethod
|
||||
def execute(self, model):
|
||||
"""Execute a strategy
|
||||
|
||||
:param model:
|
||||
:return:
|
||||
"""
|
||||
|
||||
def get_metrics_resource_collector(self):
|
||||
return self.metrics_collector
|
||||
|
||||
def get_cluster_state_collector(self):
|
||||
return self.cluster_state_collector
|
||||
|
||||
def set_metrics_resource_collector(self, metrics_collector):
|
||||
self.metrics_collector = metrics_collector
|
||||
|
||||
def set_cluster_state_collector(self, cluster_state_collector):
|
||||
self.cluster_state_collector = cluster_state_collector
|
||||
23
watcher/decision_engine/api/strategy/strategy_context.py
Normal file
23
watcher/decision_engine/api/strategy/strategy_context.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
|
||||
class StrategyContext(object):
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def execute_strategy(self, model):
|
||||
raise NotImplementedError("Should have implemented this")
|
||||
24
watcher/decision_engine/api/strategy/strategy_level.py
Normal file
24
watcher/decision_engine/api/strategy/strategy_level.py
Normal file
@@ -0,0 +1,24 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class StrategyLevel(Enum):
|
||||
conservative = "conservative"
|
||||
balanced = "balanced"
|
||||
growth = "growth"
|
||||
aggressive = "aggressive"
|
||||
25
watcher/decision_engine/api/strategy/strategy_state.py
Normal file
25
watcher/decision_engine/api/strategy/strategy_state.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
# Copyright (c) 2015 b<>com
|
||||
#
|
||||
# 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.
|
||||
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class StrategyState(Enum):
|
||||
INIT = 1,
|
||||
READY = 2,
|
||||
RUNNING = 3,
|
||||
TERMINATED = 4,
|
||||
ERROR = 5
|
||||
Reference in New Issue
Block a user