diff --git a/agentx/agent.py b/agentx/agent.py index 915bc68..caed629 100644 --- a/agentx/agent.py +++ b/agentx/agent.py @@ -6,22 +6,15 @@ from __future__ import ( print_function, ) -# -------------------------------------------- -import logging - - -class NullHandler(logging.Handler): - def emit(self, record): - pass -# -------------------------------------------- - import time +import logging import agentx from agentx.dataset import DataSet from agentx.network import Network -class AgentError(Exception): - pass +class NullHandler(logging.Handler): + def emit(self, record): + pass class Agent(object): diff --git a/agentx/dataset.py b/agentx/dataset.py index 750147e..c385721 100644 --- a/agentx/dataset.py +++ b/agentx/dataset.py @@ -6,7 +6,8 @@ from __future__ import ( print_function, ) -# -------------------------------------------- +import time +import agentx import logging @@ -15,17 +16,11 @@ class NullHandler(logging.Handler): pass -logger = logging.getLogger('agentx.dataset') -logger.addHandler(NullHandler()) -# -------------------------------------------- - -import time -import agentx - - class DataSet(): def __init__(self): self._data = {} + self.logger = logging.getLogger('agentx.dataset') + self.logger.addHandler(NullHandler()) def set(self, oid, oid_type, value): if oid_type.startswith('int'): @@ -47,7 +42,7 @@ class DataSet(): elif oid_type == 'counter64' or oid_type == 'uint64' or oid_type == 'u64': t = agentx.TYPE_COUNTER64 else: - logger.error('Invalid oid_type: %s' % (oid_type)) + self.logger.error('Invalid oid_type: %s' % (oid_type)) return self._data[oid] = { diff --git a/agentx/network.py b/agentx/network.py index b93301b..88529d6 100644 --- a/agentx/network.py +++ b/agentx/network.py @@ -6,8 +6,11 @@ from __future__ import ( print_function, ) -# -------------------------------------------- +import socket +import time import logging +import agentx +from agentx.pdu import PDU class NullHandler(logging.Handler): @@ -15,19 +18,9 @@ class NullHandler(logging.Handler): pass -logger = logging.getLogger('agentx.network') -logger.addHandler(NullHandler()) - class NetworkError(Exception): pass -# -------------------------------------------- - -import socket -import time -import agentx -from agentx.pdu import PDU - class Network(): def __init__(self, server_address = '/var/agentx/master'): @@ -41,13 +34,16 @@ class Network(): self._connected = False self._server_address = server_address self._timeout = 0.1 # Seconds + self.logger = logging.getLogger('agentx.network') + self.logger.addHandler(NullHandler()) + def connect(self): if self._connected: return try: - logger.info("Connecting to %s" % self._server_address) + self.logger.info("Connecting to %s" % self._server_address) if self._server_address.startswith('/'): self.socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self.socket.connect(self._server_address) @@ -59,13 +55,13 @@ class Network(): self.socket.settimeout(self._timeout) self._connected = True except socket.error: - logger.error("Failed to connect to %s" % self._server_address) + self.logger.error("Failed to connect to %s" % self._server_address) self._connected = False def disconnect(self): if not self._connected: return - logger.info("Disconnecting from %s" % self._server_address) + self.logger.info("Disconnecting from %s" % self._server_address) self.socket.close() self.socket = None self._connected = False @@ -73,9 +69,9 @@ class Network(): def update(self, newdata): if len(self.data) == 0: - logger.info("Setting initial serving dataset (%d OIDs)" % len(newdata)) + self.logger.info("Setting initial serving dataset (%d OIDs)" % len(newdata)) else: - logger.info("Replacing serving dataset (%d OIDs)" % len(newdata)) + self.logger.info("Replacing serving dataset (%d OIDs)" % len(newdata)) self.data = newdata self.data_idx = sorted(self.data.keys(), key=lambda k: tuple(int(part) for part in k.split('.'))) @@ -110,7 +106,7 @@ class Network(): def _get_next_oid(self, oid, endoid): if oid in self.data: # Exact match found - #logger.debug('get_next_oid, exact match of %s' % oid) + #self.logger.debug('get_next_oid, exact match of %s' % oid) idx = self.data_idx.index(oid) if idx == (len(self.data_idx) - 1): # Last Item in MIB, No match! @@ -118,7 +114,7 @@ class Network(): return self.data_idx[idx + 1] else: # No exact match, find prefix - #logger.debug('get_next_oid, no exact match of %s' % oid) + #self.logger.debug('get_next_oid, no exact match of %s' % oid) slist = oid.split('.') elist = endoid.split('.') for tmp_oid in self.data_idx: @@ -140,20 +136,20 @@ class Network(): if not self._connected: return - logger.debug("==== Open PDU ====") + self.logger.debug("==== Open PDU ====") pdu = self.new_pdu(agentx.AGENTX_OPEN_PDU) self.send_pdu(pdu) pdu = self.recv_pdu() self.session_id = pdu.session_id - logger.debug("==== Ping PDU ====") + self.logger.debug("==== Ping PDU ====") pdu = self.new_pdu(agentx.AGENTX_PING_PDU) self.send_pdu(pdu) pdu = self.recv_pdu() - logger.debug("==== Register PDU ====") + self.logger.debug("==== Register PDU ====") for oid in oid_list: - logger.info("Registering: %s" % (oid)) + self.logger.info("Registering: %s" % (oid)) pdu = self.new_pdu(agentx.AGENTX_REGISTER_PDU) pdu.oid = oid self.send_pdu(pdu) @@ -181,21 +177,21 @@ class Network(): return if not request: - logger.error("Empty PDU, connection closed!") + self.logger.error("Empty PDU, connection closed!") self.disconnect() raise NetworkError("Empty PDU, disconnecting") response = self.response_pdu(request) if request.type == agentx.AGENTX_GET_PDU: - logger.debug("Received GET PDU") + self.logger.debug("Received GET PDU") for rvalue in request.range_list: oid = rvalue[0] - logger.debug("OID: %s" % (oid)) + self.logger.debug("OID: %s" % (oid)) if oid in self.data: - logger.debug("OID Found") + self.logger.debug("OID Found") response.values.append(self.data[oid]) else: - logger.debug("OID Not Found!") + self.logger.debug("OID Not Found!") response.values.append({ 'type': agentx.TYPE_NOSUCHOBJECT, 'name': rvalue[0], @@ -203,10 +199,10 @@ class Network(): }) elif request.type == agentx.AGENTX_GETNEXT_PDU: - logger.debug("Received GET_NEXT PDU") + self.logger.debug("Received GET_NEXT PDU") for rvalue in request.range_list: oid = self._get_next_oid(rvalue[0], rvalue[1]) - logger.debug("GET_NEXT: %s => %s" % (rvalue[0], oid)) + self.logger.debug("GET_NEXT: %s => %s" % (rvalue[0], oid)) if oid: response.values.append(self.data[oid]) else: @@ -217,6 +213,6 @@ class Network(): }) else: - logger.warn("Received unsupported PDU %d" % request.type) + self.logger.warn("Received unsupported PDU %d" % request.type) self.send_pdu(response) diff --git a/agentx/pdu.py b/agentx/pdu.py index f3900ec..804b2bf 100644 --- a/agentx/pdu.py +++ b/agentx/pdu.py @@ -7,24 +7,16 @@ from __future__ import ( ) # -------------------------------------------- +import struct +import pprint import logging - +import agentx class NullHandler(logging.Handler): def emit(self, record): pass -logger = logging.getLogger('agentx.pdu') -logger.addHandler(NullHandler()) -# -------------------------------------------- - -import struct -import pprint - -import agentx - - class PDU(object): def __init__(self, type=0): self.type = type @@ -36,23 +28,25 @@ class PDU(object): self.decode_buf = '' self.state = {} self.values = [] + self.logger = logging.getLogger('agentx.pdu') + self.logger.addHandler(NullHandler()) def dump(self): name = agentx.PDU_TYPE_NAME[self.type] - logger.debug('PDU DUMP: New PDU') - logger.debug( + self.logger.debug('PDU DUMP: New PDU') + self.logger.debug( 'PDU DUMP: Meta : [%s: %d %d %d]' % (name, self.session_id, self.transaction_id, self.packet_id)) if 'payload_length' in self.state: - logger.debug('PDU DUMP: Length : %s' % + self.logger.debug('PDU DUMP: Length : %s' % self.state['payload_length']) if hasattr(self, 'response'): - logger.debug('PDU DUMP: Response : %s' % self.response) + self.logger.debug('PDU DUMP: Response : %s' % self.response) if hasattr(self, 'values'): - logger.debug('PDU DUMP: Values : %s' % + self.logger.debug('PDU DUMP: Values : %s' % pprint.pformat(self.values)) if hasattr(self, 'range_list'): - logger.debug('PDU DUMP: Range list: %s' % + self.logger.debug('PDU DUMP: Range list: %s' % pprint.pformat(self.range_list)) # ==================================================== @@ -108,7 +102,7 @@ class PDU(object): # No data pass else: - logger.error('Unknown Type:' % type) + self.logger.error('Unknown Type:' % type) return buf def encode_header(self, pdu_type, payload_length=0, flags=0): @@ -181,8 +175,8 @@ class PDU(object): oid = '.'.join(str(i) for i in sub_ids) return oid, ret['include'] except Exception as e: - logger.exception('Invalid packing OID header') - logger.debug('%s' % pprint.pformat(self.decode_buf)) + self.logger.exception('Invalid packing OID header') + self.logger.debug('%s' % pprint.pformat(self.decode_buf)) def decode_search_range(self): start_oid, include = self.decode_oid() @@ -207,14 +201,14 @@ class PDU(object): self.decode_buf = self.decode_buf[l + padding:] return buf except Exception as e: - logger.exception('Invalid packing octet header') + self.logger.exception('Invalid packing octet header') def decode_value(self): try: vtype, _ = struct.unpack('!HH', self.decode_buf[:4]) self.decode_buf = self.decode_buf[4:] except Exception as e: - logger.exception('Invalid packing value header') + self.logger.exception('Invalid packing value header') oid, _ = self.decode_oid() if vtype in [ agentx.TYPE_INTEGER, agentx.TYPE_COUNTER32, @@ -241,7 +235,7 @@ class PDU(object): # No data data = None else: - logger.error('Unknown Type: %s' % vtype) + self.logger.error('Unknown Type: %s' % vtype) return {'type': vtype, 'name': oid, 'data': data} def decode_header(self): @@ -267,11 +261,11 @@ class PDU(object): self.decode_buf = self.decode_buf[:ret['payload_length']] if ret['flags'] & 0x08: # content present context = self.decode_octet() - logger.debug('Context: %s' % context) + self.logger.debug('Context: %s' % context) return ret except Exception as e: - logger.exception('Invalid packing: %d' % len(self.decode_buf)) - logger.debug('%s' % pprint.pformat(self.decode_buf)) + self.logger.exception('Invalid packing: %d' % len(self.decode_buf)) + self.logger.debug('%s' % pprint.pformat(self.decode_buf)) def decode(self, buf): self.set_decode_buf(buf) @@ -310,4 +304,4 @@ class PDU(object): else: pdu_type_str = agentx.PDU_TYPE_NAME.get( ret['pdu_type'], 'Unknown:' + str(ret['pdu_type'])) - logger.error('Unsupported PDU type:' + pdu_type_str) + self.logger.error('Unsupported PDU type:' + pdu_type_str) diff --git a/vpp-snmp-agent.py b/vpp-snmp-agent.py index 24ec964..47d5a52 100755 --- a/vpp-snmp-agent.py +++ b/vpp-snmp-agent.py @@ -9,7 +9,7 @@ class MyAgent(agentx.Agent): def setup(self): global vppstat, vpp, logger - self.logger.info("Connecting to VPP Stats...") + self.logger.info("Connecting to VPP Stats Segment") vppstat = VPPStats(socketname='/run/vpp/stats.sock', timeout=2) if not vppstat.connect(): self.logger.error("Can't connect to VPP Stats API, bailing")