|
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