diff options
author | Rafael Weingärtner <rafael@apache.org> | 2020-05-29 12:05:31 -0300 |
---|---|---|
committer | Rafael Weingärtner <rafael@apache.org> | 2020-05-29 12:11:17 -0300 |
commit | 1a4ab34df565fa00dc72edfd263afc56276f7621 (patch) | |
tree | 1c748de24d11e875cf71002e19b6a9ede24f4f80 /ceilometer/polling | |
parent | 2dcd15a46661026cf2f88de66f834b46151f59f1 (diff) | |
download | ceilometer-1a4ab34df565fa00dc72edfd263afc56276f7621.tar.gz |
Enable OpenStack pollster to configure Ids(project, user, and resource)
This pull request enables OpenStack pollsters to configure
Ids(project, user, and resource) as the non-openstack pollster.
This is useful as some of the OpenStack APIs use other keys to represent
values such as project_id and user_id.
Change-Id: Id5ae1720ad714675722bc857a142d7bd667fe7ed
Diffstat (limited to 'ceilometer/polling')
-rw-r--r-- | ceilometer/polling/dynamic_pollster.py | 75 |
1 files changed, 46 insertions, 29 deletions
diff --git a/ceilometer/polling/dynamic_pollster.py b/ceilometer/polling/dynamic_pollster.py index 18a39d12..f230c833 100644 --- a/ceilometer/polling/dynamic_pollster.py +++ b/ceilometer/polling/dynamic_pollster.py @@ -362,7 +362,11 @@ class PollsterDefinitions(object): PollsterDefinition(name='metadata_mapping', default={}), PollsterDefinition(name='preserve_mapped_metadata', default=True), PollsterDefinition(name='response_entries_key'), - PollsterDefinition(name='next_sample_url_attribute')] + PollsterDefinition(name='next_sample_url_attribute'), + PollsterDefinition(name='user_id_attribute', default="user_id"), + PollsterDefinition(name='resource_id_attribute', default="id"), + PollsterDefinition(name='project_id_attribute', default="project_id"), + ] extra_definitions = [] @@ -482,14 +486,52 @@ class PollsterSampleGatherer(object): response_json, url, self.definitions.configurations['name']) if entry_size > 0: - response = self.retrieve_entries_from_response(response_json) + samples = self.retrieve_entries_from_response(response_json) url_to_next_sample = self.get_url_to_next_sample(response_json) if url_to_next_sample: kwargs['next_sample_url'] = url_to_next_sample - response += self.execute_request_get_samples(**kwargs) - return response + samples += self.execute_request_get_samples(**kwargs) + + self.execute_id_overrides(samples) + return samples return [] + def execute_id_overrides(self, samples): + if samples: + user_id_attribute = self.definitions.configurations[ + 'user_id_attribute'] + project_id_attribute = self.definitions.configurations[ + 'project_id_attribute'] + resource_id_attribute = self.definitions.configurations[ + 'resource_id_attribute'] + + for request_sample in samples: + self.generate_new_attributes_in_sample( + request_sample, user_id_attribute, 'user_id') + self.generate_new_attributes_in_sample( + request_sample, project_id_attribute, 'project_id') + self.generate_new_attributes_in_sample( + request_sample, resource_id_attribute, 'id') + + def generate_new_attributes_in_sample( + self, sample, attribute_key, new_attribute_key): + + if attribute_key == new_attribute_key: + LOG.debug("We do not need to generate new attribute as the " + "attribute_key[%s] and the new_attribute_key[%s] " + "configurations are the same.", + attribute_key, new_attribute_key) + return + + if attribute_key: + attribute_value = self.definitions.sample_extractor.\ + retrieve_attribute_nested_value(sample, attribute_key) + + LOG.debug("Mapped attribute [%s] to value [%s] in sample [%s].", + attribute_key, attribute_value, sample) + + sample[new_attribute_key] = attribute_value + def get_url_to_next_sample(self, resp): linked_sample_extractor = self.definitions.configurations[ 'next_sample_url_attribute'] @@ -545,11 +587,8 @@ class NonOpenStackApisPollsterDefinition(PollsterDefinitions): PollsterDefinition(name='value_attribute', required=True), PollsterDefinition(name='module', required=True), PollsterDefinition(name='authentication_object', required=True), - PollsterDefinition(name='user_id_attribute'), - PollsterDefinition(name='resource_id_attribute'), PollsterDefinition(name='barbican_secret_id', default=""), PollsterDefinition(name='authentication_parameters', default=""), - PollsterDefinition(name='project_id_attribute'), PollsterDefinition(name='endpoint_type')] def __init__(self, configurations): @@ -602,28 +641,6 @@ class NonOpenStackApisSamplesGatherer(PollsterSampleGatherer): return resp, url - def execute_request_get_samples(self, **kwargs): - samples = super(NonOpenStackApisSamplesGatherer, - self).execute_request_get_samples(**kwargs) - - if samples: - user_id_attribute = self.definitions.configurations[ - 'user_id_attribute'] - project_id_attribute = self.definitions.configurations[ - 'project_id_attribute'] - resource_id_attribute = self.definitions.configurations[ - 'resource_id_attribute'] - - for request_sample in samples: - self.generate_new_attributes_in_sample( - request_sample, user_id_attribute, 'user_id') - self.generate_new_attributes_in_sample( - request_sample, project_id_attribute, 'project_id') - self.generate_new_attributes_in_sample( - request_sample, resource_id_attribute, 'id') - - return samples - def generate_new_attributes_in_sample( self, sample, attribute_key, new_attribute_key): if attribute_key: |