Beispiel #1
0
    def test_start_span_cb(self):
        def test_cb(span, request):
            span.operation_name = 'foo/' + request.method
            span.set_tag('component', 'tornado-client')

        tornado_opentracing.init_client_tracing(self.tracer,
                                                start_span_cb=test_cb)

        with tornado_context():
            response = self.http_fetch(self.get_url('/'))

        self.assertEqual(response.code, 200)

        spans = self.tracer.finished_spans()
        self.assertEqual(len(spans), 1)
        self.assertTrue(spans[0].finished)
        self.assertEqual(spans[0].operation_name, 'foo/GET')
        self.assertEqual(
            spans[0].tags, {
                'component': 'tornado-client',
                'span.kind': 'client',
                'http.url': self.get_url('/'),
                'http.method': 'GET',
                'http.status_code': 200,
            })
Beispiel #2
0
    def test_start_span_cb_exception(self):
        def test_cb(span, request):
            raise RuntimeError('This should not happen')

        tornado_opentracing.init_client_tracing(self.tracer,
                                                start_span_cb=test_cb)

        with tornado_context():
            response = self.http_fetch(self.get_url('/'))

        self.assertEqual(response.code, 200)

        spans = self.tracer.finished_spans()
        self.assertEqual(len(spans), 1)
        self.assertFalse(spans[0].tags.get('error', False))
Beispiel #3
0
    def test_simple(self):
        with tornado_context():
            response = self.http_fetch(self.get_url('/'), self.stop)

        self.assertEqual(response.code, 200)

        spans = self.tracer.finished_spans()
        self.assertEqual(len(spans), 1)
        self.assertTrue(spans[0].finished)
        self.assertEqual(spans[0].operation_name, 'GET')
        self.assertEqual(spans[0].tags, {
            'component': 'tornado',
            'span.kind': 'client',
            'http.url': self.get_url('/'),
            'http.method': 'GET',
            'http.status_code': 200,
        })
Beispiel #4
0
    def test_server_not_found(self):
        tornado_opentracing.init_client_tracing(self.tracer)

        with tornado_context():
            response = self.http_fetch(self.get_url('/doesnotexist'),
                                       raise_error=False)

        self.assertEqual(response.code, 404)

        spans = self.tracer.finished_spans()
        self.assertEqual(len(spans), 1)
        self.assertEqual(spans[0].operation_name, 'GET')

        tags = spans[0].tags
        self.assertEqual(tags.get('http.status_code', None), 404)
        self.assertEqual(tags.get('error', None), None)  # no error.

        self.assertEqual(len(spans[0].logs), 0)
Beispiel #5
0
    def test_request_obj(self):
        tornado_opentracing.init_client_tracing(self.tracer)

        with tornado_context():
            response = self.http_fetch(HTTPRequest(self.get_url('/')))

        self.assertEqual(response.code, 200)

        spans = self.tracer.finished_spans()
        self.assertEqual(len(spans), 1)
        self.assertTrue(spans[0].finished)
        self.assertEqual(spans[0].operation_name, 'GET')
        self.assertEqual(spans[0].tags, {
            'component': 'tornado',
            'span.kind': 'client',
            'http.url': self.get_url('/'),
            'http.method': 'GET',
            'http.status_code': 200,
        })
    def test_simple(self):
        tornado_opentracing.init_client_tracing(tracing)

        with tornado_context():
            response = self.http_fetch(self.get_url('/decorated'))

        self.assertEqual(response.code, 200)

        spans = tracing.tracer.finished_spans()
        self.assertEqual(len(spans), 2)

        # Client
        span = spans[1]
        self.assertTrue(span.finished)
        self.assertEqual(span.operation_name, 'GET')
        self.assertEqual(
            span.tags, {
                'component': 'tornado',
                'span.kind': 'client',
                'http.url': self.get_url('/decorated'),
                'http.method': 'GET',
                'http.status_code': 200,
            })

        # Server
        span2 = spans[0]
        self.assertTrue(span2.finished)
        self.assertEqual(span2.operation_name, 'DecoratedHandler')
        self.assertEqual(
            span2.tags, {
                'component': 'tornado',
                'span.kind': 'server',
                'http.url': '/decorated',
                'http.method': 'GET',
                'http.status_code': 200,
                'protocol': 'http',
            })

        # Make sure the context was propagated,
        # and the client/server have the proper child_of relationship.
        self.assertEqual(span.context.trace_id, span2.context.trace_id)
        self.assertEqual(span.context.span_id, span2.parent_id)
Beispiel #7
0
    def test_explicit_parameters(self):
        tornado_opentracing.init_client_tracing(self.tracer)

        with tornado_context():
            response = self.http_fetch(
                self.get_url('/error'),
                raise_error=False,
                method='POST',
                body='')

        self.assertEqual(response.code, 500)
        spans = self.tracer.finished_spans()
        self.assertEqual(len(spans), 1)
        self.assertTrue(spans[0].finished)
        self.assertEqual(spans[0].operation_name, 'POST')
        self.assertEqual(spans[0].tags, {
            'component': 'tornado',
            'span.kind': 'client',
            'http.url': self.get_url('/error'),
            'http.method': 'POST',
            'http.status_code': 500,
        })
Beispiel #8
0
    def test_server_error(self):
        tornado_opentracing.init_client_tracing(self.tracer)

        with tornado_context():
            response = self.http_fetch(self.get_url('/error'))

        self.assertEqual(response.code, 500)
        spans = self.tracer.finished_spans()
        self.assertEqual(len(spans), 1)
        self.assertTrue(spans[0].finished)
        self.assertEqual(spans[0].operation_name, 'GET')

        tags = spans[0].tags
        self.assertEqual(tags.get('http.status_code', None), 500)
        self.assertEqual(tags.get('error', None), True)

        logs = spans[0].logs
        self.assertEqual(len(logs), 1)
        self.assertEqual(logs[0].key_values.get('event', None), 'error')
        self.assertTrue(
            isinstance(logs[0].key_values.get('error.object', None),
                       Exception))