示例#1
0
    def load_helper_modules(self):
        """
        Loads helper modules for post-processing of results

        """
        if not self.config.get('helpers'):
            return

        for helper in self.config.get('helpers'):
            helper = helper.strip()
            logger.info('Loading helper module %s', helper)
            try:
                module = importlib.import_module(helper)
            except ImportError as e:
                logger.warning('Cannot import helper module: %s', e)
                continue

            if not hasattr(module, 'HelperAgent'):
                logger.warning(
                    'Module %s does not provide a HelperAgent interface',
                    helper)
                continue

            if not hasattr(module.HelperAgent, 'run'):
                logger.warning(
                    'In module %s HelperAgent class does not provide a run() method',
                    helper)
                continue

            self.helper_modules[helper] = module
示例#2
0
    def load_helper_modules(self):
        """
        Loads helper modules for post-processing of results

        """
        if not self.config.get('helpers'):
            return

        for helper in self.config.get('helpers'):
            helper = helper.strip()
            logger.info('Loading helper module %s', helper)
            try:
                module = importlib.import_module(helper)
            except ImportError as e:
                logger.warning(
                    'Cannot import helper module: %s',
                    e
                )
                continue

            if not hasattr(module, 'HelperAgent'):
                logger.warning(
                    'Module %s does not provide a HelperAgent interface',
                    helper
                )
                continue

            if not hasattr(module.HelperAgent, 'run'):
                logger.warning(
                    'In module %s HelperAgent class does not provide a run() method',
                    helper
                )
                continue

            self.helper_modules[helper] = module
示例#3
0
    def stop(self):
        """
        Stop the vPoller Proxy process

        """
        logger.info('Proxy process is shutting down')
        self.close_sockets()
示例#4
0
    def create_agents(self):
        """
        Prepares the vSphere Agents used by the vPoller Worker

        Raises:
            VPollerException

        """
        logger.debug('Creating vSphere Agents')

        db = VConnectorDatabase(self.config.get('db'))
        agents = db.get_agents(only_enabled=True)

        if not agents:
            logger.warning('No registered or enabled vSphere Agents found')
            raise VPollerException(
                'No registered or enabled vSphere Agents found')

        for agent in agents:
            a = VConnector(
                user=agent['user'],
                pwd=agent['pwd'],
                host=agent['host'],
                cache_enabled=self.config.get('cache_enabled'),
                cache_maxsize=self.config.get('cache_maxsize'),
                cache_ttl=self.config.get('cache_ttl'),
                cache_housekeeping=self.config.get('cache_housekeeping'))
            self.agents[a.host] = a
            logger.info('Created vSphere Agent for %s', agent['host'])
示例#5
0
    def create_agents(self):
        """
        Prepares the vSphere Agents used by the vPoller Worker

        Raises:
            VPollerException

        """
        logger.debug('Creating vSphere Agents')

        db = VConnectorDatabase(self.config.get('db'))
        agents = db.get_agents(only_enabled=True)

        if not agents:
            logger.warning('No registered or enabled vSphere Agents found')
            raise VPollerException(
                'No registered or enabled vSphere Agents found'
            )

        for agent in agents:
            a = VConnector(
                user=agent['user'],
                pwd=agent['pwd'],
                host=agent['host'],
                cache_enabled=self.config.get('cache_enabled'),
                cache_maxsize=self.config.get('cache_maxsize'),
                cache_ttl=self.config.get('cache_ttl'),
                cache_housekeeping=self.config.get('cache_housekeeping')
            )
            self.agents[a.host] = a
            logger.info('Created vSphere Agent for %s', agent['host'])
示例#6
0
    def stop(self):
        """
        Stop the vPoller Proxy process

        """
        logger.info('Proxy process is shutting down')
        self.close_sockets()
示例#7
0
    def start_workers(self):
        """
        Start the vPoller Worker processes

        """
        logger.info('Starting Worker processes')

        if self.num_workers <= 0:
            self.num_workers = multiprocessing.cpu_count()

        logger.info('Concurrency: %d (processes)', self.num_workers)

        for i in range(self.num_workers):
            worker = VPollerWorker(
                db=self.config.get('db'),
                proxy=self.config.get('proxy'),
                helpers=self.config.get('helpers'),
                tasks=self.config.get('tasks'),
                cache_enabled=self.config.get('cache_enabled'),
                cache_maxsize=self.config.get('cache_maxsize'),
                cache_ttl=self.config.get('cache_ttl'),
                cache_housekeeping=self.config.get('cache_housekeeping'))
            worker.daemon = True
            self.workers.append(worker)
            worker.start()
示例#8
0
    def start_workers(self):
        """
        Start the vPoller Worker processes

        """
        logger.info('Starting Worker processes')

        if self.num_workers <= 0:
            self.num_workers = multiprocessing.cpu_count()

        logger.info(
            'Concurrency: %d (processes)',
            self.num_workers
        )

        for i in range(self.num_workers):
            worker = VPollerWorker(
                db=self.config.get('db'),
                proxy=self.config.get('proxy'),
                helpers=self.config.get('helpers'),
                tasks=self.config.get('tasks'),
                cache_enabled=self.config.get('cache_enabled'),
                cache_maxsize=self.config.get('cache_maxsize'),
                cache_ttl=self.config.get('cache_ttl'),
                cache_housekeeping=self.config.get('cache_housekeeping')
            )
            worker.daemon = True
            self.workers.append(worker)
            worker.start()
示例#9
0
    def stop(self):
        """
        Stop the vPoller Manager and Workers

        """
        logger.info('Worker Manager is shutting down')
        self.close_sockets()
        self.stop_workers()
示例#10
0
    def stop(self):
        """
        Stop the vPoller Proxy processes

        """
        logger.info('Proxy Manager is shutting down')
        self.close_sockets()
        self.stop_proxy_process()
示例#11
0
    def stop(self):
        """
        Stop vPoller Worker process

        """
        logger.info('Worker process is shutting down')
        self.close_sockets()
        self.stop_agents()
示例#12
0
    def stop(self):
        """
        Stop the vPoller Manager and Workers

        """
        logger.info('Worker Manager is shutting down')
        self.close_sockets()
        self.stop_workers()
示例#13
0
    def stop(self):
        """
        Stop vPoller Worker process

        """
        logger.info('Worker process is shutting down')
        self.close_sockets()
        self.stop_agents()
示例#14
0
    def stop(self):
        """
        Stop the vPoller Proxy processes

        """
        logger.info('Proxy Manager is shutting down')
        self.close_sockets()
        self.stop_proxy_process()
示例#15
0
    def signal_stop(self):
        """
        Signal the vPoller Worker Manager that shutdown time has arrived

        """
        logger.info('Received shutdown signal')
        self.time_to_die.set()

        return {'success': 0, 'msg': 'Shutdown time has arrived'}
示例#16
0
    def stop_proxy_process(self):
        """
        Stop the vPoller Proxy process

        """
        logger.info('Stopping Proxy process')

        self.proxy.signal_stop()
        self.proxy.join(3)
示例#17
0
    def signal_stop(self):
        """
        Signal the vPoller Worker Manager that shutdown time has arrived

        """
        logger.info('Received shutdown signal')
        self.time_to_die.set()

        return {'success': 0, 'msg': 'Shutdown time has arrived'}
示例#18
0
    def close_sockets(self):
        """
        Closes the ZeroMQ sockets used by the vPoller Proxy Manager

        """
        logger.info('Closing Proxy Manager sockets')
        self.zpoller.unregister(self.mgmt_socket)
        self.mgmt_socket.close()
        self.zcontext.term()
示例#19
0
    def close_sockets(self):
        """
        Closes the ZeroMQ sockets used by the vPoller Proxy Manager

        """
        logger.info('Closing Proxy Manager sockets')
        self.zpoller.unregister(self.mgmt_socket)
        self.mgmt_socket.close()
        self.zcontext.term()
示例#20
0
    def stop_proxy_process(self):
        """
        Stop the vPoller Proxy process

        """
        logger.info('Stopping Proxy process')

        self.proxy.signal_stop()
        self.proxy.join(3)
示例#21
0
    def close_sockets(self):
        """
        Closes the ZeroMQ sockets used by the vPoller Worker

        """
        logger.info('Closing Worker process sockets')

        self.zpoller.unregister(self.worker_socket)
        self.worker_socket.close()
        self.zcontext.term()
示例#22
0
    def stop_workers(self):
        """
        Stop the vPoller Worker processes

        """
        logger.info('Stopping Worker processes')

        for worker in self.workers:
            worker.signal_stop()
            worker.join(3)
示例#23
0
    def close_sockets(self):
        """
        Closes the ZeroMQ sockets used by the vPoller Worker

        """
        logger.info('Closing Worker process sockets')
        
        self.zpoller.unregister(self.worker_socket)
        self.worker_socket.close()
        self.zcontext.term()
示例#24
0
    def stop_workers(self):
        """
        Stop the vPoller Worker processes

        """
        logger.info('Stopping Worker processes')

        for worker in self.workers:
            worker.signal_stop()
            worker.join(3)
示例#25
0
    def start_proxy_process(self):
        """
        Start the vPoller Proxy process

        """
        logger.info('Starting Proxy process')

        self.proxy = VPollerProxy(frontend=self.config.get('frontend'),
                                  backend=self.config.get('backend'))
        self.proxy.daemon = True
        self.proxy.start()
示例#26
0
    def create_sockets(self):
        """
        Creates the ZeroMQ sockets used by the vPoller Proxy Manager

        """
        logger.info('Creating Proxy Manager sockets')
        self.zcontext = zmq.Context()
        self.mgmt_socket = self.zcontext.socket(zmq.REP)
        self.mgmt_socket.bind(self.config.get('mgmt'))
        self.zpoller = zmq.Poller()
        self.zpoller.register(self.mgmt_socket, zmq.POLLIN)
示例#27
0
    def create_sockets(self):
        """
        Creates the ZeroMQ sockets used by the vPoller Proxy Manager

        """
        logger.info('Creating Proxy Manager sockets')
        self.zcontext = zmq.Context()
        self.mgmt_socket = self.zcontext.socket(zmq.REP)
        self.mgmt_socket.bind(self.config.get('mgmt'))
        self.zpoller = zmq.Poller()
        self.zpoller.register(self.mgmt_socket, zmq.POLLIN)
示例#28
0
    def close_sockets(self):
        """
        Closes the ZeroMQ sockets used by vPoller Proxy process

        """
        logger.info('Closing Proxy process sockets')

        self.zpoller.unregister(self.frontend)
        self.zpoller.unregister(self.backend)
        self.frontend.close()
        self.backend.close()
        self.zcontext.term()
示例#29
0
    def close_sockets(self):
        """
        Closes the ZeroMQ sockets used by vPoller Proxy process

        """
        logger.info('Closing Proxy process sockets')

        self.zpoller.unregister(self.frontend)
        self.zpoller.unregister(self.backend)
        self.frontend.close()
        self.backend.close()
        self.zcontext.term()
示例#30
0
    def run(self):
        logger.info('Proxy process is starting')

        self.create_sockets()

        logger.info('Proxy process is ready and running')
        while not self.time_to_die.is_set():
            try:
                self.distribute_tasks()
            except KeyboardInterrupt:
                self.signal_stop()

        self.stop()
示例#31
0
    def run(self):
        logger.info('Proxy process is starting')

        self.create_sockets()

        logger.info('Proxy process is ready and running')
        while not self.time_to_die.is_set():
            try:
                self.distribute_tasks()
            except KeyboardInterrupt:
                self.signal_stop()

        self.stop()
示例#32
0
    def start_proxy_process(self):
        """
        Start the vPoller Proxy process

        """
        logger.info('Starting Proxy process')

        self.proxy = VPollerProxy(
            frontend=self.config.get('frontend'),
            backend=self.config.get('backend')
        )
        self.proxy.daemon = True
        self.proxy.start()
示例#33
0
    def create_sockets(self):
        """
        Creates the ZeroMQ sockets used by the vPoller Worker

        Creates two sockets:

        """
        logger.info('Creating Worker sockets')

        self.zcontext = zmq.Context()
        self.worker_socket = self.zcontext.socket(zmq.DEALER)
        self.worker_socket.connect(self.config.get('proxy'))
        self.zpoller = zmq.Poller()
        self.zpoller.register(self.worker_socket, zmq.POLLIN)
示例#34
0
    def create_sockets(self):
        """
        Creates the ZeroMQ sockets used by the vPoller Worker

        Creates two sockets:

        """
        logger.info('Creating Worker sockets')

        self.zcontext = zmq.Context()
        self.worker_socket = self.zcontext.socket(zmq.DEALER)
        self.worker_socket.connect(self.config.get('proxy'))
        self.zpoller = zmq.Poller()
        self.zpoller.register(self.worker_socket, zmq.POLLIN)
示例#35
0
    def create_sockets(self):
        """
        Creates the ZeroMQ sockets used by the vPoller Proxy process

        """
        logger.info('Creating Proxy process sockets')
        
        self.zcontext = zmq.Context()
        self.frontend = self.zcontext.socket(zmq.ROUTER)
        self.backend = self.zcontext.socket(zmq.DEALER)
        self.frontend.bind(self.config.get('frontend'))
        self.backend.bind(self.config.get('backend'))
        self.zpoller = zmq.Poller()
        self.zpoller.register(self.frontend, zmq.POLLIN)
        self.zpoller.register(self.backend, zmq.POLLIN)
示例#36
0
    def create_sockets(self):
        """
        Creates the ZeroMQ sockets used by the vPoller Proxy process

        """
        logger.info('Creating Proxy process sockets')

        self.zcontext = zmq.Context()
        self.frontend = self.zcontext.socket(zmq.ROUTER)
        self.backend = self.zcontext.socket(zmq.DEALER)
        self.frontend.bind(self.config.get('frontend'))
        self.backend.bind(self.config.get('backend'))
        self.zpoller = zmq.Poller()
        self.zpoller.register(self.frontend, zmq.POLLIN)
        self.zpoller.register(self.backend, zmq.POLLIN)
示例#37
0
    def start(self):
        """
        Start the vPoller Worker Manager and processes

        """
        logger.info('Starting Worker Manager [%s release]', __version__)

        self.load_config()
        self.create_sockets()
        self.start_workers()

        logger.info('Worker Manager is ready and running')
        while not self.time_to_die.is_set():
            try:
                self.wait_for_mgmt_task()
            except KeyboardInterrupt:
                self.signal_stop()

        self.stop()
示例#38
0
    def start(self):
        """
        Start the vPoller Worker Manager and processes

        """
        logger.info('Starting Worker Manager [%s release]', __version__)

        self.load_config()
        self.create_sockets()
        self.start_workers()

        logger.info('Worker Manager is ready and running')
        while not self.time_to_die.is_set():
            try:
                self.wait_for_mgmt_task()
            except KeyboardInterrupt:
                self.signal_stop()

        self.stop()
示例#39
0
    def load_task_modules(self):
        """
        Loads the task modules

        """
        if not self.config.get('tasks'):
            raise VPollerException('No task modules provided')

        for task in self.config.get('tasks'):
            task = task.strip()
            logger.info('Loading task module %s', task)
            try:
                module = importlib.import_module(task)
            except ImportError as e:
                logger.warning('Cannot import task module: %s', e.message)
                continue
            self.task_modules[task] = module

        if not self.task_modules:
            raise VPollerException('No task modules loaded')
示例#40
0
    def run(self):
        """
        The main worker method.

        Args:
            config (str): Path to the confuguration file for vPoller Worker

        """
        logger.info('Worker process is starting')

        self.load_task_modules()
        self.load_helper_modules()
        self.create_sockets()
        self.create_agents()

        logger.info('Worker process is ready and running')
        while not self.time_to_die.is_set():
            try:
                self.wait_for_tasks()
            except KeyboardInterrupt:
                self.signal_stop()

        self.stop()
示例#41
0
    def load_task_modules(self):
        """
        Loads the task modules

        """
        if not self.config.get('tasks'):
            raise VPollerException('No task modules provided')

        for task in self.config.get('tasks'):
            task = task.strip()
            logger.info('Loading task module %s', task)
            try:
                module = importlib.import_module(task)
            except ImportError as e:
                logger.warning(
                    'Cannot import task module: %s',
                    e.message
                )
                continue
            self.task_modules[task] = module

        if not self.task_modules:
            raise VPollerException('No task modules loaded')
示例#42
0
    def run(self):
        """
        The main worker method.

        Args:
            config (str): Path to the confuguration file for vPoller Worker

        """
        logger.info('Worker process is starting')

        self.load_task_modules()
        self.load_helper_modules()
        self.create_sockets()
        self.create_agents()

        logger.info('Worker process is ready and running')
        while not self.time_to_die.is_set():
            try:
                self.wait_for_tasks()
            except KeyboardInterrupt:
                self.signal_stop()

        self.stop()