diff --git a/README.rst b/README.rst index 98df2ba..877ccf6 100644 --- a/README.rst +++ b/README.rst @@ -42,3 +42,4 @@ namespace: package and put it into the metadata of every transaction. * `elasticapm.transactions_ignore_patterns`: Whitespace separated list of ignore patterns. +* `elasticapm.transaction_sample_rate`: Transaction sample rate diff --git a/requirements.lock b/requirements.lock index 39e1dea..df2824c 100644 --- a/requirements.lock +++ b/requirements.lock @@ -23,7 +23,7 @@ py==1.10.0 pycodestyle==2.7.0 pyflakes==2.3.1 pyparsing==2.4.7 -pyramid==2.0 +pyramid==1.8.0 pytest-cache==1.0 pytest-cov==2.11.1 pytest-flake8==1.0.7 diff --git a/src/pyramid_elasticapm/__init__.py b/src/pyramid_elasticapm/__init__.py index 9ed2e6a..55478e0 100644 --- a/src/pyramid_elasticapm/__init__.py +++ b/src/pyramid_elasticapm/__init__.py @@ -6,7 +6,7 @@ import pkg_resources from elasticapm.utils import compat, get_url_dict from pyramid.events import ApplicationCreated, subscriber -from pyramid.util import reraise +from pyramid._compat import reraise def includeme(config): @@ -37,6 +37,7 @@ def __init__(self, handler, registry): 'SERVER_URL': settings['elasticapm.server_url'], 'SECRET_TOKEN': settings['elasticapm.secret_token'], 'ENVIRONMENT': settings['elasticapm.environment'], + 'TRANSACTION_SAMPLE_RATE': settings['elasticapm.transaction_sample_rate'], } if settings.get('elasticapm.transactions_ignore_patterns', ''): config['TRANSACTIONS_IGNORE_PATTERNS'] = settings[ @@ -67,6 +68,8 @@ def __init__(self, handler, registry): def __call__(self, request): self.client.begin_transaction('request') + transaction_result = "" + response = None try: response = self.handler(request) transaction_result = response.status[0] + 'xx' @@ -109,7 +112,7 @@ def get_data_from_request(self, request, response): # remove Cookie header since the same data is in # request["cookies"] as well data['headers'].pop('Cookie', None) - if response.status_code >= 400: + if response is not None and response.status_code >= 400: data['body'] = request.body data['response_body'] = response.body return data @@ -121,7 +124,7 @@ def get_data_from_response(self, response): if response.headers: data['headers'] = { key: ';'.join(response.headers.getall(key)) - for key in compat.iterkeys(response.headers) + for key in response.headers.iterkeys() } return data diff --git a/src/pyramid_elasticapm/tests/test_plugin.py b/src/pyramid_elasticapm/tests/test_plugin.py index b5c1557..8c9cbbc 100644 --- a/src/pyramid_elasticapm/tests/test_plugin.py +++ b/src/pyramid_elasticapm/tests/test_plugin.py @@ -12,6 +12,7 @@ def make_app(server_url): 'elasticapm.environment': 'testing', 'elasticapm.service_distribution': 'pytest', 'elasticapm.transactions_ignore_patterns': 'foo bar baz', + 'elasticapm.transaction_sample_rate': 1.0, } config = Configurator(settings=settings) config.include('pyramid_elasticapm')