def start(self, instance_name, padded=False): if not padded: progress_log('Starting instance') status = self.get_status(instance_name) process_name = self.process_name(instance_name) supervisor = SupervisorControl(self.config) if status['status'] == 'unknown': padded_log('Unknown {} status ...') elif status['status'] == 'not found': supervisor.load(process_name) else: padded_log('Process stopped, starting ...') supervisor.start(process_name) padded_log('Waiting for process "{}" to start...'.format(process_name)) retries = 10 status = self.get_status(instance_name) while retries > 0 or status['status'] != 'running': sleep(0.5) status = self.get_status(instance_name) retries -= 1 if status['status'] == 'running': padded_success('Process "{}" started'.format(process_name)) return True elif status['status'] in ['fatal', 'backoff']: padded_error('Process "{}" not started, an error occurred'.format(process_name)) return False else: padded_error('Process "{}" not started'.format(process_name)) return False
def stop(self, instance_name, padded=False): if not padded: progress_log('Stopping instance') process_name = self.process_name(instance_name) supervisor = SupervisorControl(self.config) supervisor.stop(process_name) padded_log('Waiting for "{}" instance to stop...'.format(instance_name)) retries = 10 status = self.get_status(instance_name) while retries > 0 or status['status'] != 'stopped': sleep(0.5) status = self.get_status(instance_name) retries -= 1 status = self.get_status(instance_name) if status['status'].lower() == 'stopped': padded_success('Instance "{}" stopped'.format(instance_name)) return True else: padded_error('Instance "{}" still active'.format(instance_name)) return False
def get_status(self, instance_name): process_name = self.process_name(instance_name) supervisor = SupervisorControl(self.config) status = supervisor.status(process_name) result_status = OrderedDict() result_status['name'] = instance_name result_status['server'] = 'http://{}:{}'.format(self.config.server, self.config.supervisor.port) result_status['status'] = status['status'].lower() result_status['pid'] = status['pid'] result_status['uptime'] = status['uptime'] return result_status