def main(): """Feed the snmp_xen MIB tree and start listening for snmp's passpersist""" global pp global node global nr_cpu syslog.openlog(sys.argv[0],syslog.LOG_PID) retry_timestamp=int(time.time()) retry_counter=MAX_RETRY while retry_counter>0: try: syslog.syslog(syslog.LOG_INFO,"Starting Xen monitoring...") # Load helpers pp=snmp.PassPersist(OID_BASE) node=cxm.node.Node.getLocalInstance() # Set statics data nr_cpu=node.metrics.get_host_nr_cpus() pp.start(update_data,POOLING_INTERVAL) # Should'nt return (except if updater thread has died) except KeyboardInterrupt: print "Exiting on user request." sys.exit(0) except IOError, e: if e.errno == errno.EPIPE: syslog.syslog(syslog.LOG_INFO,"Snmpd had close the pipe, exiting...") sys.exit(0) else: syslog.syslog(syslog.LOG_WARNING,"Updater thread as died: IOError: %s" % (e)) except Exception, e: syslog.syslog(syslog.LOG_WARNING,"Main thread as died: %s: %s" % (e.__class__.__name__, e))
def passpersist(default_oid_base, cpu_getter, mem_getter): # respond to passpersist immediately # don't buffer or the protocol breaks unbuffered = os.fdopen(sys.stdout.fileno(), 'w', 0) sys.stdout.close() sys.stdout = unbuffered parser = argparse.ArgumentParser() parser.add_argument('-o', '--oid', dest='oid_base', default=default_oid_base) parser.add_argument('-t', '--interval', dest='polling_interval', type=float, default=10) parser.add_argument('-r', '--retry', dest='max_retry', help='retry', type=int, default=10) args = parser.parse_args() syslog.openlog(sys.argv[0], syslog.LOG_PID) retry_timestamp = int(time.time()) retry_counter = 0 while retry_counter <= args.max_retry: try: syslog.syslog(syslog.LOG_INFO, "Starting Openvz perfdata monitoring") pp = snmp.PassPersist(args.oid_base) update = update_factory(pp, cpu_getter, mem_getter) pp.start(update, args.polling_interval) except KeyboardInterrupt: print "Exiting on user request." sys.exit(0) except IOError, e: if e.errno == errno.EPIPE: syslog.syslog(syslog.LOG_INFO, "Snmpd had close the pipe, exiting...") sys.exit(0) else: syslog.syslog(syslog.LOG_WARNING, "Updater thread has died: IOError: %s" % (e)) except Exception, e: syslog.syslog(syslog.LOG_WARNING, "Main thread has died: %s: %s" % (e.__class__.__name__, e))
def main(): global pp syslog.openlog(sys.argv[0],syslog.LOG_PID) retry_timestamp=int(time.time()) retry_counter=MAX_RETRY while retry_counter>0: try: syslog.syslog(syslog.LOG_INFO,"Starting sfa_checkd pass_persist daemon...") # Load helpers pp=snmp.PassPersist(OID_BASE) pp.start(update_data,POLLING_INTERVAL) # Should'nt return (except if updater thread has died) except KeyboardInterrupt: print "Exiting on user request." sys.exit(0) except IOError, e: if e.errno == errno.EPIPE: syslog.syslog(syslog.LOG_INFO,"Snmpd had closed the pipe, exiting...") sys.exit(0) else: syslog.syslog(syslog.LOG_WARNING,"Updater thread as died: IOError: %s" % (e)) except Exception, e: syslog.syslog(syslog.LOG_WARNING,"Main thread as died: %s: %s" % (e.__class__.__name__, e))
def main(): global pp retry_counter = MAX_RETRY while retry_counter > 0: try: Logging.log(SNMP_EXTENSION,"snmp extension script starting") pp=snmp.PassPersist(OID_BASE) pp.start(run_command,POLLING_INTERVAL) # Handle possible errors starting the script except KeyboardInterrupt: Logging.log(SNMP_EXTENSION,"Exiting on user request") sys.exit(0) except IOError, e: if e.errno == errno.EPIPE: Logging.log(SNMP_EXTENSION,"snmpd has closed the pipe") sys.exit(0) else: Logging.log(SNMP_EXTENSION,"updater thread has died: %s" %e) except Exception, e: Logging.log(SNMP_EXTENSION,"main thread has died %s: %s" % (e.__class__.__name__, e))
def main(): """Feed the snmp_xen MIB tree and start listening for snmp's passpersist""" global pp global node syslog.openlog(sys.argv[0], syslog.LOG_PID) retry_timestamp = int(time.time()) retry_counter = MAX_RETRY while retry_counter > 0: try: syslog.syslog(syslog.LOG_INFO, "Starting Xen monitoring...") # Load helpers pp = snmp.PassPersist(OID_BASE) node = cxm.node.Node(platform.node()) # Set statics data pp.add_str('1.1.0', node.get_hostname()) pp.add_gau('1.2.0', int(node.metrics.get_host_nr_cpus())) oid = pp.encode("Domain-0") pp.add_str('1.9.1.' + oid, 'Domain-0') pp.add_int('1.9.2.' + oid, 0) pp.add_gau('1.9.4.' + oid, 2) # Always 2 VPCU for Dom0 (TODO: ask the Xen-API) pp.start(update_data, POOLING_INTERVAL ) # Should'nt return (except if updater thread has died) except IOError, e: if e.errno == errno.EPIPE: syslog.syslog(syslog.LOG_INFO, "Snmpd had close the pipe, exiting...") sys.exit(0) except Exception, e: syslog.syslog(syslog.LOG_WARNING, "Main thread as died: %s" % (e))
result["totalsize"] = result["totalsize"] + fileinfo.st_size result["maxsize"] = max(result["maxsize"], fileinfo.st_size) result["oldest"] = min(result["oldest"], fileinfo.st_mtime) if result["filecount"] > 0 : result["avgsize"] = result["totalsize"] / result["filecount"] return result def updateSnmp (): global config, wrkdirs, wrkfilepatterns thetime = int(str(time.time()).split('.')[0]) pp.add_int("1",thetime) iIdx = 0 for wrkdir in wrkdirs: if wrkdir.find("wrkdir:") != 0 : continue iIdx = iIdx + 1 folderName = config.get(wrkdir,"path") pp.add_str("2.{0}".format(iIdx),folderName) for patternidx in range(len(wrkfilepatterns)): information = obtainInformation(folderName,wrkfilepatterns[patternidx]) pp.add_int("{0}.1.{1}".format(patternidx + 3, iIdx), information["filecount"]) pp.add_cnt_64bit("{0}.2.{1}".format(patternidx + 3, iIdx), information["totalsize"]) pp.add_int("{0}.3.{1}".format(patternidx + 3, iIdx), information["avgsize"]) pp.add_int("{0}.4.{1}".format(patternidx + 3, iIdx), information["maxsize"]) pp.add_int("{0}.5.{1}".format(patternidx + 3, iIdx), thetime - information["oldest"]) basenode = config.get("settings","basenode") pp = snmp.PassPersist (basenode) pp.start(updateSnmp, 60)
import os import glob import subprocess import snmp_passpersist as snmp def update(): for interface in os.listdir("/sys/class/net"): # Get index index = file("/sys/class/net/%s/ifindex" % interface) index = int(index.read()) # Call ethtool try: ethtool = subprocess.check_output(["ethtool", "-S", interface], stderr=subprocess.STDOUT) except subprocess.CalledProcessError: continue for line in ethtool.split("\n"): mo = re.match("\s+(\w+): (\d+)", line) if not mo: continue name = mo.group(1) value = int(mo.group(2)) oid = "%d.%s" % (index, ".".join([str(ord(a)) for a in name])) pp.add_cnt_64bit(oid, value) pp = snmp.PassPersist('.1.3.6.1.4.1.39178.100.1.1.1.2') pp.start(update, 10)
# print sensors[i] i += 1 import snmp_passpersist as snmp OID_BASE = ".1.3.6.1.2.1.25.1.8" def update(): global pp iter() #OID == .1.3.6.1.2.1.25.1.8.3 pp.add_int('3', sensors[1]) #OID == .1.3.6.1.2.1.25.1.8.4 pp.add_int('4', sensors[2]) #... pp.add_int('5', sensors[3]) pp.add_int('6', sensors[4]) pp.add_int('9', sensors[5]) pp.add_int('10', sensors[6]) pp.add_int('11', sensors[7]) try: pp = snmp.PassPersist(OID_BASE) pp.start(update, 30) except KeyboardInterrupt: print "Exiting on user request." sys.exit(0)
def __init__(self, base_oid=None): if base_oid: self.BASE_OID = base_oid self.snmp = snmp_passpersist.PassPersist(self.BASE_OID) self.update()
# To activate this script, snmpd must be running and this # script should be installed /usr/share/snmp/bgp4_pp.py # and include the following line in /etc/snmp/snmpd.conf # # pass_persist .1.3.6.1.2.1.15 /usr/share/snmp/bgp4_pp.py # import subprocess import sys import json import syslog import ipaddress, struct, socket, datetime import snmp_passpersist as snmp BGP4_MIB = '.1.3.6.1.2.1.15' pp = snmp.PassPersist(BGP4_MIB) peerstate = { 'idle': 1, 'connect': 2, 'active': 3, 'opensent': 4, 'openconfirm': 5, 'established': 6 } adminstate = {'disable': 1, 'enable': 2} # construct the peer entry table dictionary bgpPeerEntry = { 'bgpPeerIdentifier': {
def main(): sys.stdout = _unbuffered_handle(sys.stdout) pp = snmp.PassPersist(".1.3.6.1.4.1") logger = LogWriter() upd = Updater(pp, logger, testmode=('--testmode' in sys.argv)) pp.start(upd.update, 5) # update every 5s
# bgpPeerMinASOriginationInterval (unknown) # bgpPeerMinRouteAdvertisementInterval (unknown) # bgpPeerInUpdateElapsedTime (unknown) # Logging root = logging.getLogger("") root.setLevel(logging.WARNING) logger.setLevel(logging.INFO) facility = logging.handlers.SysLogHandler.LOG_DAEMON sh = logging.handlers.SysLogHandler(address='/dev/log', facility=facility) sh.setFormatter(logging.Formatter( "{0}[{1}]: %(message)s".format( logger.name, os.getpid()))) root.addHandler(sh) # Pass persist try: pp = snmp.PassPersist(bgpPeerTable) pp.debug = False if pp.debug: update() else: logger.info("starting") pp.start(update, 20) except Exception as e: logger.exception("%s", e) sys.exit(1)
def get_stats(so_path): so = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) so.connect(so_path) so.send("stats -j\r\n") data = '' while True: buf = so.recv(8000) data += buf if len(data) > 20 and data[-6:].startswith("pktj>"): break so.close() return json.loads(re.sub(r'pktj>|stats -j', '', data)) def update(): data = get_stats('/var/run/pktj.1') pp.add_cnt_64bit("1.1.1.1.0.0", int(data['total']['rx'])) pp.add_cnt_64bit("1.1.1.1.1.0", int(data['total']['tx'])) pp.add_cnt_64bit("1.1.1.2.0.0", int(data['total']['drop'])) pp.add_cnt_64bit("1.1.1.2.1.0", int(data['total']['acl_drop'])) pp.add_cnt_64bit("1.1.1.2.2.0", int(data['total']['rate_drop'])) pp.add_cnt_64bit("1.1.1.3.0.0", int(data['total']['kni_rx'])) pp.add_cnt_64bit("1.1.1.3.1.0", int(data['total']['kni_tx'])) pp.add_cnt_64bit("1.1.1.3.2.0", int(data['total']['kni_drop'])) pp = snmp.PassPersist(oid_base) pp.start(update, 10)
inputs.append( ET.parse( StringIO.StringIO( subprocess.Popen( shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()[0])).getroot()) xmlData = XMLCombiner(inputs).combine() snmpData = formSNMPTree(xmlData, mapping, '') # Special processing for heal (it doesn't give XML output) healCount = 0 for vol in xmlData.find('volList').findall('volume'): # for each volume try to get heal status healSt = parseHealStatus(vol=vol.text, cmd=healStatusCmd) healCount += len(healSt) / 5 for oid in healSt: snmpData['4.2.1.%(oid)s' % {'oid': oid}] = healSt[oid] snmpData['4.1.0'] = {'type': 'INTEGER', 'value': healCount} for oid in snmpData: pp.add_oid_entry(oid, snmpData[oid]['type'], snmpData[oid]['value']) ############################################################################### if __name__ == '__main__': pp = snmp.PassPersist(baseOID) pp.start(updateOIDTree, updateInterval) sys.exit(0)
self._initialize() def update(self): if self.testmode: # APC Internal/Battery Temperature pp.add_int('318.1.1.1.2.2.2.0', 99) # Cisco devices temperature OIDs pp.add_int('9.9.13.1.3.1.3.1', 97) pp.add_int('9.9.13.1.3.1.3.2', 98) pp.add_int('9.9.13.1.3.1.3.3', 99) else: try: with self.usb_lock: pp.add_int('318.1.1.1.2.2.2.0', int(max([d.get_temperature() for d in self.devs]))) for i, dev in enumerate(self.devs[:3]): # use max. first 3 devices pp.add_int('9.9.13.1.3.1.3.%i' % (i+1), int(dev.get_temperature())) except Exception, e: self.logger.write_log('Exception while updating data: %s' % str(e)) # Report an exceptionally large temperature to set off all alarms. # snmp_passpersist does not expose an API to remove an OID. for oid in ('318.1.1.1.2.2.2.0', '9.9.13.1.3.1.3.1', '9.9.13.1.3.1.3.2', '9.9.13.1.3.1.3.3'): pp.add_int(oid, ERROR_TEMPERATURE) self.logger.write_log('Starting reinitialize after error on update') self._reinitialize() if __name__ == '__main__': pp = snmp.PassPersist(".1.3.6.1.4.1") logger = LogWriter() upd = Updater(pp, logger, testmode=('--testmode' in sys.argv)) pp.start(upd.update, 5) # update every 5s
parser = argparse.ArgumentParser(description='ODR-DabMux PassPersit') parser.add_argument('-o', '--oid', help='start oid (example: .1.3.6.1.4.1.51436.1.1)', required=True) parser.add_argument('-p', '--port', help='state port (example: 12720)', required=True) cli_args = parser.parse_args() syslog.openlog(sys.argv[0], syslog.LOG_PID) try: syslog.syslog(syslog.LOG_INFO, "Starting ODR-DabMux monitoring...") pp = snmp.PassPersist(cli_args.oid) pp.start(update_data, 30) except KeyboardInterrupt: print "Exiting on user request." sys.exit(0) except IOError, e: if e.errno == errno.EPIPE: syslog.syslog(syslog.LOG_INFO, "Snmpd had close the pipe, exiting...") sys.exit(0) else: syslog.syslog(syslog.LOG_WARNING, "Updater thread as died: IOError: %s" % (e)) except Exception, e: syslog.syslog( syslog.LOG_WARNING,