Exemple #1
0
    def run(self):
        sender = self.destination.get_sender()

        if self.is_error:
            level = AlertLevels.ERROR
            message_context = Source.error_context(self.event.context)
        else:
            level = None    # set via options or Sender
            message_context = Source.message_context(self.event.context,
                                                     self.event.trigger_result)

        message = self.destination.get_message(message_context)
        options = self.destination.options
        if options:
            level = AlertLevels.find(options.get('level', None))

        alert = Alert(event=self.event,
                      level=level or sender.level,
                      sender=self.destination.sender,
                      message=message,
                      options=options)
        # need to save to get datetime assigned
        alert.save()
        logger.debug('Sending Alert %s via Destination %s' %
                     (alert, self.destination))
        try:
            sender.send(alert)
        except:
            logger.exception("An error occurred while sending alert %s"
                             " via Destination %s" % (alert, self.destination))
Exemple #2
0
    def setup_snmp_trap(self, alert):
        oid = self.eoid  # cascade enterprise Object ID
        trapid = self.trapid  # base string for trap indicators
        self.trapname = '.'.join([oid, trapid])

        severity = self.severity
        description = alert.message or self.default_description
        alert_level = AlertLevels.get_integer(self.level)
        now = timeutils.datetime_to_seconds(alert.timestamp)

        self.binds = (
            ('1.3.6.1.2.1.1.3.0', rfc1902.Integer(0)),  # Uptime
            ('1.3.6.1.4.1.7054.71.2.1.0',
             rfc1902.Integer(severity)),  # Severity
            ('1.3.6.1.4.1.7054.71.2.3.0', rfc1902.OctetString(description)),
            ('1.3.6.1.4.1.7054.71.2.4.0', rfc1902.Integer(0)),  # Event ID
            ('1.3.6.1.4.1.7054.71.2.5.0', rfc1902.OctetString(self.trap_url)),
            ('1.3.6.1.4.1.7054.71.2.7.0',
             rfc1902.Integer(alert_level)),  # Alert Level
            ('1.3.6.1.4.1.7054.71.2.8.0', rfc1902.Integer(now)),  # Start Time
            ('1.3.6.1.4.1.7054.71.2.16.0', rfc1902.Integer(0)),  # Source Count
            ('1.3.6.1.4.1.7054.71.2.18.0',
             rfc1902.Integer(0)),  # Destination Count
            ('1.3.6.1.4.1.7054.71.2.20.0',
             rfc1902.Integer(0)),  # Protocol Count
            ('1.3.6.1.4.1.7054.71.2.22.0', rfc1902.Integer(0)),  # Port Count
        )
Exemple #3
0
class Alert(models.Model):
    """Individual notification sent by a Sender for a specific Event."""
    timestamp = models.DateTimeField(auto_now=True)
    event = models.ForeignKey('Event', related_name='alerts')
    level = models.CharField(max_length=50, choices=AlertLevels.get_choices())
    sender = models.CharField(max_length=100)
    options = PickledObjectField(blank=True, null=True)
    message = models.TextField()

    def __unicode__(self):
        msg = self.message
        if len(msg) > 20:
            msg = '%s...' % msg[:20]
        return '<Alert %s (%s/%s)>' % (self.id or 'X',
                                       self.sender, msg)

    def __repr__(self):
        return unicode(self)

    def get_details(self):
        """Return details in a string"""
        msg = []
        fmt = '{0:15}: {1}'
        msg.append(fmt.format('ID', self.id))
        msg.append(fmt.format('EventID', self.event.eventid))
        msg.append(fmt.format('Timestamp', self.timestamp))
        msg.append(fmt.format('Level', self.level))
        msg.append(fmt.format('Sender', self.sender))
        msg.append(fmt.format('Dest options', self.options))
        msg.append(fmt.format('Message', self.message))
        return '\n'.join(msg)
    def run(self):
        sender = self.destination.get_sender()

        if self.is_error:
            level = AlertLevels.ERROR
            message_context = Source.error_context(self.event.context)
        else:
            level = None    # set via options or Sender
            message_context = Source.message_context(self.event.context,
                                                     self.event.trigger_result)

        message = self.destination.get_message(message_context)
        options = self.destination.options
        if options:
            level = AlertLevels.find(options.get('level', None))

        alert = Alert(event=self.event,
                      level=level or sender.level,
                      sender=self.destination.sender,
                      message=message,
                      options=options)
        # need to save to get datetime assigned
        alert.save()
        logger.debug('Sending Alert %s via Destination %s' %
                     (alert, self.destination))
        try:
            sender.send(alert)
        except:
            logger.exception("An error occurred while sending alert %s"
                             " via Destination %s" % (alert, self.destination))
    def setup_snmp_trap(self, alert):
        oid = self.eoid             # cascade enterprise Object ID
        trapid = self.trapid        # base string for trap indicators
        self.trapname = '.'.join([oid, trapid])

        severity = self.severity
        description = alert.message or self.default_description
        alert_level = AlertLevels.get_integer(self.level)
        now = timeutils.datetime_to_seconds(alert.timestamp)

        self.binds = (
            ('1.3.6.1.2.1.1.3.0', rfc1902.Integer(0)),                       # Uptime
            ('1.3.6.1.4.1.7054.71.2.1.0', rfc1902.Integer(severity)),        # Severity
            ('1.3.6.1.4.1.7054.71.2.3.0', rfc1902.OctetString(description)),
            ('1.3.6.1.4.1.7054.71.2.4.0', rfc1902.Integer(0)),               # Event ID
            ('1.3.6.1.4.1.7054.71.2.5.0', rfc1902.OctetString(self.trap_url)),
            ('1.3.6.1.4.1.7054.71.2.7.0', rfc1902.Integer(alert_level)),     # Alert Level
            ('1.3.6.1.4.1.7054.71.2.8.0', rfc1902.Integer(now)),             # Start Time
            ('1.3.6.1.4.1.7054.71.2.16.0', rfc1902.Integer(0)),              # Source Count
            ('1.3.6.1.4.1.7054.71.2.18.0', rfc1902.Integer(0)),              # Destination Count
            ('1.3.6.1.4.1.7054.71.2.20.0', rfc1902.Integer(0)),              # Protocol Count
            ('1.3.6.1.4.1.7054.71.2.22.0', rfc1902.Integer(0)),              # Port Count
        )
    def run(self):
        sender = self.destination.get_sender()
        logger.debug('XXX here - event/sender: %s/%s' % (self.event, sender))

        if self.is_error:
            level = AlertLevels.ERROR
            message_context = Source.error_context(self.event.context)
        else:
            level = None    # set via options or Sender
            message_context = Source.message_context(self.event.context,
                                                     self.event.trigger_result)

        message = self.destination.get_message(message_context)
        options = self.destination.options
        logger.debug('XXX here - message/options: %s/%s' % (message, options))
        if options:
            level = AlertLevels.find(options.get('level', None))

        try:
            alert = Alert(event=self.event,
                          level=level or sender.level,
                          sender=self.destination.sender,
                          message=message,
                          options=options)
            # need to save to get datetime assigned
            alert.save()
            logger.debug('Sending Alert %s via Destination %s' %
                         (alert, self.destination))
        except Exception as e:
            logger.error('Error saving Alert: %s' % e)

        try:
            # even if we had an error saving, may be able to still send alert
            sender.send(alert)
        except:
            logger.exception("An error occurred while sending alert %s"
                             " via Destination %s" % (alert, self.destination))
Exemple #7
0
    def run(self):
        sender = self.destination.get_sender()
        logger.debug('XXX here - event/sender: %s/%s' % (self.event, sender))

        if self.is_error:
            level = AlertLevels.ERROR
            message_context = Source.error_context(self.event.context)
        else:
            level = None  # set via options or Sender
            message_context = Source.message_context(self.event.context,
                                                     self.event.trigger_result)

        message = self.destination.get_message(message_context)
        options = self.destination.options
        logger.debug('XXX here - message/options: %s/%s' % (message, options))
        if options:
            level = AlertLevels.find(options.get('level', None))

        try:
            alert = Alert(event=self.event,
                          level=level or sender.level,
                          sender=self.destination.sender,
                          message=message,
                          options=options)
            # need to save to get datetime assigned
            alert.save()
            logger.debug('Sending Alert %s via Destination %s' %
                         (alert, self.destination))
        except Exception as e:
            logger.error('Error saving Alert: %s' % e)

        try:
            # even if we had an error saving, may be able to still send alert
            sender.send(alert)
        except:
            logger.exception("An error occurred while sending alert %s"
                             " via Destination %s" % (alert, self.destination))