Subversion Repositories SmartDukaan

Rev

Rev 155 | Go to most recent revision | 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
5
from thrift.transport.TTransport import TFramedTransport
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
155 ashish 9
 
3124 rajveer 10
class GenericClient:
155 ashish 11
 
3124 rajveer 12
    host = "localhost"
13
    port = 8080
14
    attemptNumber = 1
15
    MAX_ATTEMPTS = 3    
16
    TOTAL_SERVICES = 2
17
    serviceNumber = 0
155 ashish 18
 
3124 rajveer 19
    def __init__(self, hostConfigKey, portConfigKey):
20
        self.hostConfigKey = hostConfigKey
21
        self.portConfigKey = hostConfigKey
22
        self.loadConfigParameters(hostConfigKey, portConfigKey)
23
        self.connectToService(1)
155 ashish 24
 
3124 rajveer 25
    def loadConfigParameters(self, hostConfigKey, portConfigKey):
26
        try:
27
            self.config_client = ConfigClient()
28
            self.host = self.config_client.get_property(hostConfigKey)
29
            self.port = int(self.config_client.get_property(portConfigKey))
30
        except:
31
            log_entry(self, "error getting data from config")
32
 
33
    def connectToService(self, attemptNumber):
34
        try:
35
            self.openTransport()
36
        except:
37
            if attemptNumber < self.MAX_ATTEMPTS:
38
                self.connectToService(attemptNumber+1)
39
            else:
40
                if self.serviceNumber < self.TOTAL_SERVICES:
41
                    self.serviceNumber += 1
42
                    log_entry(self, "Maximum attempts have reached. Failing over to another service instance")
43
                    self.loadConfigParameters(self.hostConfigKey + str(self.serviceNumber), self.portConfigKey + str(self.serviceNumber))
44
                    self.connectToService(1)
45
                    self.updateConfigParameters(self.hostConfigKey, self.portConfigKey)
46
                else:
47
                    log_entry(self, "Have tried enough services, giving up....")
48
                    raise
49
 
50
    def openTransport(self):
155 ashish 51
        self.transport = TSocket.TSocket(self.host, self.port)
52
        self.transport = TFramedTransport(self.transport)
53
        self.protocol = TBinaryProtocol(self.transport)
3124 rajveer 54
        self.transport.open()
55
 
56
    def updateConfigParameters(self, hostConfigKey, portConfigKey):
57
        try:
58
            self.config_client = ConfigClient()
59
            self.host = self.config_client.set_property(hostConfigKey, self.host)
60
            self.port = self.config_client.get_property(portConfigKey, self.port)
61
        except:
62
            log_entry(self, "error getting data from config")
63
 
64
    def close_connection(self):
65
        self.transport.close()