Esempio n. 1
0
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
Esempio n. 2
0
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()
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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()
Esempio n. 6
0
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()
Esempio n. 7
0
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
Esempio n. 8
0
    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()
Esempio n. 9
0
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
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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
Esempio n. 13
0
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
Esempio n. 14
0
            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)
Esempio n. 15
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, 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: