Files
vpp-snmp-agent/agentx/agent.py
Pim van Pelt 31529a2815 improvement: add flag for agentx debugging
agentx/network.py always turned on debugging. It can be useful to have
debugging logs of the main application without the agentx debug logs, as
they are quite noisy.

Now, ./vpp-snmp-agent.py -d will turn on application debugging but NOT
agentx debugging. ./vpp-snmp-agent.py -d -dd will turn on both.

NOTE: ./vpp-snmp-agent.py -dd will do nothing, because the '-d' flag
determines the global logging level.
2023-01-10 15:21:32 +01:00

100 lines
2.5 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import (
absolute_import,
division,
print_function,
)
import time
import logging
import agentx
from agentx.dataset import DataSet
from agentx.network import Network
class NullHandler(logging.Handler):
def emit(self, record):
pass
class Agent(object):
def __init__(self, server_address="/var/agentx/master", period=30.0, args=None):
self.logger = logging.getLogger("agentx.agent")
self.logger.addHandler(NullHandler())
self._servingset = DataSet()
self._workingset = DataSet()
self._lastupdate = 0
self._update_period = period # Seconds
try:
debug = args.debug_agent
except:
debug = False
self._net = Network(server_address=server_address, debug=debug)
self._oid_list = []
self._args = args
def _update(self):
ds = self.update()
if not ds:
return False
self._net.update(ds._data)
self._lastupdate = time.time()
return True
def run(self):
self.logger.info("Calling setup")
if not self.setup():
self.logger.error("Setup failed - exiting")
return
self.logger.info("Initial update")
self._update()
while True:
if not self._net.is_connected():
self.logger.info("Opening AgentX connection")
self._net.start(self._oid_list)
if time.time() - self._lastupdate > self._update_period:
if not self._update():
self.logger.warning(
"Update failed, last successful update was %s"
% self._lastupdate
)
time.sleep(1)
try:
self._net.run()
except Exception as e:
self.logger.error("An exception occurred: %s" % e)
self.logger.error("Reconnecting")
self._net.disconnect()
time.sleep(0.1)
def stop(self):
self.logger.debug("Stopping")
self._net.disconnect()
pass
def setup(self):
# Override this
pass
def update(self):
# Override this
pass
def register(self, oid_list):
if not isinstance(oid_list, list):
oid_list = [oid_list]
for oid in oid_list:
if not oid in self._oid_list:
self.logger.debug("Adding %s to list" % oid)
self._oid_list.append(oid)