Skip to content

Commit d092b0e

Browse files
committed
add retry-attempt logic if no metaData returned by the pmcollector
there are some situation where no data returned from the pmcollector because the REST HTTPS server did not complete starting yet and no data request was sent to the pmcollector. For such situation the bridge should retry to get metadata wihout stopping. MAX_ATTEMPTS_COUNT = 3 SLEEP_TIME = 5sec
1 parent 9f526ba commit d092b0e

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

source/messages.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
'InconsistentParams': 'Received parameters {} inconsistent with request parameters {}',
4343
'SensorDisabled': 'Sensor for metric {} is disabled',
4444
'NoData': 'Empty results received', # Please check the pmcollector is properly configured and running.
45+
'NoDataStartNextAttempt': 'No Metadata results received from the pmcollector. Start retry attempt {} in 5s (MAX_ATTEMPTS_COUNT:{})',
4546
'BucketsizeChange': 'Based on requested downsample value: {} the bucketsize will be set: {}',
4647
'BucketsizeToPeriod': 'Bucketsize will be set to sensors period: {}',
4748
'ReceivedQuery': 'Received query request for query:{}, start:{}, end:{}',

source/zimonGrafanaIntf.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
from confParser import getSettings
3939
from collections import defaultdict
4040
from timeit import default_timer as timer
41+
from time import sleep
4142

4243

4344
class MetadataHandler():
@@ -78,18 +79,27 @@ def __initializeTables(self):
7879

7980
self.__qh = QueryHandler(self.server, self.port, self.logger, self.apiKeyName, self.apiKeyValue)
8081
self.__sensorsConf = SensorConfig.readSensorsConfigFromMMSDRFS(self.logger)
81-
tstart = timer()
82-
self.__metaData = Topo(self.qh.getTopology())
83-
tend = timer()
84-
if not (self.metaData and self.metaData.topo):
85-
raise ValueError(MSG['NoData'])
86-
foundItems = len(self.metaData.allParents) - 1
87-
sensors = self.metaData.sensorsSpec.keys()
88-
self.logger.info(MSG['MetaSuccess'])
89-
self.logger.details(MSG['ReceivAttrValues'].format('parents totally', foundItems))
90-
self.logger.debug(MSG['ReceivAttrValues'].format('parents', ", ".join(self.metaData.allParents)))
91-
self.logger.info(MSG['ReceivAttrValues'].format('sensors', ", ".join(sensors)))
92-
self.logger.details(MSG['TimerInfo'].format('Metadata', str(tend - tstart)))
82+
MAX_ATTEMPTS_COUNT = 3
83+
for attempt in range(1, MAX_ATTEMPTS_COUNT + 1):
84+
tstart = timer()
85+
self.__metaData = Topo(self.qh.getTopology())
86+
tend = timer()
87+
if not (self.metaData and self.metaData.topo):
88+
if attempt > MAX_ATTEMPTS_COUNT:
89+
break
90+
# if no data returned because of the REST HTTP server is still starting, sleep and retry (max 3 times)
91+
self.logger.warning(MSG['NoDataStartNextAttempt'].format(attempt, MAX_ATTEMPTS_COUNT))
92+
sleep(5)
93+
else:
94+
foundItems = len(self.metaData.allParents) - 1
95+
sensors = self.metaData.sensorsSpec.keys()
96+
self.logger.info(MSG['MetaSuccess'])
97+
self.logger.details(MSG['ReceivAttrValues'].format('parents totally', foundItems))
98+
self.logger.debug(MSG['ReceivAttrValues'].format('parents', ", ".join(self.metaData.allParents)))
99+
self.logger.info(MSG['ReceivAttrValues'].format('sensors', ", ".join(sensors)))
100+
self.logger.details(MSG['TimerInfo'].format('Metadata', str(tend - tstart)))
101+
return
102+
raise ValueError(MSG['NoData'])
93103

94104
def update(self):
95105
'''Read the topology from ZIMon and update

0 commit comments

Comments
 (0)