示例#1
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')
示例#2
0
    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',
            ))
示例#3
0
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]
示例#4
0
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')
示例#9
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')
示例#10
0
    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
示例#11
0
    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
示例#12
0
    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
示例#13
0
    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)
示例#14
0
    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)
示例#15
0
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
示例#16
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
示例#17
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"
示例#18
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"
示例#19
0
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]
示例#20
0
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
示例#21
0
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
示例#22
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')
示例#23
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'
        )
示例#24
0
 def setUp(self):
     self.client = get_client()
     filedir = os.path.dirname(__file__)
     loader = FileSystemLoader(filedir)
     self.env = Environment(loader=loader)
     opbeat.instrumentation.control.instrument()
示例#25
0
 def test_proxy_responds_as_client(self):
     self.assertEquals(get_client(), client)
示例#26
0
 def test_get_platform_info(self):
     client = get_client()
     platform_info = client.get_platform_info()
     self.assertIn(django.get_version(), platform_info)
示例#27
0
 def setUp(self):
     self.opbeat = get_client()
     self.opbeat.events = []
     instrumentation.control.instrument()
示例#28
0
 def setUp(self):
     self.opbeat = get_client()
     self.opbeat.events = []
     instrumentation.control.instrument()
示例#29
0
 def setUp(self):
     # self.logger = logging.getLogger(__name__)
     self.opbeat = get_client()
     opbeat.instrumentation.control.instrument(self.opbeat)
示例#30
0
 def setUp(self):
     self.client = get_client()
     self.port = 59990
     self.start_test_server()
     opbeat.instrumentation.control.instrument()
示例#31
0
 def test_proxy_responds_as_client(self):
     self.assertEquals(get_client(), client)
示例#32
0
 def setUp(self):
     self.logger = logging.getLogger(__name__)
     self.opbeat = get_client()
示例#33
0
 def setUp(self):
     self.client = get_client()
     self.port = 59990
     self.start_test_server()
     opbeat.instrumentation.control.instrument(self.client)
示例#34
0
 def setUp(self):
     # self.logger = logging.getLogger(__name__)
     self.opbeat = get_client()
     opbeat.instrumentation.control.instrument(self.opbeat)
示例#35
0
 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()
     opbeat.instrumentation.control.instrument()
示例#37
0
 def setUp(self):
     self.opbeat = get_client()
     opbeat.instrumentation.control.instrument()
示例#38
0
 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)
示例#39
0
 def setUp(self):
     self.logger = logging.getLogger(__name__)
     self.opbeat = get_client()