Пример #1
0
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))
Пример #3
0
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))
Пример #4
0
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))
Пример #5
0
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))
Пример #6
0
        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)
    
Пример #7
0
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)
Пример #8
0
#        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)
Пример #9
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()
Пример #10
0
# 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': {
Пример #11
0
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
Пример #12
0
        # 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)
Пример #13
0

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)
Пример #14
0
        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)
Пример #15
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,