error handling
This commit is contained in:
parent
e5d167dcda
commit
af30d5ec57
@ -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():
|
||||
logger.debug('Query ntp server')
|
||||
try:
|
||||
logger.debug('Query ntp server')
|
||||
|
||||
ntpserver_vars = self.session.readvar(0)
|
||||
logger.debug(f"{ntpserver_vars=}")
|
||||
session = ntp.packet.ControlSession()
|
||||
session.openhost(self.ntpserver)
|
||||
|
||||
tmp_data_store = {}
|
||||
tmp_data_store['local'] = dict(ntpserver_vars)
|
||||
ntpserver_vars = session.readvar(0)
|
||||
logger.debug(f"{ntpserver_vars=}")
|
||||
|
||||
peers = self.session.readstat()
|
||||
tmp_data_store['peers'] = {}
|
||||
for peer in peers:
|
||||
peer_vars = self.session.readvar(peer.associd)
|
||||
tmp_data_store['peers'][peer.associd] = dict(peer_vars)
|
||||
logger.debug(f"{peer.associd=}, {peer_vars=}")
|
||||
tmp_data_store = {}
|
||||
tmp_data_store['local'] = dict(ntpserver_vars)
|
||||
|
||||
with globalDataStore as ds:
|
||||
ds.update_data(tmp_data_store)
|
||||
peers = session.readstat()
|
||||
tmp_data_store['peers'] = {}
|
||||
for peer in peers:
|
||||
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)
|
||||
|
||||
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=}")
|
||||
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]])
|
||||
}
|
||||
# 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=}")
|
||||
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]])
|
||||
}
|
||||
# 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}")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user