Initial resource limitation model API and classes.
[osm/vim-emu.git] / src / emuvim / dcemulator / resourcemodel / __init__.py
1 """
2 Base classes needed for resource models support.
3 """
4
5 import logging
6 LOG = logging.getLogger("resourcemodel")
7 LOG.setLevel(logging.DEBUG)
8
9
10 class ResourceModelRegistrar(object):
11
12 def __init__(self, dc_emulation_max_cpu):
13 self.e_cpu = dc_emulation_max_cpu
14 # pointer to all resource models assigned to DCs
15 self._resource_models = dict()
16 LOG.info("Resource model registrar created with dc_emulation_max_cpu=%r" % dc_emulation_max_cpu)
17
18 def register(self, dc, rm):
19 if dc in self._resource_models:
20 raise Exception("There is already an resource model assigned to this DC.")
21 self._resource_models[dc] = rm
22 LOG.info("Registrar: Added resource model: %r" % rm)
23
24
25 class ResourceFlavor(object):
26
27 def __init__(self, name, metrics):
28 self.name = name
29 self.metrics = metrics
30 LOG.debug("Create flavor %r with metrics: %r" % (name, metrics))
31
32
33 class BaseResourceModel(object):
34
35 def __init__(self):
36 self._flavors=dict()
37 self._initDefaultFlavors()
38 LOG.info("Resource model %r initialized" % self)
39
40 def __repr__(self):
41 return self.__class__.__name__
42
43 def _initDefaultFlavors(self):
44 # initialize some default flavours (inspired by OpenStack)
45 self.addFlavour(ResourceFlavor(
46 "tiny", {"compute": 1, "memory": 32, "disk": 1}))
47 self.addFlavour(ResourceFlavor(
48 "small", {"compute": 4, "memory": 128, "disk": 20}))
49 self.addFlavour(ResourceFlavor(
50 "medium", {"compute": 8, "memory": 256, "disk": 40}))
51 self.addFlavour(ResourceFlavor(
52 "large", {"compute": 16, "memory": 512, "disk": 80}))
53 self.addFlavour(ResourceFlavor(
54 "xlarge", {"compute": 32, "memory": 1024, "disk": 160}))
55
56 def addFlavour(self, fl):
57 if fl.name in self._flavors:
58 raise Exception("Flavor with name %r already exists!" % fl.name)
59 self._flavors[fl.name] = fl
60
61 def allocate(self, name, flavor_name):
62 LOG.info("RM-ALLOCATE: %r with flavor: %r" % (name, flavor_name))
63 return 0.0, 0.0, 0.0
64
65 def free(self, name):
66 LOG.info("RM-FREE: %r" % name)
67