Exemplo n.º 1
0
 def test_client_subtracer(self):
     tracer = DummyTracer(MockTracer())
     tornado_opentracing.init_client_tracing(tracer)
     self.assertFalse(getattr(tornado, '__opentracing_patch', False))
     self.assertTrue(getattr(tornado, '__opentracing_client_patch', False))
     self.assertEqual(tornado_opentracing.httpclient.g_client_tracer,
                      tracer._tracer)
Exemplo n.º 2
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 tracer_stack_context():
            self.http_client.fetch(self.get_url('/'), self.stop)

        response = self.wait()
        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,
            })
Exemplo n.º 3
0
    def test_client_start_span(self):
        def test_cb(span, request):
            pass

        tornado_opentracing.init_client_tracing(MockTracer(),
                                                start_span_cb=test_cb)
        self.assertEqual(tornado_opentracing.httpclient.g_start_span_cb,
                         test_cb)
Exemplo n.º 4
0
    def test_client_tracer_none(self, tracer):
        tornado_opentracing.init_client_tracing()
        self.assertEqual(tornado_opentracing.httpclient._get_tracer(),
                         opentracing.tracer)

        opentracing.tracer = mock.MagicMock()
        self.assertEqual(tornado_opentracing.httpclient._get_tracer(),
                         opentracing.tracer)
Exemplo n.º 5
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))
Exemplo n.º 6
0
    def test_server_not_found(self):
        tornado_opentracing.init_client_tracing(self.tracer)

        with tracer_stack_context():
            self.http_client.fetch(self.get_url('/doesnotexist'), self.stop)

        response = self.wait()
        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)
Exemplo n.º 7
0
    def test_simple(self):
        tornado_opentracing.init_client_tracing(self.tracer)

        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, 'GET')
        self.assertEqual(spans[0].tags, {
            'component': 'tornado',
            'span.kind': 'client',
            'http.url': self.get_url('/'),
            'http.method': 'GET',
            'http.status_code': 200,
        })
Exemplo n.º 8
0
    def test_simple(self):
        tornado_opentracing.init_client_tracing(tracing)

        with tracer_stack_context():
            self.http_client.fetch(self.get_url('/decorated'), self.stop)

        response = self.wait()
        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)
Exemplo n.º 9
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,
        })
Exemplo n.º 10
0
    def test_no_tracer(self):
        tornado_opentracing.init_client_tracing()

        with mock.patch('opentracing.tracer', new=self.tracer):
            with tracer_stack_context():
                self.http_client.fetch(self.get_url('/'), self.stop)

        response = self.wait()
        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,
            })
Exemplo n.º 11
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))
Exemplo n.º 12
0
 def test_client_start_span_cb_invalid(self):
     with self.assertRaises(ValueError):
         tornado_opentracing.init_client_tracing(MockTracer(),
                                                 start_span_cb=object())
Exemplo n.º 13
0
 def test_client_tracer_none(self):
     tornado_opentracing.init_client_tracing()
     self.assertEqual(tornado_opentracing.httpclient.g_client_tracer,
                      opentracing.tracer)
Exemplo n.º 14
0
from tornado_opentracing.scope_managers import TornadoScopeManager


def client_start_span_cb(span, request):
    span.operation_name = 'client/%s' % request.method
    span.set_tag('headers', request.headers)


# Pass your OpenTracing-compatible tracer here
# using TornadoScopeManager.
tracing = tornado_opentracing.TornadoTracing(opentracing.tracer)

# Since we are not doing a full tornado_opentracing.init_tracing(),
# we need to manually call init_client_tracing() if we want to do
# HTTP client tracing too.
tornado_opentracing.init_client_tracing(opentracing.tracer,
                                        start_span_cb=client_start_span_cb)


class ClientLogHandler(RequestHandler):
    @tracing.trace()
    @gen.coroutine
    def get(self):
        yield AsyncHTTPClient().fetch('http://127.0.0.1:8080/server/log')
        self.write({'message': 'Sent a request to log'})


class ClientChildSpanHandler(RequestHandler):
    @tracing.trace()
    @gen.coroutine
    def get(self):
        yield AsyncHTTPClient().fetch('http://127.0.0.1:8080/server/childspan')