From db27691905cd86677547cc6218d6e15f8fcf2c01 Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Tue, 21 Aug 2018 17:48:20 -0700 Subject: [PATCH 1/3] Set SpanKind in extenstion --- opencensus/trace/ext/dbapi/trace.py | 2 ++ opencensus/trace/ext/django/middleware.py | 4 +++- opencensus/trace/ext/flask/flask_middleware.py | 3 ++- opencensus/trace/ext/grpc/client_interceptor.py | 4 +++- opencensus/trace/ext/grpc/server_interceptor.py | 4 ++++ opencensus/trace/ext/httplib/trace.py | 2 ++ opencensus/trace/ext/postgresql/trace.py | 2 ++ opencensus/trace/ext/pyramid/pyramid_middleware.py | 3 ++- opencensus/trace/ext/requests/trace.py | 6 +++++- opencensus/trace/ext/sqlalchemy/trace.py | 2 ++ tests/unit/trace/ext/django/test_middleware.py | 2 ++ tests/unit/trace/ext/flask/test_flask_middleware.py | 2 ++ tests/unit/trace/ext/grpc/test_client_interceptor.py | 2 ++ tests/unit/trace/ext/grpc/test_server_interceptor.py | 2 ++ tests/unit/trace/ext/httplib/test_httplib_trace.py | 2 ++ tests/unit/trace/ext/pyramid/test_pyramid_middleware.py | 2 ++ tests/unit/trace/ext/requests/test_requests_trace.py | 3 +++ tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py | 2 ++ 18 files changed, 44 insertions(+), 5 deletions(-) diff --git a/opencensus/trace/ext/dbapi/trace.py b/opencensus/trace/ext/dbapi/trace.py index 79ef0a272..9f9a7108f 100644 --- a/opencensus/trace/ext/dbapi/trace.py +++ b/opencensus/trace/ext/dbapi/trace.py @@ -15,6 +15,7 @@ import logging from opencensus.trace import execution_context +from opencensus.trace import span as span_module CURSOR_WRAP_METHOD = 'cursor' QUERY_WRAP_METHODS = ['execute', 'executemany'] @@ -55,6 +56,7 @@ def call(query, *args, **kwargs): _tracer = execution_context.get_opencensus_tracer() _span = _tracer.start_span() _span.name = 'mysql.query' + _span.span_kind = span_module.SpanKind.CLIENT _tracer.add_attribute_to_current_span('mysql/query', query) _tracer.add_attribute_to_current_span( 'mysql/cursor/method/name', diff --git a/opencensus/trace/ext/django/middleware.py b/opencensus/trace/ext/django/middleware.py index f5ae2cf2f..1982957c5 100644 --- a/opencensus/trace/ext/django/middleware.py +++ b/opencensus/trace/ext/django/middleware.py @@ -18,8 +18,9 @@ from opencensus.trace.ext import utils from opencensus.trace.ext.django.config import (settings, convert_to_import) from opencensus.trace import attributes_helper -from opencensus.trace import tracer as tracer_module from opencensus.trace import execution_context +from opencensus.trace import span as span_module +from opencensus.trace import tracer as tracer_module from opencensus.trace.samplers import probability try: @@ -165,6 +166,7 @@ def process_request(self, request): # Span name is being set at process_view tracer.start_span() + span.span_kind = span_module.SpanKind.SERVER tracer.add_attribute_to_current_span( attribute_key=HTTP_METHOD, attribute_value=request.method) diff --git a/opencensus/trace/ext/flask/flask_middleware.py b/opencensus/trace/ext/flask/flask_middleware.py index b019abe5d..e4142aa7e 100644 --- a/opencensus/trace/ext/flask/flask_middleware.py +++ b/opencensus/trace/ext/flask/flask_middleware.py @@ -21,6 +21,7 @@ from opencensus.trace import attributes_helper from opencensus.trace import execution_context +from opencensus.trace import span as span_module from opencensus.trace import stack_trace from opencensus.trace import status from opencensus.trace import tracer as tracer_module @@ -175,7 +176,7 @@ def _before_request(self): propagator=self.propagator) span = tracer.start_span() - + span.span_kind = span_module.SpanKind.SERVER # Set the span name as the name of the current module name span.name = '[{}]{}'.format( flask.request.method, diff --git a/opencensus/trace/ext/grpc/client_interceptor.py b/opencensus/trace/ext/grpc/client_interceptor.py index fe84d6849..eb2e6cadb 100644 --- a/opencensus/trace/ext/grpc/client_interceptor.py +++ b/opencensus/trace/ext/grpc/client_interceptor.py @@ -20,6 +20,7 @@ from opencensus.trace import attributes_helper from opencensus.trace import execution_context +from opencensus.trace import span as span_module from opencensus.trace import time_event from opencensus.trace.ext import grpc as oc_grpc from opencensus.trace.ext.grpc import utils as grpc_utils @@ -66,7 +67,8 @@ def _start_client_span(self, client_call_details): span = self.tracer.start_span( name=_get_span_name(client_call_details) ) - + + span.span_kind = span_module.SpanKind.CLIENT # Add the component grpc to span attribute self.tracer.add_attribute_to_current_span( attribute_key=attributes_helper.COMMON_ATTRIBUTES.get( diff --git a/opencensus/trace/ext/grpc/server_interceptor.py b/opencensus/trace/ext/grpc/server_interceptor.py index 56bbf03e0..4579ea6d0 100644 --- a/opencensus/trace/ext/grpc/server_interceptor.py +++ b/opencensus/trace/ext/grpc/server_interceptor.py @@ -19,8 +19,10 @@ from opencensus.trace import attributes_helper from opencensus.trace import execution_context +from opencensus.trace import span as span_module from opencensus.trace import stack_trace as stack_trace from opencensus.trace import status + from opencensus.trace import time_event from opencensus.trace import tracer as tracer_module from opencensus.trace.ext import grpc as oc_grpc @@ -108,6 +110,8 @@ def _start_server_span(self, servicer_context): span = tracer.start_span( name=_get_span_name(servicer_context) ) + + span.span_kind = span_module.SpanKind.SERVER tracer.add_attribute_to_current_span( attribute_key=attributes_helper.COMMON_ATTRIBUTES.get( ATTRIBUTE_COMPONENT), diff --git a/opencensus/trace/ext/httplib/trace.py b/opencensus/trace/ext/httplib/trace.py index e6d192d3a..58943b377 100644 --- a/opencensus/trace/ext/httplib/trace.py +++ b/opencensus/trace/ext/httplib/trace.py @@ -17,6 +17,7 @@ from opencensus.trace import attributes_helper from opencensus.trace import execution_context +from opencensus.trace import span as span_module PYTHON2 = sys.version_info.major == 2 @@ -60,6 +61,7 @@ def wrap_httplib_request(request_func): def call(self, method, url, body, headers, *args, **kwargs): _tracer = execution_context.get_opencensus_tracer() _span = _tracer.start_span() + _span.span_kind = span_module.SpanKind.CLIENT _span.name = '[httplib]{}'.format(request_func.__name__) # Add the request url to attributes diff --git a/opencensus/trace/ext/postgresql/trace.py b/opencensus/trace/ext/postgresql/trace.py index a747de8b4..8ef916eb1 100644 --- a/opencensus/trace/ext/postgresql/trace.py +++ b/opencensus/trace/ext/postgresql/trace.py @@ -16,6 +16,7 @@ import logging from opencensus.trace import execution_context +from opencensus.trace import span as span_module import psycopg2 from psycopg2 import connect as pg_connect @@ -55,6 +56,7 @@ def call(query, *args, **kwargs): # here _span = _tracer.start_span() _span.name = '{}.query'.format(MODULE_NAME) + _span.span_kind = span_module.SpanKind.CLIENT _tracer.add_attribute_to_current_span( '{}/query'.format(MODULE_NAME), query) _tracer.add_attribute_to_current_span( diff --git a/opencensus/trace/ext/pyramid/pyramid_middleware.py b/opencensus/trace/ext/pyramid/pyramid_middleware.py index ba265e6a5..cd4c5dcf3 100644 --- a/opencensus/trace/ext/pyramid/pyramid_middleware.py +++ b/opencensus/trace/ext/pyramid/pyramid_middleware.py @@ -19,9 +19,9 @@ from opencensus.trace import attributes_helper from opencensus.trace import execution_context +from opencensus.trace import span as span_module from opencensus.trace import tracer as tracer_module - HTTP_METHOD = attributes_helper.COMMON_ATTRIBUTES['HTTP_METHOD'] HTTP_URL = attributes_helper.COMMON_ATTRIBUTES['HTTP_URL'] HTTP_STATUS_CODE = attributes_helper.COMMON_ATTRIBUTES['HTTP_STATUS_CODE'] @@ -91,6 +91,7 @@ def _before_request(self, request): request.method, request.path) + span.span_kind = span_module.SpanKind.SERVER tracer.add_attribute_to_current_span( attribute_key=HTTP_METHOD, attribute_value=request.method) diff --git a/opencensus/trace/ext/requests/trace.py b/opencensus/trace/ext/requests/trace.py index db688d74b..f22984e03 100644 --- a/opencensus/trace/ext/requests/trace.py +++ b/opencensus/trace/ext/requests/trace.py @@ -17,6 +17,7 @@ import wrapt from opencensus.trace import execution_context +from opencensus.trace import span as span_module log = logging.getLogger(__name__) @@ -50,6 +51,7 @@ def call(url, *args, **kwargs): _tracer = execution_context.get_opencensus_tracer() _span = _tracer.start_span() _span.name = '[requests]{}'.format(requests_func.__name__) + _span.span_kind = span_module.SpanKind.CLIENT # Add the requests url to attributes _tracer.add_attribute_to_current_span('requests/url', url) @@ -72,8 +74,10 @@ def wrap_session_request(wrapped, instance, args, kwargs): url = kwargs.get('url') or args[1] _tracer = execution_context.get_opencensus_tracer() _span = _tracer.start_span() - _span.name = '[requests]{}'.format(method) + _span.name = '[requests]{}'.format(method) + _span.span_kind = span_module.SpanKind.CLIENT + # Add the requests url to attributes _tracer.add_attribute_to_current_span('requests/url', url) diff --git a/opencensus/trace/ext/sqlalchemy/trace.py b/opencensus/trace/ext/sqlalchemy/trace.py index ce3f9130b..bd82f8fba 100644 --- a/opencensus/trace/ext/sqlalchemy/trace.py +++ b/opencensus/trace/ext/sqlalchemy/trace.py @@ -19,6 +19,7 @@ from opencensus.trace import execution_context +from opencensus.trace import span as span_module log = logging.getLogger(__name__) @@ -63,6 +64,7 @@ def _before_cursor_execute(conn, cursor, statement, parameters, _tracer = execution_context.get_opencensus_tracer() _span = _tracer.start_span() _span.name = '{}.query'.format(MODULE_NAME) + _span.span_kind = span_module.SpanKind.CLIENT # Set query statement attribute _tracer.add_attribute_to_current_span( diff --git a/tests/unit/trace/ext/django/test_middleware.py b/tests/unit/trace/ext/django/test_middleware.py index b9ccc6c54..b237dd18e 100644 --- a/tests/unit/trace/ext/django/test_middleware.py +++ b/tests/unit/trace/ext/django/test_middleware.py @@ -19,6 +19,7 @@ from django.test.utils import teardown_test_environment from opencensus.trace import execution_context +from opencensus.trace import span as span_module from opencensus.trace.exporters import print_exporter from opencensus.trace.exporters import zipkin_exporter from opencensus.trace.exporters.transports import sync @@ -192,6 +193,7 @@ def test_process_request(self): '/http/url': u'/', '/http/method': 'GET', } + self.assertEqual(span.span_kind, span_module.SpanKind.SERVER) self.assertEqual(span.attributes, expected_attributes) self.assertEqual(span.parent_span.span_id, span_id) diff --git a/tests/unit/trace/ext/flask/test_flask_middleware.py b/tests/unit/trace/ext/flask/test_flask_middleware.py index a18aefc30..c994c7f34 100644 --- a/tests/unit/trace/ext/flask/test_flask_middleware.py +++ b/tests/unit/trace/ext/flask/test_flask_middleware.py @@ -23,6 +23,7 @@ from opencensus.trace import execution_context from opencensus.trace import span_data +from opencensus.trace import span as span_module from opencensus.trace import stack_trace from opencensus.trace import status from opencensus.trace.exporters import print_exporter, stackdriver_exporter, \ @@ -180,6 +181,7 @@ def test__before_request(self): '/http/method': 'GET', } + self.assertEqual(span.span_kind, span_module.SpanKind.SERVER) self.assertEqual(span.attributes, expected_attributes) self.assertEqual(span.parent_span.span_id, span_id) diff --git a/tests/unit/trace/ext/grpc/test_client_interceptor.py b/tests/unit/trace/ext/grpc/test_client_interceptor.py index 9491cb3da..ab2470e83 100644 --- a/tests/unit/trace/ext/grpc/test_client_interceptor.py +++ b/tests/unit/trace/ext/grpc/test_client_interceptor.py @@ -16,6 +16,7 @@ import mock from opencensus.trace import execution_context +from opencensus.trace import span as span_module from opencensus.trace.ext.grpc import client_interceptor from opencensus.trace.tracers.noop_tracer import NoopTracer @@ -193,6 +194,7 @@ def test__callback_no_exception(self): expected_attributes = {'/error/message': None} self.assertEqual(current_span.attributes, expected_attributes) + self.assertEqual(current_span.kind, span_module.SpanKind.CLIENT) def _unary_helper(self): continuation = mock.Mock() diff --git a/tests/unit/trace/ext/grpc/test_server_interceptor.py b/tests/unit/trace/ext/grpc/test_server_interceptor.py index abd21ce8f..470c42509 100644 --- a/tests/unit/trace/ext/grpc/test_server_interceptor.py +++ b/tests/unit/trace/ext/grpc/test_server_interceptor.py @@ -137,6 +137,8 @@ def test_intercept_handler_exception(self): execution_context.get_opencensus_tracer().current_span().attributes, expected_attributes) + self.assertEqual(current_span.kind, span_module.SpanKind.SERVER) + # check that the stack trace is attached to the current span self.assertIsNotNone(current_span.stack_trace) self.assertIsNotNone(current_span.stack_trace.stack_trace_hash_id) diff --git a/tests/unit/trace/ext/httplib/test_httplib_trace.py b/tests/unit/trace/ext/httplib/test_httplib_trace.py index 60bd4a23f..fc765a7a6 100644 --- a/tests/unit/trace/ext/httplib/test_httplib_trace.py +++ b/tests/unit/trace/ext/httplib/test_httplib_trace.py @@ -16,6 +16,7 @@ import mock +from opencensus.trace import span as span_module from opencensus.trace.ext.httplib import trace from opencensus.trace.propagation import trace_context_http_header_format @@ -98,6 +99,7 @@ def test_wrap_httplib_request(self): self.assertEqual(expected_attributes, mock_tracer.span.attributes) self.assertEqual(expected_name, mock_tracer.span.name) + self.assertEqual(span_module.SpanKind.CLIENT, mock_tracer.span.span_kind) def test_wrap_httplib_response(self): mock_span = mock.Mock() diff --git a/tests/unit/trace/ext/pyramid/test_pyramid_middleware.py b/tests/unit/trace/ext/pyramid/test_pyramid_middleware.py index d45fc056b..3076fc3c6 100644 --- a/tests/unit/trace/ext/pyramid/test_pyramid_middleware.py +++ b/tests/unit/trace/ext/pyramid/test_pyramid_middleware.py @@ -23,6 +23,7 @@ from pyramid.testing import DummyRequest from opencensus.trace import execution_context +from opencensus.trace import span as span_module from opencensus.trace.exporters import print_exporter from opencensus.trace.exporters import zipkin_exporter from opencensus.trace.exporters.transports import sync @@ -151,6 +152,7 @@ def dummy_handler(request): '/http/method': 'GET', } + self.assertEqual(span.span_kind, span_module.SpanKind.SERVER) self.assertEqual(span.attributes, expected_attributes) self.assertEqual(span.parent_span.span_id, span_id) diff --git a/tests/unit/trace/ext/requests/test_requests_trace.py b/tests/unit/trace/ext/requests/test_requests_trace.py index a1db9a001..0c4cc0d5a 100644 --- a/tests/unit/trace/ext/requests/test_requests_trace.py +++ b/tests/unit/trace/ext/requests/test_requests_trace.py @@ -16,6 +16,7 @@ import mock +from opencensus.trace import span as span_module from opencensus.trace.ext.requests import trace @@ -70,6 +71,7 @@ def test_wrap_requests(self): 'requests/status_code': '200'} expected_name = '[requests]get' + self.assertEqual(span_module.SpanKind.CLIENT, mock_tracer.current_span.span_kind) self.assertEqual(expected_attributes, mock_tracer.current_span.attributes) self.assertEqual(expected_name, mock_tracer.current_span.name) @@ -98,6 +100,7 @@ def wrapped(*args, **kwargs): 'requests/status_code': '200'} expected_name = '[requests]POST' + self.assertEqual(span_module.SpanKind.CLIENT, mock_tracer.current_span.span_kind) self.assertEqual(expected_attributes, mock_tracer.current_span.attributes) self.assertEqual(expected_name, mock_tracer.current_span.name) diff --git a/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py b/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py index 28032e2d6..92dc3e232 100644 --- a/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py +++ b/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py @@ -16,6 +16,7 @@ import mock +from opencensus.trace import span as span_module from opencensus.trace.ext.sqlalchemy import trace @@ -77,6 +78,7 @@ def test__before_cursor_execute(self): expected_name = 'sqlalchemy.query' + self.assertEqual(mock_tracer.current_span.attribuspan_kind, span_module.SpanKind.CLIENT) self.assertEqual(mock_tracer.current_span.attributes, expected_attributes) self.assertEqual(mock_tracer.current_span.name, expected_name) From 881b861dce85e1b07f70e25275a08fd88251dd0d Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Tue, 21 Aug 2018 18:09:03 -0700 Subject: [PATCH 2/3] fix tests --- opencensus/trace/ext/django/middleware.py | 2 +- tests/unit/trace/ext/grpc/test_client_interceptor.py | 1 - tests/unit/trace/ext/grpc/test_server_interceptor.py | 2 +- tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/opencensus/trace/ext/django/middleware.py b/opencensus/trace/ext/django/middleware.py index 1982957c5..a0de3bd97 100644 --- a/opencensus/trace/ext/django/middleware.py +++ b/opencensus/trace/ext/django/middleware.py @@ -165,7 +165,7 @@ def process_request(self, request): propagator=self.propagator) # Span name is being set at process_view - tracer.start_span() + span = tracer.start_span() span.span_kind = span_module.SpanKind.SERVER tracer.add_attribute_to_current_span( attribute_key=HTTP_METHOD, diff --git a/tests/unit/trace/ext/grpc/test_client_interceptor.py b/tests/unit/trace/ext/grpc/test_client_interceptor.py index ab2470e83..b4cb70f05 100644 --- a/tests/unit/trace/ext/grpc/test_client_interceptor.py +++ b/tests/unit/trace/ext/grpc/test_client_interceptor.py @@ -194,7 +194,6 @@ def test__callback_no_exception(self): expected_attributes = {'/error/message': None} self.assertEqual(current_span.attributes, expected_attributes) - self.assertEqual(current_span.kind, span_module.SpanKind.CLIENT) def _unary_helper(self): continuation = mock.Mock() diff --git a/tests/unit/trace/ext/grpc/test_server_interceptor.py b/tests/unit/trace/ext/grpc/test_server_interceptor.py index 470c42509..341c65f87 100644 --- a/tests/unit/trace/ext/grpc/test_server_interceptor.py +++ b/tests/unit/trace/ext/grpc/test_server_interceptor.py @@ -137,7 +137,7 @@ def test_intercept_handler_exception(self): execution_context.get_opencensus_tracer().current_span().attributes, expected_attributes) - self.assertEqual(current_span.kind, span_module.SpanKind.SERVER) + self.assertEqual(current_span.span_kind, span_module.SpanKind.SERVER) # check that the stack trace is attached to the current span self.assertIsNotNone(current_span.stack_trace) diff --git a/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py b/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py index 92dc3e232..3f42d4451 100644 --- a/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py +++ b/tests/unit/trace/ext/sqlalchemy/test_sqlalchemy_trace.py @@ -78,7 +78,7 @@ def test__before_cursor_execute(self): expected_name = 'sqlalchemy.query' - self.assertEqual(mock_tracer.current_span.attribuspan_kind, span_module.SpanKind.CLIENT) + self.assertEqual(mock_tracer.current_span.span_kind, span_module.SpanKind.CLIENT) self.assertEqual(mock_tracer.current_span.attributes, expected_attributes) self.assertEqual(mock_tracer.current_span.name, expected_name) From 11c61f2fe209884f10002bb49017a2e218cd99a4 Mon Sep 17 00:00:00 2001 From: Liudmila Molkova Date: Tue, 21 Aug 2018 18:28:20 -0700 Subject: [PATCH 3/3] fix style --- opencensus/trace/ext/grpc/client_interceptor.py | 2 +- opencensus/trace/ext/requests/trace.py | 4 ++-- opencensus/trace/ext/sqlalchemy/trace.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/opencensus/trace/ext/grpc/client_interceptor.py b/opencensus/trace/ext/grpc/client_interceptor.py index eb2e6cadb..e8abff0e6 100644 --- a/opencensus/trace/ext/grpc/client_interceptor.py +++ b/opencensus/trace/ext/grpc/client_interceptor.py @@ -67,7 +67,7 @@ def _start_client_span(self, client_call_details): span = self.tracer.start_span( name=_get_span_name(client_call_details) ) - + span.span_kind = span_module.SpanKind.CLIENT # Add the component grpc to span attribute self.tracer.add_attribute_to_current_span( diff --git a/opencensus/trace/ext/requests/trace.py b/opencensus/trace/ext/requests/trace.py index f22984e03..ae52fcb95 100644 --- a/opencensus/trace/ext/requests/trace.py +++ b/opencensus/trace/ext/requests/trace.py @@ -76,8 +76,8 @@ def wrap_session_request(wrapped, instance, args, kwargs): _span = _tracer.start_span() _span.name = '[requests]{}'.format(method) - _span.span_kind = span_module.SpanKind.CLIENT - + _span.span_kind = span_module.SpanKind.CLIENT + # Add the requests url to attributes _tracer.add_attribute_to_current_span('requests/url', url) diff --git a/opencensus/trace/ext/sqlalchemy/trace.py b/opencensus/trace/ext/sqlalchemy/trace.py index bd82f8fba..4a589b171 100644 --- a/opencensus/trace/ext/sqlalchemy/trace.py +++ b/opencensus/trace/ext/sqlalchemy/trace.py @@ -64,7 +64,7 @@ def _before_cursor_execute(conn, cursor, statement, parameters, _tracer = execution_context.get_opencensus_tracer() _span = _tracer.start_span() _span.name = '{}.query'.format(MODULE_NAME) - _span.span_kind = span_module.SpanKind.CLIENT + _span.span_kind = span_module.SpanKind.CLIENT # Set query statement attribute _tracer.add_attribute_to_current_span(