wrap "fetch_stats" updates in try: except: to keep the thread alive in case of temporary failure

This commit is contained in:
Sniffleupagus
2023-07-03 13:21:08 -07:00
parent c66654b592
commit f208d4775b

View File

@ -312,13 +312,36 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
def _fetch_stats(self): def _fetch_stats(self):
while True: while True:
s = self.session() try:
self._update_uptime(s) s = self.session()
self._update_advertisement(s) except Exception as err:
self._update_peers() logging.error("[agent:_fetch_stats] self.session: %s" % repr(err))
self._update_counters()
self._update_handshakes(0) try:
time.sleep(1) self._update_uptime(s)
except Exception as err:
logging.error("[agent:_fetch_stats] self.update_uptimes: %s" % repr(err))
try:
self._update_advertisement(s)
except Exception as err:
logging.error("[agent:_fetch_stats] self.update_advertisements: %s" % repr(err))
try:
self._update_peers()
except Exception as err:
logging.error("[agent:_fetch_stats] self.update_peers: %s" % repr(err))
try:
self._update_counters()
except Exception as err:
logging.error("[agent:_fetch_stats] self.update_counters: %s" % repr(err))
try:
self._update_handshakes(0)
except Exception as err:
logging.error("[agent:_fetch_stats] self.update_handshakes: %s" % repr(err))
time.sleep(5)
async def _on_event(self, msg): async def _on_event(self, msg):
found_handshake = False found_handshake = False
@ -362,12 +385,13 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
self.run('events.clear') self.run('events.clear')
while True: while True:
logging.debug("polling events ...") logging.debug("[agent:_event_poller] polling events ...")
try: try:
loop.create_task(self.start_websocket(self._on_event)) loop.create_task(self.start_websocket(self._on_event))
loop.run_forever() loop.run_forever()
logging.debug("[agent:_event_poller] loop loop loop")
except Exception as ex: except Exception as ex:
logging.debug("Error while polling via websocket (%s)", ex) logging.debug("[agent:_event_poller] Error while polling via websocket (%s)", ex)
def start_event_polling(self): def start_event_polling(self):
# start a thread and pass in the mainloop # start a thread and pass in the mainloop