def test_get_report_all_incidents(self):
        """
        Reports on all incidents based on Hourly and Daily data
        """
        event1 = factories.EventFactory.create()
        days = 1
        today = date.today()
        yesterday = today - timedelta(days=1)
        for i in range(3):
            test_incident = factories.IncidentFactory.create(event=event1)
            test_incident.lastEventTime = test_incident.firstEventTime
            test_incident.save()
            actions.update_reports(test_incident)
        response = actions.get_report_all_incidents(from_date=yesterday, to_date=today)[0]
        # self.assertIsInstance(response, HourlyData)
        self.assertEqual(response.event_id, event1.id)
        self.assertEqual(response.team_id, event1.team_id)
        self.assertEqual(response.severity, event1.severity)
        self.assertEqual(response.category, event1.category.categoryType)
        self.assertEqual(response.total_incidents, 3)

        #note test with additional params
        response = actions.get_report_all_incidents(from_date=yesterday, to_date=today,
                                                    event_id=event1.id,
                                                    team_id=event1.team.id,
                                                    severity=event1.severity)[0]
        self.assertIsInstance(response, DailyData)
        self.assertEqual(response.event_id, event1.id)
        self.assertEqual(response.team_id, event1.team_id)
        self.assertEqual(response.severity, event1.severity)
        self.assertEqual(response.category, event1.category.categoryType)
        self.assertEqual(response.total_incidents, 3)
 def test_get_incidents_per_event(self):
     """
     Test incidents per event and team
     """
     event1 = factories.EventFactory.create()
     total_incidents = 15
     for i in range(total_incidents):
         test_incident = factories.IncidentFactory.create(event=event1)
         test_incident.lastEventTime = test_incident.firstEventTime
         test_incident.save()
         actions.update_reports(test_incident)
     response = actions.get_incidents_per_event(days=1,
                                                event_id=event1.id,
                                                team_id=event1.team.id)
     self.assertEqual(response[0]['event_id'], event1.id)
     self.assertEqual(response[0]['team_id'], event1.team.id)
     self.assertEqual(response[0]['total_count'], total_incidents)
示例#3
0
def add_incident(e, timestamp):
    """
    Adds an incident sent by cito_engine.poller
    """
    incident_time_diff = 0
    create = False
    logger = logging.getLogger('poller_logger')
    try:
        event_id = int(e['eventid'])
        element = e['element']
        msg = e['message']
    except Exception as excep:
        logger.error('Bad Incident:[%s], reason:[%s] message will be ignored.' % (excep, e))
        return

    # Ignore incident if any field is empty
    if not event_id or not element or not msg:
        logger.error('Bad Incident:[%s], reason:one or more fields are empty' % e)
        return

    # Ignore incident if event does not exist
    try:
        event = Event.objects.get(pk=event_id)
    except Event.DoesNotExist:
        logger.info('Received incident for non existent event_id:%s, incident:%s' % (event_id, e))
        return
    #TODO: SQL sanity checks
    #TODO: Msg len check??

    incident_time = timezone.make_aware(datetime.fromtimestamp(float(timestamp)), timezone.get_default_timezone())
    logger.debug('Incident Time: %s' % incident_time)
    try:
        i = Incident.objects.get(~Q(status__iexact='Cleared'), event=event, element=element)
    except Incident.MultipleObjectsReturned:
        # If there are multiple open incidents for same eventID and element
        # we close them.
        logger.error('Multiple open objects found for %s ' % element)
        close_duplicate_incidents(event, element)
        return
    except Incident.DoesNotExist:
        create = True
        i = Incident.objects.create(event=event, element=element)

    # Update threshold timer and count
    last_incident_time = incident_time

    # Update timer only if record exists
    if create:
        i.firstEventTime = incident_time
        i.lastEventTime = incident_time
    else:
        logger.debug('Incident exists, updating IncidentLastEventTime time: %s' % i.lastEventTime)

        # If SQS sent message on time, we make timediff and
        # update the eventaction timer else ignore
        if i.lastEventTime < last_incident_time:
            incident_time_diff = (last_incident_time - i.lastEventTime).seconds
            i.lastEventTime = last_incident_time
        else:
            logger.warn("Got an incident late")

    # Update counters
    i.increment_count()
    update_eventaction_counters(i, incident_time_diff)

    # Add incident to log
    add_incident_log(i, msg, incident_time)

    # Update reports
    try:
        update_reports(i)
    except Exception as e:
        logger.error("Unable to save reports: %s" % unicode(e))
        logger.error("Incident details: %s" % unicode(i.event.id))

    # Return the newly added incident
    return i