Multiple global efficacy indicator

Problem description

Watcher calculates global-efficacy as a single value with available efficacy indicators. It is useful for those strategies which optimizes only one openstack resource. For strategies that optimizes multiple resources, multiple global efficacy indicator is required, as each global efficacy indicator will represent one resource. e.g. There are two strategies which optimizes storage and compute both, cloud admin checks the value of global efficacy for both strategy and decides to choose which is higher. cloud admin actually wants to choose strategy which has better compute optimization, since global efficacy is single entity it will not be able to reflect only compute optimization. There is a possibility that user may choose higher global effiacy strategy but at reality its value is higher because of storage efficacy. so its better to have multiple global efficacy indicator one for each resource.

Use Cases

As a Watcher user, For better selection of strategies I want to have multiple global efficacy indicating each resource.

Proposed change

  • Initialize global efficacy as list in Efficacy class.

  • Return global efficacy in following format from EfficacySpecification. It will be a list of objects of efficacy.Indicator class:

    [(efficacy.Indicator(name='', description='', unit='', value='')),
     (efficacy.Indicator(name='', description='', unit='', value='')),
  • Change the parsing of format_global_efficacy method in python-watcherclient

  • Change ActionPlan Data model, as global efficacy was a JSONEncodedDict before and now it will be JSONEncodedList .


We can keep global efficacy as single entity,let user calculate multiple values based on resource using efficacy indicators.

Data model impact


REST API impact

global efficacy JSON schema will change. It will affect follwing API’s:

GET /v1/action_plans/(action_plan_uuid)
GET /v1/action_plans/detail
GET /v1/action_plans

Security impact


Notifications impact


Other end user impact


Performance Impact


Other deployer impact


Developer impact




Primary assignee:


Other contributors:


Work Items

  • Initialize global_efficacy as list in watcher.decision_engine.solution.efficacy.Efficacy

  • Update ActionPlan data model.

  • Update the method get_global_efficacy_indicator in watcher.decision_engine.goal.efficacy.specs.ServerConsolidation

  • Update in python-watcherclient.




Unit test will be updated.

Documentation Impact

Update the contributor guide for goal plugin.