Rev 155 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
'''@author: rajveer'''from thrift.transport import TSocketfrom thrift.transport.TTransport import TFramedTransportfrom thrift.protocol.TBinaryProtocol import TBinaryProtocolfrom shop2020.config.client.ConfigClient import ConfigClientfrom shop2020.utils.Utils import log_entryclass GenericClient:host = "localhost"port = 8080attemptNumber = 1MAX_ATTEMPTS = 3TOTAL_SERVICES = 2serviceNumber = 0def __init__(self, hostConfigKey, portConfigKey):self.hostConfigKey = hostConfigKeyself.portConfigKey = hostConfigKeyself.loadConfigParameters(hostConfigKey, portConfigKey)self.connectToService(1)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")def 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()