Files
vpp-snmp-agent/agentx/agent.py
2023-01-08 13:05:42 +01:00

95 lines
2.4 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):
self.logger = logging.getLogger("agentx.agent")
self.logger.addHandler(NullHandler())
self._servingset = DataSet()
self._workingset = DataSet()
self._lastupdate = 0
self._update_period = period # Seconds
self._net = Network(server_address=server_address)
self._oid_list = []
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)