def test_django_traced_cursor_backward_compatibility(self): cursor = self.cursor tracer = self.tracer # Django integration used to have its own FetchTracedCursor implementation. When we replaced such custom # implementation with the generic dbapi traced cursor, we had to make sure to add the tag 'sql.rows' that was # set by the legacy replaced implementation. cursor.rowcount = 123 pin = Pin('my_service', app='my_app', tracer=tracer, tags={'pin1': 'value_pin1'}) traced_cursor = FetchTracedCursor(cursor, pin, {}) def method(): pass traced_cursor._trace_method(method, 'my_name', 'my_resource', {'extra1': 'value_extra1'}) span = tracer.writer.pop()[0] # type: Span # Row count assert span.get_metric( 'db.rowcount') == 123, 'Row count is set as a metric' assert span.get_metric( 'sql.rows' ) == 123, 'Row count is set as a tag (for legacy django cursor replacement)'
def test_span_info(self): cursor = self.cursor tracer = self.tracer cursor.rowcount = 123 pin = Pin('my_service', app='my_app', tracer=tracer, tags={'pin1': 'value_pin1'}) traced_cursor = FetchTracedCursor(cursor, pin, {}) def method(): pass traced_cursor._trace_method(method, 'my_name', 'my_resource', {'extra1': 'value_extra1'}) span = tracer.writer.pop()[0] # type: Span assert span.meta['pin1'] == 'value_pin1', 'Pin tags are preserved' assert span.meta[ 'extra1'] == 'value_extra1', 'Extra tags are merged into pin tags' assert span.name == 'my_name', 'Span name is respected' assert span.service == 'my_service', 'Service from pin' assert span.resource == 'my_resource', 'Resource is respected' assert span.span_type == 'sql', 'Span has the correct span type' # Row count assert span.get_metric( 'db.rowcount') == 123, 'Row count is set as a metric' assert span.get_metric( 'sql.rows' ) == 123, 'Row count is set as a tag (for legacy django cursor replacement)'
def test_span_info(self): cursor = self.cursor tracer = self.tracer cursor.rowcount = 123 pin = Pin("my_service", app="my_app", tracer=tracer, tags={"pin1": "value_pin1"}) traced_cursor = FetchTracedCursor(cursor, pin, {}) def method(): pass traced_cursor._trace_method(method, "my_name", "my_resource", {"extra1": "value_extra1"}) span = tracer.pop()[0] # type: Span assert span.meta["pin1"] == "value_pin1", "Pin tags are preserved" assert span.meta[ "extra1"] == "value_extra1", "Extra tags are merged into pin tags" assert span.name == "my_name", "Span name is respected" assert span.service == "my_service", "Service from pin" assert span.resource == "my_resource", "Resource is respected" assert span.span_type == "sql", "Span has the correct span type" # Row count assert span.get_metric( "db.rowcount") == 123, "Row count is set as a metric" assert span.get_metric( "sql.rows" ) == 123, "Row count is set as a tag (for legacy django cursor replacement)"
def test_unknown_rowcount(self): class Unknown(object): pass cursor = self.cursor tracer = self.tracer cursor.rowcount = Unknown() pin = Pin("my_service", app="my_app", tracer=tracer, tags={"pin1": "value_pin1"}) traced_cursor = FetchTracedCursor(cursor, pin, {}) def method(): pass traced_cursor._trace_method(method, "my_name", "my_resource", {"extra1": "value_extra1"}) span = tracer.pop()[0] # type: Span assert span.get_metric("db.rowcount") is None assert span.get_metric("sql.rows") is None
def test_unknown_rowcount(self): class Unknown(object): pass cursor = self.cursor tracer = self.tracer cursor.rowcount = Unknown() pin = Pin('my_service', app='my_app', tracer=tracer, tags={'pin1': 'value_pin1'}) traced_cursor = FetchTracedCursor(cursor, pin, {}) def method(): pass traced_cursor._trace_method(method, 'my_name', 'my_resource', {'extra1': 'value_extra1'}) span = tracer.writer.pop()[0] # type: Span assert span.get_metric('db.rowcount') is None assert span.get_metric('sql.rows') is None