From f5b08423b913043891a956ad1dd92a553c24d557 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Wed, 6 Jun 2012 16:11:07 -0400 Subject: [PATCH] add counter type field bug 1006425 Rename the existing counter "type" field to "name" and add a new field with values of "cumulative" or "delta". Change-Id: I459049bab28c3e2146b7a1b2e134dddabe381a6a --- ceilometer/agent/manager.py | 2 +- ceilometer/collector/manager.py | 2 +- ceilometer/compute/libvirt.py | 9 ++++++--- ceilometer/compute/network.py | 5 +++-- ceilometer/compute/notifications.py | 3 ++- ceilometer/counter.py | 1 + ceilometer/meter.py | 1 + tests/agent/test_manager.py | 3 ++- tests/collector/test_dispatcher.py | 4 ++-- tests/compute/test_network.py | 14 +++++++++----- tests/compute/test_notifications.py | 9 +++++---- tests/test_meter.py | 4 +++- 12 files changed, 36 insertions(+), 21 deletions(-) diff --git a/ceilometer/agent/manager.py b/ceilometer/agent/manager.py index 8d3e9487..be5d67fc 100644 --- a/ceilometer/agent/manager.py +++ b/ceilometer/agent/manager.py @@ -78,7 +78,7 @@ class AgentManager(manager.Manager): } rpc.cast(context, cfg.CONF.metering_topic, msg) rpc.cast(context, - cfg.CONF.metering_topic + '.' + c.type, + cfg.CONF.metering_topic + '.' + c.name, msg) except Exception as err: LOG.warning('Continuing after error from %s: %s', name, err) diff --git a/ceilometer/collector/manager.py b/ceilometer/collector/manager.py index d053440b..e9b8cada 100644 --- a/ceilometer/collector/manager.py +++ b/ceilometer/collector/manager.py @@ -84,7 +84,7 @@ class CollectorManager(manager.Manager): ctxt = context.get_admin_context() nova_rpc.cast(ctxt, cfg.CONF.metering_topic, msg) nova_rpc.cast(ctxt, - cfg.CONF.metering_topic + '.' + counter.type, + cfg.CONF.metering_topic + '.' + counter.name, msg) def record_metering_data(self, context, data): diff --git a/ceilometer/compute/libvirt.py b/ceilometer/compute/libvirt.py index b6a58964..622f020a 100644 --- a/ceilometer/compute/libvirt.py +++ b/ceilometer/compute/libvirt.py @@ -37,9 +37,10 @@ LOG = logging.getLogger('nova.' + __name__) MIB = 2 ** 20 # mebibytes -def make_counter_from_instance(instance, type, volume): +def make_counter_from_instance(instance, name, type, volume): return counter.Counter( source='?', + name=name, type=type, volume=volume, user_id=instance.user_id, @@ -91,7 +92,8 @@ class DiskIOPollster(plugin.PollsterBase): stats[2], stats[3], stats[4]) bytes += stats[1] + stats[3] # combine read and write yield make_counter_from_instance(instance, - type='disk', + name='disk', + type='cumulative', volume=bytes / MIB, ) @@ -112,7 +114,8 @@ class CPUPollster(plugin.PollsterBase): self.LOG.info("CPUTIME USAGE: %s %d", instance, cpu_info['cpu_time']) yield make_counter_from_instance(instance, - type='cpu', + name='cpu', + type='cumulative', volume=cpu_info['cpu_time'], ) except Exception as err: diff --git a/ceilometer/compute/network.py b/ceilometer/compute/network.py index 5907084f..4c14853a 100644 --- a/ceilometer/compute/network.py +++ b/ceilometer/compute/network.py @@ -36,12 +36,13 @@ class FloatingIPPollster(plugin.PollsterBase): for ip in ips: self.LOG.info("FLOATING IP USAGE: %s" % ip.address) yield counter.Counter(source='?', - type='floating_ip', + name='floating_ip', + type='delta', volume=1, user_id=None, project_id=ip.project_id, resource_id=ip.id, - datetime=None, + timestamp=None, duration=None, resource_metadata={ 'address': ip.address, diff --git a/ceilometer/compute/notifications.py b/ceilometer/compute/notifications.py index 6e5c1f2e..1a2ce391 100644 --- a/ceilometer/compute/notifications.py +++ b/ceilometer/compute/notifications.py @@ -26,7 +26,8 @@ def c1(body): """Generate c1(instance) counters for a notice.""" return counter.Counter( source='?', - type='instance', + name='instance', + type='delta', volume=1, user_id=body['payload']['user_id'], project_id=body['payload']['tenant_id'], diff --git a/ceilometer/counter.py b/ceilometer/counter.py index 5344fb3f..c8e736f0 100644 --- a/ceilometer/counter.py +++ b/ceilometer/counter.py @@ -27,6 +27,7 @@ import collections Counter = collections.namedtuple('Counter', ' '.join(['source', + 'name', 'type', 'volume', 'user_id', diff --git a/ceilometer/meter.py b/ceilometer/meter.py index b39b40dc..802704f9 100644 --- a/ceilometer/meter.py +++ b/ceilometer/meter.py @@ -59,6 +59,7 @@ def meter_message_from_counter(counter): for a notification message and a Counter instance. """ msg = {'source': counter.source, + 'counter_name': counter.name, 'counter_type': counter.type, 'counter_volume': counter.volume, 'user_id': counter.user_id, diff --git a/tests/agent/test_manager.py b/tests/agent/test_manager.py index b8ed34df..ec98dfd0 100644 --- a/tests/agent/test_manager.py +++ b/tests/agent/test_manager.py @@ -41,7 +41,8 @@ class TestRunTasks(test.TestCase): counters = [] test_data = counter.Counter( source='test', - type='test', + name='test', + type='cumulative', volume=1, user_id='test', project_id='test', diff --git a/tests/collector/test_dispatcher.py b/tests/collector/test_dispatcher.py index dc4322a5..b1f796d4 100644 --- a/tests/collector/test_dispatcher.py +++ b/tests/collector/test_dispatcher.py @@ -73,7 +73,7 @@ def test_notify(): d.notify(TEST_NOTICE) assert len(results) == 1 counter = results[0] - assert counter.type == 'instance' + assert counter.name == 'instance' def test_load_compute_plugins(): @@ -103,4 +103,4 @@ def test_notify_through_plugin(): d.notify(TEST_NOTICE) assert len(results) == 1 counter = results[0] - assert counter.type == 'instance' + assert counter.name == 'instance' diff --git a/tests/compute/test_network.py b/tests/compute/test_network.py index d032db13..6486f30a 100644 --- a/tests/compute/test_network.py +++ b/tests/compute/test_network.py @@ -34,19 +34,23 @@ class TestFloatingIPPollster(test.TestCase): super(TestFloatingIPPollster, self).setUp() def test_get_counters(self): - self.assertEqual(list(self.pollster.get_counters(self.manager, self.context)), []) + self.assertEqual(list(self.pollster.get_counters(self.manager, + self.context)), + []) def test_get_counters_not_empty(self): db.floating_ip_create(self.context, {'address': '1.1.1.1', - 'host': self.manager.host }) + 'host': self.manager.host, + }) db.floating_ip_create(self.context, {'address': '1.1.1.2', - 'host': self.manager.host + "randomstring" }) + 'host': self.manager.host + "randomstring", + }) db.floating_ip_create(self.context, {'address': '1.1.1.3', - 'host': self.manager.host + "randomstring" }) + 'host': self.manager.host + "randomstring", + }) counters = list(self.pollster.get_counters(self.manager, self.context)) self.assertEqual(len(counters), 1) self.assertEqual(counters[0].resource_metadata['address'], '1.1.1.1') - diff --git a/tests/compute/test_notifications.py b/tests/compute/test_notifications.py index a5a71ebe..98e633d1 100644 --- a/tests/compute/test_notifications.py +++ b/tests/compute/test_notifications.py @@ -135,7 +135,8 @@ def test_c1(): info = notifications.c1(INSTANCE_CREATE_END) for name, actual, expected in [ - ('counter_type', info.type, 'instance'), + ('counter_name', info.name, 'instance'), + ('counter_type', info.type, 'delta'), ('counter_volume', info.volume, 1), ('timestamp', info.timestamp, INSTANCE_CREATE_END['timestamp']), @@ -155,18 +156,18 @@ def test_instance_create(): ic = notifications.InstanceNotifications() counters = ic.process_notification(INSTANCE_CREATE_END) assert len(counters) == 1 - assert counters[0].type == 'instance' + assert counters[0].name == 'instance' def test_instance_exists(): ic = notifications.InstanceNotifications() counters = ic.process_notification(INSTANCE_EXISTS) assert len(counters) == 1 - assert counters[0].type == 'instance' + assert counters[0].name == 'instance' def test_instance_delete(): ic = notifications.InstanceNotifications() counters = ic.process_notification(INSTANCE_DELETE_START) assert len(counters) == 1 - assert counters[0].type == 'instance' + assert counters[0].name == 'instance' diff --git a/tests/test_meter.py b/tests/test_meter.py index 095e9ded..fc431eed 100644 --- a/tests/test_meter.py +++ b/tests/test_meter.py @@ -62,6 +62,7 @@ def test_compute_signature_use_configured_secret(): TEST_COUNTER = counter.Counter(source='src', + name='name', type='typ', volume=1, user_id='user', @@ -124,7 +125,8 @@ def test_meter_message_from_counter_field(): def compare(f, c, msg_f, msg): assert msg == c msg = meter.meter_message_from_counter(TEST_COUNTER) - name_map = {'type': 'counter_type', + name_map = {'name': 'counter_name', + 'type': 'counter_type', 'volume': 'counter_volume', 'duration': 'counter_duration', }