Source code for cobald.composite.uniform
from ..interfaces import Pool, CompositePool
[docs]
class UniformComposite(CompositePool):
"""
Uniform composition of several pools, with each pool weighted the same
"""
children = []
@property
def demand(self):
return self._demand
@demand.setter
def demand(self, value):
self._demand = value
child_count = len(self.children)
for pool in self.children:
pool.demand = value / child_count
@property
def supply(self):
return sum(child.supply for child in self.children)
@property
def utilisation(self):
try:
return sum(child.utilisation for child in self.children) / len(
self.children
)
except ZeroDivisionError:
return 1.0
@property
def allocation(self):
try:
return sum(child.allocation for child in self.children) / len(self.children)
except ZeroDivisionError:
return 1.0
def __init__(self, *children: Pool):
self._demand = sum(child.demand for child in children)
self.children = list(children)