Ejemplo n.º 1
0
class InstanceManager(threading.Thread):
    ''' The class is a thread to monitor all the provisions '''
    def __init__(self, config):
        threading.Thread.__init__(self)
        self.config = config
        self.instanceMetric = ProvisionInstanceMetric()
        self.cloud = get_cloud_api(self.config)
        self.running = True
        self.instance_queue = Queue.Queue()
        self.instances_last_update_time = time.time()
        self.instances_next_update_time = time.time()
        self.instances_update_flag = True
        #self.get_host = not self.config.disable_host

    def get_instance_queue(self):
        return self.instance_queue

    def terminateIM(self):
        self.running = False
        self.join()

    def run(self):
        while (self.running):
            self.collect_instance()
            if not self.config.disable_host:
                self._update_instances_info()
            sleep(1)
        self.collect_instance()
        self._wait_for_all_instances_get_host()

    def collect_instance(self):
        while not self.instance_queue.empty():
            instance = self.instance_queue.get()
            self.instanceMetric._append_instance(instance)

    def _wait_for_all_instances_get_host(self):
        timeout = 120
        while not self.instanceMetric._wait_for_all_instances_get_host(
                self.cloud) and timeout > 0:
            time.sleep(20)
            timeout = timeout - 20

    def _update_instances_info(self):
        if self.instances_update_flag and (
                time.time() - self.instances_next_update_time > 0):
            if self.instanceMetric._update_instances_info(self.cloud):
                self.instances_next_update_time = time.time(
                ) + 2 * self.config.min_lifetime / 3
                self.instances_last_update_time = time.time()
            elif time.time(
            ) - self.instances_last_update_time > 5 * self.config.client_interval:
                self.instances_update_flag = False
class InstanceManager(threading.Thread):
	''' The class is a thread to monitor all the provisions '''
	def __init__(self, config):
		threading.Thread.__init__(self)
		self.config = config
		self.instanceMetric=ProvisionInstanceMetric()
		self.cloud = get_cloud_api(self.config)
		self.running=True
		self.instance_queue = Queue.Queue()
		self.instances_last_update_time = time.time()
		self.instances_next_update_time = time.time()
		self.instances_update_flag = True
		#self.get_host = not self.config.disable_host

	def get_instance_queue(self):
		return self.instance_queue

	def terminateIM(self):
		self.running=False
		self.join()

	def run(self):
		while(self.running):
		    self.collect_instance()
		    if not self.config.disable_host:
	    	        self._update_instances_info()
		    sleep(1)
		self.collect_instance()
		self._wait_for_all_instances_get_host()
	
	def collect_instance(self):
	    while not self.instance_queue.empty():
		instance = self.instance_queue.get()
		self.instanceMetric._append_instance(instance)	

	def _wait_for_all_instances_get_host(self):
	    timeout = 120
	    while not self.instanceMetric._wait_for_all_instances_get_host(self.cloud) and timeout > 0:
		time.sleep(20)
		timeout = timeout - 20

	def _update_instances_info(self):
	    if self.instances_update_flag and (time.time() - self.instances_next_update_time > 0):
	        if self.instanceMetric._update_instances_info(self.cloud):
		    self.instances_next_update_time = time.time() + 2*self.config.min_lifetime/3
		    self.instances_last_update_time = time.time()
		elif time.time() - self.instances_last_update_time > 5*self.config.client_interval:
		    self.instances_update_flag = False