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'])
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'])
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}×tamp=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()
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' ]
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()
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'])
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()
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()
def setUp(self): self.user = User.objects.create_user(password='******', email='*****@*****.**') self.account_id = 1 self.collection = dashboard_metrics_model.collection self.servers_collection = dashboard_metrics_model.mongo.get_collection( 'servers') self.servers_collection.insert({"name": "testserver"}) self.server = self.servers_collection.find_one() self.server_id = self.server['_id'] dashboard_model.collection.insert({"name": "testdashboard"}) self.dashboard = dashboard_model.collection.find_one() self.dashboard_id = self.dashboard['_id'] self.process_collection = dashboard_metrics_model.mongo.get_collection( 'processes') self.process_collection.insert({"name": "testprocess"}) self.process = self.process_collection.find_one() self.process_id = self.process['_id'] self.plugins_collection = dashboard_metrics_model.mongo.get_collection( 'plugins') self.plugins_collection.insert({"name": "testplugin"}) self.plugin = self.plugins_collection.find_one() self.plugin_id = self.plugin['_id'] # Will populate the keys data = { 't': 1, 'count.count_key': 2, 'second.second_key': 4, 'more.more_key': 5 } plugin_model.save_gauges(plugin=self.plugin, data=data, time=1) self.metrics_collection = dashboard_metrics_model.mongo.get_collection( 'metrics') self.metrics_collection.insert({"name": "testmetric", "type": "gauge"}) self.metric = self.metrics_collection.find_one() self.metric_id = self.metric['_id']
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()
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()
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']
def setUp(self): self.user = User.objects.create_user(password='******', email='*****@*****.**') self.account_id = 1 self.collection = dashboard_metrics_model.collection self.servers_collection = dashboard_metrics_model.mongo.get_collection('servers') self.servers_collection.insert({"name" : "testserver"}) self.server = self.servers_collection.find_one() self.server_id = self.server['_id'] dashboard_model.collection.insert({"name" : "testdashboard"}) self.dashboard = dashboard_model.collection.find_one() self.dashboard_id = self.dashboard['_id'] self.process_collection = dashboard_metrics_model.mongo.get_collection('processes') self.process_collection.insert({"name" : "testprocess"}) self.process = self.process_collection.find_one() self.process_id = self.process['_id'] self.plugins_collection = dashboard_metrics_model.mongo.get_collection('plugins') self.plugins_collection.insert({"name" : "testplugin"}) self.plugin = self.plugins_collection.find_one() self.plugin_id = self.plugin['_id'] # Will populate the keys data = {'t': 1, 'count.count_key': 2, 'second.second_key': 4, 'more.more_key': 5 } plugin_model.save_gauges(plugin=self.plugin, data=data, time=1) self.metrics_collection = dashboard_metrics_model.mongo.get_collection('metrics') self.metrics_collection.insert({"name" : "testmetric", "type": "gauge"}) self.metric = self.metrics_collection.find_one() self.metric_id = self.metric['_id']
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']
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' ])
def delete_gauges_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_gauges(data=gauge_data, plugin=plugin) collection = plugin_model._get_gauges_data_collection() result = collection.find().count() eq_(result, 10) plugin_model.delete_gauges(plugin=plugin) result = collection.find().count() eq_(result, 0) self._cleanup()
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']
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}×tamp=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()
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
def delete_gauges_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_gauges(data=gauge_data, plugin=plugin) collection = plugin_model._get_gauges_data_collection() result = collection.find().count() eq_(result, 10) plugin_model.delete_gauges(plugin=plugin) result = collection.find().count() eq_(result, 0) self._cleanup()
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()
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