Пример #1
0
 def signal_handler(signal, frame):
     kill_it = False
     now = time.time()
     if now - test.last_kill_sig < 2:
         kill_it = True
     test.last_kill_sig = now
     sys.stderr.write(red('\n\nReceived SIGINT, dumping results. (Press ctrl+c twice quickly to end test now)\n\n'))
     sys.stderr.flush()
     test.show_results()
     if kill_it:
         sys.stderr.write(red('\n\nReceived SIGINT twice within 2 seconds killing test...!\n\n'))
         sys.stderr.flush()
         sys.exit(0)
     signal.signal(signal.SIGINT, signal_handler)
Пример #2
0
 def subnet(self, subnet):
     if subnet is None or isinstance(subnet, Subnet):
         self._subnet = subnet
     else:
         self.log.error(
             red('Unsupported type for subnet:{0}/{1}, must be None or type Subnet'
                 .format(subnet, type(subnet))))
Пример #3
0
 def print_debug(msg):
     msg = red(msg)
     if print_method:
         print_method(msg)
     else:
         stderr.write("{0}\n".format(msg))
         stderr.flush()
Пример #4
0
 def run_remote_commands(
     self,
     ips=None,
     command=None,
 ):
     command = command or self.command
     ips = ips or self.ips
     self.results = {}
     if not ips:
         self.logger.warning('No IPs provided to run_remote_commands!')
         return self.results
     command = command or ""
     iq = Queue()
     #if not ips:
     #    raise ValueError('run_remote_commands: IP list was empty:"{0}"'.format(ips))
     for ip in ips:
         ip = str(ip).strip().rstrip()
         iq.put(ip)
     tlock = Lock()
     threadcount = self.args.thread_count
     if threadcount > iq.qsize():
         threadcount = iq.qsize()
     if not iq:
         return
     self.results = {}
     for i in range(threadcount):
         t = Thread(target=self.do_ssh, args=(iq, tlock, i, command))
         t.daemon = True
         t.start()
     self.logger.debug('Threads started now waiting for join')
     if not self.args.batch_timeout:
         iq.join()
     else:
         start = time.time()
         while iq.unfinished_tasks and (time.time() - start < int(
                 self.args.batch_timeout)):
             time.sleep(.5)
         if iq.unfinished_tasks:
             self.logger.warning(
                 red('Possible unfinished tasks detected '
                     'after elapsed:{0}. Queue:{1}'.format(
                         time.time() - start, iq.queue)))
             time.sleep(.1 * len(ips))
             for ip in ips:
                 with tlock:
                     if ip not in self.results.keys():
                         self.results[ip] = {
                             'status':
                             -1,
                             'output': [
                                 'Timed out after {0} '
                                 'seconds'.format(
                                     int(self.args.batch_timeout))
                             ],
                             'elapsed':
                             int(self.args.batch_timeout)
                         }
     self.logger.debug('Done with join')
     time.sleep(self.maxwait + .1)
     return self.results
Пример #5
0
 def print_debug(msg):
     msg = red(msg)
     if print_method:
         print_method(msg)
     else:
         stderr.write("{0}\n".format(msg))
         stderr.flush()
Пример #6
0
 def signal_handler(signal, frame):
     kill_it = False
     now = time.time()
     if now - test.last_kill_sig < 2:
         kill_it = True
     test.last_kill_sig = now
     sys.stderr.write(
         red('\n\nReceived SIGINT, dumping results. (Press ctrl+c twice quickly to end test now)\n\n'
             ))
     sys.stderr.flush()
     test.show_results()
     if kill_it:
         sys.stderr.write(
             red('\n\nReceived SIGINT twice within 2 seconds killing test...!\n\n'
                 ))
         sys.stderr.flush()
         sys.exit(0)
     signal.signal(signal.SIGINT, signal_handler)
Пример #7
0
 def subnet(self):
     if self._subnet is None:
         if self.args.subnet:
             try:
                 self._subnet = self.user.ec2.get_subnet(self.args.subnet)
             except Exception as E:
                 self.log.error(
                     red('{0}\nFailed to fetch CLI provided subnet:"{1}", ERR:"{2}"'
                         .format(get_traceback(), self.args.subnet, E)))
     return self._subnet
Пример #8
0
 def boto3(self):
     if not self._b3_connection:
         try:
             self._b3_connection = B3Session(ops=self,
                                             connection_kwargs=self._connection_kwargs,
                                             verbose=self._connection_kwargs.get('verbose'))
         except Exception as CE:
             self.log.error(red('{0}\nFailed to create boto3 "{1}" session. Err:"{2}"'
                                .format(get_traceback(), self.__class__.__name__, CE)))
             raise
     return self._b3_connection
Пример #9
0
 def boto2(self):
     if not self._b2_connection:
         try:
             self._b2_connection = self.boto2_connect(
                 verbose=self._connection_kwargs.get('verbose'),
                 conn_kwargs=self._connection_kwargs)
         except Exception as CE:
             self.log.error(red('{0}\nFailed to create boto2 "{1}" connection. Err:"{2}"'
                                .format(get_traceback(), self.__class__.__name__, CE)))
             raise
     return self._b2_connection
Пример #10
0
 def _scrub_ip_list(self, value):
     value = value or []
     ip_list = []
     if isinstance(value, basestring):
         value = value.split(',')
     if not isinstance(value, list):
         self.log.error(red('ip_list must be a list of IPs or comma separated string of IPs'))
         raise ValueError('ip_list must be a list of IPs or comma separated string of IPs')
     for ip in value:
         ip_list.append(str(ip).strip())
     return ip_list
Пример #11
0
 def clean_method(self):
     errors = []
     try:
         if self.instances:
             self.user.ec2.terminate_instances(self.instances)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     try:
         if self.volumes:
             delete = []
             for volume in self.volumes:
                 try:
                     volume.update()
                     if volume.status != 'deleted':
                         delete.append(volume)
                 except EC2ResponseError as ER:
                     if ER.status == 400 and ER.error_code == 'InvalidVolume.NotFound':
                         pass
             if delete:
                 self.user.ec2.delete_volumes(delete)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     try:
         if self._keypair:
             self.user.ec2.delete_keypair(self.keypair)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     try:
         if self._group:
             self.user.ec2.delete_group(self.group)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     if errors:
         buf = "The following errors occurred during test cleanup:"
         for error in errors:
             buf += "\n{0}".format(error)
         raise RuntimeError(buf)
Пример #12
0
 def clean_method(self):
     errors = []
     try:
         if self.instances:
             self.user.ec2.terminate_instances(self.instances)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     try:
         if self.volumes:
             delete = []
             for volume in self.volumes:
                 try:
                     volume.update()
                     if volume.status != 'deleted':
                         delete.append(volume)
                 except EC2ResponseError as ER:
                     if ER.status == 400 and ER.error_code == 'InvalidVolume.NotFound':
                         pass
             if delete:
                 self.user.ec2.delete_volumes(delete)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     try:
         if self._keypair:
             self.user.ec2.delete_keypair(self.keypair)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     try:
         if self._group:
             self.user.ec2.delete_group(self.group)
     except Exception as E:
         self.log.error(red(get_traceback()))
         errors.append(E)
     if errors:
         buf = "The following errors occurred during test cleanup:"
         for error in errors:
             buf += "\n{0}".format(error)
         raise RuntimeError(buf)
Пример #13
0
 def image_utils(self):
     iu = getattr(self, '_image_utils', None)
     if iu is None:
         if not self.user:
             self.log.warning(red('Cant create image utils w/o user, create user first'))
             return None
         # Create an ImageUtils helper from the arguments provided in this testcase...
         setattr(self.args, 'worker_machine', self.tc.sysadmin.clc_machine)
         setattr(self.args, 'user_context', self.user)
         iu = self.do_with_args(Euca2oolsImageUtils)
         setattr(self, '_image_utils', iu)
     return iu
Пример #14
0
 def boto2(self):
     if not self._b2_connection:
         try:
             self._b2_connection = self.boto2_connect(
                 verbose=self._connection_kwargs.get('verbose'),
                 conn_kwargs=self._connection_kwargs)
         except Exception as CE:
             self.log.error(
                 red('{0}\nFailed to create boto2 "{1}" connection. Err:"{2}"'
                     .format(get_traceback(), self.__class__.__name__, CE)))
             raise
     return self._b2_connection
Пример #15
0
 def test1_BasicInstanceChecks(self, zone=None):
     """
     This case was developed to run through a series of basic instance tests.
          The tests are as follows:
                - execute run_instances command
                - make sure that public DNS name and private IP aren't the same
                    (This is for Managed/Managed-NOVLAN networking modes)
                - test to see if instance is ping-able
                - test to make sure that instance is accessible via ssh
                    (ssh into instance and run basic ls command)
          If any of these tests fail, the test case will error out, logging the results.
     """
     instances = self.run_image(zone=zone, **self.run_instance_params)
     self.instances += instances
     for instance in instances:
         if instance.virtualization_type == "paravirtual":
             paravirtual_ephemeral = "/dev/" + instance.rootfs_device + "2"
             try:
                 instance.sys("ls -1 " + paravirtual_ephemeral, code=0)
                 self.log.debug('Found ephemeral storage at: "{0}"'.format(
                     paravirtual_ephemeral))
             except CommandExitCodeException as CE:
                 self.log.error(
                     red("Did not find ephemeral storage at " +
                         paravirtual_ephemeral))
         elif instance.virtualization_type == "hvm" and instance.root_device_type != 'ebs':
             hvm_ephemeral = "/dev/" + instance.block_device_prefix + "b"
             try:
                 instance.sys("ls -1 " + hvm_ephemeral, code=0)
             except CommandExitCodeException as CE:
                 self.log.error(
                     red("Did not find ephemeral storage at " +
                         hvm_ephemeral))
                 raise CE
         self.log.debug("Pinging instance public IP from inside instance")
         instance.sys('ping -c 1 ' + instance.ip_address, code=0)
         self.log.debug("Pinging instance private IP from inside instance")
         instance.sys('ping -c 1 ' + instance.private_ip_address, code=0)
     self.set_instances(instances)
     return instances
Пример #16
0
 def boto3(self):
     if not self._b3_connection:
         try:
             self._b3_connection = B3Session(
                 ops=self,
                 connection_kwargs=self._connection_kwargs,
                 verbose=self._connection_kwargs.get('verbose'))
         except Exception as CE:
             self.log.error(
                 red('{0}\nFailed to create boto3 "{1}" session. Err:"{2}"'.
                     format(get_traceback(), self.__class__.__name__, CE)))
             raise
     return self._b3_connection
Пример #17
0
 def image_utils(self):
     iu = getattr(self, '_image_utils', None)
     if iu is None:
         if not self.user:
             self.log.warning(
                 red('Cant create image utils w/o user, create user first'))
             return None
         # Create an ImageUtils helper from the arguments provided in this testcase...
         setattr(self.args, 'worker_machine', self.tc.sysadmin.clc_machine)
         setattr(self.args, 'user_context', self.user)
         iu = self.do_with_args(Euca2oolsImageUtils)
         setattr(self, '_image_utils', iu)
     return iu
Пример #18
0
 def _start_session(self, connection_kwargs=None):
     if self._ops._user_context:
         self._session = self._ops._user_context.session
     else:
         try:
             region = self._region
             self._session = Session(aws_access_key_id=self._access_key,
                                     aws_secret_access_key=self._secret_key,
                                     region_name=region)
         except Exception as SE:
             self._log.error(red('{0}\nError creating boto3 {1} session. Error:{2}'
                                 .format(get_traceback(), self.__class__.__name__, SE)))
             raise
     return self._session
Пример #19
0
 def test1_BasicInstanceChecks(self, zone=None):
     """
     This case was developed to run through a series of basic instance tests.
          The tests are as follows:
                - execute run_instances command
                - make sure that public DNS name and private IP aren't the same
                    (This is for Managed/Managed-NOVLAN networking modes)
                - test to see if instance is ping-able
                - test to make sure that instance is accessible via ssh
                    (ssh into instance and run basic ls command)
          If any of these tests fail, the test case will error out, logging the results.
     """
     instances = self.run_image(zone=zone, **self.run_instance_params)
     self.instances += instances
     for instance in instances:
         if instance.virtualization_type == "paravirtual":
             paravirtual_ephemeral = "/dev/" + instance.rootfs_device + "2"
             try:
                 instance.sys("ls -1 " + paravirtual_ephemeral, code=0)
                 self.log.debug('Found ephemeral storage at: "{0}"'
                                .format(paravirtual_ephemeral))
             except CommandExitCodeException as CE:
                 self.log.error(red("Did not find ephemeral storage at " +
                                    paravirtual_ephemeral))
         elif instance.virtualization_type == "hvm" and instance.root_device_type != 'ebs':
             hvm_ephemeral = "/dev/" + instance.block_device_prefix + "b"
             try:
                 instance.sys("ls -1 " + hvm_ephemeral, code=0)
             except CommandExitCodeException as CE:
                 self.log.error(red("Did not find ephemeral storage at " + hvm_ephemeral))
                 raise CE
         self.log.debug("Pinging instance public IP from inside instance")
         instance.sys('ping -c 1 ' + instance.ip_address, code=0)
         self.log.debug("Pinging instance private IP from inside instance")
         instance.sys('ping -c 1 ' + instance.private_ip_address, code=0)
     self.set_instances(instances)
     return instances
Пример #20
0
 def cloudformation(self):
     ops_class = CFNops
     name = self.CLASS_MAP[ops_class.__name__]
     if not self._connections.get(name, None):
         if getattr(self, ops_class.EUCARC_URL_NAME, None):
             try:
                 self._connections[name] = ops_class(
                     **self._connection_kwargs)
             except Exception as CE:
                 self.log.error(
                     red('{0}\nFailed to created "{1}" interface.\n'
                         'Connection kwargs:\n{2}\nError:{3}'.format(
                             get_traceback(), ops_class.__name__,
                             self._connection_kwargs, CE)))
     return self._connections.get(name, None)
Пример #21
0
 def cloudformation(self):
     ops_class = CFNops
     name = self.CLASS_MAP[ops_class.__name__]
     if not self._connections.get(name, None):
         if getattr(self, ops_class.EUCARC_URL_NAME, None):
             try:
                 self._connections[name] = ops_class(**self._connection_kwargs)
             except Exception as CE:
                 self.log.error(red('{0}\nFailed to created "{1}" interface.\n'
                                'Connection kwargs:\n{2}\nError:{3}'
                                    .format(get_traceback(),
                                            ops_class.__name__,
                                            self._connection_kwargs,
                                            CE)))
     return self._connections.get(name, None)
Пример #22
0
 def _start_session(self, connection_kwargs=None):
     if self._ops._user_context:
         self._session = self._ops._user_context.session
     else:
         try:
             region = self._region
             self._session = Session(aws_access_key_id=self._access_key,
                                     aws_secret_access_key=self._secret_key,
                                     region_name=region)
         except Exception as SE:
             self._log.error(
                 red('{0}\nError creating boto3 {1} session. Error:{2}'.
                     format(get_traceback(), self.__class__.__name__, SE)))
             raise
     return self._session
Пример #23
0
 def _scrub_ip_list(self, value):
     value = value or []
     ip_list = []
     if isinstance(value, basestring):
         value = value.split(',')
     if not isinstance(value, list):
         self.log.error(
             red('ip_list must be a list of IPs or comma separated string of IPs'
                 ))
         raise ValueError(
             'ip_list must be a list of IPs or comma separated string of IPs'
         )
     for ip in value:
         ip_list.append(str(ip).strip())
     return ip_list
Пример #24
0
 def run_remote_commands(self, ips=None, command=None, ):
     command = command or self.command
     ips = ips or self.ips
     self.results = {}
     if not ips:
         self.logger.warning('No IPs provided to run_remote_commands!')
         return self.results
     command = command or ""
     iq = Queue()
     #if not ips:
     #    raise ValueError('run_remote_commands: IP list was empty:"{0}"'.format(ips))
     for ip in ips:
         ip = str(ip).strip().rstrip()
         iq.put(ip)
     tlock = Lock()
     threadcount = self.args.thread_count
     if threadcount  > iq.qsize():
         threadcount = iq.qsize()
     if not iq:
         return
     self.results = {}
     for i in range(threadcount):
          t = Thread(target=self.do_ssh, args=(iq, tlock, i, command))
          t.daemon = True
          t.start()
     self.logger.debug('Threads started now waiting for join')
     if not self.args.batch_timeout:
         iq.join()
     else:
         start = time.time()
         while iq.unfinished_tasks and (time.time()-start < int(self.args.batch_timeout)):
             time.sleep(.5)
         if iq.unfinished_tasks:
             self.logger.warning(red('Possible unfinished tasks detected '
                                     'after elapsed:{0}. Queue:{1}'
                                     .format(time.time() - start, iq.queue)))
             time.sleep(.1 * len(ips))
             for ip in ips:
                 with tlock:
                     if ip not in self.results.keys():
                         self.results[ip] = {
                             'status': -1,
                             'output': ['Timed out after {0} '
                                        'seconds'.format(int(self.args.batch_timeout))],
                             'elapsed': int(self.args.batch_timeout)}
     self.logger.debug('Done with join')
     time.sleep(self.maxwait + .1)
     return self.results
Пример #25
0
def printOpenFiles():
    print red("\n\n### %d OPEN FILES: [%s]\n\n" % (len(openfiles), ", ".join(f.x for f in openfiles)))
Пример #26
0
class SOSReports(CliTestRunner):

    _DEFAULT_CLI_ARGS = copy.copy(CliTestRunner._DEFAULT_CLI_ARGS)

    _DEFAULT_CLI_ARGS['ticket_number'] = {
        'args': ['--ticket-number'],
        'kwargs': {
            'dest': 'ticket_number',
            'help':
            'Issue, bug, ticket number or identifier to use (defaults to time)',
            'default': None
        }
    }
    _DEFAULT_CLI_ARGS['timeout'] = {
        'args': ['--timeout'],
        'kwargs': {
            'dest': 'timeout',
            'help': 'Timeout for the sos gathering operation',
            'default': 1200
        }
    }

    _DEFAULT_CLI_ARGS['remote_dir'] = {
        'args': ['--remote-dir'],
        'kwargs': {
            'dest': 'remote_dir',
            'help': 'Directory on remote host(s)',
            'default': '/root/'
        }
    }

    _DEFAULT_CLI_ARGS['local_dir'] = {
        'args': ['--local-dir'],
        'kwargs': {
            'dest': 'local_dir',
            'help': 'Local directory to use for gathering sos reports',
            'default': ''
        }
    }

    _DEFAULT_CLI_ARGS['ip_list'] = {
        'args': ['--ip-list'],
        'kwargs': {
            'dest': 'ip_list',
            'help':
            'Comma separated list of ips or hostnames to gather sos reports from',
            'default': None
        }
    }

    _DEFAULT_CLI_ARGS['package_url'] = {
        'args': ['--package-url'],
        'kwargs': {
            'dest':
            'package_url',
            'help':
            'Url to use for eucalyptus sos plugin package',
            'default':
            "http://downloads.eucalyptus.com/software/tools/centos/6/x86_64/"
            "eucalyptus-sos-plugins-0.1.5-0.el6.noarch.rpm"
        }
    }

    def post_init(self, *args, **kwargs):
        self.start_time = int(time.time())
        self.ticket_number = self.args.ticket_number or self.start_time
        self.remote_dir = os.path.join(
            self.args.remote_dir,
            'euca-sosreport-{0}'.format(self.ticket_number))
        self._ip_list = []

    def _scrub_ip_list(self, value):
        value = value or []
        ip_list = []
        if isinstance(value, basestring):
            value = value.split(',')
        if not isinstance(value, list):
            self.log.error(
                red('ip_list must be a list of IPs or comma separated string of IPs'
                    ))
            raise ValueError(
                'ip_list must be a list of IPs or comma separated string of IPs'
            )
        for ip in value:
            ip_list.append(str(ip).strip())
        return ip_list

    @property
    def ip_list(self):
        if not self._ip_list:
            ip_list = self.args.ip_list or self.tc.sysadmin.eucahosts.keys()
            self._ip_list = self._scrub_ip_list(ip_list)
        return self._ip_list

    @ip_list.setter
    def ip_list(self, value):
        self._ip_list = self._scrub_ip_list(value)

    @property
    def tc(self):
        tc = getattr(self, '__tc', None)
        if not tc:
            self.log.debug('Attempting to create TestController...')
            tc = TestController(hostname=self.args.clc,
                                environment_file=self.args.environment_file,
                                password=self.args.password,
                                timeout=self.args.timeout,
                                log_level=self.args.log_level)
            setattr(self, '__tc', tc)
        return tc

    @property
    def rc(self):
        rc = getattr(self, '__rc', None)
        if not rc:
            ip_list = self.ip_list
            self.log.debug(
                'Attempting to create remote command driver with ip list: {0}'.
                format(ip_list))
            rc = RemoteCommands(ips=self.ip_list,
                                username='******',
                                password=self.args.password,
                                timeout=600)
            setattr(self, '__rc', rc)
        return rc

    def clean_method(self):
        pass

    def test1_install_sos_and_plugins(self):
        """
        Attempts to install the SOS and Eucalyptus-sos-plugins on each machine in the cloud.
        """

        rc = self.rc
        rc.results = {}
        self.log.debug('Running install on ips:{0}'.format(rc.ips))
        rc.run_remote_commands(
            command='yum install sos eucalyptus-sos-plugins -y --nogpg')
        rc.show_results()
        failed = 0
        for host, result in rc.results.iteritems():
            if result.get('status') != 0:
                failed += 1
        if failed:
            raise RuntimeError(
                '{0}/{1} hosts had errors during install sos and plugin packages'
                .format(failed / len(rc.ips)))

    def test2_run(self):
        """
        Attempts to run SOS on each host in the cloud to create and gather SOS reports.
        """
        command = "mkdir -p " + self.remote_dir
        command += "; sosreport --batch --tmp-dir {0} --ticket-number {1} "\
            .format(self.remote_dir, self.ticket_number)
        rc = self.rc
        rc.results = {}
        rc.run_remote_commands(command=command)
        rc.show_results()
        failed = 0
        for host, result in rc.results.iteritems():
            if result.get('status') != 0:
                failed += 1
        if failed:
            raise RuntimeError(
                '{0}/{1} hosts had errors while attempting to run SOS'.format(
                    failed, len(rc.ips)))

    def test3_download(self):
        """
        Attempts to download the SOS reports from each host in the cloud and store in a local
        directory
        """
        error_msg = ""
        count = 0
        err_count = 0
        host_count = len(self.ip_list)
        for ip in self.ip_list:
            if self.tc:
                if ip in self.tc.sysadmin.eucahosts.keys():
                    host = self.tc.sysadmin.eucahosts.get(ip)
                    ssh = host.ssh
                else:
                    ssh = SshConnection(host=ip, password=self.args.password)
            try:
                remote_tarball_path = ssh.sys(
                    "ls -1 {0}/*.xz | grep {1}".format(self.remote_dir,
                                                       self.ticket_number),
                    code=0)[0]
                tarball_name = os.path.basename(remote_tarball_path)
                local_name = "sosreport-{0}.{1}{2}".format(
                    ip, self.ticket_number,
                    tarball_name.split(str(self.ticket_number))[1])
                local_tarball_path = os.path.join(self.args.local_dir,
                                                  local_name)
                self.log.debug("Downloading file to: " + local_tarball_path)
                ssh.sftp_get(localfilepath=local_tarball_path,
                             remotefilepath=remote_tarball_path)
            except Exception, e:
                err_count += 1
                msg = '\nError Downloading from: {0}. Error:"{0}"\n'.format(
                    ip, e)
                self.log.error("{0}\n{1}".format(get_traceback(), msg))
                error_msg += msg
            else:
                count += 1
                self.log.info(
                    markup('Downloaded SOS report {0}/{1} to:{2}'.format(
                        count, host_count, local_tarball_path),
                           markups=[
                               ForegroundColor.WHITE, BackGroundColor.BG_GREEN
                           ]))
        if error_msg:
            self.log.error(red(error_msg))
            raise Exception('Error during download on {0}/{1} hosts'.format(
                err_count, host_count))
Пример #27
0
    def _completer_display(self, substitution, matches, longest_match_length):

        try:
            completer = None
            if self.env:
                completer = self.env.completer_context
            completer = completer or self
            linebuffer = readline.get_line_buffer()
            height, width = self._get_terminal_size()
            columns = int((width - 12) / longest_match_length) or 1
            column_width = longest_match_length

            def create_table():
                header = []
                for x in xrange(0, columns):
                    header.append(x)
                pt = PrettyTable(header)
                pt.header = False
                pt.border = False
                pt.align = 'l'
                pt.max_width = column_width
                return pt

            menu_pt = None
            cmd_pt = None
            base_pt = None
            menus = [""] * columns
            cmds = [""] * columns
            basecmds = [""] * columns
            cmd_count = 0
            menu_count = 0
            basecmd_count = 0

            total = []
            base_dir = dir(BaseMenu)
            for match in matches:
                if True:  #not substitution or str(match).startswith(substitution):
                    if not match.strip():
                        continue
                    total.append(match)
                    if match in completer.submenu_names:
                        if menu_pt is None:
                            menu_pt = create_table()
                        if menu_count > columns:
                            menu_pt.add_row(menus)
                            menu_count = 0
                            menus = [""] * columns
                        menus[menu_count] = match
                        menu_count += 1
                    elif 'do_{0}'.format(match) in base_dir:
                        if base_pt is None:
                            base_pt = create_table()

                        if basecmd_count >= columns:
                            base_pt.add_row(basecmds)
                            basecmd_count = 0
                            basecmds = [""] * columns
                        basecmds[basecmd_count] = match
                        basecmd_count += 1
                    else:
                        if cmd_pt is None:
                            cmd_pt = create_table()

                        if cmd_count >= columns:
                            cmd_pt.add_row(cmds)
                            cmd_count = 0
                            cmds = [""] * columns
                        cmds[cmd_count] = match
                        cmd_count += 1
            if menu_count:
                menu_pt.add_row(menus)
            if cmd_count:
                cmd_pt.add_row(cmds)
            if basecmd_count:
                base_pt.add_row(basecmds)

            cli_text = ""
            if substitution == completer.name:
                self.dprint('sub matches self.name, Inserting white space')
                readline.insert_text(" ")
                linebuffer = "{0} ".format(linebuffer)
            else:
                self.dprint('sub:"{0}" doesnt match self.name:"{1}"'.format(
                    substitution, self.name))

            cli_text = "{0}{1}".format(self.prompt, linebuffer)
            newline = readline.get_line_buffer()

            self.dprint(
                "\nCompleter_display():\n\tsubstitution:{0}\n\tmatches:{1}"
                "\n\tlongest_match_length:{2}\n\tlen total:{3}\n\torig line buffer:\"{4}\""
                "\n\tsubtype:{5}\n\ttotal:{6}\n\tsubstitution:\"{7}\"\n\tcolumns:{8}"
                "\n\tcolumn width:{9}\n\tcurrent menu:{10}\n\tcurrent menu path from home:'{11}'"
                "\n\tnew line buffer:'{12}'\n\tcli text:'{13}'"
                "\n\tcompleter_context:{14}\n\tcompleter path from home:{15}"
                "\nmenu_pt:\n{16}\ncmds_pt:\n{17}\n".format(
                    substitution, matches,
                    longest_match_length, len(total), linebuffer,
                    type(substitution), total, substitution, columns,
                    column_width, self, self.path_from_home, newline, cli_text,
                    completer, completer.path_from_home, menu_pt, cmd_pt))

            self.stdout.seek(0)
            self.stdout.write("")
            self.stdout.flush()
            readline.redisplay()

            line_sep = "---------------------------------"
            buf = "\n"
            if cmd_pt:
                buf += yellow("\n{0}".format(cmd_pt), bold=True)
            if menu_pt:
                buf += blue("\n{0}\n{1}".format(line_sep, menu_pt), bold=True)
            if base_pt:
                buf += "\n{0}".format(
                    cyan("{0}\n{1}".format(line_sep, base_pt)))
            self.oprint(buf)
            self.stdout.write(cli_text)
            self.stdout.flush()
            readline.redisplay()

        except Exception as E:
            self.stderr.write(
                red("{0}\nError in completer_display:\nerror:{1}".format(
                    get_traceback(), E)))
            self.stderr.flush()
        finally:
            if self.env:
                self.env.completer_context = None
Пример #28
0
    def clean_method(self):
        if not self.args.no_clean:
            self.log.info('Terminating all instances for user:{0}/{1}'
                          .format(self.tc.user.account_name, self.tc.user.user_name))
            self.tc.user.ec2.terminate_instances()

if __name__ == "__main__":

    errors =[]
    test = InstanceBatchTest()
    try:
        # In the case we want to keep each instance connection open?...
        resource.setrlimit(resource.RLIMIT_NOFILE, (10 * test.args.vm_max ,-1))
    except Exception as RE:
        test.log.warning(red('Unable to set resource limit to:"{0}", err:"{1}"'
                             .format(10 * test.args.vm_max, RE)))

    def signal_handler(signal, frame):
        kill_it = False
        now = time.time()
        if now - test.last_kill_sig < 2:
            kill_it = True
        test.last_kill_sig = now
        sys.stderr.write(red('\n\nReceived SIGINT, dumping results. (Press ctrl+c twice quickly to end test now)\n\n'))
        sys.stderr.flush()
        test.show_results()
        if kill_it:
            sys.stderr.write(red('\n\nReceived SIGINT twice within 2 seconds killing test...!\n\n'))
            sys.stderr.flush()
            sys.exit(0)
        signal.signal(signal.SIGINT, signal_handler)
Пример #29
0
    def _completer_display(self, substitution, matches, longest_match_length):

        try:
            completer = None
            if self.env:
                completer = self.env.completer_context
            completer = completer or self
            linebuffer = readline.get_line_buffer()
            height, width = self._get_terminal_size()
            columns = int((width - 12) / longest_match_length) or 1
            column_width = longest_match_length
            def create_table():
                header = []
                for x in xrange(0, columns):
                    header.append(x)
                pt = PrettyTable(header)
                pt.header = False
                pt.border = False
                pt.align = 'l'
                pt.max_width = column_width
                return  pt

            menu_pt = None
            cmd_pt = None
            base_pt = None
            menus = [""]*columns
            cmds =  [""]*columns
            basecmds = [""]*columns
            cmd_count = 0
            menu_count = 0
            basecmd_count = 0

            total = []
            base_dir = dir(BaseMenu)
            for match in matches:
                if True: #not substitution or str(match).startswith(substitution):
                    if not match.strip():
                        continue
                    total.append(match)
                    if match in completer.submenu_names:
                        if menu_pt is None:
                            menu_pt = create_table()
                        if menu_count > columns:
                            menu_pt.add_row(menus)
                            menu_count = 0
                            menus = [""]*columns
                        menus[menu_count] = match
                        menu_count += 1
                    elif 'do_{0}'.format(match) in base_dir:
                        if base_pt is None:
                            base_pt = create_table()

                        if basecmd_count >= columns:
                            base_pt.add_row(basecmds)
                            basecmd_count = 0
                            basecmds = [""]*columns
                        basecmds[basecmd_count] = match
                        basecmd_count +=1
                    else:
                        if cmd_pt is None:
                            cmd_pt = create_table()

                        if cmd_count >= columns:
                            cmd_pt.add_row(cmds)
                            cmd_count = 0
                            cmds = [""]*columns
                        cmds[cmd_count] = match
                        cmd_count +=1
            if menu_count:
                menu_pt.add_row(menus)
            if cmd_count:
                cmd_pt.add_row(cmds)
            if basecmd_count:
                base_pt.add_row(basecmds)

            cli_text = ""
            if substitution == completer.name:
                self.dprint('sub matches self.name, Inserting white space')
                readline.insert_text(" ")
                linebuffer = "{0} ".format(linebuffer)
            else:
                self.dprint('sub:"{0}" doesnt match self.name:"{1}"'
                            .format(substitution, self.name))

            cli_text = "{0}{1}".format(self.prompt, linebuffer)
            newline = readline.get_line_buffer()

            self.dprint("\nCompleter_display():\n\tsubstitution:{0}\n\tmatches:{1}"
                        "\n\tlongest_match_length:{2}\n\tlen total:{3}\n\torig line buffer:\"{4}\""
                        "\n\tsubtype:{5}\n\ttotal:{6}\n\tsubstitution:\"{7}\"\n\tcolumns:{8}"
                        "\n\tcolumn width:{9}\n\tcurrent menu:{10}\n\tcurrent menu path from home:'{11}'"
                        "\n\tnew line buffer:'{12}'\n\tcli text:'{13}'"
                        "\n\tcompleter_context:{14}\n\tcompleter path from home:{15}"
                        "\nmenu_pt:\n{16}\ncmds_pt:\n{17}\n"
                        .format(substitution, matches, longest_match_length, len(total), linebuffer,
                                type(substitution), total, substitution, columns,
                                column_width, self, self.path_from_home, newline, cli_text,
                                completer, completer.path_from_home,  menu_pt, cmd_pt))

            self.stdout.seek(0)
            self.stdout.write("")
            self.stdout.flush()
            readline.redisplay()

            line_sep = "---------------------------------"
            buf = "\n"
            if cmd_pt:
                buf += yellow("\n{0}".format(cmd_pt), bold=True)
            if menu_pt:
                buf += blue("\n{0}\n{1}".format(line_sep, menu_pt), bold=True)
            if base_pt:
                buf += "\n{0}".format(cyan("{0}\n{1}".format(line_sep, base_pt)))
            self.oprint(buf)
            self.stdout.write(cli_text)
            self.stdout.flush()
            readline.redisplay()

        except Exception as E:
            self.stderr.write(red("{0}\nError in completer_display:\nerror:{1}"
                              .format(get_traceback(), E)))
            self.stderr.flush()
        finally:
            if self.env:
                self.env.completer_context = None
Пример #30
0
 def __init__(self, *args):
     self.x = args[0]
     print red("### OPENING %s ###" % str(self.x))
     oldfile.__init__(self, *args)
     openfiles.add(self)
     printOpenFiles()
Пример #31
0
 def close(self):
     print red("### CLOSING %s ###" % str(self.x))
     oldfile.close(self)
     openfiles.remove(self)
     printOpenFiles()
Пример #32
0
 def close(self):
     print red("### CLOSING %s ###" % str(self.x))
     oldfile.close(self)
     openfiles.remove(self)
     printOpenFiles()
Пример #33
0
        if not self.args.no_clean:
            self.log.info('Terminating all instances for user:{0}/{1}'.format(
                self.tc.user.account_name, self.tc.user.user_name))
            self.tc.user.ec2.terminate_instances()


if __name__ == "__main__":

    errors = []
    test = InstanceBatchTest()
    try:
        # In the case we want to keep each instance connection open?...
        resource.setrlimit(resource.RLIMIT_NOFILE, (10 * test.args.vm_max, -1))
    except Exception as RE:
        test.log.warning(
            red('Unable to set resource limit to:"{0}", err:"{1}"'.format(
                10 * test.args.vm_max, RE)))

    def signal_handler(signal, frame):
        kill_it = False
        now = time.time()
        if now - test.last_kill_sig < 2:
            kill_it = True
        test.last_kill_sig = now
        sys.stderr.write(
            red('\n\nReceived SIGINT, dumping results. (Press ctrl+c twice quickly to end test now)\n\n'
                ))
        sys.stderr.flush()
        test.show_results()
        if kill_it:
            sys.stderr.write(
                red('\n\nReceived SIGINT twice within 2 seconds killing test...!\n\n'
Пример #34
0
 def __init__(self, *args):
     self.x = args[0]
     print red("### OPENING %s ###" % str(self.x))
     oldfile.__init__(self, *args)
     openfiles.add(self)
     printOpenFiles()
Пример #35
0
def printOpenFiles():
    print red("\n\n### %d OPEN FILES: [%s]\n\n" %
              (len(openfiles), ", ".join(f.x for f in openfiles)))