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)
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