summaryrefslogtreecommitdiff
path: root/ceilometer/polling
diff options
context:
space:
mode:
authorRafael Weingärtner <rafael@apache.org>2020-05-29 12:05:31 -0300
committerRafael Weingärtner <rafael@apache.org>2020-05-29 12:11:17 -0300
commit1a4ab34df565fa00dc72edfd263afc56276f7621 (patch)
tree1c748de24d11e875cf71002e19b6a9ede24f4f80 /ceilometer/polling
parent2dcd15a46661026cf2f88de66f834b46151f59f1 (diff)
downloadceilometer-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.py75
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: