summaryrefslogtreecommitdiff
path: root/ceilometer/meter
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-09-04 01:31:06 +0000
committerGerrit Code Review <review@openstack.org>2015-09-04 01:31:06 +0000
commit1499ab88b5b437c45b5d345ea8ce1dc61cd060c4 (patch)
treeb155801bdfabf25d2bcd82b4af6c1a46a8e06632 /ceilometer/meter
parent9ec064d8d7aa1ddceca3286ecc1b4af932e2e0b8 (diff)
parentd836f8f54a712ba1ad793e393a7eaef0c8cf6024 (diff)
downloadceilometer-1499ab88b5b437c45b5d345ea8ce1dc61cd060c4.tar.gz
Merge "support custom metadata"
Diffstat (limited to 'ceilometer/meter')
-rw-r--r--ceilometer/meter/notifications.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/ceilometer/meter/notifications.py b/ceilometer/meter/notifications.py
index 0c8b4f3c..de9c2480 100644
--- a/ceilometer/meter/notifications.py
+++ b/ceilometer/meter/notifications.py
@@ -78,6 +78,13 @@ class MeterDefinition(object):
continue
elif isinstance(field, six.integer_types):
self._field_getter[name] = field
+ elif isinstance(field, dict) and name == 'metadata':
+ meta = {}
+ for key, val in field.items():
+ parts = self.parse_jsonpath(val)
+ meta[key] = functools.partial(self._parse_jsonpath_field,
+ parts)
+ self._field_getter['metadata'] = meta
else:
parts = self.parse_jsonpath(field)
self._field_getter[name] = functools.partial(
@@ -102,6 +109,11 @@ class MeterDefinition(object):
getter = self._field_getter.get(field)
if not getter:
return
+ elif isinstance(getter, dict):
+ dict_val = {}
+ for key, val in getter.items():
+ dict_val[key] = val(message, all_values)
+ return dict_val
elif callable(getter):
return getter(message, all_values)
else:
@@ -234,6 +246,7 @@ class ProcessMeterNotifications(plugin_base.NotificationBase):
projectid = self.get_project_id(d, notification_body)
resourceid = d.parse_fields('resource_id', notification_body)
ts = d.parse_fields('timestamp', notification_body)
+ metadata = d.parse_fields('metadata', notification_body)
if d.cfg.get('lookup'):
meters = d.parse_fields('name', notification_body, True)
if not meters: # skip if no meters in payload
@@ -267,7 +280,8 @@ class ProcessMeterNotifications(plugin_base.NotificationBase):
yield sample.Sample.from_notification(
name=m, type=t, unit=unit, volume=v,
resource_id=r, user_id=user, project_id=p,
- message=notification_body, timestamp=ts)
+ message=notification_body, timestamp=ts,
+ metadata=metadata)
else:
yield sample.Sample.from_notification(
name=d.cfg['name'],
@@ -278,7 +292,7 @@ class ProcessMeterNotifications(plugin_base.NotificationBase):
user_id=userid,
project_id=projectid,
message=notification_body,
- timestamp=ts)
+ timestamp=ts, metadata=metadata)
@staticmethod
def get_user_id(d, notification_body):