diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-09-04 01:31:06 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-09-04 01:31:06 +0000 |
commit | 1499ab88b5b437c45b5d345ea8ce1dc61cd060c4 (patch) | |
tree | b155801bdfabf25d2bcd82b4af6c1a46a8e06632 /ceilometer/meter | |
parent | 9ec064d8d7aa1ddceca3286ecc1b4af932e2e0b8 (diff) | |
parent | d836f8f54a712ba1ad793e393a7eaef0c8cf6024 (diff) | |
download | ceilometer-1499ab88b5b437c45b5d345ea8ce1dc61cd060c4.tar.gz |
Merge "support custom metadata"
Diffstat (limited to 'ceilometer/meter')
-rw-r--r-- | ceilometer/meter/notifications.py | 18 |
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): |