diff options
author | gord chung <gord@live.ca> | 2016-12-20 21:22:22 +0000 |
---|---|---|
committer | gord chung <gord@live.ca> | 2016-12-20 23:07:52 +0000 |
commit | dcd69a9e6a7ca5049c627d61c839dcc1ed4fa3f4 (patch) | |
tree | d2485c7c1faef27ca01cc3d1296c78b80d47934e /ceilometer/sample.py | |
parent | 6f1482f088a408edd43463a00ed16f6f78bb059d (diff) | |
download | ceilometer-dcd69a9e6a7ca5049c627d61c839dcc1ed4fa3f4.tar.gz |
add support to parse user metadata
leverage the same user metadata parsing the pollster use. it
basically grabs all entries in target payload with specified
namespace.
this is needed for nova free polling
Change-Id: I676a1c2f16cc4259072b51df62a1c5e342caeb6f
Diffstat (limited to 'ceilometer/sample.py')
-rw-r--r-- | ceilometer/sample.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/ceilometer/sample.py b/ceilometer/sample.py index bcd25bf5..d5318822 100644 --- a/ceilometer/sample.py +++ b/ceilometer/sample.py @@ -25,14 +25,55 @@ import uuid from oslo_config import cfg from oslo_utils import timeutils +import six OPTS = [ cfg.StrOpt('sample_source', default='openstack', help='Source for samples emitted on this instance.'), + cfg.ListOpt('reserved_metadata_namespace', + default=['metering.'], + help='List of metadata prefixes reserved for metering use.'), + cfg.IntOpt('reserved_metadata_length', + default=256, + help='Limit on length of reserved metadata values.'), + cfg.ListOpt('reserved_metadata_keys', + default=[], + help='List of metadata keys reserved for metering use. And ' + 'these keys are additional to the ones included in the ' + 'namespace.'), ] +def add_reserved_user_metadata(conf, src_metadata, dest_metadata): + limit = conf.reserved_metadata_length + user_metadata = {} + for prefix in conf.reserved_metadata_namespace: + md = dict( + (k[len(prefix):].replace('.', '_'), + v[:limit] if isinstance(v, six.string_types) else v) + for k, v in src_metadata.items() + if (k.startswith(prefix) and + k[len(prefix):].replace('.', '_') not in dest_metadata) + ) + user_metadata.update(md) + + for metadata_key in conf.reserved_metadata_keys: + md = dict( + (k.replace('.', '_'), + v[:limit] if isinstance(v, six.string_types) else v) + for k, v in src_metadata.items() + if (k == metadata_key and + k.replace('.', '_') not in dest_metadata) + ) + user_metadata.update(md) + + if user_metadata: + dest_metadata['user_metadata'] = user_metadata + + return dest_metadata + + # Fields explanation: # # Source: the source of this sample |