def test_send_notification_correct(self, mock_log, mock_smtp, mock_email,
                                       mock_time):
        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append

        mock_email.EmailNotifier = self._goodSendStub

        mock_time.time.return_value = 42

        notifiers.init(self.statsd)
        notifiers.config()

        notifications = []
        notifications.append(
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))
        notifications.append(
            m_notification.Notification(1, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))
        notifications.append(
            m_notification.Notification(2, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))

        sent, failed, invalid = notifiers.send_notifications(notifications)

        self.assertEqual(len(sent), 3)
        self.assertEqual(failed, [])
        self.assertEqual(invalid, [])

        for n in sent:
            self.assertEqual(n.notification_timestamp, 42)
Exemple #2
0
    def test_statsd(self, mock_im, mock_log, mock_smtp, mock_email):
        self.conf_override(
            group='notification_types',
            enabled=[
                'monasca_notification.plugins.email_notifier:EmailNotifier'
            ])

        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append

        mock_email.EmailNotifier = self._goodSendStub
        mock_im.import_class.return_value = mock_email.EmailNotifier

        notifiers.init(self.statsd)
        notifiers.load_plugins()
        notifiers.config()

        notifications = [
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})),
            m_notification.Notification(1, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})),
            m_notification.Notification(2, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({}))
        ]

        notifiers.send_notifications(notifications)

        self.assertEqual(self.statsd.timer.timer_calls['email_time_start'], 3)
        self.assertEqual(self.statsd.timer.timer_calls['email_time_stop'], 3)
        self.assertEqual(self.statsd.counter.counter, 3)
    def test_statsd(self, mock_log, mock_smtp, mock_email):
        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append

        mock_email.EmailNotifier = self._goodSendStub

        notifiers.init(self.statsd)
        notifiers.config()

        notifications = []
        notifications.append(
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))
        notifications.append(
            m_notification.Notification(1, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))
        notifications.append(
            m_notification.Notification(2, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))

        notifiers.send_notifications(notifications)

        self.assertEqual(self.statsd.timer.timer_calls['email_time_start'], 3)
        self.assertEqual(self.statsd.timer.timer_calls['email_time_stop'], 3)
        self.assertEqual(self.statsd.counter.counter, 3)
    def test_two_valid_notifications(self):
        alarm_dict = {
            "tenantId": "0",
            "alarmDefinitionId": "0",
            "alarmId": "1",
            "alarmName": "test Alarm",
            "oldState": "OK",
            "newState": "ALARM",
            "stateChangeReason": "I am alarming!",
            "timestamp": time.time() * 1000,
            "actionsEnabled": 1,
            "metrics": "cpu_util",
            "severity": "LOW",
            "link": "http://some-place.com",
            "lifecycleState": "OPEN"
        }

        alarm = self._create_raw_alarm(0, 5, alarm_dict)

        sql_response = [[1, 'EMAIL', 'test notification', '*****@*****.**', 0],
                        [2, 'EMAIL', 'test notification2', '*****@*****.**', 0]]
        notifications, partition, offset = self._run_alarm_processor(
            alarm, sql_response)

        test_notification = m_notification.Notification(
            1, 'email', 'test notification', '*****@*****.**', 0, 0, alarm_dict)
        test_notification2 = m_notification.Notification(
            2, 'email', 'test notification2', '*****@*****.**', 0, 0, alarm_dict)

        self.assertEqual(notifications,
                         [test_notification, test_notification2])
        self.assertEqual(partition, 0)
        self.assertEqual(offset, 5)
Exemple #5
0
    def test_send_notification_exception(self, mock_im, mock_log, mock_smtp,
                                         mock_email):
        self.conf_override(
            group='notification_types',
            enabled=[
                'monasca_notification.plugins.email_notifier:EmailNotifier'
            ])

        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append
        mock_log.exception = self.trap.append

        mock_email.EmailNotifier = self._sendExceptionStub
        mock_im.import_class.return_value = mock_email.EmailNotifier

        notifiers.init(self.statsd)
        notifiers.load_plugins()
        notifiers.config()

        notifications = [
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({}))
        ]

        notifiers.send_notifications(notifications)

        self.assertIn("send_notification exception for email", self.trap)
    def notify(self, http_func, mock_requests):
        mock_log = mock.MagicMock()
        mock_log.warn = self.trap.put
        mock_log.error = self.trap.put
        mock_log.exception = self.trap.put

        mock_requests.post = http_func

        pagerduty = pagerduty_notifier.PagerdutyNotifier(mock_log)

        metric = []
        metric_data = {'dimensions': {'hostname': 'foo1', 'service': 'bar1'}}
        metric.append(metric_data)

        alarm_dict = alarm(metric)

        notification = m_notification.Notification(0,
                                                   'pagerduty',
                                                   'pagerduty notification',
                                                   'ABCDEF',
                                                   0,
                                                   0,
                                                   alarm_dict)

        self.trap.put(pagerduty.send_notification(notification))
Exemple #7
0
    def test_send_notification_failure(self, mock_im, mock_log, mock_smtp,
                                       mock_email):
        self.conf_override(
            group='notification_types',
            enabled=[
                'monasca_notification.plugins.email_notifier:EmailNotifier'
            ])

        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append
        mock_log.exception = self.trap.append

        mock_email.EmailNotifier = self._sendFailureStub
        mock_im.import_class.return_value = mock_email.EmailNotifier

        notifiers.init(self.statsd)
        notifiers.load_plugins()
        notifiers.config()

        notifications = [
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({}))
        ]

        sent, failed, invalid = notifiers.send_notifications(notifications)

        self.assertEqual(sent, [])
        self.assertEqual(len(failed), 1)
        self.assertEqual(invalid, [])
def test_equal():
    alarm = {
        'alarmId': 'alarmId',
        'alarmName': 'alarmName',
        'timestamp': 1429029121239,
        'stateChangeReason': 'stateChangeReason',
        'newState': 'newState',
        'tenantId': 'tenantId',
        'metrics': 'cpu_util'
    }
    test_notification = notification.Notification('ntype', 'src_partition',
                                                  'src_offset', 'name',
                                                  'address', 0, alarm)
    test_notification2 = notification.Notification('ntype', 'src_partition',
                                                   'src_offset', 'name',
                                                   'address', 0, alarm)

    assert (test_notification == test_notification2)
def test_equal():
    alarm = {
        'alarmId': 'alarmId',
        'alarmName': 'alarmName',
        'timestamp': 1429029121239,
        'stateChangeReason': 'stateChangeReason',
        'newState': 'newState',
        'severity': 'LOW',
        "link": "some-link",
        "lifecycleState": "OPEN",
        'tenantId': 'tenantId',
        'metrics': 'cpu_util'
    }
    test_notification = notification.Notification(0, 'ntype', 'name',
                                                  'address', 0, 0, alarm)
    test_notification2 = notification.Notification(0, 'ntype', 'name',
                                                   'address', 0, 0, alarm)

    assert (test_notification == test_notification2)
    def _build_notification(self, alarm):
        db_time = self._statsd.get_timer()

        with db_time.time('config_db_time'):
            alarms_actions = self._db_repo.fetch_notifications(alarm)

        return [
            notification.Notification(alarms_action[0], alarms_action[1],
                                      alarms_action[2], alarms_action[3],
                                      alarms_action[4], 0, alarm)
            for alarms_action in alarms_actions
        ]
def test_json_non_zero_period():
    """Test the to_json method to verify it behaves as expected.
    """
    ts = 1429029121239
    alarm = {
        'alarmId': 'alarmId',
        'alarmName': 'alarmName',
        'timestamp': ts,
        'stateChangeReason': 'stateChangeReason',
        'newState': 'newState',
        'severity': 'LOW',
        "link": "some-link",
        "lifecycleState": "OPEN",
        'tenantId': 'tenantId',
        'metrics': 'cpu_util'
    }
    test_notification = notification.Notification('ntype', 'src_partition',
                                                  'src_offset', 'name',
                                                  'address', 60, 0, alarm)

    expected_dict = {
        u'name': u'name',
        u'type': u'ntype',
        u'notification_timestamp': None,
        u'tenant_id': u'tenantId',
        u'alarm_name': u'alarmName',
        u'alarm_id': u'alarmId',
        u'state': u'newState',
        u'severity': u'LOW',
        u'link': u'some-link',
        u'lifecycle_state': u'OPEN',
        u'alarm_timestamp': ts / 1000,
        u'address': u'address',
        u'message': u'stateChangeReason',
        u'period': 60,
        u'periodic_topic': 60,
        u'retry_count': 0,
        u'raw_alarm': {
            u'alarmId': u'alarmId',
            u'alarmName': u'alarmName',
            u'timestamp': ts,
            u'stateChangeReason': u'stateChangeReason',
            u'newState': u'newState',
            u'severity': u'LOW',
            u'link': u'some-link',
            u'lifecycleState': u'OPEN',
            u'tenantId': u'tenantId',
            u'metrics': u'cpu_util'
        }
    }

    # Compare as dicts so ordering is not an issue
    assert json.loads(test_notification.to_json()) == expected_dict
Exemple #12
0
    def test_send_notification_correct(self, mock_im, mock_log, mock_smtp,
                                       mock_email, mock_time):
        self.conf_override(
            group='notification_types',
            enabled=[
                'monasca_notification.plugins.email_notifier:EmailNotifier'
            ])

        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append

        mock_email.EmailNotifier = self._goodSendStub
        mock_time.time.return_value = 42
        mock_im.import_class.return_value = mock_email.EmailNotifier

        notifiers.init(self.statsd)
        notifiers.load_plugins()
        notifiers.config()

        notifications = [
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})),
            m_notification.Notification(1, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})),
            m_notification.Notification(2, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({}))
        ]

        sent, failed, invalid = notifiers.send_notifications(notifications)

        self.assertEqual(len(sent), 3)
        self.assertEqual(failed, [])
        self.assertEqual(invalid, [])

        for n in sent:
            self.assertEqual(n.notification_timestamp, 42)
Exemple #13
0
    def _notify(self, response_list, mock_requests):
        mock_requests.post = mock.Mock(side_effect=response_list)

        metric = []
        metric_data = {'dimensions': {'hostname': 'foo1', 'service': 'bar1'}}
        metric.append(metric_data)

        alarm_dict = alarm(metric)

        notification = m_notification.Notification(0, 'slack',
                                                   'slack notification',
                                                   'http://test.slack:3333', 0,
                                                   0, alarm_dict)

        return mock_requests.post, self._slk.send_notification(notification)
    def test_send_notification_exception(self, mock_log, mock_smtp,
                                         mock_email):
        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append
        mock_log.exception = self.trap.append

        mock_email.EmailNotifier = self._sendExceptionStub

        notifiers.init(self.statsd)
        notifiers.config()

        notifications = []
        notifications.append(
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))

        notifiers.send_notifications(notifications)

        self.assertIn("send_notification exception for email", self.trap)
    def _notify(self, transitions_value, issue_status, address, mock_jira):
        alarm_dict = alarm()

        mock_jira_obj = mock.Mock()
        mock_jira.JIRA.return_value = mock_jira_obj
        mock_jira_issue = mock.Mock()
        if issue_status:
            mock_jira_obj.search_issues.return_value = [mock_jira_issue]
            mock_jira_issue.fields.status.name = issue_status
        else:
            mock_jira_obj.search_issues.return_value = []
        mock_jira_obj.transitions.side_effect = transitions_value

        notification = m_notification.Notification(0, 'jira',
                                                   'jira notification',
                                                   address, 0, 0, alarm_dict)

        return mock_jira, mock_jira_obj, self._jr.send_notification(
            notification)
def test_json():
    """Test the to_json method to verify it behaves as expected.
    """
    ts = 1429029121239
    alarm = {
        'alarmId': 'alarmId',
        'alarmName': 'alarmName',
        'timestamp': ts,
        'stateChangeReason': 'stateChangeReason',
        'newState': 'newState',
        'tenantId': 'tenantId',
        'metrics': 'cpu_util'
    }
    test_notification = notification.Notification('ntype', 'src_partition',
                                                  'src_offset', 'name',
                                                  'address', 0, alarm)

    expected_dict = {
        u'name': u'name',
        u'type': u'ntype',
        u'notification_timestamp': None,
        u'tenant_id': u'tenantId',
        u'alarm_name': u'alarmName',
        u'alarm_id': u'alarmId',
        u'state': u'newState',
        u'alarm_timestamp': ts / 1000,
        u'address': u'address',
        u'message': u'stateChangeReason',
        u'retry_count': 0,
        u'raw_alarm': {
            u'alarmId': u'alarmId',
            u'alarmName': u'alarmName',
            u'timestamp': ts,
            u'stateChangeReason': u'stateChangeReason',
            u'newState': u'newState',
            u'tenantId': u'tenantId',
            u'metrics': u'cpu_util'
        }
    }

    # Compare as dicts so ordering is not an issue
    assert json.loads(test_notification.to_json()) == expected_dict
    def test_send_notification_failure(self, mock_log, mock_smtp, mock_email):
        mock_log.warn = self.trap.append
        mock_log.error = self.trap.append
        mock_log.exception = self.trap.append

        mock_email.EmailNotifier = self._sendFailureStub

        notifiers.init(self.statsd)
        notifiers.config()

        notifications = []
        notifications.append(
            m_notification.Notification(0, 'email', 'email notification',
                                        '*****@*****.**', 0, 0, alarm({})))

        sent, failed, invalid = notifiers.send_notifications(notifications)

        self.assertEqual(sent, [])
        self.assertEqual(len(failed), 1)
        self.assertEqual(invalid, [])
Exemple #18
0
    def email_setup(self, metric):
        alarm_dict = {
            "tenantId": "0",
            "alarmId": "0",
            "alarmName": "test Alarm",
            "oldState": "OK",
            "newState": "ALARM",
            "severity": "LOW",
            "link": "some-link",
            "lifecycleState": "OPEN",
            "stateChangeReason": "I am alarming!",
            "timestamp": time.time(),
            "metrics": metric
        }

        notification = m_notification.Notification(0, 'email',
                                                   'email notification',
                                                   '*****@*****.**', 0, 0,
                                                   alarm_dict)

        self._start_processor([notification])
    def notify(self, http_func, mock_requests):
        mock_log = mock.MagicMock()
        mock_log.warn = self.trap.put
        mock_log.error = self.trap.put
        mock_log.exception = self.trap.put

        mock_requests.post = http_func

        webhook = webhook_notifier.WebhookNotifier(mock_log)

        metric = []
        metric_data = {'dimensions': {'hostname': 'foo1', 'service': 'bar1'}}
        metric.append(metric_data)

        alarm_dict = alarm(metric)

        notification = m_notification.Notification(0, 'webhook',
                                                   'webhook notification',
                                                   'http://mock:3333/', 0, 0,
                                                   alarm_dict)

        self.trap.put(webhook.send_notification(notification))
Exemple #20
0
    def test_invalid_notification(self):
        """Verify invalid notification type is rejected.
        """
        alarm_dict = {
            "tenantId": "0",
            "alarmId": "0",
            "alarmName": "test Alarm",
            "oldState": "OK",
            "newState": "ALARM",
            "stateChangeReason": "I am alarming!",
            "timestamp": time.time(),
            "metrics": "cpu_util",
            "severity": "LOW",
            "link": "http://some-place.com",
            "lifecycleState": "OPEN"
        }
        invalid_notification = m_notification.Notification(
            0, 'invalid', 'test notification', '*****@*****.**', 0, 0, alarm_dict)

        self._start_processor([invalid_notification])

        self.assertIn('attempting to send unconfigured notification: invalid',
                      self.trap)
    def notify(self, http_func, mock_requests):
        mock_log = mock.MagicMock()
        mock_log.warn = self.trap.put
        mock_log.error = self.trap.put
        mock_log.exception = self.trap.put

        mock_requests.post = http_func

        hipchat = hipchat_notifier.HipChatNotifier(mock_log)

        hipchat.config()

        metric = []
        metric_data = {'dimensions': {'hostname': 'foo1', 'service': 'bar1'}}
        metric.append(metric_data)

        alarm_dict = alarm(metric)

        notification = m_notification.Notification(0, 'hipchat',
                                                   'hipchat notification',
                                                   'http://mock:3333/', 0, 0,
                                                   alarm_dict)

        self.trap.put(hipchat.send_notification(notification))