error handling
This commit is contained in:
parent
e5d167dcda
commit
af30d5ec57
@ -123,32 +123,36 @@ class NtpDataCollector(threading.Thread):
|
|||||||
self.period = period
|
self.period = period
|
||||||
self.stop_event = threading.Event()
|
self.stop_event = threading.Event()
|
||||||
|
|
||||||
self.session = ntp.packet.ControlSession()
|
|
||||||
self.session.openhost(self.ntpserver)
|
|
||||||
|
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
while not self.stop_event.is_set():
|
while not self.stop_event.is_set():
|
||||||
|
try:
|
||||||
logger.debug('Query ntp server')
|
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=}")
|
logger.debug(f"{ntpserver_vars=}")
|
||||||
|
|
||||||
tmp_data_store = {}
|
tmp_data_store = {}
|
||||||
tmp_data_store['local'] = dict(ntpserver_vars)
|
tmp_data_store['local'] = dict(ntpserver_vars)
|
||||||
|
|
||||||
peers = self.session.readstat()
|
peers = session.readstat()
|
||||||
tmp_data_store['peers'] = {}
|
tmp_data_store['peers'] = {}
|
||||||
for peer in 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)
|
tmp_data_store['peers'][peer.associd] = dict(peer_vars)
|
||||||
logger.debug(f"{peer.associd=}, {peer_vars=}")
|
logger.debug(f"{peer.associd=}, {peer_vars=}")
|
||||||
|
|
||||||
with globalDataStore as ds:
|
with globalDataStore as ds:
|
||||||
ds.update_data(tmp_data_store)
|
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')
|
logger.info('NtpDataCollector terminating')
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
@ -161,17 +165,20 @@ class NtpsecDataUpdater(pyagentx.Updater):
|
|||||||
with globalDataStore as ds:
|
with globalDataStore as ds:
|
||||||
if ds.data:
|
if ds.data:
|
||||||
try:
|
try:
|
||||||
|
logger.debug("Updating data store")
|
||||||
for index, data_spec in enumerate(LOCAL_SERVER_KEYS, start=1):
|
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}"
|
oid_prefix = f"{LOCAL_PREFIX}.{index}"
|
||||||
self._data[oid_prefix] = {
|
self._data[oid_prefix] = {
|
||||||
'name': oid_prefix,
|
'name': oid_prefix,
|
||||||
'type': data_spec[1],
|
'type': data_spec[1],
|
||||||
'value': data_spec[2](ds.data['local'][data_spec[0]])
|
'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'])
|
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}"
|
number_of_peers_oid_prefix = f"{NUMBER_OF_PEERS_PREFIX}"
|
||||||
self._data[number_of_peers_oid_prefix] = {
|
self._data[number_of_peers_oid_prefix] = {
|
||||||
'name': number_of_peers_oid_prefix,
|
'name': number_of_peers_oid_prefix,
|
||||||
@ -179,7 +186,7 @@ class NtpsecDataUpdater(pyagentx.Updater):
|
|||||||
'value': number_of_peers
|
'value': number_of_peers
|
||||||
}
|
}
|
||||||
for peer_index, (associd, peer) in enumerate(ds.data['peers'].items(), start=1):
|
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}"
|
index_oid_prefix = f"{TABLE_OF_PEERS_PREFIX}.1.{peer_index}"
|
||||||
self._data[index_oid_prefix] = {
|
self._data[index_oid_prefix] = {
|
||||||
'name': index_oid_prefix,
|
'name': index_oid_prefix,
|
||||||
@ -193,13 +200,16 @@ class NtpsecDataUpdater(pyagentx.Updater):
|
|||||||
'value': associd
|
'value': associd
|
||||||
}
|
}
|
||||||
for key_index, data_spec in enumerate(PEER_KEYS, start=3):
|
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}"
|
oid_prefix = f"{TABLE_OF_PEERS_PREFIX}.{key_index}.{peer_index}"
|
||||||
self._data[oid_prefix] = {
|
self._data[oid_prefix] = {
|
||||||
'name': oid_prefix,
|
'name': oid_prefix,
|
||||||
'type': data_spec[1],
|
'type': data_spec[1],
|
||||||
'value': data_spec[2](peer[data_spec[0]])
|
'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:
|
except Exception as e:
|
||||||
logger.error(f"Failed to update: {type(e)} {e}")
|
logger.error(f"Failed to update: {type(e)} {e}")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user