# 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 .

### Alternatives¶

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

None

### 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


None

None

None

None

None

None

## Implementation¶

### Assignee(s)¶

Primary assignee:

Other contributors:

<None>

### 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.

None

## Testing¶

Unit test will be updated.

## Documentation Impact¶

Update the contributor guide for goal plugin. https://docs.openstack.org/watcher/latest/contributor/plugin/goal-plugin.html#implementation