예제 #1
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.schema = MessageSchema()
     if 'TEMPLATE_PATH' in app.config:
         self.sender = AlarmSender(app.config['TEMPLATE_PATH'])
     else:
         self.sender = AlarmSender()
예제 #2
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.schema = MessageSchema()
     if 'TEMPLATE_PATH' in app.config:
         self.sender = AlarmSender(app.config['TEMPLATE_PATH'],
                                   app.config['GROUP_ALERTS'])
     else:
         self.sender = AlarmSender(group_alerts=app.config['GROUP_ALERTS'])
예제 #3
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.schema = MessageSchema(
         exclude_fields=app.config['LABELS_EXCLUDED'],
         exclude_annotations=app.config['ANNOTATIONS_EXCLUDED'])
     self.sender = AlarmSender(
         template_path=app.config.get('TEMPLATE_PATH'),
         group_alerts_by=app.config['GROUP_ALERTS_BY'],
         teams_client_config=app.config.get('TEAMS_CLIENT_CONFIG'))
예제 #4
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.schema = MessageSchema(
         exclude_fields=app.config['LABELS_EXCLUDED'])
     if app.config['TEMPLATE_PATH']:
         self.sender = AlarmSender(app.config['TEMPLATE_PATH'],
                                   app.config['GROUP_ALERTS_BY'])
     else:
         self.sender = AlarmSender(
             group_alerts_by=app.config['GROUP_ALERTS_BY'])
예제 #5
0
 def test_json_without_instance_field(self):
     with open(self.TEST_CONFIG_FILES_PATH +
               'without_instance_field.json') as json_data:
         json_received = json.load(json_data)
         alerts = MessageSchema().load(json_received).data
         alarm = map_prom_alerts_to_teams_alarms(alerts)[0]
         self.assertEqual('unknown', str(alarm['instance']))
예제 #6
0
    def test_with_too_long_payload(self):
        with open(
                os.path.join(self.TEST_CONFIG_FILES_PATH,
                             'all_ok_multiple.json')) as json_data:
            with open(
                    os.path.join(
                        self.TEST_CONFIG_FILES_PATH,
                        'teams_alarm_all_ok_splited.json')) as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = '[' + ','.join([
                    a.replace("\n\n\n", " ")
                    for a in AlarmSender(group_alerts_by='name',
                                         teams_client_config={
                                             'MAX_PAYLOAD': 800
                                         })._create_alarms(alerts)
                ]) + ']'
                json_rendered = json.loads(rendered_data)

                diff = DeepDiff(json_rendered,
                                json_expected,
                                ignore_order=True)
                self.assertTrue(not diff)
예제 #7
0
 def test_json_without_optional_field(self):
     with open(self.TEST_CONFIG_FILES_PATH +
               'without_optional_field.json') as json_data:
         json_received = json.load(json_data)
         alerts = MessageSchema().load(json_received)
         alarm = map_prom_alerts_to_teams_alarms(alerts)[0]
         self.assertIn("'description': 'unknown'", str(alarm))
예제 #8
0
 def test_json_with_all_fields(self):
     with open(os.path.join(self.TEST_CONFIG_FILES_PATH,
                            'all_ok.json')) as json_data:
         json_received = json.load(json_data)
         alerts = MessageSchema().load(json_received)
         alarm = map_prom_alerts_to_teams_alarms(alerts)[0]
         self.assertNotIn('unknown', str(alarm))
예제 #9
0
 def test_json_without_mandatory_field(self):
     with open(
             os.path.join(self.TEST_CONFIG_FILES_PATH,
                          'without_mandatory_field.json')) as json_data:
         json_received = json.load(json_data)
         alerts = MessageSchema().load(json_received)
         alert = map_prom_alerts_to_teams_alerts(alerts)[0]
         self.assertIn('unknown', str(alert))
예제 #10
0
    def test_grouping_multiple_alerts(self):
        with open(self.TEST_CONFIG_FILES_PATH + 'all_ok_multiple.json') as json_data:
            with open(self.TEST_CONFIG_FILES_PATH + 'teams_alarm_all_ok_multiple.json') as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = AlarmSender(group_alerts_by='name')._create_alarms(alerts)[0].replace("\n\n\n", " ")
                json_rendered = json.loads(rendered_data)

                self.assertDictEqual(json_rendered, json_expected)
예제 #11
0
    def test_compose_all(self):
        with open(self.TEST_CONFIG_FILES_PATH + 'all_ok.json') as json_data:
            with open(self.TEST_CONFIG_FILES_PATH + 'teams_alarm_all_ok.json') as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = AlarmSender()._create_alarms(alerts)[0]
                json_rendered = json.loads(rendered_data)

                self.assertDictEqual(json_rendered, json_expected)
예제 #12
0
    def test_with_common_items(self):
        self.maxDiff = None
        with open(self.TEST_CONFIG_FILES_PATH + 'with_common_items.json') as json_data:
            with open(self.TEST_CONFIG_FILES_PATH + 'teams_alarm_with_common_items.json') as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = AlarmSender()._create_alarms(alerts)[0]
                json_rendered = json.loads(rendered_data)

                self.assertDictEqual(json_rendered, json_expected)
예제 #13
0
    def test_with_extra_labels(self):
        excluded_labels = ('pod_name', )
        with open(self.TEST_CONFIG_FILES_PATH +
                  'all_ok_extra_labels.json') as json_data:
            with open(self.TEST_CONFIG_FILES_PATH +
                      'teams_alarm_all_ok_extra_labels.json') as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema(
                    exclude_fields=excluded_labels).load(json_received)
                rendered_data = AlarmSender()._create_alarms(alerts)[0]
                json_rendered = json.loads(rendered_data)

                self.assertDictEqual(json_rendered, json_expected)
예제 #14
0
class AlertReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema()
        if 'TEMPLATE_PATH' in app.config:
            self.sender = AlarmSender(app.config['TEMPLATE_PATH'],
                                      app.config['GROUP_ALERTS'])
        else:
            self.sender = AlarmSender(group_alerts=app.config['GROUP_ALERTS'])

    @api_v2.expect(message)
    def post(self, connector):
        alerts = self.schema.load(request.get_json()).data
        self.sender.send_alarms(alerts, app.config['MICROSOFT_TEAMS'])
        return 'OK', 201
예제 #15
0
    def test_without_fingerprint(self):
        with open(
                os.path.join(self.TEST_CONFIG_FILES_PATH,
                             'without_fingerprint.json')) as json_data:
            with open(
                    os.path.join(
                        self.TEST_CONFIG_FILES_PATH,
                        'teams_without_fingerprint.json')) as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = AlertSender()._create_alerts(alerts)[0]
                json_rendered = json.loads(rendered_data)

                self.assertEqual(json_rendered.keys(), json_expected.keys())
예제 #16
0
class AlertReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema(
            exclude_fields=app.config['LABELS_EXCLUDED'],
            exclude_annotations=app.config['ANNOTATIONS_EXCLUDED'])
        self.sender = AlarmSender(
            template_path=app.config.get('TEMPLATE_PATH'),
            group_alerts_by=app.config['GROUP_ALERTS_BY'],
            teams_client_config=app.config.get('TEAMS_CLIENT_CONFIG'))

    @api_v2.expect(message)
    def post(self, connector):
        alerts = self.schema.load(request.get_json())
        self.sender.send_alarms(alerts,
                                app.config['MICROSOFT_TEAMS'][connector])
        return 'OK', 201
예제 #17
0
    def test_compose_all(self):
        with open(os.path.join(self.TEST_CONFIG_FILES_PATH,
                               'all_ok.json')) as json_data:
            with open(
                    os.path.join(self.TEST_CONFIG_FILES_PATH,
                                 'teams_alarm_all_ok.json')) as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = AlarmSender()._create_alarms(alerts)[0]
                json_rendered = json.loads(rendered_data)

                diff = DeepDiff(json_rendered,
                                json_expected,
                                ignore_order=True)
                self.assertTrue(not diff)
예제 #18
0
    def test_with_common_items(self):
        self.maxDiff = None
        with open(
                os.path.join(self.TEST_CONFIG_FILES_PATH,
                             'with_common_items.json')) as json_data:
            with open(
                    os.path.join(self.TEST_CONFIG_FILES_PATH,
                                 'teams_alert_with_common_items.json')
            ) as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = AlertSender()._create_alerts(alerts)[0]
                json_rendered = json.loads(rendered_data)

                self.assertEqual(json_rendered.keys(), json_expected.keys())
예제 #19
0
class AlertReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema()
        self.sender = AlarmSender(
            template_path=app.config.get('TEMPLATE_PATH'),
            teams_client_config=app.config.get('TEAMS_CLIENT_CONFIG'))

    @api_v1.expect(message)
    def post(self):
        _show_deprecated_warning(
            "Call to deprecated function. It will be removed in future versions. "
            "Please view the README file.")
        alerts = self.schema.load(request.get_json())
        self.sender.send_alarms(alerts,
                                app.config['MICROSOFT_TEAMS']['Connector'])
        return 'OK', 201
예제 #20
0
class AlertReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema()
        if app.config['TEMPLATE_PATH']:
            self.sender = AlarmSender(app.config['TEMPLATE_PATH'],
                                      app.config['GROUP_ALERTS_BY'])
        else:
            self.sender = AlarmSender(
                group_alerts_by=app.config['GROUP_ALERTS_BY'])

    @api_v2.expect(message)
    def post(self, connector):
        log.debug('JSON received is:\n%s', str(request.get_json()))
        alerts = self.schema.load(request.get_json())
        self.sender.send_alarms(alerts,
                                app.config['MICROSOFT_TEAMS'][connector])
        return 'OK', 201
예제 #21
0
class AlertReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema()
        if 'TEMPLATE_PATH' in app.config:
            self.sender = AlarmSender(app.config['TEMPLATE_PATH'])
        else:
            self.sender = AlarmSender()

    @api_v1.expect(message)
    def post(self):
        _show_deprecated_warning(
            "Call to deprecated function. It will be removed in future versions. "
            "Please view the README file.")
        alerts = self.schema.load(request.get_json()).data
        self.sender.send_alarms(alerts,
                                app.config['MICROSOFT_TEAMS']['Connector'])
        return 'OK', 201
예제 #22
0
class AlertLabelReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema(
            exclude_fields=app.config['LABELS_EXCLUDED'],
            exclude_annotations=app.config['ANNOTATIONS_EXCLUDED'])
        if app.config['TEMPLATE_PATH']:
            self.sender = AlarmSender(app.config['TEMPLATE_PATH'],
                                      app.config['GROUP_ALERTS_BY'])
        else:
            self.sender = AlarmSender(
                group_alerts_by=app.config['GROUP_ALERTS_BY'])

    @api_v2.expect(message)
    def post(self):
        alerts = self.schema.load(request.get_json())
        self.sender.send_alerts_by_label(alerts)
        return 'OK', 201
예제 #23
0
class AlertReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema(
            exclude_fields=app.config['LABELS_EXCLUDED'])
        if app.config['TEMPLATE_PATH']:
            self.sender = AlarmSender(app.config['TEMPLATE_PATH'],
                                      app.config['GROUP_ALERTS_BY'])
        else:
            self.sender = AlarmSender(
                group_alerts_by=app.config['GROUP_ALERTS_BY'])

    @api_v2.expect(message)
    def post(self, connector):
        alerts = self.schema.load(request.get_json())
        self.sender.send_alarms(alerts,
                                app.config['MICROSOFT_TEAMS'][connector])
        return 'OK', 201
예제 #24
0
    def test_grouping_multiple_alerts(self):
        with open(
                os.path.join(self.TEST_CONFIG_FILES_PATH,
                             'all_ok_multiple.json')) as json_data:
            with open(
                    os.path.join(
                        self.TEST_CONFIG_FILES_PATH,
                        'teams_alarm_all_ok_multiple.json')) as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema().load(json_received)
                rendered_data = AlarmSender(
                    group_alerts_by='name')._create_alarms(alerts)[0].replace(
                        "\n\n\n", " ")
                json_rendered = json.loads(rendered_data)

                diff = DeepDiff(json_rendered,
                                json_expected,
                                ignore_order=True)
                self.assertTrue(not diff)
예제 #25
0
class AlertReceiver(Resource):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.schema = MessageSchema()
        if 'TEMPLATE_PATH' in app.config:
            self.sender = AlarmSender(app.config['TEMPLATE_PATH'])
        else:
            self.sender = AlarmSender()

    @api_v2.expect(message)
    def post(self, connector):
        alerts = self.schema.load(request.get_json()).data
        if 'Critical' in app.config['MICROSOFT_TEAMS']:
            critical_alerts = [
                alert for alert in alerts if alert.severity is 'critical'
            ]
            self.sender.send_alarms(critical_alerts,
                                    app.config['MICROSOFT_TEAMS']['Critical'])
        self.sender.send_alarms(alerts,
                                app.config['MICROSOFT_TEAMS'][connector])
        return 'OK', 201
예제 #26
0
    def test_with_extra_annotations(self):
        excluded_annotations = ('message', )
        with open(
                os.path.join(self.TEST_CONFIG_FILES_PATH,
                             'all_ok_extra_annotations.json')) as json_data:
            with open(
                    os.path.join(self.TEST_CONFIG_FILES_PATH,
                                 'teams_alarm_all_ok_extra_annotations.json')
            ) as expected_data:
                json_received = json.load(json_data)
                json_expected = json.load(expected_data)

                alerts = MessageSchema(exclude_annotations=excluded_annotations
                                       ).load(json_received)
                rendered_data = AlarmSender()._create_alarms(alerts)[0]
                json_rendered = json.loads(rendered_data)

                diff = DeepDiff(json_rendered,
                                json_expected,
                                ignore_order=True)
                self.assertTrue(not diff)
예제 #27
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.schema = MessageSchema()
     self.sender = AlarmSender(
         template_path=app.config.get('TEMPLATE_PATH'),
         teams_client_config=app.config.get('TEAMS_CLIENT_CONFIG'))
예제 #28
0
 def test_fingerprint(self):
     with open(self.TEST_CONFIG_FILES_PATH + 'all_ok.json') as json_data:
         json_received = json.load(json_data)
         alerts = MessageSchema().load(json_received)
         alarm = map_prom_alerts_to_teams_alarms(alerts)[0]
         self.assertEqual('dd19ae3d4e06ac55', str(alarm['fingerprint']))