def snmp_v1_get(self, address, community, oid): """ Perform SNMP v1 GET and return result :param address: IP address :param community: SNMP v2c community :param oid: Resolved oid :returns: Result as a string, or None, when no response """ self.logger.debug("SNMP v1 GET %s %s", address, oid) try: result = yield snmp_get( address=address, oids=oid, community=community, version=SNMP_v1, tos=config.activator.tos, ioloop=self.service.ioloop, ) self.logger.debug("SNMP GET %s %s returns %s", address, oid, result) except SNMPError as e: metrics["error", ("type", "snmp_v1_error")] += 1 result = None self.logger.debug("SNMP GET %s %s returns error %s", address, oid, e) raise tornado.gen.Return(result)
def poll_worker(self, community, oid, timeout, version): while True: a = yield self.queue.get() if a: for c in community: t0 = perf_counter() try: r = yield snmp_get( address=a, oids=oid, community=c, version=version, timeout=timeout ) s = "OK" dt = perf_counter() - t0 mc = c break except SNMPError as e: s = "FAIL" r = str(e) dt = perf_counter() - t0 mc = "" except Exception as e: s = "EXCEPTION" r = str(e) dt = perf_counter() - t0 mc = "" break if self.convert: try: r = MACAddressParameter().clean(r) except ValueError: pass self.stdout.write("%s,%s,%s,%s,%r\n" % (a, s, dt, mc, r)) self.queue.task_done() if not a: break
def run(): try: self.result = yield snmp_get( address=self.script.credentials["address"], oids=oids, community=str(self.script.credentials["snmp_ro"]), tos=self.script.tos, ioloop=self.get_ioloop(), udp_socket=self.get_socket(), version=version, raw_varbinds=raw_varbinds) self.timeouts = self.timeouts_limit except SNMPError as e: if e.code == TIMED_OUT: if self.timeouts_limit: self.timeouts -= 1 if not self.timeouts: raise self.FatalTimeoutError() raise self.TimeOutError() else: raise