| 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()
|