class ServiceManager(BaseService): family_latency = scales.HistogramAggregationStat('latency') def __init__(self, name): scales.init(self, '/service-manager') BaseService.__init__(self, name) self._directory = {} self.started_services = Queue() self._directory_service_proxy = DirectoryService(self._directory) def start(self): BaseService.start(self) self._directory_service_proxy.start() self.log.info("starting services...") for service_name, service in self._directory.iteritems(): self.log.info("starting service %s" % service_name) self.started_services.put(service.start()) def add_service(self, service, name): """ Add service to service manager by name. :param greenlet: :param name: :return: """ print "service %s added" % name service.set_directory_service_proxy(self._directory_service_proxy) self._directory[name] = service def stop_service(self, name): """ :param greenlet: :return: """ print "stopping services..." service = self._directory_service_proxy.get_service(name) gevent.kill(service) self._directory.pop(service) def stop_services(self): for pid_key, pid in self._directory.items(): pid.stop() def get_directory_service_proxy(self): return self._directory_service_proxy def get_service_count(self): return self._directory_service_proxy.get_service_count() def get_services(self): return self._directory.items()
def __init__(self, name): scales.init(self, '/service-manager') BaseService.__init__(self, name) self._directory = {} self.started_services = Queue() self._directory_service_proxy = DirectoryService(self._directory)