|
38 | 38 | from confParser import getSettings
|
39 | 39 | from collections import defaultdict
|
40 | 40 | from timeit import default_timer as timer
|
| 41 | +from time import sleep |
41 | 42 |
|
42 | 43 |
|
43 | 44 | class MetadataHandler():
|
@@ -78,18 +79,27 @@ def __initializeTables(self):
|
78 | 79 |
|
79 | 80 | self.__qh = QueryHandler(self.server, self.port, self.logger, self.apiKeyName, self.apiKeyValue)
|
80 | 81 | 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']) |
93 | 103 |
|
94 | 104 | def update(self):
|
95 | 105 | '''Read the topology from ZIMon and update
|
|
0 commit comments