def run(self): while not self.stop_event.wait(self.interval): try: if self.stop_event.is_set(): break self.func(*self.args, **self.kwargs) except Exception, e: ec_logger.exception(traceback.format_exc()) if break_on_err: break
def __init__(self, endpoint, timeout=None): self.version = -1 self.servers = [] try: host, port = endpoint.split(':') telnet = Telnet(host, port, timeout) telnet.write('version\n') ret = telnet.read_until('\r\n', timeout) ec_logger.debug('version: %s', ret) version_info = ret.split(' ') if len(version_info) != 2 or version_info[0] != 'VERSION': raise ElasticacheInvalidTelentReplyError(ret) version = version_info[1][0:-2] if StrictVersion(version) >= StrictVersion('1.4.14'): cmd = 'config get cluster\n' else: cmd = 'get AmazonElastiCache:cluster\n' telnet.write(cmd) ret = telnet.read_until('END\r\n', timeout) telnet.close() ec_logger.debug('config: %s', ret) splitter = re.compile(r'\r?\n') cluster = splitter.split(ret) if len(cluster) != 6 or cluster[4][0:3] != 'END': raise ElasticacheInvalidTelentReplyError(ret) self.version = cluster[1] nodes = cluster[2].split(' ') for node in nodes: info = node.split('|') if len(info) != 3: raise ElasticacheInvalidTelentReplyError(ret) self.servers.append(info[1] + ':' + info[2]) except: self.servers.append(endpoint) ec_logger.exception(traceback.format_exc())
def detect_cluster(self): try: cluster = Cluster(self.endpoint, self.autodiscovery_timeout) except Exception, e: ec_logger.exception(traceback.format_exc()) return