コード例 #1
0
ファイル: akcp_ths.py プロジェクト: alttch/eva-phi
 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'
     }
コード例 #2
0
 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'
     }
コード例 #3
0
ファイル: akcp_ths.py プロジェクト: alttch/eva-phi
 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)
コード例 #4
0
 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)
コード例 #5
0
 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