Subversion Repositories SmartDukaan

Rev

Rev 3124 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
155 ashish 1
'''
3124 rajveer 2
@author: rajveer
155 ashish 3
'''
4
from thrift.transport import TSocket
3183 rajveer 5
from thrift.transport.TTransport import TFramedTransport, TTransportException
155 ashish 6
from thrift.protocol.TBinaryProtocol import TBinaryProtocol
3124 rajveer 7
from shop2020.config.client.ConfigClient import ConfigClient
8
from shop2020.utils.Utils import log_entry
3183 rajveer 9
from shop2020.thriftpy.config.ttypes import ConfigException
155 ashish 10
 
3124 rajveer 11
class GenericClient:
155 ashish 12
 
3124 rajveer 13
    host = "localhost"
3183 rajveer 14
    port = 0
3124 rajveer 15
    attemptNumber = 1
16
    MAX_ATTEMPTS = 3    
17
    TOTAL_SERVICES = 2
18
    serviceNumber = 0
155 ashish 19
 
3124 rajveer 20
    def __init__(self, hostConfigKey, portConfigKey):
21
        self.hostConfigKey = hostConfigKey
22
        self.portConfigKey = hostConfigKey
3183 rajveer 23
        try:
24
            self.loadConfigParameters(hostConfigKey, portConfigKey)
25
            self.connectToService(1)
26
        except ConfigException:
27
            log_entry(self, "error getting data from config")
28
            raise TTransportException(0, "error getting data from config")
155 ashish 29
 
3124 rajveer 30
    def loadConfigParameters(self, hostConfigKey, portConfigKey):
31
        try:
32
            self.config_client = ConfigClient()
33
            self.host = self.config_client.get_property(hostConfigKey)
34
            self.port = int(self.config_client.get_property(portConfigKey))
35
        except:
36
            log_entry(self, "error getting data from config")
3183 rajveer 37
            raise
3124 rajveer 38
 
39
    def connectToService(self, attemptNumber):
40
        try:
41
            self.openTransport()
42
        except:
43
            if attemptNumber < self.MAX_ATTEMPTS:
44
                self.connectToService(attemptNumber+1)
45
            else:
46
                if self.serviceNumber < self.TOTAL_SERVICES:
47
                    self.serviceNumber += 1
48
                    log_entry(self, "Maximum attempts have reached. Failing over to another service instance")
49
                    self.loadConfigParameters(self.hostConfigKey + str(self.serviceNumber), self.portConfigKey + str(self.serviceNumber))
50
                    self.connectToService(1)
51
                    self.updateConfigParameters(self.hostConfigKey, self.portConfigKey)
52
                else:
53
                    log_entry(self, "Have tried enough services, giving up....")
54
                    raise
55
 
56
    def openTransport(self):
155 ashish 57
        self.transport = TSocket.TSocket(self.host, self.port)
58
        self.transport = TFramedTransport(self.transport)
59
        self.protocol = TBinaryProtocol(self.transport)
3124 rajveer 60
        self.transport.open()
61
 
62
    def updateConfigParameters(self, hostConfigKey, portConfigKey):
63
        try:
64
            self.config_client = ConfigClient()
65
            self.host = self.config_client.set_property(hostConfigKey, self.host)
66
            self.port = self.config_client.get_property(portConfigKey, self.port)
67
        except:
68
            log_entry(self, "error getting data from config")
69
 
70
    def close_connection(self):
71
        self.transport.close()