Mark /v2.0/log/single as deprecated

/v2.0/log/single has been marked as depracated,
therefore this commit provides:
- marked endpoint as depracated with '@falcon.depracated'
which will effect in adding log message to log file
with appropriate information
- successful responses for /v2.0/log/single will contain
'deprecated' header. Additionally there is a 'link' header
which notifies user where to look current endpoint
according to [RFC 5988]

Change-Id: Ib652015a1a0fbc4a1a14c0d9bbb9752da4669e6c
This commit is contained in:
Tomasz Trębski 2016-03-11 10:05:26 +01:00
parent 73a1db9a33
commit 08e91a5807
4 changed files with 45 additions and 3 deletions

View File

@ -19,6 +19,10 @@ from monasca_log_api.api import headers
from monasca_log_api.api import logs_api
from monasca_log_api.reference.v2.common import log_publisher
from monasca_log_api.reference.v2.common import service
from monasca_log_api import uri_map
_DEPRECATED_INFO = ('%s has been deprecated. Please use %s.'
% (uri_map.V2_LOGS_URI, uri_map.V3_LOGS_URI))
# TODO(idea) perhaps add it as pipeline call right before API, seems generic
@ -45,6 +49,7 @@ class Logs(logs_api.LogsApi):
super(Logs, self).__init__()
@falcon.before(_before_logs_post)
@falcon.deprecated(_DEPRECATED_INFO)
def on_post(self, req, res):
service.Validations.validate_payload_size(req)
service.Validations.validate_content_type(req)
@ -61,6 +66,13 @@ class Logs(logs_api.LogsApi):
self._kafka_publisher.send_message(envelope)
res.status = falcon.HTTP_204
res.add_link(
target=str(_get_v3_link(req)),
rel='current', # [RFC5005]
title='V3 Logs',
type_hint='application/json'
)
res.append_header('DEPRECATED', 'true')
def get_envelope(self, log, tenant_id):
return self._log_creator.new_log_envelope(
@ -75,3 +87,9 @@ class Logs(logs_api.LogsApi):
payload=request.stream,
content_type=request.content_type
)
def _get_v3_link(req):
self_uri = req.uri.decode('UTF-8')
base_uri = self_uri.replace(req.relative_uri, '')
return '%s%s' % (base_uri, uri_map.V3_LOGS_URI)

View File

@ -22,6 +22,8 @@ from oslo_log import log
import paste.deploy
import simport
from monasca_log_api import uri_map
LOG = log.getLogger(__name__)
CONF = cfg.CONF
@ -71,15 +73,15 @@ def launch(conf, config_file='/etc/monasca/log-api-config.conf'):
def load_healthcheck_resource(app):
healthchecks = simport.load(CONF.dispatcher.healthchecks)()
app.add_route('/healthcheck', healthchecks)
app.add_route(uri_map.HEALTHCHECK_URI, healthchecks)
def load_logs_resource(app):
logs = simport.load(CONF.dispatcher.logs)()
app.add_route('/v2.0/log/single', logs)
app.add_route(uri_map.V2_LOGS_URI, logs)
logs_v3 = simport.load(CONF.dispatcher.logs_v3)()
app.add_route('/v3.0/logs', logs_v3)
app.add_route(uri_map.V3_LOGS_URI, logs_v3)
def load_versions_resource(app):

View File

@ -41,6 +41,25 @@ class TestLogs(testing.TestBase):
self.logs_resource
)
def test_should_contain_deprecated_details_in_successful_response(self):
self.logs_resource._log_creator = mock.Mock()
self.logs_resource._kafka_publisher = mock.Mock()
self.simulate_request(
'/log/single',
method='POST',
headers={
headers.X_ROLES.name: 'some_role',
headers.X_DIMENSIONS.name: 'a:1',
'Content-Type': 'application/json',
'Content-Length': '0'
}
)
self.assertEqual(falcon.HTTP_204, self.srmock.status)
self.assertIn('deprecated', self.srmock.headers_dict)
self.assertIn('link', self.srmock.headers_dict)
def test_should_fail_not_delegate_ok_cross_tenant_id(self):
self.simulate_request(
'/log/single',

View File

@ -0,0 +1,3 @@
V2_LOGS_URI = '/v2.0/log/single'
V3_LOGS_URI = '/v3.0/logs'
HEALTHCHECK_URI = '/healthcheck'