Skip to content

Commit ea6639b

Browse files
committed
Add server reconnection delay time value to the configurable parameters
In case the server failed to respond on initial startup the bridge will sleep 60 seconds before attempting to connect to the server again. Now the sleep time could be overwritten with the specified "retryDelay" value in the config file.
1 parent 6f4e0b3 commit ea6639b

File tree

5 files changed

+49
-4
lines changed

5 files changed

+49
-4
lines changed

.project

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>bridge_master</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.python.pydev.PyDevBuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
</buildSpec>
14+
<natures>
15+
<nature>org.python.pydev.pythonNature</nature>
16+
</natures>
17+
</projectDescription>

.pydevproject

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<?eclipse-pydev version="1.0"?><pydev_project>
3+
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
4+
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
5+
</pydev_project>

source/config.ini

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ server = localhost
2828
# The https port to use
2929
serverPort = 9980
3030

31+
# Sleep time in seconds before attempting to connect to the server again
32+
# in case the server failed to respond on initial startup (maximum 3 attempts)
33+
retryDelay = 60
34+
3135
# The name of REST HTTPS API key name
3236
apiKeyName = scale_grafana
3337

source/zimonGrafanaIntf.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343

4444
class MetadataHandler():
4545

46-
def __init__(self, logger, server, port, apiKeyName, apiKeyValue, includeDiskData=False):
46+
def __init__(self, logger, server, port, apiKeyName, apiKeyValue, includeDiskData=False, sleepTime=None):
4747
self.__qh = None
4848
self.__sensorsConf = None
4949
self.__metaData = None
@@ -53,6 +53,7 @@ def __init__(self, logger, server, port, apiKeyName, apiKeyValue, includeDiskDat
5353
self.apiKeyName = apiKeyName
5454
self.apiKeyValue = apiKeyValue
5555
self.includeDiskData = includeDiskData
56+
self.sleepTime = sleepTime or 60
5657

5758
self.__initializeTables()
5859

@@ -89,7 +90,7 @@ def __initializeTables(self):
8990
break
9091
# if no data returned because of the REST HTTP server is still starting, sleep and retry (max 3 times)
9192
self.logger.warning(MSG['NoDataStartNextAttempt'].format(attempt, MAX_ATTEMPTS_COUNT))
92-
sleep(60)
93+
sleep(self.sleepTime)
9394
else:
9495
foundItems = len(self.metaData.allParents) - 1
9596
sensors = self.metaData.sensorsSpec.keys()
@@ -610,7 +611,7 @@ def main(argv):
610611
logger.info("%s", MSG['BridgeVersionInfo'].format(__version__))
611612
logger.details('zimonGrafanaItf invoked with parameters:\n %s', "\n".join("{}={}".format(k, v) for k, v in args.items() if not k == 'apiKeyValue'))
612613
# logger.details('zimonGrafanaItf invoked with parameters:\n %s', "\n".join("{}={}".format(k, type(v)) for k, v in args.items()))
613-
mdHandler = MetadataHandler(logger, args.get('server'), args.get('serverPort'), args.get('apiKeyName'), resolveAPIKeyValue(args.get('apiKeyValue')), args.get('includeDiskData'))
614+
mdHandler = MetadataHandler(logger, args.get('server'), args.get('serverPort'), args.get('apiKeyName'), resolveAPIKeyValue(args.get('apiKeyValue')), args.get('includeDiskData'), args.get('retryDelay', None))
614615
except (AttributeError, TypeError, ValueError) as e:
615616
logger.details('%s', MSG['IntError'].format(str(e)))
616617
logger.error(MSG['MetaError'])

tests/test_params.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33

44

55
def my_setup():
6-
global a, b, c, d, e, f, g, m, n, o, p, y
6+
global a, b, c, d, e, f, g, m, n, o, p, y, x
77
a = ConfigManager().defaults
88
y = ConfigManager().defaults.copy()
99
y['apiKeyValue'] = '/tmp/mykey'
10+
x = ConfigManager().defaults.copy()
11+
del x['retryDelay']
1012
b, c = parse_cmd_args([])
1113
d, e = parse_cmd_args(['-p', '8443', '-t', '/etc/my_tls'])
1214
f, g = parse_cmd_args(['-p', '8443', '-t', None, '-k', 'None', '-m', "None"])
@@ -84,3 +86,19 @@ def test_case08():
8486
assert 'apiKeyValue' in result.keys()
8587
assert '/' not in str(result.get('apiKeyValue'))
8688
assert result.get('apiKeyValue') == 'e40960c9-de0a-4c75-bc71-0bcae6db23b2'
89+
90+
91+
@with_setup(my_setup)
92+
def test_case09():
93+
result = merge_defaults_and_args(a, b)
94+
assert len(result.keys()) > 0
95+
assert 'retryDelay' in result.keys()
96+
assert isinstance(result.get('retryDelay'), int)
97+
assert result.get('retryDelay') == 60
98+
99+
100+
@with_setup(my_setup)
101+
def test_case10():
102+
result = merge_defaults_and_args(x, b)
103+
assert len(result.keys()) > 0
104+
assert 'retryDelay' not in result.keys()

0 commit comments

Comments
 (0)