예제 #1
0
파일: models_test.py 프로젝트: gisce/AMON
    def test_sort_and_filter(self):
        self._cleanup()

        server_model.collection.insert({"name": "check_sort_and_filter_default"})
        server = server_model.collection.find_one()

        for i in range(0, 10):
            data = [{
                'command': "check_sort_and_filter_default.rb",
                'exit_code': 1,
                'output': 'CheckDisk WARNING: / 83.35% bytes usage (29 GiB/35 GiB)'
            }]
            health_checks_results_model.save(data=data, server=server)

        result = health_checks_model.sort_and_filter()

        assert len(result.all_checks) == 1
        assert result.all_checks[0]['last_check']
        assert result.all_checks[0]['last_check']['status'] == 'warning'

        self._cleanup()
        
    
        for i in range(0, 10):
            server_id = server_model.collection.insert({"name": "{0}_server_check_sort_and_filter_by_host".format(i)})
            server = server_model.get_by_id(server_id)

            # exit_codes = {0: "ok", 1: "warning", 2: "critical"}
            exit_code = 2 if i <= 5 else 2
            exit_code = 1 if i > 5 else exit_code

            for j in range(0, 100):
                data = [{
                    'command': '{0}_check_sort_and_filter_by_host.rb'.format(i),
                    'exit_code': exit_code,
                    'output': 'CheckBanner OK: port 22 open'
                }]
            
                health_checks_results_model.save(data=data, server=server)


        result = health_checks_model.sort_and_filter(sort_by='status')
        assert len(result.sorted_result) == 10
        for i in range(0, 10):
            status = 'critical' if i <= 5 else 'ok'
            status = 'warning' if i > 5 else status
            assert result.sorted_result[i]['last_check']['status'] == status


        result = health_checks_model.sort_and_filter(sort_by='host')
        assert len(result.sorted_result) == 10
        for i in range(0, 10):
            assert result.sorted_result[i]['server']['name'] == "{0}_server_check_sort_and_filter_by_host".format(i)


        result = health_checks_model.sort_and_filter(sort_by='host', filter_by='critical')
        assert len(result.sorted_result) == 6

        result = health_checks_model.sort_and_filter(sort_by='host', filter_by='warning')
        assert len(result.sorted_result) == 4
예제 #2
0
파일: models_test.py 프로젝트: gisce/AMON
    def save_test(self):
        self._cleanup()

        data = [{u'output': u'CheckDisk WARNING: / 83.35% bytes usage (29 GiB/35 GiB)\n', u'command': u'check-disk-usage.rb -w 80 -c 90', u'exit_code': 1}]

        formated_data = health_checks_results_model.save(data=data, server=self.server)
        for d in formated_data:
            assert set(d.keys()) == set(['output', 'command', 'exit_code', 'health_checks_data_id'])

        assert health_checks_results_model.collection.find().count() == 1
        assert health_checks_model.collection.find().count() == 1

        result =  health_checks_model.collection.find_one()

        assert result['command'] == "check-disk-usage.rb"
        assert result['params'] == "-w 80 -c 90"
        assert result['unique_id'] == hashlib.md5("check-disk-usage.rb -w 80 -c 90".encode()).hexdigest()
        assert result['last_check']['status'] == 'warning'


        self._cleanup()

        for i in range(50):
            health_checks_results_model.save(data=data, server=self.server)


        assert health_checks_results_model.collection.find().count() == 50
        assert health_checks_model.collection.find().count() == 1

        result = health_checks_model.collection.find_one()
예제 #3
0
    def test_health_check_emails(self):
        self._cleanup()

        health_check_alert = {
            "rule_type": "health_check",
            "server": self.server_id,
            "status": "critical",
            "command": "check-http.rb",
            "period": 0,
        }

        alert_id = alerts_model.collection.insert(health_check_alert)


        data = [{
            u'command': u'check-http.rb', 
            u'name': u'', 
            u'exit_code': 2, 
        }]
        formated_check_data = health_checks_results_model.save(data=data, server=self.server)
        health_check_alerter.check(data=formated_check_data, server=self.server)

        unsent_alerts = alerts_history_model.get_unsent(server_id=self.server_id)
        eq_(unsent_alerts['data'].count(), 1)


        notifications = generate_notifications()
        for n in notifications:
            send_notification_email(notification=n, emails=self.emails)

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, 'Server: test - check-http.rb status is CRITICAL')
        self.assertEqual(mail.outbox[0].to, ['*****@*****.**'])

        self._cleanup()
예제 #4
0
    def test_health_check_emails(self):
        self._cleanup()

        health_check_alert = {
            "rule_type": "health_check",
            "server": self.server_id,
            "status": "critical",
            "command": "check-http.rb",
            "period": 0,
        }

        alert_id = alerts_model.collection.insert(health_check_alert)


        data = [{
            u'command': u'check-http.rb', 
            u'name': u'', 
            u'exit_code': 2, 
        }]
        formated_check_data = health_checks_results_model.save(data=data, server=self.server)
        health_check_alerter.check(data=formated_check_data, server=self.server)

        unsent_alerts = alerts_history_model.get_unsent(server_id=self.server_id)
        eq_(unsent_alerts['data'].count(), 1)


        notifications = generate_notifications()
        for n in notifications:
            send_notification_email(notification=n, emails=self.emails)

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, 'Server: test - check-http.rb status is CRITICAL')
        self.assertEqual(mail.outbox[0].to, ['*****@*****.**'])

        self._cleanup()
예제 #5
0
파일: models_test.py 프로젝트: urandu/amon
    def save_test(self):
        self._cleanup()

        data = [{
            u'output':
            u'CheckDisk WARNING: / 83.35% bytes usage (29 GiB/35 GiB)\n',
            u'command': u'check-disk-usage.rb -w 80 -c 90',
            u'exit_code': 1
        }]

        formated_data = health_checks_results_model.save(data=data,
                                                         server=self.server)
        for d in formated_data:
            assert set(d.keys()) == set(
                ['output', 'command', 'exit_code', 'health_checks_data_id'])

        assert health_checks_results_model.collection.find().count() == 1
        assert health_checks_model.collection.find().count() == 1

        result = health_checks_model.collection.find_one()

        assert result['command'] == "check-disk-usage.rb"
        assert result['params'] == "-w 80 -c 90"
        assert result['unique_id'] == hashlib.md5(
            "check-disk-usage.rb -w 80 -c 90".encode()).hexdigest()
        assert result['last_check']['status'] == 'warning'

        self._cleanup()

        for i in range(50):
            health_checks_results_model.save(data=data, server=self.server)

        assert health_checks_results_model.collection.find().count() == 50
        assert health_checks_model.collection.find().count() == 1

        result = health_checks_model.collection.find_one()
예제 #6
0
파일: models.py 프로젝트: HomemBravo/amon
    def save_data_to_backend(self, data=None, server=None):
        if server is None:
            return

        time_now = unix_utc_now()
        date_now = datetime.utcnow()

        expires_days = server.get('keep_data', 30)
        if settings.KEEP_DATA is not None:
            expires_days = settings.KEEP_DATA

        expires_at = date_now + timedelta(days=expires_days)

        system_data = data.get('system')
        process_data = data.get('processes')
        plugin_data = data.get('plugins')
        checks_data = data.get('checks')
        telegraf_data = data.get('series')

        if telegraf_data:
            formated_data = plugin_model.format_telegraf_to_amon(data=telegraf_data)

            if len(formated_data) > 0:
                for name, d in formated_data.items():
                    plugin = plugin_model.save_data(
                        server=server,
                        name=name,
                        data=d,
                        time=time_now,
                        expires_at=expires_at
                    )

        if system_data:
            system_model.save_data(
                server=server,
                data=system_data.copy(),
                time=time_now,
                expires_at=expires_at
            )

            server_alerter.check(data=system_data, server=server)

        if process_data:
            data = process_model.save_data(
                server=server,
                data=process_data,
                time=time_now,
                expires_at=expires_at
            )

            process_alerter.check(data=data, server=server)
            uptime_alerter.check(data=data, server=server)

        if plugin_data:
            formated_data = plugin_model.flatten_plugin_data(data=plugin_data)

            for name, data in formated_data.items():
                plugin = plugin_model.save_data(
                    server=server,
                    name=name,
                    data=data,
                    time=time_now,
                    expires_at=expires_at
                )

                plugin_alerter.check(data=data, plugin=plugin, server=server)

        if checks_data:
            formated_check_data = health_checks_results_model.save(data=checks_data, server=server)
            health_check_alerter.check(data=formated_check_data, server=server)
예제 #7
0
파일: models_test.py 프로젝트: urandu/amon
    def test_sort_and_filter(self):
        self._cleanup()

        server_model.collection.insert(
            {"name": "check_sort_and_filter_default"})
        server = server_model.collection.find_one()

        for i in range(0, 10):
            data = [{
                'command':
                "check_sort_and_filter_default.rb",
                'exit_code':
                1,
                'output':
                'CheckDisk WARNING: / 83.35% bytes usage (29 GiB/35 GiB)'
            }]
            health_checks_results_model.save(data=data, server=server)

        result = health_checks_model.sort_and_filter()

        assert len(result.all_checks) == 1
        assert result.all_checks[0]['last_check']
        assert result.all_checks[0]['last_check']['status'] == 'warning'

        self._cleanup()

        for i in range(0, 10):
            server_id = server_model.collection.insert(
                {"name": "{0}_server_check_sort_and_filter_by_host".format(i)})
            server = server_model.get_by_id(server_id)

            # exit_codes = {0: "ok", 1: "warning", 2: "critical"}
            exit_code = 2 if i <= 5 else 2
            exit_code = 1 if i > 5 else exit_code

            for j in range(0, 100):
                data = [{
                    'command':
                    '{0}_check_sort_and_filter_by_host.rb'.format(i),
                    'exit_code':
                    exit_code,
                    'output':
                    'CheckBanner OK: port 22 open'
                }]

                health_checks_results_model.save(data=data, server=server)

        result = health_checks_model.sort_and_filter(sort_by='status')
        assert len(result.sorted_result) == 10
        for i in range(0, 10):
            status = 'critical' if i <= 5 else 'ok'
            status = 'warning' if i > 5 else status
            assert result.sorted_result[i]['last_check']['status'] == status

        result = health_checks_model.sort_and_filter(sort_by='host')
        assert len(result.sorted_result) == 10
        for i in range(0, 10):
            assert result.sorted_result[i]['server'][
                'name'] == "{0}_server_check_sort_and_filter_by_host".format(i)

        result = health_checks_model.sort_and_filter(sort_by='host',
                                                     filter_by='critical')
        assert len(result.sorted_result) == 6

        result = health_checks_model.sort_and_filter(sort_by='host',
                                                     filter_by='warning')
        assert len(result.sorted_result) == 4
예제 #8
0
    def save_data_to_backend(self, data=None, server=None):
        if server is None:
            return

        time_now = unix_utc_now()
        date_now = datetime.utcnow()

        expires_days = server.get('keep_data', 30)
        if settings.KEEP_DATA is not None:
            expires_days = settings.KEEP_DATA

        expires_at = date_now + timedelta(days=expires_days)

        system_data = data.get('system')
        process_data = data.get('processes')
        plugin_data = data.get('plugins')
        checks_data = data.get('checks')
        telegraf_data = data.get('series')

        if telegraf_data:
            formated_data = plugin_model.format_telegraf_to_amon(
                data=telegraf_data)

            if len(formated_data) > 0:
                for name, d in formated_data.items():
                    plugin = plugin_model.save_data(server=server,
                                                    name=name,
                                                    data=d,
                                                    time=time_now,
                                                    expires_at=expires_at)

        if system_data:
            system_model.save_data(server=server,
                                   data=system_data.copy(),
                                   time=time_now,
                                   expires_at=expires_at)

            server_alerter.check(data=system_data, server=server)

        if process_data:
            data = process_model.save_data(server=server,
                                           data=process_data,
                                           time=time_now,
                                           expires_at=expires_at)

            process_alerter.check(data=data, server=server)
            uptime_alerter.check(data=data, server=server)

        if plugin_data:
            formated_data = plugin_model.flatten_plugin_data(data=plugin_data)

            for name, data in formated_data.items():
                plugin = plugin_model.save_data(server=server,
                                                name=name,
                                                data=data,
                                                time=time_now,
                                                expires_at=expires_at)

                plugin_alerter.check(data=data, plugin=plugin, server=server)

        if checks_data:
            formated_check_data = health_checks_results_model.save(
                data=checks_data, server=server)
            health_check_alerter.check(data=formated_check_data, server=server)