From a0a9b2ce1323c0cb46796b0e85caf129736866bb Mon Sep 17 00:00:00 2001 From: vmahe Date: Thu, 17 Mar 2016 08:57:06 +0100 Subject: [PATCH] Achieved goal should be returned by each strategy Today, there is no way to know what goal is achieved by a given strategy. The mapping between goal and strategies is done in the Watcher configuration. Beyond that, there is no way to know that several strategies achieve the same optimization goal. There should be a way to return the list of available goals depending on which strategies have been deployed on the node where the Watcher Decision Engine is running. Change-Id: I29e6b5cb8c9314b66a5b740ee2cd2f9097468a08 Implements: blueprint get-goal-from-strategy --- .../class_diagram_goal_from_strategy.txt | 35 +++ .../class_diagram_goal_from_strategy.png | Bin 0 -> 31943 bytes .../approved/get-goal-from-strategy.rst | 288 ++++++++++++++++++ 3 files changed, 323 insertions(+) create mode 100644 doc/source/image_src/plantuml/class_diagram_goal_from_strategy.txt create mode 100644 doc/source/images/class_diagram_goal_from_strategy.png create mode 100644 specs/mitaka/approved/get-goal-from-strategy.rst diff --git a/doc/source/image_src/plantuml/class_diagram_goal_from_strategy.txt b/doc/source/image_src/plantuml/class_diagram_goal_from_strategy.txt new file mode 100644 index 0000000..4cfb306 --- /dev/null +++ b/doc/source/image_src/plantuml/class_diagram_goal_from_strategy.txt @@ -0,0 +1,35 @@ +@startuml +class "Base Strategy" { + String goal_id + String goal_display_name + String strategy_id + String strategy_display_name + Solution execute() +} +class "Energy Base Strategy" { + String goal_id="REDUCE_ENERGY" + String goal_display_name="Reduce Energy" +} +class "IO Base Strategy" { + String goal_id="REDUCE_DISK_IO" + String goal_display_name="Reduce Disk IO" +} +class "Network Bandwidth Base Strategy" { + String goal_id="REDUCE_NETWORK_BANDWIDTH" + String goal_display_name="Reduce Network Bandwidth" +} +class "Energy Strategy A" { + String strategy_id="ENERGY_STRATEGY_A" + String strategy_display_name="Energy Strategy A" +} +class "Energy Strategy B" { + String strategy_id="ENERGY_STRATEGY_B" + String strategy_display_name="Energy Strategy B" +} +"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" +"Base Strategy" ..> Solution : generates +@enduml diff --git a/doc/source/images/class_diagram_goal_from_strategy.png b/doc/source/images/class_diagram_goal_from_strategy.png new file mode 100644 index 0000000000000000000000000000000000000000..9dee6a73b06e9a9be930f38310290fec711c6250 GIT binary patch literal 31943 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%0D^*Akk91e6;@wDue(ifJmg2Eb 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