def handleTrap(trap, config=None): """ handleTrap is run by snmptrapd every time it receives a trap. Return False to signal trap was discarded, True if trap was accepted. """ db = getConnection('default') # Event variables source = "snmptrapd" target = "eventEngine" eventtypeid = "upsPowerState" # Use the trap-object to access trap-variables and do stuff. for vendor in ONBATTERY.keys(): if trap.snmpTrapOID in ONBATTERY[vendor]: logger.debug ("Got ups on battery trap (%s)" %vendor) # Get time to live try: batterytimeoid, format = BATTERYTIME[vendor] s = Snmp(trap.agent, trap.community) batterytime = s.get(batterytimeoid) except Exception, e: logger.info("Could not get battery time from %s: %s" \ %(trap.agent, e)) batterytime = False else: batterytime = format_batterytime(batterytime, format) logger.debug("batterytime: %s" % batterytime) # Get netboxid from database c = db.cursor() c.execute("SELECT netboxid, sysname FROM netbox WHERE ip = %s", (trap.agent,)) if not c.rowcount > 0: logger.error("Could not find netbox in database, no event \ will be posted") return False netboxid, sysname = c.fetchone() state = 's' # Create event-object, fill it and post event. e = Event(source=source, target=target, netboxid=netboxid, eventtypeid=eventtypeid, state=state) e['alerttype'] = "upsOnBatteryPower" e['batterytime'] = batterytime e['sysname'] = sysname # Post event try: e.post() except Exception, e: logger.error(e) return False return True
def handler(nblist, state): for deviceid, netboxid in nblist: e = Event('ipdevpoll', 'eventEngine', deviceid, netboxid, eventtypeid='snmpAgentState', state=state, severity=100) e['alerttype'] = 'snmpAgentDown' if state == 's' else 'snmpAgentUp' e.post()
def handleTrap(trap, config=None): # Two interesting traps: # bsnAPAssociated and bsnAPDisassociated if trap.snmpTrapOID not in [ "." + TRAPS['bsnAPAssociated']['oid'], "." + TRAPS['bsnAPDisassociated']['oid'] ]: return False logger.debug("Got trap %s", trap.snmpTrapOID) # Eventvariables: source = "snmptrapd" target = "eventEngine" eventtypeid = 'apState' alerttype = "" state = "" subid = "" mac = "" apname = "" # Name of AP: bsnAPName # MAC: bsnAPMacAddrTrapVariable for key, val in trap.varbinds.items(): if key.find(NODES['bsnAPName']['oid']) >= 0: apname = val logger.debug("Set apname to %s", apname) elif key.find(NODES['bsnAPMacAddrTrapVariable']['oid']) >= 0: mac = val subid = mac if trap.snmpTrapOID == "." + TRAPS['bsnAPAssociated']['oid']: state = 'e' alerttype = 'apUp' elif trap.snmpTrapOID == "." + TRAPS['bsnAPDisassociated']['oid']: state = 's' alerttype = 'apDown' e = Event(source=source, target=target, subid=subid, eventtypeid=eventtypeid, state=state) e['alerttype'] = alerttype e['mac'] = mac e['apname'] = apname logger.debug(e) try: e.post() except Exception as e: logger.error(e) return False return True
def handleTrap(trap, config=None): # Two interesting traps: # bsnAPAssociated and bsnAPDisassociated if trap.snmpTrapOID not in [ "." + TRAPS['bsnAPAssociated']['oid'], "." + TRAPS['bsnAPDisassociated']['oid'] ]: return False logger.debug("Got trap %s" %trap.snmpTrapOID) # Eventvariables: source = "snmptrapd" target = "eventEngine" eventtypeid = 'apState' alerttype = "" state = "" subid = "" mac = "" apname = "" # Name of AP: bsnAPName # MAC: bsnAPMacAddrTrapVariable for key, val in trap.varbinds.items(): if key.find(NODES['bsnAPName']['oid']) >= 0: apname = val logger.debug("Set apname to %s" %apname) elif key.find(NODES['bsnAPMacAddrTrapVariable']['oid']) >= 0: mac = val subid = mac if trap.snmpTrapOID == "." + TRAPS['bsnAPAssociated']['oid']: state = 'e' alerttype = 'apUp' elif trap.snmpTrapOID == "." + TRAPS['bsnAPDisassociated']['oid']: state = 's' alerttype = 'apDown' e = Event(source=source, target=target, subid=subid, eventtypeid=eventtypeid, state=state) e['alerttype'] = alerttype e['mac'] = mac e['apname'] = apname logger.debug(e) try: e.post() except Exception, e: logger.error(e) return False
def handler(nblist, state): for netboxid in nblist: e = Event('ipdevpoll', 'eventEngine', netboxid=netboxid, eventtypeid='snmpAgentState', state=state, severity=100) e['alerttype'] = 'snmpAgentDown' if state == 's' else 'snmpAgentUp' e.post()
def main(): """Main controller""" namespace = parse_options() netbox = Netbox.objects.get(sysname__icontains=namespace.sysname) eventtype = EventType.objects.get(pk__icontains=namespace.eventtype) event = Event(source="ipdevpoll", target="eventEngine", netboxid=netbox.id, subid=namespace.subid, eventtypeid=eventtype.id, state=get_state(namespace)) if namespace.alerttype: event['alerttype'] = namespace.alerttype event.post()
def handleTrap(trap, config=None): """ handleTrap is run by snmptrapd every time it receives a trap. Return False to signal trap was discarded, True if trap was accepted. """ # Use the trap-object to access trap-variables and do stuff. if trap.genericType in ['LINKUP', 'LINKDOWN']: _logger.debug("This is a linkState trap") # config may be fetched like this variable = config.get('template', 'variable') if doSomething: # Events are posted like this. For more information about the # event-module see "pydoc nav.event" # Create eventobject. e = Event( source=source, target=target, netboxid=netboxid, deviceid=deviceid, subid=subid, eventtypeid=eventtypeid, state=state, ) # These go to eventqvar. e['alerttype'] = 'linkUp' e['module'] = module try: e.post() except nav.errors.GeneralException as why: _logger.error(why) return False # Return True if trap was processed. return True else: # Return False if this trap was not interesting. return False
def test_should_post_simple_event_without_error(self, localhost_using_legacy_db): event = Event( source='ipdevpoll', target='eventEngine', netboxid=localhost_using_legacy_db, eventtypeid='snmpAgentState', state=EventQueue.STATE_START, ) assert event.post()
def post_link_event(down, netboxid, deviceid, interfaceid, modulename, ifname, ifalias): """Posts a linkState event on the event qeueue""" state = 's' if down else 'e' event = Event(source="snmptrapd", target="eventEngine", netboxid=netboxid, deviceid=deviceid, subid=interfaceid, eventtypeid="linkState", state=state) event['alerttype'] = 'linkDown' if down else 'linkUp' event['module'] = modulename or '' event['interface'] = ifname or '' event['ifalias'] = ifalias or '' try: event.post() except nav.errors.GeneralException: _logger.exception("Unexpected exception while posting event") return False else: return True
def post_event(psu_or_fan, status): """ Posts an event on the eventqueue.""" source = "powersupplywatch" target = "eventEngine" eventtypeid = "psuState" if is_psu(psu_or_fan) else "fanState" value = 100 severity = 50 try: device_id = psu_or_fan.device.id except (Device.DoesNotExist, AttributeError): device_id = None event = Event(source=source, target=target, deviceid=device_id, netboxid=psu_or_fan.netbox.id, subid=psu_or_fan.id, eventtypeid=eventtypeid, state='x', value=value, severity=severity) event['sysname'] = psu_or_fan.netbox.sysname if status in (PowerSupplyOrFan.STATE_DOWN, PowerSupplyOrFan.STATE_WARNING): event['alerttype'] = 'psuNotOK' if is_psu(psu_or_fan) else 'fanNotOK' event.state = 's' elif status == PowerSupplyOrFan.STATE_UP: event['alerttype'] = 'psuOK' if is_psu(psu_or_fan) else 'fanOK' event.state = 'e' event['unitname'] = psu_or_fan.name event['state'] = status LOGGER.debug('Posting event: %s', event) try: event.post() except Exception as why: LOGGER.error('post_event: exception = %s', why) return False return True
def post_event(psu_or_fan, status): """ Posts an event on the eventqueue.""" source = "powersupplywatch" target = "eventEngine" eventtypeid = "psuState" if is_psu(psu_or_fan) else "fanState" value = 100 severity = 50 try: device_id = psu_or_fan.device.id except (Device.DoesNotExist, AttributeError): device_id = None event = Event(source=source, target=target, deviceid=device_id, netboxid=psu_or_fan.netbox.id, subid=psu_or_fan.id, eventtypeid=eventtypeid, state='x', value=value, severity=severity) event['sysname'] = psu_or_fan.netbox.sysname if status in (PowerSupplyOrFan.STATE_DOWN, PowerSupplyOrFan.STATE_WARNING): event['alerttype'] = 'psuNotOK' if is_psu(psu_or_fan) else 'fanNotOK' event.state = 's' elif status == PowerSupplyOrFan.STATE_UP: event['alerttype'] = 'psuOK' if is_psu(psu_or_fan) else 'fanOK' event.state = 'e' event['unitname'] = psu_or_fan.name event['state'] = status LOGGER.debug('Posting event: %s', event) try: event.post() except Exception, why: LOGGER.error('post_event: exception = %s', why) return False
def handleTrap(trap, config=None): """ handleTrap is run by snmptrapd every time it receives a trap. Return False to signal trap was discarded, True if trap was accepted. """ # Event variables source = "snmptrapd" target = "eventEngine" eventtypeid = "upsPowerState" # Use the trap-object to access trap-variables and do stuff. for vendor, oids in ONBATTERY.items(): if trap.snmpTrapOID in oids: _logger.debug("Got ups on battery trap (%s)", vendor) # Get time to live try: batterytimeoid, format = BATTERYTIME[vendor] s = Snmp(trap.agent, trap.community) batterytime = s.get(batterytimeoid) except Exception as err: _logger.info("Could not get battery time from %s: %s", trap.agent, err) batterytime = False else: batterytime = format_batterytime(batterytime, format) _logger.debug("batterytime: %s", batterytime) if not trap.netbox: _logger.error( "Could not find netbox in database, no event will be posted", ) return False # Create event-object, fill it and post event. e = Event( source=source, target=target, netboxid=trap.netbox.netboxid, eventtypeid=eventtypeid, state='s', ) e['alerttype'] = "upsOnBatteryPower" e['batterytime'] = batterytime e['sysname'] = trap.netbox.sysname # Post event try: e.post() except Exception as e: _logger.error(e) return False return True for vendor, oids in OFFBATTERY.items(): if trap.snmpTrapOID in oids: _logger.debug("Got ups on utility power trap (%s)", vendor) if not trap.netbox: _logger.error( "Could not find netbox in database, no event will be posted", ) return False # Create event-object, fill it and post event. e = Event( source=source, target=target, netboxid=trap.netbox.netboxid, eventtypeid=eventtypeid, state='e', ) e['sysname'] = trap.netbox.sysname e['alerttype'] = "upsOnUtilityPower" # Post event try: e.post() except Exception as e: _logger.error(e) return False return True return False
def handleTrap(trap, config=None): """ handleTrap is run by snmptrapd every time it receives a trap. Return False to signal trap was discarded, True if trap was accepted. """ db = getConnection('default') # Event variables source = "snmptrapd" target = "eventEngine" eventtypeid = "upsPowerState" # Use the trap-object to access trap-variables and do stuff. for vendor in ONBATTERY.keys(): if trap.snmpTrapOID in ONBATTERY[vendor]: logger.debug("Got ups on battery trap (%s)", vendor) # Get time to live try: batterytimeoid, format = BATTERYTIME[vendor] s = Snmp(trap.agent, trap.community) batterytime = s.get(batterytimeoid) except Exception as err: logger.info("Could not get battery time from %s: %s", trap.agent, err) batterytime = False else: batterytime = format_batterytime(batterytime, format) logger.debug("batterytime: %s", batterytime) # Get netboxid from database c = db.cursor() c.execute("SELECT netboxid, sysname FROM netbox WHERE ip = %s", (trap.agent, )) if not c.rowcount > 0: logger.error("Could not find netbox in database, no event \ will be posted") return False netboxid, sysname = c.fetchone() state = 's' # Create event-object, fill it and post event. e = Event(source=source, target=target, netboxid=netboxid, eventtypeid=eventtypeid, state=state) e['alerttype'] = "upsOnBatteryPower" e['batterytime'] = batterytime e['sysname'] = sysname # Post event try: e.post() except Exception as e: logger.error(e) return False return True for vendor in OFFBATTERY.keys(): if trap.snmpTrapOID in OFFBATTERY[vendor]: logger.debug("Got ups on utility power trap (%s)", vendor) # Get netboxid from database c = db.cursor() c.execute("SELECT netboxid, sysname FROM netbox WHERE ip = %s", (trap.agent, )) if not c.rowcount > 0: logger.error("Could not find netbox in database, no event \ will be posted") return False netboxid, sysname = c.fetchone() state = 'e' # Create event-object, fill it and post event. e = Event(source=source, target=target, netboxid=netboxid, eventtypeid=eventtypeid, state=state) e['sysname'] = sysname e['alerttype'] = "upsOnUtilityPower" # Post event try: e.post() except Exception as e: logger.error(e) return False return True return False
netboxid, sysname = c.fetchone() state = 'e' # Create event-object, fill it and post event. e = Event(source=source, target=target, netboxid=netboxid, eventtypeid=eventtypeid, state=state) e['sysname'] = sysname e['alerttype'] = "upsOnUtilityPower" # Post event try: e.post() except Exception, e: logger.error(e) return False return True return False def format_batterytime(timeunit, format): if isinstance(timeunit, int): seconds = timeunit if 'MINUTES' == format: # UPS-MIB seconds = (timeunit * 60)
logger.error("Could not find netbox in database, no event \ will be posted") return False netboxid, sysname = c.fetchone() state = 'e' # Create event-object, fill it and post event. e = Event(source=source, target=target, netboxid=netboxid, eventtypeid=eventtypeid, state=state) e['sysname'] = sysname e['alerttype'] = "upsOnUtilityPower" # Post event try: e.post() except Exception, e: logger.error(e) return False return True return False def format_batterytime(timeunit, format): if isinstance(timeunit, int): seconds = timeunit if 'MINUTES' == format: # UPS-MIB seconds = (timeunit * 60) if 'TIMETICKS' == format: