Source code for thriftpool.components.listeners

"""Contains component that hold listener pool."""
from __future__ import absolute_import

import logging

from thriftpool.components.base import StartStopComponent
from thriftpool.utils.mixin import LogsMixin
from thriftpool.signals import (listener_started, listener_stopped,
                                listeners_stopped, listeners_started)

logger = logging.getLogger(__name__)


[docs]class ListenersComponent(StartStopComponent): name = 'manager.listeners'
[docs] def create(self, parent): listeners = parent.listeners = parent.app.thriftworker.listeners for slot in parent.app.slots: name, host, port, backlog = slot.name, slot.listener.host, \ slot.listener.port, slot.listener.backlog listeners.register(name, host, port, backlog)
[docs]class ListenersManager(LogsMixin): def __init__(self, app, listeners, processes): self.app = app self.listeners = listeners self.processes = processes super(ListenersManager, self).__init__()
[docs] def start(self): """Start all registered listeners.""" slots = self.app.slots clients = self.processes.clients for listener in self.listeners: slot = slots[listener.name] listener.start() listener_started.send(self, listener=listener, slot=slot, app=self.app) clients.spawn(lambda proxy: proxy.start_acceptor(listener.name)) self._info("Starting listener on '%s:%d' for service '%s'.", listener.host, listener.port, listener.name) listeners_started.send(self, app=self.app)
[docs] def stop(self): """Stop all registered listeners.""" slots = self.app.slots clients = self.processes.clients for listener in self.listeners: slot = slots[listener.name] self._info("Stopping listening on '%s:%d', service '%s'.", listener.host, listener.port, listener.name) listener_stopped.send(self, listener=listener, slot=slot, app=self.app) clients.spawn(lambda proxy: proxy.stop_acceptor(listener.name)) listener.stop() listeners_stopped.send(self, app=self.app)
[docs]class ListenersManagerComponent(StartStopComponent): name = 'manager.listeners_manager' requires = ('loop', 'listeners', 'process_manager')
[docs] def create(self, parent): return ListenersManager(parent.app, parent.listeners, parent.processes)

Project Versions

This Page