From 47de2a32d876f735db6b692f93788d93f6d87294 Mon Sep 17 00:00:00 2001 From: Antoine Cabot Date: Tue, 12 Jan 2016 16:52:12 +0100 Subject: [PATCH] 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 --- ...her_Actions_Management_Functional_Need.dia | Bin .../class_diagram_efficacy_indicator.txt | 47 +++ .../class_diagram_efficacy_indicator.png | Bin 0 -> 44719 bytes specs/mitaka/approved/efficacy-indicator.rst | 364 ++++++++++++++++++ 4 files changed, 411 insertions(+) rename doc/source/image_src/{ => dia}/Watcher_Actions_Management_Functional_Need.dia (100%) create mode 100644 doc/source/image_src/plantuml/class_diagram_efficacy_indicator.txt create mode 100644 doc/source/images/class_diagram_efficacy_indicator.png create mode 100644 specs/mitaka/approved/efficacy-indicator.rst diff --git a/doc/source/image_src/Watcher_Actions_Management_Functional_Need.dia b/doc/source/image_src/dia/Watcher_Actions_Management_Functional_Need.dia similarity index 100% rename from doc/source/image_src/Watcher_Actions_Management_Functional_Need.dia rename to doc/source/image_src/dia/Watcher_Actions_Management_Functional_Need.dia diff --git a/doc/source/image_src/plantuml/class_diagram_efficacy_indicator.txt b/doc/source/image_src/plantuml/class_diagram_efficacy_indicator.txt new file mode 100644 index 0000000..e0df658 --- /dev/null +++ b/doc/source/image_src/plantuml/class_diagram_efficacy_indicator.txt @@ -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 + diff --git a/doc/source/images/class_diagram_efficacy_indicator.png b/doc/source/images/class_diagram_efficacy_indicator.png new file mode 100644 index 0000000000000000000000000000000000000000..b79b4d3a2539d22cdbc58d7d47cdf9718f1bb29a GIT binary patch literal 44719 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

CfO+Dy!uzb39`^smBZ+6tI)j}YK1%q}# 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 + +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