Exemple #1
0
    def get_alerts_for_plugin_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(server_id=self.server_id, name='testplugin')
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=plugin, name='gauge')

        plugin_alert = {
            "above_below": "above",     
            "rule_type": "plugin",
            "server": self.server_id,
            "gauge": gauge['_id'], 
            "plugin": plugin['_id'], 
            "account_id": self.account_id,
            "key": "testkey",
            "period": 0,
            "metric_value": 5
         }

        for i in range(0,5):
            try:
                del plugin_alert['_id']
            except:
                pass
            plugin_alert['period'] = i
            plugin_alert['metric_value'] = i+5
            self.model.collection.insert(plugin_alert)


        result = self.model.get_alerts_for_plugin(plugin=plugin)

        assert len(result) == 5
    
        self._cleanup()
Exemple #2
0
    def test_plugin_emails(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(server_id=self.server_id,
                                            name='testplugin')
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=plugin,
                                                         name='gauge')

        plugin_alert = {
            "above_below": "above",
            "rule_type": "plugin",
            "server": self.server_id,
            "gauge": gauge['_id'],
            "plugin": plugin['_id'],
            "account_id": self.account_id,
            "key": "testkey",
            "period": 0,
            "metric_value": 5,
            "notifications": self.notifications_list
        }

        alert_id = alerts_model.collection.insert(plugin_alert)
        key_name = '{0}.testkey'.format(gauge['name'])
        data = {'gauges': {'bla.test': 1, key_name: 6}}

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

        unsent_alerts = alerts_history_model.get_unsent()
        for trigger in unsent_alerts['data']:
            assert trigger['alert_id'] == alert_id
            assert trigger['average_value'] == 6

        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 - testplugin.gauge.testkey > 5 (Current value: 6.0)')
        self.assertEqual(mail.outbox[0].to, ['*****@*****.**'])

        self._cleanup()
Exemple #3
0
    def setUp(self):
        User.objects.all().delete()
        self.alerter = server_alerter
        self.user = User.objects.create_user(password='******' , email='*****@*****.**')
        self.account_id = 1

        self.server_key = server_model.add('test', account_id=self.account_id)
        self.server = server_model.get_server_by_key(self.server_key)
        self.server_id = self.server['_id']

        self.process = process_model.get_or_create(server_id=self.server_id, name='test')
        self.process_id = self.process['_id']

        self.plugin = plugin_model.get_or_create(server_id=self.server_id, name='testplugin')
        self.plugin_id = self.plugin['_id']

        self.gauge = plugin_model.get_or_create_gauge_by_name(plugin=self.plugin, name='gauge')
        self.gauge_id = self.gauge['_id']
Exemple #4
0
    def test_plugin_emails(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(server_id=self.server_id, name='testplugin')
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=plugin, name='gauge')

        plugin_alert = {
            "above_below": "above",
            "rule_type": "plugin",
            "server": self.server_id,
            "gauge": gauge['_id'], 
            "plugin": plugin['_id'], 
            "account_id": self.account_id,
            "key": "testkey",
            "period": 0,
            "metric_value": 5,
            "notifications": self.notifications_list
        }

        alert_id = alerts_model.collection.insert(plugin_alert)
        key_name = '{0}.testkey'.format(gauge['name'])
        data = {'gauges': {'bla.test': 1, key_name: 6}}

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


        unsent_alerts = alerts_history_model.get_unsent()
        for trigger in unsent_alerts['data']:
            assert trigger['alert_id'] == alert_id
            assert trigger['average_value'] == 6

        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 - testplugin.gauge.testkey > 5 (Current value: 6.0)')
        self.assertEqual(mail.outbox[0].to, ['*****@*****.**'])

        self._cleanup()
Exemple #5
0
    def setUp(self):
        User.objects.all().delete()
        self.alerter = server_alerter
        self.user = User.objects.create_user(password='******',
                                             email='*****@*****.**')
        self.account_id = 1

        self.server_key = server_model.add('test', account_id=self.account_id)
        self.server = server_model.get_server_by_key(self.server_key)
        self.server_id = self.server['_id']

        self.process = process_model.get_or_create(server_id=self.server_id,
                                                   name='test')
        self.process_id = self.process['_id']

        self.plugin = plugin_model.get_or_create(server_id=self.server_id,
                                                 name='testplugin')
        self.plugin_id = self.plugin['_id']

        self.gauge = plugin_model.get_or_create_gauge_by_name(
            plugin=self.plugin, name='gauge')
        self.gauge_id = self.gauge['_id']
Exemple #6
0
    def test_add_metric(self):
        self._cleanup()

        
        url = reverse('ajax_dashboard_add_metric', kwargs={'dashboard_id': self.dashboard_id})

        # Check adding different metrics 

        # System metrics
        data = {"check": "cpu" , "server_id": "{0}".format(self.server_id_str), 
        "account_id": self.account_id }
        response =  self.c.post(url, data=json.dumps(data), content_type='application/json')

        
        assert response.status_code == 200
        
        json_string = response.content.decode('utf-8')
        result_data = json.loads(json_string)
        

        assert result_data['response'] == 'Created'

        result = dashboard_metrics_model.collection.find_one()
        
        assert result['server_id'] == self.server_id
        assert result['dashboard_id'] == self.dashboard_id
        assert result['check'] == 'cpu'


        # Process metrics
        dashboard_metrics_model.collection.remove()

        data = {"check": "memory" , 
            "server_id": "{0}".format(self.server_id_str), 
            "process_id": "{0}".format(str(self.process_id)), 
            "account_id": self.account_id 

        }
        

        response =  self.c.post(url, data=json.dumps(data), content_type='application/json')

        
        assert response.status_code == 200
        
        json_string = response.content.decode('utf-8')
        result_data = json.loads(json_string)
        

        assert result_data['response'] == 'Created'

        result = dashboard_metrics_model.collection.find_one()
        
        assert result['server_id'] == self.server_id
        assert result['process_id'] == self.process_id
        assert result['dashboard_id'] == self.dashboard_id
        assert result['check'] == 'memory'


        # Plugin metrics

        dashboard_metrics_model.collection.remove()

        plugin_model.gauge_collection.remove()
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=self.plugin, name='count')

        data = {"check": "plugin" ,
            "gauge_id":  "{0}".format(str(gauge['_id'])),
            "server_id": "{0}".format(self.server_id_str), 
            "plugin_id": "{0}".format(str(self.plugin_id)), 
            "account_id": self.account_id 

        }
        

        response =  self.c.post(url, data=json.dumps(data), 
            content_type='application/json')

        
        assert response.status_code == 200
        
        json_string = response.content.decode('utf-8')
        result_data = json.loads(json_string)
        

        assert result_data['response'] == 'Created'

        result = dashboard_metrics_model.collection.find_one()
        
        assert result['server_id'] == self.server_id
        assert result['gauge_id'] == gauge['_id']
        assert result['plugin_id'] == self.plugin_id
        assert result['dashboard_id'] == self.dashboard_id
        assert result['check'] == 'plugin'

        
        self._cleanup()
Exemple #7
0
    def test_get_all_metrics(self):
        self._cleanup()

        url = reverse('ajax_dashboard_add_metric', kwargs={'dashboard_id': self.dashboard_id})


        dashboard_metrics_model.collection.remove()

        data = {
            "check": "metric" ,
            "metric_type": "application",
            "metric_id":  "{0}".format(str(self.metric['_id'])),
            "account_id": self.account_id 

        }
        response =  self.c.post(url, data=json.dumps(data), 
            content_type='application/json')


        plugin_model.gauge_collection.remove()
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=self.plugin, name='count')

        data = {"check": "plugin" ,
            "plugin_id": "{0}".format(str(self.plugin_id)), 
            "gauge_id":  "{0}".format(str(gauge['_id'])),
            "server_id": "{0}".format(self.server_id_str), 
            "account_id": self.account_id 

        }
        

        response =  self.c.post(url, data=json.dumps(data), 
            content_type='application/json')


        data = {"check": "memory" , 
            "server_id": "{0}".format(self.server_id_str), 
            "process_id": "{0}".format(str(self.process_id)), 
            "account_id": self.account_id 

        }
        
        response =  self.c.post(url, data=json.dumps(data),
         content_type='application/json')


        url = reverse('ajax_dashboard_get_all_metrics', 
            kwargs={'dashboard_id': self.dashboard_id})
        result = self.c.get(url)

        assert result.status_code == 200

        for r in result.data['data']:
            metric_type = r.get('metric_type')
            type = r.get('type')


            if metric_type == 'plugin':
                assert r['name'] == "{0}.{1}.{2}".format(self.server['name'], self.plugin['name'], gauge['name'])
                assert r['gauge_id'] == str(gauge['_id'])
                assert r['plugin_id'] == str(self.plugin['_id'])
                    
            elif metric_type == 'process':
                assert r['name'] == "{0}.{1}.{2}".format(self.server['name'], self.process['name'], 'memory')
                assert r['process_id'] == str(self.process['_id'])
                assert r['server_id'] == str(self.server['_id'])
            


        

    # def test_public_dashboard_metrics(self):
    #     assert False
Exemple #8
0
    def get_all_test(self):
        self._cleanup()


        # Test system metrics
        for i in range(5):
            dashboard_metrics_model.get_or_create_metric({'check': 'cpu', 'server_id': self.server_id,
                'dashboard_id': self.dashboard_id, 'account_id': self.account_id})

        result = dashboard_metrics_model.get_all()

        eq_(len(result), 0)  # Don't get anything without account/dashboard id

        result = dashboard_metrics_model.get_all(account_id=self.account_id, dashboard_id=self.dashboard_id)

        eq_(len(result), 5)  # Returns a list with values

        for r in result:
            self.assertCountEqual(set(r.keys()), 
                set(['tags', 'url', 'unit', 'utcnow', 'type', 'server_id', 'name', 'id', 'unique_id',  'metric_type', 'server_name', 'order']))
            
            assert r['type'] == 'server_metric'
            assert r['metric_type'] == 'system'
            assert r['server_name'] == self.server['name']

        dashboard_metrics_model.collection.remove()

        # Test process metrics
        for i in range(5):
            dashboard_metrics_model.get_or_create_metric({'check': 'cpu', 'server_id': self.server_id,
                'dashboard_id': self.dashboard_id, 'account_id': self.account_id,
                'process_id': self.process_id})

        result = dashboard_metrics_model.get_all(account_id=self.account_id, dashboard_id=self.dashboard_id)
        eq_(len(result), 5)  # Returns a list with values

        for r in result:
            self.assertCountEqual(set(r.keys()), 
                set(['tags', 'url', 'unit', 'utcnow', 'server_id', 'type', 'name', 'id', 'unique_id','metric_type', 'process_id', 'server_name', 'order']))

            assert r['type'] == 'server_metric'
            assert r['metric_type'] == 'process'


        dashboard_metrics_model.collection.remove()


        plugin_model.gauge_collection.remove()
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=self.plugin, name='count')
        
        # Test plugin metrics
        for i in range(5):
            dashboard_metrics_model.get_or_create_metric({
                'gauge_id': gauge['_id'],
                'server_id': self.server_id,
                'dashboard_id': self.dashboard_id,
                'account_id': self.account_id,
                'plugin_id': self.plugin_id,
            })
    
        result = dashboard_metrics_model.get_all(account_id=self.account_id, dashboard_id=self.dashboard_id)
        eq_(len(result), 5) # Returns a list with values


        for r in result:
            self.assertCountEqual(set(r.keys()), set(['url', 'unit', 'utcnow','server_id', 'name', 'id', 'unique_id', 
                    'metric_type', 'plugin_id', 'type', 'tags',
                    'gauge_id', 'server_name', 'order']))

            assert r['type'] == 'server_metric'
            assert r['metric_type'] == 'plugin'
            assert r['name'] == "{0}.{1}.{2}".format(self.server['name'], self.plugin['name'], gauge['name'])

        plugin_model.gauge_collection.remove()
        


        self._cleanup()
Exemple #9
0
    def test_add_metric(self):
        self._cleanup()

        url = reverse('ajax_dashboard_add_metric',
                      kwargs={'dashboard_id': self.dashboard_id})

        # Check adding different metrics

        # System metrics
        data = {
            "check": "cpu",
            "server_id": "{0}".format(self.server_id_str),
            "account_id": self.account_id
        }
        response = self.c.post(url,
                               data=json.dumps(data),
                               content_type='application/json')

        assert response.status_code == 200

        json_string = response.content.decode('utf-8')
        result_data = json.loads(json_string)

        assert result_data['response'] == 'Created'

        result = dashboard_metrics_model.collection.find_one()

        assert result['server_id'] == self.server_id
        assert result['dashboard_id'] == self.dashboard_id
        assert result['check'] == 'cpu'

        # Process metrics
        dashboard_metrics_model.collection.remove()

        data = {
            "check": "memory",
            "server_id": "{0}".format(self.server_id_str),
            "process_id": "{0}".format(str(self.process_id)),
            "account_id": self.account_id
        }

        response = self.c.post(url,
                               data=json.dumps(data),
                               content_type='application/json')

        assert response.status_code == 200

        json_string = response.content.decode('utf-8')
        result_data = json.loads(json_string)

        assert result_data['response'] == 'Created'

        result = dashboard_metrics_model.collection.find_one()

        assert result['server_id'] == self.server_id
        assert result['process_id'] == self.process_id
        assert result['dashboard_id'] == self.dashboard_id
        assert result['check'] == 'memory'

        # Plugin metrics

        dashboard_metrics_model.collection.remove()

        plugin_model.gauge_collection.remove()
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=self.plugin,
                                                         name='count')

        data = {
            "check": "plugin",
            "gauge_id": "{0}".format(str(gauge['_id'])),
            "server_id": "{0}".format(self.server_id_str),
            "plugin_id": "{0}".format(str(self.plugin_id)),
            "account_id": self.account_id
        }

        response = self.c.post(url,
                               data=json.dumps(data),
                               content_type='application/json')

        assert response.status_code == 200

        json_string = response.content.decode('utf-8')
        result_data = json.loads(json_string)

        assert result_data['response'] == 'Created'

        result = dashboard_metrics_model.collection.find_one()

        assert result['server_id'] == self.server_id
        assert result['gauge_id'] == gauge['_id']
        assert result['plugin_id'] == self.plugin_id
        assert result['dashboard_id'] == self.dashboard_id
        assert result['check'] == 'plugin'

        self._cleanup()
Exemple #10
0
    def test_get_all_metrics(self):
        self._cleanup()

        url = reverse('ajax_dashboard_add_metric',
                      kwargs={'dashboard_id': self.dashboard_id})

        dashboard_metrics_model.collection.remove()

        data = {
            "check": "metric",
            "metric_type": "application",
            "metric_id": "{0}".format(str(self.metric['_id'])),
            "account_id": self.account_id
        }
        response = self.c.post(url,
                               data=json.dumps(data),
                               content_type='application/json')

        plugin_model.gauge_collection.remove()
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=self.plugin,
                                                         name='count')

        data = {
            "check": "plugin",
            "plugin_id": "{0}".format(str(self.plugin_id)),
            "gauge_id": "{0}".format(str(gauge['_id'])),
            "server_id": "{0}".format(self.server_id_str),
            "account_id": self.account_id
        }

        response = self.c.post(url,
                               data=json.dumps(data),
                               content_type='application/json')

        data = {
            "check": "memory",
            "server_id": "{0}".format(self.server_id_str),
            "process_id": "{0}".format(str(self.process_id)),
            "account_id": self.account_id
        }

        response = self.c.post(url,
                               data=json.dumps(data),
                               content_type='application/json')

        url = reverse('ajax_dashboard_get_all_metrics',
                      kwargs={'dashboard_id': self.dashboard_id})
        result = self.c.get(url)

        assert result.status_code == 200

        for r in result.data['data']:
            metric_type = r.get('metric_type')
            type = r.get('type')

            if metric_type == 'plugin':
                assert r['name'] == "{0}.{1}.{2}".format(
                    self.server['name'], self.plugin['name'], gauge['name'])
                assert r['gauge_id'] == str(gauge['_id'])
                assert r['plugin_id'] == str(self.plugin['_id'])

            elif metric_type == 'process':
                assert r['name'] == "{0}.{1}.{2}".format(
                    self.server['name'], self.process['name'], 'memory')
                assert r['process_id'] == str(self.process['_id'])
                assert r['server_id'] == str(self.server['_id'])
Exemple #11
0
    def get_all_test(self):
        self._cleanup()

        # Test system metrics
        for i in range(5):
            dashboard_metrics_model.get_or_create_metric({
                'check':
                'cpu',
                'server_id':
                self.server_id,
                'dashboard_id':
                self.dashboard_id,
                'account_id':
                self.account_id
            })

        result = dashboard_metrics_model.get_all()

        eq_(len(result), 0)  # Don't get anything without account/dashboard id

        result = dashboard_metrics_model.get_all(
            account_id=self.account_id, dashboard_id=self.dashboard_id)

        eq_(len(result), 5)  # Returns a list with values

        for r in result:
            self.assertCountEqual(
                set(r.keys()),
                set([
                    'tags', 'url', 'unit', 'utcnow', 'type', 'server_id',
                    'name', 'id', 'unique_id', 'metric_type', 'server_name',
                    'order'
                ]))

            assert r['type'] == 'server_metric'
            assert r['metric_type'] == 'system'
            assert r['server_name'] == self.server['name']

        dashboard_metrics_model.collection.remove()

        # Test process metrics
        for i in range(5):
            dashboard_metrics_model.get_or_create_metric({
                'check':
                'cpu',
                'server_id':
                self.server_id,
                'dashboard_id':
                self.dashboard_id,
                'account_id':
                self.account_id,
                'process_id':
                self.process_id
            })

        result = dashboard_metrics_model.get_all(
            account_id=self.account_id, dashboard_id=self.dashboard_id)
        eq_(len(result), 5)  # Returns a list with values

        for r in result:
            self.assertCountEqual(
                set(r.keys()),
                set([
                    'tags', 'url', 'unit', 'utcnow', 'server_id', 'type',
                    'name', 'id', 'unique_id', 'metric_type', 'process_id',
                    'server_name', 'order'
                ]))

            assert r['type'] == 'server_metric'
            assert r['metric_type'] == 'process'

        dashboard_metrics_model.collection.remove()

        plugin_model.gauge_collection.remove()
        gauge = plugin_model.get_or_create_gauge_by_name(plugin=self.plugin,
                                                         name='count')

        # Test plugin metrics
        for i in range(5):
            dashboard_metrics_model.get_or_create_metric({
                'gauge_id':
                gauge['_id'],
                'server_id':
                self.server_id,
                'dashboard_id':
                self.dashboard_id,
                'account_id':
                self.account_id,
                'plugin_id':
                self.plugin_id,
            })

        result = dashboard_metrics_model.get_all(
            account_id=self.account_id, dashboard_id=self.dashboard_id)
        eq_(len(result), 5)  # Returns a list with values

        for r in result:
            self.assertCountEqual(
                set(r.keys()),
                set([
                    'url', 'unit', 'utcnow', 'server_id', 'name', 'id',
                    'unique_id', 'metric_type', 'plugin_id', 'type', 'tags',
                    'gauge_id', 'server_name', 'order'
                ]))

            assert r['type'] == 'server_metric'
            assert r['metric_type'] == 'plugin'
            assert r['name'] == "{0}.{1}.{2}".format(self.server['name'],
                                                     self.plugin['name'],
                                                     gauge['name'])

        plugin_model.gauge_collection.remove()

        self._cleanup()