def test_request_metrics_contrib_redirect(self): self.opbeat.instrumentation_store.get_all() # clear the store # enable middleware wrapping client = get_client() client.instrument_django_middleware = True from opbeat.contrib.django.middleware import OpbeatAPMMiddleware OpbeatAPMMiddleware._opbeat_instrumented = False s = Site.objects.get(pk=1) Redirect.objects.create(site=s, old_path='/redirect/me/', new_path='/here/') with self.settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware', 'django.contrib.redirects.middleware.RedirectFallbackMiddleware', ], ): response = self.client.get('/redirect/me/') timed_requests, _traces = self.opbeat.instrumentation_store.get_all() timing = timed_requests[0] self.assertEqual( timing['transaction'], 'GET django.contrib.redirects.middleware.RedirectFallbackMiddleware' '.process_response')
def test_request_metrics_301_append_slash(self): self.opbeat.instrumentation_store.get_all() # clear the store # enable middleware wrapping client = get_client() client.instrument_django_middleware = True with self.settings( MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware', 'django.middleware.common.CommonMiddleware', ], APPEND_SLASH=True, ): self.client.get(reverse('opbeat-no-error-slash')[:-1]) timed_requests, _traces = self.opbeat.instrumentation_store.get_all() timing = timed_requests[0] self.assertIn( timing['transaction'], ( # django <= 1.8 'GET django.middleware.common.CommonMiddleware.process_request', # django 1.9+ 'GET django.middleware.common.CommonMiddleware.process_response', ))
def test_perf_database_render(benchmark): client = TestClient() opbeat = get_client() instrumentation.control.instrument() opbeat.instrumentation_store.get_all() with mock.patch( "opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False with override_settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware' ]): resp = benchmark(client_get, client, reverse("render-user-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() # If the test falls right at the change from one minute to another # this will have two items. assert 0 < len(transactions) < 3, [ t["transaction"] for t in transactions ] assert len(traces) == 5, [t["signature"] for t in traces]
def test_perf_transaction_with_collection(benchmark): opbeat = get_client() opbeat.instrumentation_store.get_all() with mock.patch( "opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False opbeat.events = [] client = TestClient() with override_settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware' ]): for i in range(10): resp = client_get(client, reverse("render-user-template")) assert resp.status_code == 200 assert len(opbeat.events) == 0 # Force collection on next request should_collect.return_value = True @benchmark def result(): # Code to be measured return client_get(client, reverse("render-user-template")) assert result.status_code is 200 assert len(opbeat.events) > 0
def test_request_metrics_contrib_redirect(self): self.opbeat.instrumentation_store.get_all() # clear the store # enable middleware wrapping client = get_client() client.instrument_django_middleware = True from opbeat.contrib.django.middleware import OpbeatAPMMiddleware OpbeatAPMMiddleware._opbeat_instrumented = False s = Site.objects.get(pk=1) Redirect.objects.create(site=s, old_path='/redirect/me/', new_path='/here/') with self.settings( MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware', 'django.contrib.redirects.middleware.RedirectFallbackMiddleware', ], ): response = self.client.get('/redirect/me/') timed_requests, _traces = self.opbeat.instrumentation_store.get_all() timing = timed_requests[0] self.assertEqual( timing['transaction'], 'GET django.contrib.redirects.middleware.RedirectFallbackMiddleware' '.process_response' )
def test_request_metrics_301_append_slash(self): self.opbeat.instrumentation_store.get_all() # clear the store # enable middleware wrapping client = get_client() client.instrument_django_middleware = True with self.settings( MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware', 'django.middleware.common.CommonMiddleware', ], APPEND_SLASH=True, ): self.client.get(reverse('opbeat-no-error-slash')[:-1]) timed_requests, _traces = self.opbeat.instrumentation_store.get_all() timing = timed_requests[0] self.assertIn( timing['transaction'], ( # django <= 1.8 'GET django.middleware.common.CommonMiddleware.process_request', # django 1.9+ 'GET django.middleware.common.CommonMiddleware.process_response', ) )
def test_perf_transaction_with_collection(benchmark): opbeat = get_client() opbeat.instrumentation_store.get_all() with mock.patch("opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False opbeat.events = [] client = TestClient() with override_settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware']): for i in range(10): resp = client_get(client, reverse("render-user-template")) assert resp.status_code == 200 assert len(opbeat.events) == 0 # Force collection on next request should_collect.return_value = True @benchmark def result(): # Code to be measured return client_get(client, reverse("render-user-template")) assert result.status_code is 200 assert len(opbeat.events) > 0
def test_stacktrace_filtered_for_opbeat(): client = TestClient() opbeat = get_client() instrumentation.control.instrument() # Clear the LRU frame cache Transaction._lrucache = LRUCache(maxsize=5000) with mock.patch( "opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False with override_settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware']): resp = client.get(reverse("render-heavy-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() expected_signatures = ['transaction', 'list_users.html', 'something_expensive'] # Reorder according to the kinds list so we can just test them sig_dict = dict([(t['signature'], t) for t in traces]) traces = [sig_dict[k] for k in expected_signatures] assert traces[1]['signature'] == 'list_users.html' frames = traces[1]['extra']['_frames'] # Top frame should be inside django rendering assert frames[0]['module'].startswith('django.template')
def test_stacktrace_filtered_for_opbeat(): client = TestClient() opbeat = get_client() instrumentation.control.instrument() # Clear the LRU frame cache Transaction._lrucache = LRUCache(maxsize=5000) with mock.patch( "opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False with override_settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware' ]): resp = client.get(reverse("render-heavy-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() expected_signatures = [ 'transaction', 'list_users.html', 'something_expensive' ] # Reorder according to the kinds list so we can just test them sig_dict = dict([(t['signature'], t) for t in traces]) traces = [sig_dict[k] for k in expected_signatures] assert traces[1]['signature'] == 'list_users.html' frames = traces[1]['extra']['_frames'] # Top frame should be inside django rendering assert frames[0]['module'].startswith('django.template')
def __init__(self): self.client = get_client() if not self._opbeat_instrumented: with self._instrumenting_lock: if not self._opbeat_instrumented: if self.client.instrument_django_middleware: self.instrument_middlewares() OpbeatAPMMiddleware._opbeat_instrumented = True
def __init__(self, *args, **kwargs): super(OpbeatAPMMiddleware, self).__init__(*args, **kwargs) self.client = get_client() if not self._opbeat_instrumented: with self._instrumenting_lock: if not self._opbeat_instrumented: if self.client.instrument_django_middleware: self.instrument_middlewares() OpbeatAPMMiddleware._opbeat_instrumented = True
def test_get_client(self): self.assertEquals(get_client(), get_client()) self.assertEquals(get_client('opbeat.base.Client').__class__, Client) self.assertEquals(get_client(), self.opbeat) self.assertEquals(get_client('%s.%s' % (self.opbeat.__class__.__module__, self.opbeat.__class__.__name__)), self.opbeat) self.assertEquals(get_client(), self.opbeat)
def test_perf_template_render_no_middleware(benchmark): client = TestClient() opbeat = get_client() instrumentation.control.instrument() with mock.patch( "opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False resp = benchmark(client_get, client, reverse("render-heavy-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() assert len(transactions) == 0 assert len(traces) == 0
def test_perf_database_render_no_instrumentation(benchmark): opbeat = get_client() opbeat.instrumentation_store.get_all() with mock.patch("opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False client = TestClient() resp = benchmark(client_get, client, reverse("render-user-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() assert len(transactions) == 0 assert len(traces) == 0
def test_stacktraces_have_templates(): client = TestClient() opbeat = get_client() instrumentation.control.instrument() # Clear the LRU frame cache Transaction._lrucache = LRUCache(maxsize=5000) # only Django 1.9+ have the necessary information stored on Node/Template # instances when TEMPLATE_DEBUG = False TEMPLATE_DEBUG = django.VERSION < (1, 9) with mock.patch( "opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False TEMPLATES_copy = deepcopy(settings.TEMPLATES) TEMPLATES_copy[0]['OPTIONS']['debug'] = TEMPLATE_DEBUG with override_settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware' ], TEMPLATE_DEBUG=TEMPLATE_DEBUG, TEMPLATES=TEMPLATES_copy): resp = client.get(reverse("render-heavy-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() assert len(transactions) == 1 assert len(traces) == 3, [t["signature"] for t in traces] expected_signatures = [ 'transaction', 'list_users.html', 'something_expensive' ] assert set([t['signature'] for t in traces]) == set(expected_signatures) # Reorder according to the kinds list so we can just test them sig_dict = dict([(t['signature'], t) for t in traces]) traces = [sig_dict[k] for k in expected_signatures] assert traces[2]['signature'] == 'something_expensive' # Find the template for frame in traces[2]['extra']['_frames']: if frame['lineno'] == 4 and frame['filename'].endswith( 'django/testapp/templates/list_users.html'): break else: assert False is True, "Template was not found"
def test_stacktraces_have_templates(): client = TestClient() opbeat = get_client() instrumentation.control.instrument() # Clear the LRU frame cache Transaction._lrucache = LRUCache(maxsize=5000) # only Django 1.9+ have the necessary information stored on Node/Template # instances when TEMPLATE_DEBUG = False TEMPLATE_DEBUG = django.VERSION < (1, 9) with mock.patch("opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False TEMPLATES_copy = deepcopy(settings.TEMPLATES) TEMPLATES_copy[0]['OPTIONS']['debug'] = TEMPLATE_DEBUG with override_settings( MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware' ], TEMPLATE_DEBUG=TEMPLATE_DEBUG, TEMPLATES=TEMPLATES_copy ): resp = client.get(reverse("render-heavy-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() assert len(transactions) == 1 assert len(traces) == 3, [t["signature"] for t in traces] expected_signatures = ['transaction', 'list_users.html', 'something_expensive'] assert set([t['signature'] for t in traces]) == set(expected_signatures) # Reorder according to the kinds list so we can just test them sig_dict = dict([(t['signature'], t) for t in traces]) traces = [sig_dict[k] for k in expected_signatures] assert traces[2]['signature'] == 'something_expensive' # Find the template for frame in traces[2]['extra']['_frames']: if frame['lineno'] == 4 and frame['filename'].endswith('django/testapp/templates/list_users.html'): break else: assert False is True, "Template was not found"
def test_perf_template_render(benchmark): client = TestClient() opbeat = get_client() instrumentation.control.instrument() with mock.patch("opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False with override_settings(MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware']): resp = benchmark(client_get, client, reverse("render-heavy-template")) assert resp.status_code == 200 transactions, traces = opbeat.instrumentation_store.get_all() # If the test falls right at the change from one minute to another # this will have two items. assert 0 < len(transactions) < 3, [t["transaction"] for t in transactions] assert len(traces) == 3, [t["signature"] for t in traces]
def test_perf_transaction_without_middleware(benchmark): opbeat = get_client() opbeat.instrumentation_store.get_all() with mock.patch("opbeat.traces.RequestsStore.should_collect") as should_collect: should_collect.return_value = False client = TestClient() opbeat.events = [] for i in range(10): resp = client_get(client, reverse("render-user-template")) assert resp.status_code == 200 assert len(opbeat.events) == 0 @benchmark def result(): # Code to be measured return client_get(client, reverse("render-user-template")) assert len(opbeat.events) == 0
def test_request_metrics_301_prepend_www(self): self.opbeat.instrumentation_store.get_all() # clear the store # enable middleware wrapping client = get_client() client.instrument_django_middleware = True with self.settings( MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware', 'django.middleware.common.CommonMiddleware', ], PREPEND_WWW=True, ): self.client.get(reverse('opbeat-no-error')) timed_requests, _traces = self.opbeat.instrumentation_store.get_all() timing = timed_requests[0] self.assertEqual( timing['transaction'], 'GET django.middleware.common.CommonMiddleware.process_request')
def test_request_metrics_301_prepend_www(self): self.opbeat.instrumentation_store.get_all() # clear the store # enable middleware wrapping client = get_client() client.instrument_django_middleware = True with self.settings( MIDDLEWARE_CLASSES=[ 'opbeat.contrib.django.middleware.OpbeatAPMMiddleware', 'django.middleware.common.CommonMiddleware', ], PREPEND_WWW=True, ): self.client.get(reverse('opbeat-no-error')) timed_requests, _traces = self.opbeat.instrumentation_store.get_all() timing = timed_requests[0] self.assertEqual( timing['transaction'], 'GET django.middleware.common.CommonMiddleware.process_request' )
def setUp(self): self.client = get_client() filedir = os.path.dirname(__file__) loader = FileSystemLoader(filedir) self.env = Environment(loader=loader) opbeat.instrumentation.control.instrument()
def test_proxy_responds_as_client(self): self.assertEquals(get_client(), client)
def test_get_platform_info(self): client = get_client() platform_info = client.get_platform_info() self.assertIn(django.get_version(), platform_info)
def setUp(self): self.opbeat = get_client() self.opbeat.events = [] instrumentation.control.instrument()
def setUp(self): # self.logger = logging.getLogger(__name__) self.opbeat = get_client() opbeat.instrumentation.control.instrument(self.opbeat)
def setUp(self): self.client = get_client() self.port = 59990 self.start_test_server() opbeat.instrumentation.control.instrument()
def setUp(self): self.logger = logging.getLogger(__name__) self.opbeat = get_client()
def setUp(self): self.client = get_client() self.port = 59990 self.start_test_server() opbeat.instrumentation.control.instrument(self.client)
def setUp(self): self.opbeat = get_client() opbeat.instrumentation.control.instrument()
def setUp(self): self.client = get_client() filedir = os.path.dirname(__file__) loader = FileSystemLoader(filedir) self.env = Environment(loader=loader) opbeat.instrumentation.control.instrument(self.client)