Subversion Repositories SmartDukaan

Rev

Rev 155 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 155 Rev 3124
Line 1... Line 1...
1
'''
1
'''
2
Created on 17-May-2010
-
 
3
 
-
 
4
@author: ashish
2
@author: rajveer
5
'''
3
'''
6
from thrift.transport import TSocket
4
from thrift.transport import TSocket
7
from thrift.transport.TTransport import TFramedTransport
5
from thrift.transport.TTransport import TFramedTransport
8
from thrift.protocol.TBinaryProtocol import TBinaryProtocol
6
from thrift.protocol.TBinaryProtocol import TBinaryProtocol
-
 
7
from shop2020.config.client.ConfigClient import ConfigClient
-
 
8
from shop2020.utils.Utils import log_entry
9
 
9
 
10
class BasicClient:
10
class GenericClient:
11
    
11
    
-
 
12
    host = "localhost"
-
 
13
    port = 8080
-
 
14
    attemptNumber = 1
-
 
15
    MAX_ATTEMPTS = 3    
-
 
16
    TOTAL_SERVICES = 2
-
 
17
    serviceNumber = 0
12
    
18
    
13
    def initialize(self, host , port):
19
    def __init__(self, hostConfigKey, portConfigKey):
14
        self.host = host
20
        self.hostConfigKey = hostConfigKey
15
        self.port = port
21
        self.portConfigKey = hostConfigKey
-
 
22
        self.loadConfigParameters(hostConfigKey, portConfigKey)
16
        self.__start()
23
        self.connectToService(1)
17
        
24
        
-
 
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
                
18
    def __start(self):
50
    def openTransport(self):
19
        self.transport = TSocket.TSocket(self.host, self.port)
51
        self.transport = TSocket.TSocket(self.host, self.port)
20
        self.transport = TFramedTransport(self.transport)
52
        self.transport = TFramedTransport(self.transport)
21
        self.protocol = TBinaryProtocol(self.transport)
53
        self.protocol = TBinaryProtocol(self.transport)
22
        
-
 
23
        
-
 
24
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()        
-
 
66