error handling

This commit is contained in:
Wolfgang Hottgenroth 2025-03-07 22:37:46 +01:00
parent e5d167dcda
commit af30d5ec57

View File

@ -123,32 +123,36 @@ class NtpDataCollector(threading.Thread):
self.period = period
self.stop_event = threading.Event()
self.session = ntp.packet.ControlSession()
self.session.openhost(self.ntpserver)
threading.Thread.__init__(self)
def run(self):
while not self.stop_event.is_set():
try:
logger.debug('Query ntp server')
ntpserver_vars = self.session.readvar(0)
session = ntp.packet.ControlSession()
session.openhost(self.ntpserver)
ntpserver_vars = session.readvar(0)
logger.debug(f"{ntpserver_vars=}")
tmp_data_store = {}
tmp_data_store['local'] = dict(ntpserver_vars)
peers = self.session.readstat()
peers = session.readstat()
tmp_data_store['peers'] = {}
for peer in peers:
peer_vars = self.session.readvar(peer.associd)
peer_vars = session.readvar(peer.associd)
tmp_data_store['peers'][peer.associd] = dict(peer_vars)
logger.debug(f"{peer.associd=}, {peer_vars=}")
with globalDataStore as ds:
ds.update_data(tmp_data_store)
except ntp.packet.ControlException as e:
logger.error(f"ntp.packet.ControlException while querying NTP server: {str(e)}")
finally:
time.sleep(self.period)
logger.info('NtpDataCollector terminating')
def stop(self):
@ -161,17 +165,20 @@ class NtpsecDataUpdater(pyagentx.Updater):
with globalDataStore as ds:
if ds.data:
try:
logger.debug("Updating data store")
for index, data_spec in enumerate(LOCAL_SERVER_KEYS, start=1):
logger.debug(f"local: {index=} {data_spec=}")
# logger.debug(f"local: {index=} {data_spec=}")
try:
oid_prefix = f"{LOCAL_PREFIX}.{index}"
self._data[oid_prefix] = {
'name': oid_prefix,
'type': data_spec[1],
'value': data_spec[2](ds.data['local'][data_spec[0]])
}
except KeyError as e:
logger.error(f"key {data_spec[0]} missing in local, skip it: {str(e)}")
number_of_peers = len(ds.data['peers'])
logger.debug(f"number of peers: {number_of_peers}")
# logger.debug(f"number of peers: {number_of_peers}")
number_of_peers_oid_prefix = f"{NUMBER_OF_PEERS_PREFIX}"
self._data[number_of_peers_oid_prefix] = {
'name': number_of_peers_oid_prefix,
@ -179,7 +186,7 @@ class NtpsecDataUpdater(pyagentx.Updater):
'value': number_of_peers
}
for peer_index, (associd, peer) in enumerate(ds.data['peers'].items(), start=1):
logger.debug(f"peer: {peer}")
# logger.debug(f"peer: {peer}")
index_oid_prefix = f"{TABLE_OF_PEERS_PREFIX}.1.{peer_index}"
self._data[index_oid_prefix] = {
'name': index_oid_prefix,
@ -193,13 +200,16 @@ class NtpsecDataUpdater(pyagentx.Updater):
'value': associd
}
for key_index, data_spec in enumerate(PEER_KEYS, start=3):
logger.debug(f"peer: {associd=} {key_index=} {data_spec=}")
# logger.debug(f"peer: {associd=} {key_index=} {data_spec=}")
try:
oid_prefix = f"{TABLE_OF_PEERS_PREFIX}.{key_index}.{peer_index}"
self._data[oid_prefix] = {
'name': oid_prefix,
'type': data_spec[1],
'value': data_spec[2](peer[data_spec[0]])
}
except KeyError as e:
logger.error(f"key {data_spec[0]} missing in peer {associd}, skip it: {str(e)}")
except Exception as e:
logger.error(f"Failed to update: {type(e)} {e}")