def test(self, cmd=None): if cmd == 'module': return 'default' if not netsnmp else 'netsnmp' elif cmd == 'info': name = snmp.get('.1.3.6.1.4.1.3854.1.1.8.0', self.snmp_host, self.snmp_port, self.community, timeout=get_timeout(), snmp_ver=1) if not name: return 'FAILED' vendor = snmp.get('.1.3.6.1.4.1.3854.1.1.6.0', self.snmp_host, self.snmp_port, self.community, timeout=get_timeout(), snmp_ver=1) if not vendor: return 'FAILED' return '%s %s' % (vendor.strip(), name.strip()) if cmd == 'self': t = self.get('t', timeout=get_timeout()) h = self.get('h', timeout=get_timeout()) return 'OK' if t and h else 'FAILED' return { 'info': 'returns relay ip module name and version', 'module': 'current SNMP module' }
def test(self, cmd=None): if cmd == 'module': return 'default' if not netsnmp else 'netsnmp' if cmd == 'self' and self.snmp_host is None: return 'OK' if cmd == 'info' or cmd == 'self': if netsnmp: try: sess = netsnmp.Session( Version=2, DestHost=self.snmp_host, RemotePort=self.snmp_port, Community=self.snmp_read_community, Timeout=int(get_timeout() * 1000000), Retries=self.snmp_tries - 1) except: log_traceback() sess = None if netsnmp: try: name = sess.get(netsnmp.VarList(self.oid_name))[0].decode() except: log_traceback() name = None else: name = snmp.get( self.oid_name, self.snmp_host, self.snmp_port, self.snmp_read_community, timeout=get_timeout(), retries=self.snmp_tries - 1) if not name: return 'FAILED' if name and cmd == 'self': return 'OK' if netsnmp: try: version = sess.get(netsnmp.VarList( self.oid_version))[0].decode() except: version = None else: version = snmp.get( self.oid_version, self.snmp_host, self.snmp_port, self.snmp_read_community, timeout=get_timeout()) if not version: return 'FAILED' return '%s %s' % (name.strip(), version.strip()) return { 'info': 'returns relay ip module name and version', 'module': 'current SNMP module' }
def get(self, port=None, cfg=None, timeout=0): work_oids = {'t': 16, 'h': 17} wo = work_oids.get(port) if wo is None: return None snmp_oid = 'iso.3.6.1.4.1.3854.1.2.2.1.%u.1.3.%u' % ( wo, self.sensor_port - 1) _timeout = timeout / self.snmp_tries if netsnmp: try: sess = netsnmp.Session(Version=1, DestHost=self.snmp_host, RemotePort=self.snmp_port, Community=self.community, Timeout=int(_timeout * 1000000), Retries=self.snmp_tries - 1) return sess.get(netsnmp.VarList(snmp_oid))[0].decode() except: log_traceback() return None else: return snmp.get(snmp_oid, self.snmp_host, self.snmp_port, self.community, _timeout, self.snmp_tries - 1, rf=int, snmp_ver=1)
def get(self, port=None, cfg=None, timeout=0): if cfg: host, snmp_port = parse_host_port(cfg.get('host'), 161) community = cfg.get('community') if not community: community = cfg.get('read_community') tries = cfg.get('retries') try: tries = int(tries) + 1 except: tries = None else: host = None community = None tries = None if not host: host = self.snmp_host snmp_port = self.snmp_port if not community: community = self.snmp_read_community if tries is None: tries = self.snmp_tries if not host or not community: return None _timeout = timeout / tries if not port and netsnmp: try: sess = netsnmp.Session( Version=2, DestHost=host, RemotePort=snmp_port, Community=community, Timeout=int(_timeout * 1000000), Retries=self.snmp_tries - 1) oid = netsnmp.VarList( '%s.%u' % (self.oid_work, self.port_shift + 1)) sess.getbulk(0, self.port_max, oid) result = {} for i, v in enumerate(oid): result[str(i + 1)] = v.val.decode() return result except Exception as e: self.log_error(e) log_traceback() return None else: try: port = int(port) except: return None if port < 1 or port > self.port_max: return None if netsnmp: try: sess = netsnmp.Session( Version=2, DestHost=host, RemotePort=snmp_port, Community=community, Timeout=int(_timeout * 1000000), Retries=self.snmp_tries - 1) oid = netsnmp.VarList( '%s.%u' % (self.oid_work, port + self.port_shift)) return sess.get(oid)[0].decode() except Exception as e: self.log_error(e) log_traceback() return None else: return snmp.get( '%s.%u' % (self.oid_work, port + self.port_shift), host, snmp_port, community, _timeout, tries - 1, rf=int)
def get(self, port=None, cfg=None, timeout=0): if cfg: host, snmp_port = parse_host_port(cfg.get('host'), 161) community = cfg.get('community') tries = cfg.get('retries') try: tries = int(tries) + 1 except: tries = None else: host = None community = None tries = None if not host: host = self.snmp_host snmp_port = self.snmp_port if not community: community = self.community if tries is None: tries = self.snmp_tries if not host or not community: return None _timeout = timeout / tries port = str(port) if port.startswith('a'): oid = self.oid_ain port_max = 8 port = port[1:] ret = 1 elif port.startswith('t'): oid = self.oid_temp port_max = 8 port = port[1:] ret = 2 else: oid = self.oid_din port_max = 16 ret = 0 try: port = int(port) except: return None if port < 1 or port > port_max: return None if netsnmp: try: sess = netsnmp.Session(Version=2, DestHost=host, RemotePort=snmp_port, Community=community, Timeout=int(_timeout * 1000000), Retries=self.snmp_tries - 1) o = netsnmp.VarList('%s.%u' % (oid, port - 1)) result = sess.get(o)[0].decode() except Exception as e: self.log_error(e) log_traceback() return None else: result = snmp.get('%s.%u' % (oid, port - 1), host, snmp_port, community, _timeout, tries - 1, rf=int) if ret == 0: return result elif ret == 1: return int(result) / 100 elif ret == 2: return None if result == '---' else result