Esempio n. 1
0
    def get_check_for_timestamp_test(self):

        self._cleanup()

        gauges_collection = plugin_model._get_gauges_data_collection()
        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])
        plugin_with_error = plugin_model.get_or_create(name='error1', server_id=self.server['_id'])

        for i in range(0, 100):
            data = {'t': i, 'count.first': 2, 'count.second': 4, 'count.third': 5 }
            formated_data = flat_to_tree_dict_helper(data)
            formated_data['plugin_id'] = plugin['_id']
            formated_data['server_id'] = self.server_id

            gauges_collection.insert(formated_data)


        error_data = {'plugin_id': plugin_with_error['_id'], 'server_id': self.server_id,
        't': 10, 'error': 'Argghh'}
        error_collection = plugin_model._get_error_collection()
        error_collection.insert(error_data)

        result = plugin_model.get_check_for_timestamp(self.server, 10)


        for r in result:
            assert r['name'] in ['test1', 'error1']

        self._cleanup()
Esempio n. 2
0
    def upsert_gauges_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        gauges_data = {'t': 1, 'count.test': 2, 'second.test': 4, 'more.tests': 5 }

        plugin_model.upsert_gauges(plugin=plugin, gauges=gauges_data)

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])


        result = plugin_model.get_gauges_list(plugin=plugin) # Excludes t and plugin_id
        self.assertCountEqual(result, ['count', 'second', 'more'])


        data = {'t': 1, 'count.test': 2, 'second.test': 4, 'more.tests': 5, 'evenmore.test':2 }
        result = plugin_model.upsert_gauges(plugin, gauges=data) # Excludes t and plugin_id


        result = plugin_model.get_gauges_list(plugin=plugin) # Excludes t and plugin_id
        self.assertCountEqual(result, ['count', 'second', 'evenmore' ,'more'])



        data = {'t': 1, 'count.test': 2, 'second.test': 4}
        result = plugin_model.upsert_gauges(plugin, gauges=data) # Excludes t and plugin_id


        result = plugin_model.get_gauges_list(plugin=plugin) # Excludes t and plugin_id
        self.assertCountEqual(result, ['count', 'second', 'evenmore' ,'more'])

        self._cleanup()
Esempio n. 3
0
    def get_gauge_keys_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        data = {
            't': 1,
            'count.first': 2,
            'count.second': 4,
            'count.third': 5,
        }
        plugin_model.save_gauges(data=data, plugin=plugin, time=1)

        gauge = plugin_model.get_gauge_by_name(name='count', plugin=plugin)

        result = plugin_model.get_gauge_keys(gauge=gauge)

        self.assertCountEqual(result, [u'second', u'third', u'first'])

        self._cleanup()

        data = {'t': 1, 'countsecond': 2}
        plugin_model.save_gauges(data=data, plugin=plugin, time=1)

        gauge = plugin_model.get_gauge_by_name(name='countsecond',
                                               plugin=plugin)

        result = plugin_model.get_gauge_keys(gauge=gauge)

        self.assertCountEqual(result, [u'value'])
Esempio n. 4
0
    def get_counters_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        counters_collection = plugin_model._get_counters_collection()
        data = {'t': 1, 'count.test': 2, 'second.test': 4, 'more.tests': 5}
        formated_data = flat_to_tree_dict_helper(data)
        formated_data['plugin_id'] = plugin['_id']
        formated_data['server_id'] = self.server_id

        counters_collection.insert(formated_data)

        result = plugin_model.get_counters(
            server=self.server, plugin=plugin)  # Excludes t and plugin_id
        eq_(
            result, {
                u'count': {
                    u'test': 2
                },
                u'second': {
                    u'test': 4
                },
                u't': 1,
                u'more': {
                    u'tests': 5
                }
            })

        self._cleanup()
Esempio n. 5
0
    def delete_counters_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])
        gauge_data = {
            u'performance.cpu_load': 1.08719,
            u'performance.busy_workers': 117.0,
        }

        for i in range(0, 10):
            plugin_model.save_counters(data=gauge_data,
                                       plugin=plugin,
                                       server=self.server)

        collection = plugin_model._get_counters_collection()

        result = collection.find().count()
        eq_(result, 1)

        plugin_model.delete_counters(server=self.server, plugin=plugin)
        result = collection.find().count()
        eq_(result, 0)

        self._cleanup()
Esempio n. 6
0
    def get_gauge_keys_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])



        data = {'t': 1, 'count.first': 2, 'count.second': 4, 'count.third': 5, }
        plugin_model.save_gauges(data=data, plugin=plugin, time=1)

        gauge = plugin_model.get_gauge_by_name(name='count', plugin=plugin)

        result = plugin_model.get_gauge_keys(gauge=gauge)

        self.assertCountEqual(result, [u'second', u'third', u'first'])


        self._cleanup()



        data = {'t': 1, 'countsecond': 2}
        plugin_model.save_gauges(data=data, plugin=plugin, time=1)

        gauge = plugin_model.get_gauge_by_name(name='countsecond', plugin=plugin)


        result = plugin_model.get_gauge_keys(gauge=gauge)

        self.assertCountEqual(result, [u'value'])
Esempio n. 7
0
    def get_or_create_plugin_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        eq_(plugin['name'], 'test1')
Esempio n. 8
0
    def ajax_get_gauge_data_after_test(self):

        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])     

        for i in range(0, 100):
            data = {'t': i, 'count.first': 2, 'count.second': 4, 'count.third': 5}
            plugin_model.save_gauges(data=data, plugin=plugin, time=i)
        
        gauge = plugin_model.get_gauge_by_name(name='count', plugin=plugin)
            
        url = reverse('ajax_get_gauge_data_after')
        url = "{0}?gauge={1}&timestamp=30&enddate=59".format(url, gauge['_id'])

        response = self.c.get(url)

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

        assert to_json['last_update']
        assert to_json['now_local']

        data = to_json['data']

        eq_(len(data), 3)

        for i in data:
            assert i['name'] in ['second', 'third', 'first']
            assert len(i['data']) == 30
        
        self._cleanup()
Esempio n. 9
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()
Esempio n. 10
0
    def get_table_data_collection_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        result = plugin_model._get_table_data_collection(plugin=plugin, table_name='testme')

        eq_(result.name, "plugin_test1_testme_data")
Esempio n. 11
0
    def view_plugin_with_id(self):
        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])
        url = reverse('view_plugins', kwargs={'server_id': self.server['_id']})    
        url = "&plugin_id={0}".format(plugin['_id'])

        response = self.c.get(url)

        assert response.status_code == 200
Esempio n. 12
0
    def get_all_metrics_test(self):
        self.process_collection.remove()
        plugin_model.collection.remove()

        for i in range(0, 2):
            self.process_collection.insert({
                "name": "test-{0}".format(i),
                'server': self.server_id
            })

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        data = {
            't': 1,
            'count.count_key': 2,
            'second.second_key': 4,
            'more.more_key': 5
        }

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)

        result = dashboard_metrics_model.get_all_metrics()

        for r in result:
            params = r[0].split('.')
            final_params = dict(x.split(':') for x in params)
            assert final_params['metric_type']

            metric_type = final_params['metric_type']

            if metric_type == 'system_global':
                assert final_params['check'] in [
                    'disk', 'memory', 'network', 'loadavg', 'cpu'
                ]

                if final_params['check'] == 'network':
                    assert final_params['key'] in ['i', 'o']

                if final_params['check'] == 'disk':
                    assert final_params['key'] == 'percent'

                if final_params['check'] == 'memory':
                    assert final_params['key'] == 'used_percent'

                if final_params['check'] == 'cpu':
                    assert final_params['key'] in [
                        'idle', 'system', 'user', 'iowait', 'steal'
                    ]

            elif metric_type == 'process_global':
                assert final_params['key'] in ['test-0', 'test-1']
                assert final_params['check'] in ['cpu', 'memory']
            elif metric_type == 'plugin_global':
                assert final_params['gauge'] in ['count', 'second', 'more']
                assert final_params['key'] in [
                    'count_key', 'second_key', 'more_key'
                ]
Esempio n. 13
0
    def upsert_gauges_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        gauges_data = {
            't': 1,
            'count.test': 2,
            'second.test': 4,
            'more.tests': 5
        }

        plugin_model.upsert_gauges(plugin=plugin, gauges=gauges_data)

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        result = plugin_model.get_gauges_list(
            plugin=plugin)  # Excludes t and plugin_id
        self.assertCountEqual(result, ['count', 'second', 'more'])

        data = {
            't': 1,
            'count.test': 2,
            'second.test': 4,
            'more.tests': 5,
            'evenmore.test': 2
        }
        result = plugin_model.upsert_gauges(
            plugin, gauges=data)  # Excludes t and plugin_id

        result = plugin_model.get_gauges_list(
            plugin=plugin)  # Excludes t and plugin_id
        self.assertCountEqual(result, ['count', 'second', 'evenmore', 'more'])

        data = {'t': 1, 'count.test': 2, 'second.test': 4}
        result = plugin_model.upsert_gauges(
            plugin, gauges=data)  # Excludes t and plugin_id

        result = plugin_model.get_gauges_list(
            plugin=plugin)  # Excludes t and plugin_id
        self.assertCountEqual(result, ['count', 'second', 'evenmore', 'more'])

        self._cleanup()
Esempio n. 14
0
    def test_plugin_alert(self):
        self._cleanup()

        plugin_alert = {
            "above_below": "above",
            "rule_type": "plugin",
            "server": self.server_id,
            "gauge": self.gauge_id,
            "plugin": self.plugin_id,
            "account_id": self.account_id,
            "key": "testkey",
            "period": 0,
            "metric_value": 5
        }

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

        plugin_alerter.check(data=data, plugin=self.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)

        self._cleanup()

        plugin = plugin_model.get_or_create(server_id=self.server_id,
                                            name='mongo')

        gauge = 'global_gauge.global_key'
        plugin_alert = {
            "above_below": "above",
            "rule_type": "plugin_global",
            "server": 'all',
            "plugin": 'mongo',
            "gauge": 'global_gauge',
            "key": 'global_key',
            "period": 0,
            "metric_value": 5
        }

        alert_id = alerts_model.collection.insert(plugin_alert)

        data = {'gauges': {'bla.test': 1, gauge: 6}}

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

        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)
Esempio n. 15
0
    def view_plugin_with_id(self):
        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])
        url = reverse('view_plugins', kwargs={'server_id': self.server['_id']})
        url = "&plugin_id={0}".format(plugin['_id'])

        response = self.c.get(url)

        assert response.status_code == 200
Esempio n. 16
0
    def test_plugin_alert(self):
        self._cleanup()

        plugin_alert = {
            "above_below": "above",
            "rule_type": "plugin",
            "server": self.server_id,
            "gauge": self.gauge_id,
            "plugin": self.plugin_id,
            "account_id": self.account_id,
            "key": "testkey",
            "period": 0,
            "metric_value": 5
        }

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

        plugin_alerter.check(data=data, plugin=self.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)

        self._cleanup()

        plugin = plugin_model.get_or_create(server_id=self.server_id, name='mongo')

        gauge = 'global_gauge.global_key'
        plugin_alert = {
            "above_below": "above",
            "rule_type": "plugin_global",
            "server": 'all',
            "plugin": 'mongo',
            "gauge": 'global_gauge',
            "key": 'global_key',
            "period": 0,
            "metric_value": 5
        }

        alert_id = alerts_model.collection.insert(plugin_alert)

        data = {'gauges': {'bla.test': 1, gauge: 6}}

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

        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)
Esempio n. 17
0
    def get_table_data_collection_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        result = plugin_model._get_table_data_collection(plugin=plugin,
                                                         table_name='testme')

        eq_(result.name, "plugin_test1_testme_data")
Esempio n. 18
0
    def save_gauges_test(self):
        self._cleanup()


        expires_at = datetime.utcnow()+timedelta(hours=24)


        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])
        gauge_data = {
            u'performance.cpu_load': 1.08719, u'performance.busy_workers': 117.0,
            u'performance.idle_workers': 523.0, u'net.bytes': 86855934115.0,
            u'requests.per.second': 140.7, u'net.hits': 35534902.0
        }

        plugin_model.save_gauges(data=gauge_data, plugin=plugin, time=1, expires_at=expires_at)

        collection = plugin_model._get_gauges_data_collection()

        gauges = plugin_model.get_gauges_cursor(plugin=plugin)

        gauges_dict = {}
        for g in gauges:
            gauges_dict[str(g['_id'])] = g['name']


        for r in collection.find():
            gauge_id = str(r['gauge_id'])

            gauge_name = gauges_dict[gauge_id]
            assert gauge_name in ['net', 'performance', 'requests']
            self.assertTrue(r['t'], int)
            self.assertEqual(r['expires_at'].date(), expires_at.date())

            if gauge_name == 'net':
                self.assertCountEqual(r.keys(), [u't', u'hits', u'bytes', u'gauge_id', u'_id', 'expires_at'])

                self.assertEqual(r['hits'], 35534902.0)
                self.assertEqual(r['bytes'], 86855934115.0)

            elif gauge_name == 'performance':

                self.assertCountEqual(r.keys(), [u't', u'cpu_load', u'busy_workers', u'idle_workers', u'gauge_id', u'_id', 'expires_at'])

                self.assertEqual(r['cpu_load'],  1.08719)
                self.assertEqual(r['busy_workers'], 117.0)
                self.assertEqual(r['idle_workers'], 523.0)

            elif gauge_name == 'requests':

                self.assertCountEqual(r.keys(), [u't', u'per_second', u'gauge_id', u'_id', 'expires_at'])

                self.assertEqual(r['per_second'],  140.7)


        self._cleanup()
Esempio n. 19
0
    def get_all_unique_gauge_keys_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        data = {'t': 1, 'count.count_key': 2, 'second.second_key': 4, 'more.more_key': 5}

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)


        result = plugin_model.get_all_unique_gauge_keys_list()

        assert set(result) == set(['test1.count.count_key' ,'test1.second.second_key', 'test1.more.more_key'])
Esempio n. 20
0
    def get_check_for_timestamp_test(self):

        self._cleanup()

        gauges_collection = plugin_model._get_gauges_data_collection()
        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])
        plugin_with_error = plugin_model.get_or_create(
            name='error1', server_id=self.server['_id'])

        for i in range(0, 100):
            data = {
                't': i,
                'count.first': 2,
                'count.second': 4,
                'count.third': 5
            }
            formated_data = flat_to_tree_dict_helper(data)
            formated_data['plugin_id'] = plugin['_id']
            formated_data['server_id'] = self.server_id

            gauges_collection.insert(formated_data)

        error_data = {
            'plugin_id': plugin_with_error['_id'],
            'server_id': self.server_id,
            't': 10,
            'error': 'Argghh'
        }
        error_collection = plugin_model._get_error_collection()
        error_collection.insert(error_data)

        result = plugin_model.get_check_for_timestamp(self.server, 10)

        for r in result:
            assert r['name'] in ['test1', 'error1']

        self._cleanup()
Esempio n. 21
0
    def get_gauge_data_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        gauges_collection = plugin_model._get_gauges_data_collection()

        for i in range(0, 100):
            data = {
                't': i,
                'count.first': 11,
                'count.second': 22,
                'count.third': 33
            }
            plugin_model.save_gauges(data=data, plugin=plugin, time=i)

        gauge = plugin_model.get_gauge_by_name(name='count', plugin=plugin)

        result = plugin_model.get_gauge_data_after(timestamp=0,
                                                   enddate=29,
                                                   gauge=gauge)

        eq_(len(result), 3)  # first, second, third

        for i in result:
            assert i['name'] in ['first', 'second', 'third']
            assert len(i['data']) == 30

            for point in i['data']:
                assert point['y'] in [33, 22, 11]

        self._cleanup()

        for i in range(0, 100):
            data = {'t': i, 'count': 2}
            plugin_model.save_gauges(data=data, plugin=plugin, time=i)

        result = plugin_model.get_gauge_data_after(timestamp=0,
                                                   enddate=29,
                                                   gauge=gauge)

        eq_(len(result), 1)  # count

        count = result[0]

        eq_(count['name'], 'value')  # Single value
        eq_(len(count['data']), 30)

        self._cleanup()
Esempio n. 22
0
    def get_gauges_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        data = {'t': 1, 'count.test': 2, 'second.test': 4, 'more.tests': 5}

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)

        result = plugin_model.get_gauges_list(plugin=plugin)

        self.assertCountEqual(result, ['count', 'second', 'more'])

        self._cleanup()
Esempio n. 23
0
    def get_gauges_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        data = {'t': 1, 'count.test': 2, 'second.test': 4, 'more.tests': 5 }

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)


        result = plugin_model.get_gauges_list(plugin=plugin)

        self.assertCountEqual(result, ['count', 'second', 'more'])


        self._cleanup()
Esempio n. 24
0
    def get_gauge_data_test(self):
        self._cleanup()


        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])


        gauges_collection = plugin_model._get_gauges_data_collection()

        for i in range(0, 100):
            data = {'t': i, 'count.first': 11, 'count.second': 22, 'count.third': 33 }
            plugin_model.save_gauges(data=data, plugin=plugin, time=i)

        gauge = plugin_model.get_gauge_by_name(name='count', plugin=plugin)


        result = plugin_model.get_gauge_data_after(timestamp=0, enddate=29, gauge=gauge)

        eq_(len(result), 3)   # first, second, third


        for i in result:
            assert i['name'] in ['first', 'second', 'third']
            assert len(i['data']) == 30

            for point in i['data']:
                assert point['y'] in [33, 22, 11]


        self._cleanup()

        for i in range(0, 100):
            data = {'t': i, 'count': 2}
            plugin_model.save_gauges(data=data, plugin=plugin, time=i)

        result = plugin_model.get_gauge_data_after(timestamp=0, enddate=29,  gauge=gauge)

        eq_(len(result),1 )  # count

        count = result[0]

        eq_(count['name'], 'value') # Single value
        eq_(len(count['data']), 30)



        self._cleanup()
Esempio n. 25
0
    def get_all_metrics_test(self):
        self.process_collection.remove()
        plugin_model.collection.remove()


        for i in range(0, 2):
            self.process_collection.insert({"name" : "test-{0}".format(i), 'server': self.server_id})


        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        data = {'t': 1, 'count.count_key': 2, 'second.second_key': 4, 'more.more_key': 5 }

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)

        result = dashboard_metrics_model.get_all_metrics()

        for r in result:
            params = r[0].split('.')
            final_params =  dict(x.split(':') for x in params)
            assert final_params['metric_type']
        
            
            metric_type = final_params['metric_type']

            if metric_type == 'system_global':
                assert final_params['check'] in ['disk', 'memory', 'network', 'loadavg', 'cpu']
                
                if final_params['check'] == 'network':
                    assert final_params['key'] in ['i', 'o']
                
                if final_params['check']  == 'disk':
                    assert final_params['key'] == 'percent'

                if final_params['check']  == 'memory':
                    assert final_params['key'] == 'used_percent'

                if final_params['check']  == 'cpu':
                    assert final_params['key'] in ['idle', 'system', 'user', 'iowait', 'steal']

            elif metric_type == 'process_global':
                assert final_params['key'] in ['test-0', 'test-1']
                assert final_params['check'] in ['cpu', 'memory']
            elif metric_type == 'plugin_global':
                assert final_params['gauge'] in ['count', 'second', 'more']
                assert final_params['key'] in ['count_key', 'second_key', 'more_key']
Esempio n. 26
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()
Esempio n. 27
0
    def get_counters_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])


        counters_collection = plugin_model._get_counters_collection()
        data = {'t': 1, 'count.test': 2, 'second.test': 4, 'more.tests': 5 }
        formated_data = flat_to_tree_dict_helper(data)
        formated_data['plugin_id'] = plugin['_id']
        formated_data['server_id'] = self.server_id

        counters_collection.insert(formated_data)

        result = plugin_model.get_counters(server=self.server, plugin=plugin) # Excludes t and plugin_id
        eq_(result, {u'count': {u'test': 2}, u'second': {u'test': 4}, u't': 1, u'more': {u'tests': 5}})

        self._cleanup()
Esempio n. 28
0
    def get_gauge_keys_for_server_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        data = {'t': 1, 'count.count_key': 2, 'second.second_key': 4, 'more.more_key': 5}

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)


        result = plugin_model.get_gauge_keys_for_server(server_id=self.server['_id'])


        assert len(result) == 3 # count, second, more
        for r in result:
            assert r['plugin']['_id'] == plugin['_id']
            for key in r['gauge']['keys']:
                assert key in ['count_key', 'second_key', 'more_key']
Esempio n. 29
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']
Esempio n. 30
0
    def save_counters_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        counter_data = {
            u'rows.inserted': 4, u'rows.updated': 6, u'rows.deleted': 4,
            u'rows.returned': 1832119, u'rows.fetched': 680425,
            u'xact.rollbacks': 0, u'xact.commits': 26869,
            u'performance.disk_read': 170, u'performance.buffer_hit': 1711069
        }


        plugin_model.save_counters(data=counter_data, plugin=plugin, server=self.server)

        collection = plugin_model._get_counters_collection()

        for r in collection.find():
            self.assertEqual(sorted(r.keys()), sorted([u'server_id', u'rows', u't', u'xact', u'performance', u'plugin_id', u'_id']))

            rows = r['rows']

            eq_(r['plugin_id'], plugin['_id'])
            self.assertTrue(r['t'], int)

            self.assertEqual(rows, {u'deleted': 4, u'inserted': 4, u'updated': 6, u'fetched': 680425, u'returned': 1832119})

            rows = r['xact']
            self.assertEqual(rows, {u'commits': 26869, u'rollbacks': 0})

            rows = r['performance']
            self.assertEqual(rows, {u'buffer_hit': 1711069, u'disk_read': 170})


        # Test duplicates - the counters should be only a single entry in the collection
        collection.remove()
        for i in range(0, 10):
            plugin_model.save_counters(data=counter_data, plugin=plugin, server=self.server)

        result = collection.find().count()
        eq_(result, 1)

        self._cleanup()
Esempio n. 31
0
    def delete_counters_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])
        gauge_data = {u'performance.cpu_load': 1.08719, u'performance.busy_workers': 117.0,}

        for i in range(0, 10):
            plugin_model.save_counters(data=gauge_data, plugin=plugin, server=self.server)

        collection = plugin_model._get_counters_collection()

        result = collection.find().count()
        eq_(result, 1)

        plugin_model.delete_counters(server=self.server, plugin=plugin)
        result = collection.find().count()
        eq_(result, 0)

        self._cleanup()
Esempio n. 32
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()
Esempio n. 33
0
    def get_all_unique_gauge_keys_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        data = {
            't': 1,
            'count.count_key': 2,
            'second.second_key': 4,
            'more.more_key': 5
        }

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)

        result = plugin_model.get_all_unique_gauge_keys_list()

        assert set(result) == set([
            'test1.count.count_key', 'test1.second.second_key',
            'test1.more.more_key'
        ])
Esempio n. 34
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']
Esempio n. 35
0
    def get_by_id_test(self):
        self.collection.remove()
        server_model.collection.remove()
        plugin_model.collection.remove()


        server_id = server_model.add('testserver')
        plugin = plugin_model.get_or_create(name='testplugin', server_id=server_id)


        self.collection.insert({
            "rule_type" : "process", 
            "server": server_id,
            "plugin": plugin['_id'], 
            'sms_recepients': [], 
            'email_recepients': [], 
            'webhooks': []}
        )
        alert = self.collection.find_one()

        alert_from_model = self.model.get_by_id(alert['_id'])
        
        assert alert_from_model['plugin'] == plugin['_id']
Esempio n. 36
0
    def get_gauge_keys_for_server_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        data = {
            't': 1,
            'count.count_key': 2,
            'second.second_key': 4,
            'more.more_key': 5
        }

        plugin_model.save_gauges(plugin=plugin, data=data, time=1)

        result = plugin_model.get_gauge_keys_for_server(
            server_id=self.server['_id'])

        assert len(result) == 3  # count, second, more
        for r in result:
            assert r['plugin']['_id'] == plugin['_id']
            for key in r['gauge']['keys']:
                assert key in ['count_key', 'second_key', 'more_key']
Esempio n. 37
0
    def ajax_get_gauge_data_after_test(self):

        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        for i in range(0, 100):
            data = {
                't': i,
                'count.first': 2,
                'count.second': 4,
                'count.third': 5
            }
            plugin_model.save_gauges(data=data, plugin=plugin, time=i)

        gauge = plugin_model.get_gauge_by_name(name='count', plugin=plugin)

        url = reverse('ajax_get_gauge_data_after')
        url = "{0}?gauge={1}&timestamp=30&enddate=59".format(url, gauge['_id'])

        response = self.c.get(url)

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

        assert to_json['last_update']
        assert to_json['now_local']

        data = to_json['data']

        eq_(len(data), 3)

        for i in data:
            assert i['name'] in ['second', 'third', 'first']
            assert len(i['data']) == 30

        self._cleanup()
Esempio n. 38
0
    def get_global_metrics_test(self):
        self._cleanup()

        process_name = "alertest-process"
        plugin_name = "alertest-plugin"
        process = process_model.get_or_create(server_id=self.server_id, name=process_name)
        plugin = plugin_model.get_or_create(name=plugin_name, server_id=self.server_id)
        plugin_data = {
            'count.count_first_key': 2,
            'second.second_key': 4,
            'more.more_key': 5,
            'count.count_second_key': 4
        }
        plugin_model.save_gauges(plugin=plugin, data=plugin_data, time=1)
        plugin_gauges_keys = plugin_model.get_gauge_keys_for_server(server_id=self.server_id)

        result = self.model.get_global_metrics()

        assert len(result) == 14  # 7 system + 3 process(cpu/memory/down) + 4 plugin(for every key)
        
        system_metrics = ['CPU', 'Memory', 'Loadavg', 'Disk', 'Network/inbound', 'Network/outbound', 'Not Sending Data']
        process_metrics = ['cpu', 'memory', 'down']

        for r in result:
            value = r.get('value')
            metric_dict = dict(v.split(":") for v in value.split("."))

            assert metric_dict['rule_type']
            assert metric_dict['rule_type'] in ['global', 'process_global', 'plugin_global']
            alert_type = metric_dict.get('rule_type')
    

            if alert_type == 'system':
                assert r['metric'] in system_metrics

            if alert_type == 'process_global':
                assert r['metric'] in process_metrics
Esempio n. 39
0
    def get_or_create_plugin_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1', server_id=self.server['_id'])

        eq_(plugin['name'], 'test1')
Esempio n. 40
0
    def get_save_table_data_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='nginx', server_id=self.server['_id'])
        data = {
            'headers': [u'visitors', u'hits', u'bytes', u'percent', u'data'],
            'data': [
                [1, 34, 0, 3.91, u'/static/css/screen.css'],
                [1, 34, 0, 3.91, u'/static/js/libs/libs.min.js'],
                [1, 33, 0, 3.8, u'/static/css/chart.css']
            ]
        }
        plugin_model.save_table_data(data=data, server=self.server,
            plugin=plugin,
            table_name='requests',
            find_by_string='data')

        data_collection = plugin_model._get_table_data_collection(plugin=plugin, table_name='requests')

        assert data_collection.find().count() == 3

        result = plugin_model.get_table_data(server=self.server,
                plugin=plugin,
                table_name='requests')

        assert set(result['header']) == set(data['headers'])
        assert result['data'].count() == 3


        # Check if it doesnt create duplicates
        plugin_model.save_table_data(data=data, server=self.server,
            plugin=plugin,
            table_name='requests',
            find_by_string='data')

        assert data_collection.find().count() == 3


        data_collection.remove()
        plugin_model.collection.remove()
        # Check for the harders - sql queries

        plugin = plugin_model.get_or_create(name='mysql', server_id=self.server['_id'])
        data_collection = plugin_model._get_table_data_collection(plugin=plugin, table_name='slow_queries')
        data_collection.remove()

        data = {'headers': ['query_time', 'rows_sent', 'rows_examined', 'lock_time', 'db', 'query', 'start_time'],
        'data': [
            [3.0, 1, 0, 0.0, 'wordpress', 'select BENCHMARK(500000000, EXTRACT(YEAR FROM NOW()))', '2015-04-22 23:50:40'],
            [12.0, 1, 0, 0.0, 'wordpress', 'select BENCHMARK(5000000, EXTRACT(YEAR FROM NOW()))', '2015-04-22 23:00:22']
        ]
        }

        plugin_model.save_table_data(data=data, server=self.server,
            plugin=plugin,
            table_name='slow_queries',
            find_by_string='query',
            unique_hash=True)

        assert data_collection.find().count() == 2

        result = plugin_model.get_table_data(server=self.server,
                plugin=plugin,
                table_name='slow_queries',
                additional_ignore_keys=['unique_hash'])

        assert set(result['header']) == set(data['headers'])
        assert result['data'].count() == 2


        data = {'headers': ['query_time', 'rows_sent', 'rows_examined', 'lock_time', 'db', 'query', 'start_time'],
        'data': [
            [3.0, 1, 0, 0.0, 'wordpress', 'select BENCHMARK(500000000, EXTRACT(YEAR FROM NOW()))', '2015-04-22 23:50:40'],
            [12.0, 1, 0, 0.0, 'wordpress', 'select BENCHMARK(5000000, EXTRACT(YEAR FROM NOW()))', '2015-04-22 23:00:22']
        ]
        }

        plugin_model.save_table_data(data=data, server=self.server,
            plugin=plugin,
            table_name='slow_queries',
            find_by_string='query',
            unique_hash=True)

        assert data_collection.find().count() == 2

        result = plugin_model.get_table_data(server=self.server,
                plugin=plugin,
                table_name='slow_queries',
                additional_ignore_keys=['unique_hash'])

        assert set(result['header']) == set(data['headers'])
        assert result['data'].count() == 2

        self._cleanup()
Esempio n. 41
0
    def get_save_table_data_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='nginx',
                                            server_id=self.server['_id'])
        data = {
            'headers': [u'visitors', u'hits', u'bytes', u'percent', u'data'],
            'data': [[1, 34, 0, 3.91, u'/static/css/screen.css'],
                     [1, 34, 0, 3.91, u'/static/js/libs/libs.min.js'],
                     [1, 33, 0, 3.8, u'/static/css/chart.css']]
        }
        plugin_model.save_table_data(data=data,
                                     server=self.server,
                                     plugin=plugin,
                                     table_name='requests',
                                     find_by_string='data')

        data_collection = plugin_model._get_table_data_collection(
            plugin=plugin, table_name='requests')

        assert data_collection.find().count() == 3

        result = plugin_model.get_table_data(server=self.server,
                                             plugin=plugin,
                                             table_name='requests')

        assert set(result['header']) == set(data['headers'])
        assert len(result['data']) == 3

        # Check if it doesnt create duplicates
        plugin_model.save_table_data(data=data,
                                     server=self.server,
                                     plugin=plugin,
                                     table_name='requests',
                                     find_by_string='data')

        assert data_collection.find().count() == 3

        data_collection.remove()
        plugin_model.collection.remove()
        # Check for the harders - sql queries

        plugin = plugin_model.get_or_create(name='mysql',
                                            server_id=self.server['_id'])
        data_collection = plugin_model._get_table_data_collection(
            plugin=plugin, table_name='slow_queries')
        data_collection.remove()

        data = {
            'headers': [
                'query_time', 'rows_sent', 'rows_examined', 'lock_time', 'db',
                'query', 'start_time'
            ],
            'data': [[
                3.0, 1, 0, 0.0, 'wordpress',
                'select BENCHMARK(500000000, EXTRACT(YEAR FROM NOW()))',
                '2015-04-22 23:50:40'
            ],
                     [
                         12.0, 1, 0, 0.0, 'wordpress',
                         'select BENCHMARK(5000000, EXTRACT(YEAR FROM NOW()))',
                         '2015-04-22 23:00:22'
                     ]]
        }

        plugin_model.save_table_data(data=data,
                                     server=self.server,
                                     plugin=plugin,
                                     table_name='slow_queries',
                                     find_by_string='query',
                                     unique_hash=True)

        assert data_collection.find().count() == 2

        result = plugin_model.get_table_data(
            server=self.server,
            plugin=plugin,
            table_name='slow_queries',
            additional_ignore_keys=['unique_hash'])

        assert set(result['header']) == set(data['headers'])
        assert len(result['data']) == 2

        data = {
            'headers': [
                'query_time', 'rows_sent', 'rows_examined', 'lock_time', 'db',
                'query', 'start_time'
            ],
            'data': [[
                3.0, 1, 0, 0.0, 'wordpress',
                'select BENCHMARK(500000000, EXTRACT(YEAR FROM NOW()))',
                '2015-04-22 23:50:40'
            ],
                     [
                         12.0, 1, 0, 0.0, 'wordpress',
                         'select BENCHMARK(5000000, EXTRACT(YEAR FROM NOW()))',
                         '2015-04-22 23:00:22'
                     ]]
        }

        plugin_model.save_table_data(data=data,
                                     server=self.server,
                                     plugin=plugin,
                                     table_name='slow_queries',
                                     find_by_string='query',
                                     unique_hash=True)

        assert data_collection.find().count() == 2

        result = plugin_model.get_table_data(
            server=self.server,
            plugin=plugin,
            table_name='slow_queries',
            additional_ignore_keys=['unique_hash'])

        assert set(result['header']) == set(data['headers'])
        assert len(result['data']) == 2

        self._cleanup()
Esempio n. 42
0
    def get_server_metrics_test(self):
        self._cleanup()

        process_name = "alertest-process"
        plugin_name = "alertest-plugin"
        process = process_model.get_or_create(server_id=self.server_id, name=process_name)
        plugin = plugin_model.get_or_create(name=plugin_name, server_id=self.server_id)
        plugin_data = {
            'count.count_first_key': 2,
            'second.second_key': 4,
            'more.more_key': 5,
            'count.count_second_key': 4
        }
        plugin_model.save_gauges(plugin=plugin, data=plugin_data, time=1)
        plugin_gauges_keys = plugin_model.get_gauge_keys_for_server(server_id=self.server_id)

        volumes_model.get_or_create(server_id=self.server_id, name='get_server_metrics_volume')
        interfaces_model.get_or_create(server_id=self.server_id, name='get_server_metrics_interface')


        result = self.model.get_server_metrics(server_id=self.server_id)

        system_metrics = ['CPU', 'Memory', 'Loadavg', 'Disk', 'Network/inbound', 'Network/outbound', 'Not Sending Data']
        system_values = ["server:{0}.metric:{1}.rule_type:system".format(self.server_id, x.replace(" ", "")) for x in system_metrics]

        volumes = volumes_model.get_all_for_server(server_id=self.server_id)
        for v in volumes:
            value = "server:{0}.metric:Disk.rule_type:system.volume:{1}".format(self.server_id, v.get('name'))
            system_values.append(value)

        interfaces = interfaces_model.get_all_for_server(server_id=self.server_id)
        for i in interfaces:
            value = "server:{0}.metric:Network/inbound.rule_type:system.interface:{1}".format(self.server_id, i.get('name'))
            system_values.append(value)

            value = "server:{0}.metric:Network/outbound.rule_type:system.interface:{1}".format(self.server_id, i.get('name'))
            system_values.append(value)

        
        process_metrics = ['CPU', 'Memory']
        process_alerts_names = ["{0}.{1}".format(process_name, x.replace(" ", "")) for x in process_metrics]
        process_values = ["server:{0}.process:{1}.metric:{2}.rule_type:process".format(self.server_id, process['_id'],  x) for x in process_metrics]

        process_uptime = ['Down']
        process_uptime_alerts_names = ["{0}.{1}".format(process_name, x.replace(" ", "")) for x in process_uptime]
        process_uptime_values = ["server:{0}.process:{1}.metric:{2}.rule_type:uptime".format(self.server_id, process['_id'],  x) for x in process_uptime]

        plugin_alert_names = ["{0}.{1}".format(plugin_name, x) for x in plugin_data.keys()]
        plugin_values = []
        for plugin_gauge_key in plugin_gauges_keys:
            gauge = plugin_gauge_key.get('gauge')
            key = plugin_gauge_key.get('key')

            _id = "server:{0}.plugin:{1}.gauge:{2}.key:{3}.rule_type:plugin".format(
                self.server_id,  
                plugin['_id'], 
                gauge['_id'],
                key
            )
            plugin_values.append(_id)


        assert len(plugin_values) == 4  # All the keys from plugin_data

        for r in result:
            value = r.get('value')
            metric_dict = dict(v.split(":") for v in value.split("."))

            alert_type = metric_dict.get('rule_type')
                

            assert alert_type != None
            assert alert_type in ['system', 'process', 'plugin', 'uptime']

            if alert_type == 'system':
                assert r.get('metric') in system_metrics
                assert r.get('value') in system_values
            
            elif alert_type == 'process':
                assert r.get('metric') in ['CPU', 'Memory']
                assert r.get('name') in process_alerts_names
                assert r.get('value') in process_values
            elif alert_type == 'uptime':
                assert r.get('metric') in ['Down']
                assert r.get('name') in process_uptime_alerts_names
                assert r.get('value') in process_uptime_values

            elif alert_type == 'plugin':
                assert r.get('name') in plugin_alert_names
                assert r.get('value') in plugin_values
            else:
                assert False  # Should not be here
Esempio n. 43
0
    def save_gauges_test(self):
        self._cleanup()

        expires_at = datetime.utcnow() + timedelta(hours=24)

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])
        gauge_data = {
            u'performance.cpu_load': 1.08719,
            u'performance.busy_workers': 117.0,
            u'performance.idle_workers': 523.0,
            u'net.bytes': 86855934115.0,
            u'requests.per.second': 140.7,
            u'net.hits': 35534902.0
        }

        plugin_model.save_gauges(data=gauge_data,
                                 plugin=plugin,
                                 time=1,
                                 expires_at=expires_at)

        collection = plugin_model._get_gauges_data_collection()

        gauges = plugin_model.get_gauges_cursor(plugin=plugin)

        gauges_dict = {}
        for g in gauges:
            gauges_dict[str(g['_id'])] = g['name']

        for r in collection.find():
            gauge_id = str(r['gauge_id'])

            gauge_name = gauges_dict[gauge_id]
            assert gauge_name in ['net', 'performance', 'requests']
            self.assertTrue(r['t'], int)
            self.assertEqual(r['expires_at'].date(), expires_at.date())

            if gauge_name == 'net':
                self.assertCountEqual(r.keys(), [
                    u't', u'hits', u'bytes', u'gauge_id', u'_id', 'expires_at'
                ])

                self.assertEqual(r['hits'], 35534902.0)
                self.assertEqual(r['bytes'], 86855934115.0)

            elif gauge_name == 'performance':

                self.assertCountEqual(r.keys(), [
                    u't', u'cpu_load', u'busy_workers', u'idle_workers',
                    u'gauge_id', u'_id', 'expires_at'
                ])

                self.assertEqual(r['cpu_load'], 1.08719)
                self.assertEqual(r['busy_workers'], 117.0)
                self.assertEqual(r['idle_workers'], 523.0)

            elif gauge_name == 'requests':

                self.assertCountEqual(
                    r.keys(),
                    [u't', u'per_second', u'gauge_id', u'_id', 'expires_at'])

                self.assertEqual(r['per_second'], 140.7)

        self._cleanup()
Esempio n. 44
0
    def save_counters_test(self):
        self._cleanup()

        plugin = plugin_model.get_or_create(name='test1',
                                            server_id=self.server['_id'])

        counter_data = {
            u'rows.inserted': 4,
            u'rows.updated': 6,
            u'rows.deleted': 4,
            u'rows.returned': 1832119,
            u'rows.fetched': 680425,
            u'xact.rollbacks': 0,
            u'xact.commits': 26869,
            u'performance.disk_read': 170,
            u'performance.buffer_hit': 1711069
        }

        plugin_model.save_counters(data=counter_data,
                                   plugin=plugin,
                                   server=self.server)

        collection = plugin_model._get_counters_collection()

        for r in collection.find():
            self.assertEqual(
                sorted(r.keys()),
                sorted([
                    u'server_id', u'rows', u't', u'xact', u'performance',
                    u'plugin_id', u'_id'
                ]))

            rows = r['rows']

            eq_(r['plugin_id'], plugin['_id'])
            self.assertTrue(r['t'], int)

            self.assertEqual(
                rows, {
                    u'deleted': 4,
                    u'inserted': 4,
                    u'updated': 6,
                    u'fetched': 680425,
                    u'returned': 1832119
                })

            rows = r['xact']
            self.assertEqual(rows, {u'commits': 26869, u'rollbacks': 0})

            rows = r['performance']
            self.assertEqual(rows, {u'buffer_hit': 1711069, u'disk_read': 170})

        # Test duplicates - the counters should be only a single entry in the collection
        collection.remove()
        for i in range(0, 10):
            plugin_model.save_counters(data=counter_data,
                                       plugin=plugin,
                                       server=self.server)

        result = collection.find().count()
        eq_(result, 1)

        self._cleanup()