gnocchi: don't create metrics with resource
Ceilometer creates metrics that will never get measures (service not polled, notification not configured). This is because we create all metrics during resource creation. That was done sometimes ago because Gnocchi was not provide metrics creating during batching process. But since a while now, we also create metrics (if missing) during the batch processing. This change removes the creation of metrics during resource creation. All metrics with measures got created during the batch call. This stops to have metric without measures in Gnocchi. Change-Id: I3f3b805722b11029aefdb76bae93413cb32ecff6
This commit is contained in:
parent
3387eb2183
commit
826ba35c6e
@ -356,8 +356,7 @@ class GnocchiPublisher(publisher.ConfigPublisherBase):
|
||||
'resource_type': rd.cfg['resource_type'],
|
||||
'resource': {"id": resource_id,
|
||||
"user_id": sample.user_id,
|
||||
"project_id": sample.project_id,
|
||||
"metrics": rd.metrics}}
|
||||
"project_id": sample.project_id}}
|
||||
|
||||
gnocchi_data[resource_id].setdefault(
|
||||
"resource_extra", {}).update(rd.sample_attributes(sample))
|
||||
@ -371,9 +370,6 @@ class GnocchiPublisher(publisher.ConfigPublisherBase):
|
||||
{'timestamp': sample.timestamp,
|
||||
'value': sample.volume}
|
||||
)
|
||||
# TODO(gordc): unit should really be part of metric definition
|
||||
gnocchi_data[resource_id]['resource']['metrics'][
|
||||
metric_name]['unit'] = sample.unit
|
||||
|
||||
try:
|
||||
self.batch_measures(measures, gnocchi_data)
|
||||
|
@ -316,6 +316,43 @@ class PublisherWorkflowTest(base.BaseTestCase,
|
||||
testscenarios.TestWithScenarios):
|
||||
|
||||
sample_scenarios = [
|
||||
('cpu', dict(
|
||||
sample=sample.Sample(
|
||||
resource_id=str(uuid.uuid4()) + "_foobar",
|
||||
name='cpu',
|
||||
unit='ns',
|
||||
type=sample.TYPE_CUMULATIVE,
|
||||
volume=500,
|
||||
user_id='test_user',
|
||||
project_id='test_project',
|
||||
source='openstack',
|
||||
timestamp='2012-05-08 20:23:48.028195',
|
||||
resource_metadata={
|
||||
'host': 'foo',
|
||||
'image_ref': 'imageref!',
|
||||
'instance_flavor_id': 1234,
|
||||
'display_name': 'myinstance',
|
||||
},
|
||||
),
|
||||
metric_attributes={
|
||||
"archive_policy_name": "ceilometer-low-rate",
|
||||
"unit": "ns",
|
||||
"measures": [{
|
||||
'timestamp': '2012-05-08 20:23:48.028195',
|
||||
'value': 500
|
||||
}]
|
||||
},
|
||||
postable_attributes={
|
||||
'user_id': 'test_user',
|
||||
'project_id': 'test_project',
|
||||
},
|
||||
patchable_attributes={
|
||||
'host': 'foo',
|
||||
'image_ref': 'imageref!',
|
||||
'flavor_id': 1234,
|
||||
'display_name': 'myinstance',
|
||||
},
|
||||
resource_type='instance')),
|
||||
('disk.root.size', dict(
|
||||
sample=sample.Sample(
|
||||
resource_id=str(uuid.uuid4()) + "_foobar",
|
||||
@ -352,20 +389,6 @@ class PublisherWorkflowTest(base.BaseTestCase,
|
||||
'flavor_id': 1234,
|
||||
'display_name': 'myinstance',
|
||||
},
|
||||
metric_names=[
|
||||
'disk.root.size', 'disk.ephemeral.size',
|
||||
'memory', 'vcpus', 'memory.usage', 'memory.resident',
|
||||
'memory.swap.in', 'memory.swap.out',
|
||||
'memory.bandwidth.total', 'memory.bandwidth.local',
|
||||
'cpu', 'cpu.delta', 'cpu_util', 'vcpus', 'disk.read.requests',
|
||||
'cpu_l3_cache', 'perf.cpu.cycles', 'perf.instructions',
|
||||
'perf.cache.references', 'perf.cache.misses',
|
||||
'disk.read.requests.rate', 'disk.write.requests',
|
||||
'disk.write.requests.rate', 'disk.read.bytes',
|
||||
'disk.read.bytes.rate', 'disk.write.bytes',
|
||||
'disk.write.bytes.rate', 'disk.latency', 'disk.iops',
|
||||
'disk.capacity', 'disk.allocation', 'disk.usage',
|
||||
'compute.instance.booting.time'],
|
||||
resource_type='instance')),
|
||||
('hardware.ipmi.node.power', dict(
|
||||
sample=sample.Sample(
|
||||
@ -396,15 +419,6 @@ class PublisherWorkflowTest(base.BaseTestCase,
|
||||
},
|
||||
patchable_attributes={
|
||||
},
|
||||
metric_names=[
|
||||
'hardware.ipmi.node.power', 'hardware.ipmi.node.temperature',
|
||||
'hardware.ipmi.node.inlet_temperature',
|
||||
'hardware.ipmi.node.outlet_temperature',
|
||||
'hardware.ipmi.node.fan', 'hardware.ipmi.node.current',
|
||||
'hardware.ipmi.node.voltage', 'hardware.ipmi.node.airflow',
|
||||
'hardware.ipmi.node.cups', 'hardware.ipmi.node.cpu_util',
|
||||
'hardware.ipmi.node.mem_util', 'hardware.ipmi.node.io_util'
|
||||
],
|
||||
resource_type='ipmi')),
|
||||
]
|
||||
|
||||
@ -544,19 +558,6 @@ class PublisherWorkflowTest(base.BaseTestCase,
|
||||
attributes = self.postable_attributes.copy()
|
||||
attributes.update(self.patchable_attributes)
|
||||
attributes['id'] = self.sample.resource_id
|
||||
attributes['metrics'] = dict((metric_name, {})
|
||||
for metric_name in self.metric_names)
|
||||
for k, v in six.iteritems(attributes['metrics']):
|
||||
if k in ["cpu", "disk.read.requests", "disk.write.requests",
|
||||
"disk.read.bytes", "disk.write.bytes"]:
|
||||
v["archive_policy_name"] = "ceilometer-low-rate"
|
||||
else:
|
||||
v["archive_policy_name"] = "ceilometer-low"
|
||||
|
||||
if k == 'disk.root.size':
|
||||
v['unit'] = 'GB'
|
||||
elif k == 'hardware.ipmi.node.power':
|
||||
v['unit'] = 'W'
|
||||
expected_calls.append(mock.call.resource.create(
|
||||
self.resource_type, attributes))
|
||||
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
issues:
|
||||
- |
|
||||
Ceilometer created metrics that could never get measures depending on the
|
||||
polling configuration. Metrics are now created only if Ceilometer gets at
|
||||
least a measure for them.
|
Loading…
x
Reference in New Issue
Block a user