Allow customized reseller_prefix in Ceilometer middleware for Swift
Swift can be configured to use a different reseller prefix than AUTH_. In this case Ceilometer returns None as resource_id. This patch allows to set the reseller prefix, with a fallback to AUTH_ if not set. It also ensures that the reseller prefix ends with ``_``. Two additional tests to verify this were added. Change-Id: I1ba40091582da46c0385a71d1828bb3820a5e2b5 Closes-Bug: #1260965
This commit is contained in:
parent
6cb9b88f09
commit
263522d229
@ -33,6 +33,9 @@ use = egg:ceilometer#swift
|
|||||||
# Some optional configuration
|
# Some optional configuration
|
||||||
# this allow to publish additional metadata
|
# this allow to publish additional metadata
|
||||||
metadata_headers = X-TEST
|
metadata_headers = X-TEST
|
||||||
|
|
||||||
|
# Set reseller prefix (defaults to "AUTH_" if not set)
|
||||||
|
reseller_prefix = AUTH_
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
@ -82,6 +85,9 @@ class CeilometerMiddleware(object):
|
|||||||
'ceilometer.transformer',
|
'ceilometer.transformer',
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
self.reseller_prefix = conf.get('reseller_prefix', 'AUTH_')
|
||||||
|
if self.reseller_prefix and self.reseller_prefix[-1] != '_':
|
||||||
|
self.reseller_prefix += '_'
|
||||||
|
|
||||||
def __call__(self, env, start_response):
|
def __call__(self, env, start_response):
|
||||||
start_response_args = [None]
|
start_response_args = [None]
|
||||||
@ -147,7 +153,7 @@ class CeilometerMiddleware(object):
|
|||||||
volume=bytes_received,
|
volume=bytes_received,
|
||||||
user_id=env.get('HTTP_X_USER_ID'),
|
user_id=env.get('HTTP_X_USER_ID'),
|
||||||
project_id=env.get('HTTP_X_TENANT_ID'),
|
project_id=env.get('HTTP_X_TENANT_ID'),
|
||||||
resource_id=account.partition('AUTH_')[2],
|
resource_id=account.partition(self.reseller_prefix)[2],
|
||||||
timestamp=now,
|
timestamp=now,
|
||||||
resource_metadata=resource_metadata)])
|
resource_metadata=resource_metadata)])
|
||||||
|
|
||||||
@ -159,7 +165,7 @@ class CeilometerMiddleware(object):
|
|||||||
volume=bytes_sent,
|
volume=bytes_sent,
|
||||||
user_id=env.get('HTTP_X_USER_ID'),
|
user_id=env.get('HTTP_X_USER_ID'),
|
||||||
project_id=env.get('HTTP_X_TENANT_ID'),
|
project_id=env.get('HTTP_X_TENANT_ID'),
|
||||||
resource_id=account.partition('AUTH_')[2],
|
resource_id=account.partition(self.reseller_prefix)[2],
|
||||||
timestamp=now,
|
timestamp=now,
|
||||||
resource_metadata=resource_metadata)])
|
resource_metadata=resource_metadata)])
|
||||||
|
|
||||||
@ -173,7 +179,7 @@ class CeilometerMiddleware(object):
|
|||||||
volume=1,
|
volume=1,
|
||||||
user_id=env.get('HTTP_X_USER_ID'),
|
user_id=env.get('HTTP_X_USER_ID'),
|
||||||
project_id=env.get('HTTP_X_TENANT_ID'),
|
project_id=env.get('HTTP_X_TENANT_ID'),
|
||||||
resource_id=account.partition('AUTH_')[2],
|
resource_id=account.partition(self.reseller_prefix)[2],
|
||||||
timestamp=now,
|
timestamp=now,
|
||||||
resource_metadata=resource_metadata)])
|
resource_metadata=resource_metadata)])
|
||||||
|
|
||||||
|
@ -270,3 +270,31 @@ class TestSwiftMiddleware(test.BaseTestCase):
|
|||||||
self.assertEqual(len(samples), 0)
|
self.assertEqual(len(samples), 0)
|
||||||
self.assertEqual(resp, ["test"])
|
self.assertEqual(resp, ["test"])
|
||||||
mocked_publish_sample.assert_called_once_with(mock.ANY, 0, 4)
|
mocked_publish_sample.assert_called_once_with(mock.ANY, 0, 4)
|
||||||
|
|
||||||
|
def test_reseller_prefix(self):
|
||||||
|
# No reseller prefix set: ensure middleware uses AUTH_
|
||||||
|
app = swift_middleware.CeilometerMiddleware(FakeApp(), {})
|
||||||
|
req = webob.Request.blank('/1.0/AUTH_account/container/obj',
|
||||||
|
environ={'REQUEST_METHOD': 'GET'})
|
||||||
|
list(app(req.environ, self.start_response))
|
||||||
|
samples = self.pipeline_manager.pipelines[0].samples[0]
|
||||||
|
self.assertEqual(samples.resource_id, "account")
|
||||||
|
|
||||||
|
# Custom reseller prefix set
|
||||||
|
app = swift_middleware.CeilometerMiddleware(
|
||||||
|
FakeApp(), {'reseller_prefix': 'CUSTOM_'})
|
||||||
|
req = webob.Request.blank('/1.0/CUSTOM_account/container/obj',
|
||||||
|
environ={'REQUEST_METHOD': 'GET'})
|
||||||
|
list(app(req.environ, self.start_response))
|
||||||
|
samples = self.pipeline_manager.pipelines[0].samples[0]
|
||||||
|
self.assertEqual(samples.resource_id, "account")
|
||||||
|
|
||||||
|
def test_invalid_reseller_prefix(self):
|
||||||
|
# Custom reseller prefix set, but without trailing underscore
|
||||||
|
app = swift_middleware.CeilometerMiddleware(
|
||||||
|
FakeApp(), {'reseller_prefix': 'CUSTOM'})
|
||||||
|
req = webob.Request.blank('/1.0/CUSTOM_account/container/obj',
|
||||||
|
environ={'REQUEST_METHOD': 'GET'})
|
||||||
|
list(app(req.environ, self.start_response))
|
||||||
|
samples = self.pipeline_manager.pipelines[0].samples[0]
|
||||||
|
self.assertEqual(samples.resource_id, "account")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user