6 from neco.util import guid
7 from neco.execution.resource import ResourceFactory
9 class ExperimentController(object):
10 def __init__(self, root_dir = "/tmp", loglevel = 'error'):
11 super(ExperimentController, self).__init__()
12 # root directory to store files
13 self._root_dir = root_dir
15 # generator of globally unique ids
16 self._guid_generator = guid.GuidGenerator()
19 self._resources = dict()
25 self._logger = logging.getLogger("neco.execution.ec")
26 self._logger.setLevel(getattr(logging, loglevel.upper()))
28 def resource(self, guid):
29 return self._resources.get(guid)
32 return self._resources.keys()
34 def release(self, group = None):
38 def deploy(self, group = None):
42 def register_resource(self, rtype, guid = None):
43 # Get next available guid
44 guid = self._guid_generator.next(guid)
47 rm = ResourceFactory.create(rtype, self, guid)
50 self._resources[guid] = rm
54 def get_attributes(self, guid):
55 rm = self._resources[guid]
56 return rm.get_attributes()
58 def get_filters(self, guid):
59 rm = self._resources[guid]
60 return rm.get_filters()
62 def register_connection(self, guid1, guid2):
63 rm1 = self._resources[guid1]
64 rm2 = self._resources[guid2]
69 def register_group(self, guids, gguid = None):
70 gguid = self._guid_generator.next(gguid)
71 self._groups[gguid] = guids
73 def discover_resource(self, guid, filters):
74 rm = self._resources[guid]
75 return rm.discover(filters)
77 def provision_resource(self, guid, filters):
78 rm = self._resources[guid]
79 return rm.provision(filters)
81 def register_start(self, gguid1, time, after_status, gguid2):
82 if isinstance(gguid1, int):
84 if isinstance(gguid2, int):
89 rm = self._resources(guid1)
90 rm.start_after(time, after_status, guid2)
92 def register_stop(self, gguid1, time, after_status, gguid2):
93 if isinstance(gguid1, int):
95 if isinstance(gguid2, int):
100 rm = self._resources(guid1)
101 rm.stop_after(time, after_status, guid2)
103 def register_set(self, name, value, gguid1, time, after_status, gguid2):
104 if isinstance(gguid1, int):
105 gguid1 = list[gguid1]
106 if isinstance(group2, int):
107 gguid2 = list[gguid2]
111 rm = self._resources(guid1)
112 rm.set_after(name, value, time, after_status, guid2)
114 def get(self, guid, name):
115 rm = self._resources(guid)
118 def set(self, guid, name, value):
119 rm = self._resources(guid)
120 return rm.set(name, value)
122 def status(self, guid):
123 rm = self._resources(guid)
126 def stop(self, guid):
127 rm = self._resources(guid)