def check(ctx, config, template):
    """Validate CSE configuration."""
    try:
        check_config(config, template)
        click.secho('The configuration is valid.')
    except Exception as e:
        LOGGER.error(traceback.format_exc())
        click.secho('The configuration is invalid, %s'
                    '. See \'cse.log\' for details' % str(e))
    def run(self):
        if self.should_check_config:
            self.config = check_config(self.config_file)
        else:
            self.config = get_config(self.config_file)
        log_file = 'cse.log'
        handler = RotatingFileHandler(log_file,
                                      maxBytes=10 * 1024 * 1024,
                                      backupCount=10)
        logging.basicConfig(level=logging.DEBUG,
                            format='%(asctime)s %(name)-12s %(lineno)s '
                            '%(levelname)-8s %(message)s',
                            datefmt='%m-%d %H:%M:%S',
                            handlers=(handler, ))

        message = """
Container Service Extension for vCloud Director running
config file: {config_file}
see file log file for details: {log_file}
waiting for requests, press Ctrl+C to finish
""".format(config_file=self.config_file, log_file=log_file)

        signal.signal(signal.SIGINT, signal_handler)
        click.secho(message)
        LOGGER.info(message)

        amqp = self.config['amqp']
        num_consumers = self.config['service']['listeners']

        for n in range(num_consumers):
            try:
                if amqp['ssl']:
                    scheme = 'amqps'
                else:
                    scheme = 'amqp'
                c = MessageConsumer(
                    '%s://%s:%s@%s:%s/?socket_timeout=5' %
                    (scheme, amqp['username'], amqp['password'], amqp['host'],
                     amqp['port']), amqp['exchange'], amqp['routing_key'],
                    self.config, self.config['vcd']['verify'],
                    self.config['vcd']['log'])
                name = 'MessageConsumer-%s' % n
                t = Thread(name=name, target=consumer_thread, args=(c, ))
                t.daemon = True
                t.start()
                LOGGER.info('started thread %s', t.ident)
                self.threads.append(t)
                self.consumers.append(c)
                time.sleep(0.25)
            except KeyboardInterrupt:
                break
            except Exception:
                print(traceback.format_exc())

        LOGGER.info('num of threads started: %s', len(self.threads))

        self.is_enabled = True

        while True:
            try:
                time.sleep(1)
                if self.should_stop and self.active_requests_count() == 0:
                    break
            except KeyboardInterrupt:
                break
            except Exception:
                click.secho(traceback.format_exc())
                sys.exit(1)

        LOGGER.info('stop detected')
        LOGGER.info('closing connections...')
        for c in self.consumers:
            try:
                c.stop()
            except Exception:
                pass
        LOGGER.info('done')
    def run(self):
        if self.should_check_config:
            self.config = check_config(self.config_file)
        else:
            self.config = get_config(self.config_file)
        logging.basicConfig(
            filename='cse.log',
            level=self.config['service']['logging_level'],
            format=self.config['service']['logging_format'])

        click.echo('Container Service Extension for vCloud Director running')
        click.echo('config file: %s' % self.config_file)
        click.echo('see file ' 'cse.log' ' for details')
        click.echo('press Ctrl+C to finish')

        signal.signal(signal.SIGINT, signal_handler)

        LOGGER.info('Container Service Extension for vCloud Director')
        LOGGER.info('waiting for requests...')

        amqp = self.config['amqp']
        num_consumers = self.config['service']['listeners']
        consumers = []
        threads = []

        for n in range(num_consumers):
            try:
                if amqp['ssl']:
                    scheme = 'amqps'
                else:
                    scheme = 'amqp'
                c = MessageConsumer(
                    '%s://%s:%s@%s:%s/?socket_timeout=5' %
                    (scheme, amqp['username'], amqp['password'], amqp['host'],
                     amqp['port']), amqp['exchange'], amqp['routing_key'],
                    self.config, self.config['vcd']['verify'],
                    self.config['vcd']['log'])
                t = Thread(target=consumer_thread, args=(c, ))
                t.daemon = True
                t.start()
                LOGGER.info('started thread %s', t.ident)
                threads.append(t)
                consumers.append(c)
                time.sleep(0.25)
            except KeyboardInterrupt:
                break
            except Exception:
                print(traceback.format_exc())

        LOGGER.info('num of threads started: %s', len(threads))

        while True:
            try:
                time.sleep(1)
            except KeyboardInterrupt:
                LOGGER.info('interrupt detected')
                LOGGER.info('closing connections...')
                for c in consumers:
                    try:
                        c.stop()
                    except Exception:
                        pass
                LOGGER.info('done')
                break
            except Exception:
                click.secho(traceback.format_exc())
                sys.exit(1)