Rev 3124 | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''@author: rajveer'''from thrift.transport import TSocketfrom thrift.transport.TTransport import TFramedTransport, TTransportExceptionfrom thrift.protocol.TBinaryProtocol import TBinaryProtocolfrom shop2020.config.client.ConfigClient import ConfigClientfrom shop2020.utils.Utils import log_entryfrom shop2020.thriftpy.config.ttypes import ConfigExceptionclass GenericClient:host = "localhost"port = 0attemptNumber = 1MAX_ATTEMPTS = 3TOTAL_SERVICES = 2serviceNumber = 0def __init__(self, hostConfigKey, portConfigKey):self.hostConfigKey = hostConfigKeyself.portConfigKey = hostConfigKeytry:self.loadConfigParameters(hostConfigKey, portConfigKey)self.connectToService(1)except ConfigException:log_entry(self, "error getting data from config")raise TTransportException(0, "error getting data from config")def loadConfigParameters(self, hostConfigKey, portConfigKey):try:self.config_client = ConfigClient()self.host = self.config_client.get_property(hostConfigKey)self.port = int(self.config_client.get_property(portConfigKey))except:log_entry(self, "error getting data from config")raisedef connectToService(self, attemptNumber):try:self.openTransport()except:if attemptNumber < self.MAX_ATTEMPTS:self.connectToService(attemptNumber+1)else:if self.serviceNumber < self.TOTAL_SERVICES:self.serviceNumber += 1log_entry(self, "Maximum attempts have reached. Failing over to another service instance")self.loadConfigParameters(self.hostConfigKey + str(self.serviceNumber), self.portConfigKey + str(self.serviceNumber))self.connectToService(1)self.updateConfigParameters(self.hostConfigKey, self.portConfigKey)else:log_entry(self, "Have tried enough services, giving up....")raisedef openTransport(self):self.transport = TSocket.TSocket(self.host, self.port)self.transport = TFramedTransport(self.transport)self.protocol = TBinaryProtocol(self.transport)self.transport.open()def updateConfigParameters(self, hostConfigKey, portConfigKey):try:self.config_client = ConfigClient()self.host = self.config_client.set_property(hostConfigKey, self.host)self.port = self.config_client.get_property(portConfigKey, self.port)except:log_entry(self, "error getting data from config")def close_connection(self):self.transport.close()