Provide efficacy indicators
When the admin trigger an audit using Watcher, we provide a list of actions that should be run to attain a specific goal (defined in the audit template), Today, there is no incentive to give a predicted result of the optimization after running the actions plan. This feature will give the admin an estimated gain of running Watcher on the infrastructure. Change-Id: Ifd1c9ae9c6b6aeb0ba3da698f2adfb0817faef82
This commit is contained in:
parent
b00ca96e03
commit
47de2a32d8
@ -0,0 +1,47 @@
|
||||
@startuml
|
||||
class "Base Strategy" {
|
||||
String goal
|
||||
ActionPlan execute()
|
||||
}
|
||||
class "Energy Base Strategy" {
|
||||
String goal="Reduce Energy"
|
||||
}
|
||||
class "IO Base Strategy" {
|
||||
String goal="Reduce Disk IO"
|
||||
}
|
||||
class "Network Bandwidth Base Strategy" {
|
||||
String goal="Reduce Network Bandwidth"
|
||||
}
|
||||
class IndicatorSpecification {
|
||||
String name
|
||||
String description
|
||||
String type
|
||||
String unit
|
||||
String valueRange
|
||||
boolean isMandatory = true
|
||||
}
|
||||
class EnergyEfficacySpecification {
|
||||
ArrayList : IndicatorSpecification[] indicatorsDescription
|
||||
boolean checkEfficacyIndicators(ActionPlan)
|
||||
Object getGlobalEfficacy(ActionPlan)
|
||||
}
|
||||
class Efficacy {
|
||||
HashMap : IndicatorValue[] indicators
|
||||
}
|
||||
class IndicatorValue {
|
||||
String name
|
||||
Object value
|
||||
}
|
||||
"Base Strategy" <|-- "IO Base Strategy"
|
||||
"Base Strategy" <|-- "Energy Base Strategy"
|
||||
"Base Strategy" <|-- "Network Bandwidth Base Strategy"
|
||||
"Energy Base Strategy" <|-- "Energy Strategy A"
|
||||
"Energy Base Strategy" <|-- "Energy Strategy B"
|
||||
"Energy Base Strategy" <|-- "Energy Strategy C"
|
||||
"Energy Base Strategy" --> "EnergyEfficacySpecification"
|
||||
EnergyEfficacySpecification "1" *-- "many" IndicatorSpecification
|
||||
"Base Strategy" ..> ActionPlan : generates
|
||||
ActionPlan --> Efficacy
|
||||
Efficacy "1" *-- "many" IndicatorValue
|
||||
@enduml
|
||||
|
BIN
doc/source/images/class_diagram_efficacy_indicator.png
Normal file
BIN
doc/source/images/class_diagram_efficacy_indicator.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
364
specs/mitaka/approved/efficacy-indicator.rst
Normal file
364
specs/mitaka/approved/efficacy-indicator.rst
Normal file
@ -0,0 +1,364 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==================
|
||||
Efficacy Indicator
|
||||
==================
|
||||
|
||||
https://blueprints.launchpad.net/watcher/+spec/efficacy-indicator
|
||||
|
||||
Provide efficacy indicators associated with an `Audit`_ to give tangible
|
||||
indicators of the possible improvement of the proposed optimization.
|
||||
|
||||
When the `Administrator`_ trigger an audit using Watcher, we provide a list of
|
||||
`Actions`_ that should be run to attain a specific `goal`_ (defined in the
|
||||
`audit template`_).
|
||||
Today, there is no incentive to give a predicted result of the optimization
|
||||
after running the `action plan`_. This feature will give the admin an
|
||||
estimated gain of running Watcher on its infrastructure.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Today, Watcher does not provide efficacy indicators to give more accuracy to
|
||||
an action plan. An administrator would require to have an idea of the level
|
||||
of optimization Watcher can provide. The indicators must be related to the
|
||||
initial goal set in the audit template,for example if the goal is "thermal
|
||||
optimization", we should provide an estimated average inlet temperature of the
|
||||
cluster (or an estimated decrease in % of the average inlet temperature).
|
||||
If the `Strategy`_ applied is "basic consolidation", we should be able to
|
||||
provide an estimated average CPU load after running the optimization.
|
||||
These indicators must be computed by the chosen strategy.
|
||||
|
||||
There should also be a way to compare the efficacy of different strategies for
|
||||
a given optimization `goal`_. Therefore, all the strategies associated to a
|
||||
given goal should provide the same efficacy indicators so that the
|
||||
`Administrator`_ can decide which strategy is the best. In the longer run, it
|
||||
will also enable Watcher to automatically decide which strategy to use (via
|
||||
some *StrategySelector* component in the `Watcher Decision Engine`_).
|
||||
|
||||
|
||||
Use Cases
|
||||
----------
|
||||
|
||||
As an administrator, I would like to have efficacy indicators to be able to
|
||||
judge if the proposed optimization fit my objectives before running the
|
||||
recommended action plan.
|
||||
|
||||
As an administrator, I would like to be able to compare the efficacy of
|
||||
several strategies for the same optimization goal
|
||||
|
||||
As a strategy developer, I will provide a list of indicators that can be
|
||||
evaluated during the execution of the audit and displayed to the administrator
|
||||
with the corresponding action plan.
|
||||
|
||||
As a developer, I would like to make sure that all strategies associated to
|
||||
a given goal provide the same list of efficacy indicators.
|
||||
|
||||
|
||||
Project Priority
|
||||
-----------------
|
||||
|
||||
Not relevant because Watcher is not in the big tent so far.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
An hashmap should be added to the `action plan`_ providing a list of efficacy
|
||||
indicators with a name and a value (the name of the indicator is used as the
|
||||
key for the hash map and should be unique).
|
||||
|
||||
We propose to use the `DDD Specification Pattern`_ to express the constraints
|
||||
regarding efficacy indicators for a given `goal`_.
|
||||
|
||||
For each XYZ `goal`_, we should create a **XYZEfficacySpecification** class
|
||||
which contains the list of expected efficacy indicators. This class would
|
||||
contain the following properties for each expected efficacy indicator:
|
||||
|
||||
- the name of the indicator, which must be translated via i18n oslo lib
|
||||
- a description, which must be translated via i18n oslo lib
|
||||
- the unit of the indicator (percent, kWh, second, ...), which must be
|
||||
translated via i18n oslo lib
|
||||
- the type of the value (integer, float, enum, string, ...) and range of
|
||||
allowed values.
|
||||
- a flag indicating whether it is mandatory or optional
|
||||
|
||||
Each strategy associated to a given XYZ goal should have access to a
|
||||
singleton of the **XYZEfficacySpecification** class in order to make sure
|
||||
the generated action plan contains the expected efficacy indicators. In other
|
||||
words, in each strategy, it should be possible to call the
|
||||
**checkEfficacyIndicators(ActionPlan)** method of the
|
||||
**XYZEfficacySpecification** which returns a boolean saying whether all
|
||||
mandatory efficacy indicators are provided in a given `action plan`_ and
|
||||
whether the indicator values are compliant with the expected types and ranges.
|
||||
|
||||
It should be possible to call a **getGlobalEfficacy(ActionPlan)** method from
|
||||
the **XYZEfficacySpecification** class which returns a global score of efficacy
|
||||
for a given `action plan`_. This global score would be computed using a
|
||||
ponderated sum of the different efficacy indicators.
|
||||
|
||||
Below you will find a class diagram showing the hierarchy of Strategies for
|
||||
several goals and how they are related to efficacy specification classes:
|
||||
|
||||
.. image:: ../../../doc/source/images/class_diagram_efficacy_indicator.png
|
||||
:width: 140%
|
||||
|
||||
In the future, the `DDD Specification Pattern`_ will enable Watcher to compose
|
||||
several efficacy indicators whenever an Audit is launched with multiple goals.
|
||||
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
The administrator will let Watcher do the optimization without having a
|
||||
forecast of the potential gain on the infrastructure.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
The following data object will be impacted:
|
||||
|
||||
* **ActionPlan**:
|
||||
|
||||
* We may need to store in the database a list of efficacy indicators
|
||||
associated with the action plan (hashmap)
|
||||
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
There will be an impact on every REST resource URLs that starts with
|
||||
**/v1/action_plans/** and that uses the type **ActionPlan**:
|
||||
|
||||
* GET /v1/action_plans
|
||||
* GET /v1/action_plans/(action_plans_uuid)
|
||||
* POST /v1/action_plans
|
||||
* DELETE /v1/action_plans
|
||||
* PATCH /v1/action_plans
|
||||
* GET /v1/action_plans/detail
|
||||
|
||||
The type **ActionPlan** will contain a new **efficacy** object with a hashmap
|
||||
of indicators.
|
||||
|
||||
Here is a sample of the new JSON payload for an action plan which includes
|
||||
the **efficacy** object composed of one global efficacy indicator and three
|
||||
detailed indicators:
|
||||
|
||||
::
|
||||
|
||||
{
|
||||
"action_plans": [
|
||||
{
|
||||
"audit_uuid": "abcee106-14d3-4515-b744-5a26885cf6f6",
|
||||
"first_action_uuid": "57eaf9ab-5aaa-4f7e-bdf7-9a140ac7a720",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://localhost:9322/v1/action_plans/9ef4d84c-41e8-4418-9220-ce55be0436af",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://localhost:9322/action_plans/9ef4d84c-41e8-4418-9220-ce55be0436af",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"state": "ONGOING",
|
||||
"updated_at": "2016-02-08T12:59:33.445869",
|
||||
"uuid": "9ef4d84c-41e8-4418-9220-ce55be0436af",
|
||||
"efficacy" : [
|
||||
{
|
||||
"name" : "Global efficacy score",
|
||||
"value" : "89"
|
||||
},
|
||||
{
|
||||
"name" : "Average CPU load",
|
||||
"value" : "22"
|
||||
},
|
||||
{
|
||||
"name" : "Average inlet temperature",
|
||||
"value" : "34"
|
||||
},
|
||||
{
|
||||
"name" : "Number of sleeping hosts",
|
||||
"value" : "2"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
There will also be an impact on every REST resource URLs that starts with
|
||||
**/v1/goals/** and that uses the type **Goal**:
|
||||
|
||||
* GET /v1/goals
|
||||
* GET /v1/goals/(goal_uuid)
|
||||
* GET /v1/goals/detail
|
||||
|
||||
The type **Goal** will contain a new **efficacy_specification** object with a
|
||||
hashmap of indicator descriptions.
|
||||
|
||||
Here is a sample of the new JSON payload for a goal which includes
|
||||
the **efficacy_specification** object composed of 4 indicators:
|
||||
|
||||
::
|
||||
|
||||
{
|
||||
"goals": [
|
||||
{
|
||||
"name": "Reduce Energy Consumption",
|
||||
"efficacy_specification" : [
|
||||
{
|
||||
"name" : "Relative energy gain",
|
||||
"description" : "The amount of gained energy in %",
|
||||
"unit" : "%",
|
||||
"type" : "integer",
|
||||
"range" : "[0..100]",
|
||||
"mandatory" : "true"
|
||||
},
|
||||
{
|
||||
"name" : "Absolute energy gain",
|
||||
"description" : "The amount of gained energy in kWh",
|
||||
"unit" : "kWh",
|
||||
"type" : "long",
|
||||
"mandatory" : "true"
|
||||
},
|
||||
{
|
||||
"name" : "Number of VM migrations",
|
||||
"description" : "The total number of VM to migrate",
|
||||
"unit" : "counter",
|
||||
"type" : "integer",
|
||||
"mandatory" : "true"
|
||||
},
|
||||
{
|
||||
"name" : "Estimated action plan duration",
|
||||
"description" : "The estimated time needed to execute the
|
||||
action plan, in seconds",
|
||||
"unit" : "second",
|
||||
"type" : "long",
|
||||
"mandatory" : "true"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
Efficacy indicators needs to be added to the python-watcherclient to provide
|
||||
extra information when requesting action plans or goals.
|
||||
|
||||
The indicators must also be added to watcher-dashboard to allows the cloud
|
||||
administrator to take appropriate decision in Horizon.
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
The calculation of efficacy indicators will be done by the targeted
|
||||
strategy, we should keep in mind that this calculation must not add delay to
|
||||
the building of the actions plan.
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
<launchpad-id or None>
|
||||
|
||||
Other contributors:
|
||||
v-mahe, jed56, acabot
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
Here is the list of foreseen work items:
|
||||
|
||||
* add a field to action-plan object to store the list of efficacy indicators
|
||||
* implement an example of efficacy specification class which contains a
|
||||
description of the expected efficacy indicators for a given goal and the
|
||||
needed methods:
|
||||
|
||||
- **checkEfficacyIndicators(ActionPlan)**
|
||||
- **getGlobalEfficacy(ActionPlan)**
|
||||
* implement a base class dedicated to a goal that will hold a list of possible
|
||||
strategies and an efficacy specification.
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
There are some dependencies with the following blueprint:
|
||||
|
||||
* https://blueprints.launchpad.net/watcher/+spec/get-goal-from-strategy : if
|
||||
there is a base class **XYZBaseStrategy** for all strategies associated to
|
||||
the same XYZ goal, the **XYZEfficacySpecification** should be associated to
|
||||
this base class.
|
||||
|
||||
There is also a dependency with the following bug:
|
||||
|
||||
* https://bugs.launchpad.net/watcher/+bug/1546630 : the API documentation
|
||||
should explain how to request the list of available goals and for each goal
|
||||
it should be possible to see the list of efficacy indicators.
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
* Unit tests on the `Watcher Decision Engine`_
|
||||
* Tempest test to run a strategy to get efficacy indicators
|
||||
* Tempest test to get the list of available goals and for each goal the list
|
||||
of efficacy indicator specification.
|
||||
* An admin should be able to launch an Audit with Watcher with a
|
||||
BASIC_CONSOLIDATION goal on an OpenStack cluster and get efficacy
|
||||
indicators associated with the generated action plan.
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
None
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
|
||||
History
|
||||
=======
|
||||
|
||||
None
|
||||
|
||||
|
||||
.. _Audit: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#audit
|
||||
.. _Administrator: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#administrator
|
||||
.. _Actions: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#action
|
||||
.. _goal: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#goal
|
||||
.. _audit template: http://factory.b-com.com/www/watcher/doc/watcher/glossary.html#audit-template
|
||||
.. _action plan: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#action-plan
|
||||
.. _Strategy: https://factory.b-com.com/www/watcher/doc/watcher/glossary.html#strategy
|
||||
.. _Watcher Decision Engine: https://factory.b-com.com/www/watcher/doc/watcher/architecture.html#watcher-decision-engine
|
||||
.. _DDD Specification Pattern: http://martinfowler.com/apsupp/spec.pdf
|
Loading…
x
Reference in New Issue
Block a user