Ejemplo n.º 1
0
 def test_fetchmany_wrapped_is_called_and_returned(self):
     cursor = self.cursor
     cursor.rowcount = 0
     cursor.fetchmany.return_value = '__result__'
     pin = Pin('pin_name', tracer=self.tracer)
     traced_cursor = FetchTracedCursor(cursor, pin, {})
     assert '__result__' == traced_cursor.fetchmany('arg_1', kwarg1='kwarg1')
     cursor.fetchmany.assert_called_once_with('arg_1', kwarg1='kwarg1')
Ejemplo n.º 2
0
 def test_fetchmany_wrapped_is_called_and_returned(self):
     cursor = self.cursor
     cursor.rowcount = 0
     cursor.fetchmany.return_value = "__result__"
     pin = Pin("pin_name", tracer=self.tracer)
     traced_cursor = FetchTracedCursor(cursor, pin, {})
     assert "__result__" == traced_cursor.fetchmany("arg_1", kwarg1="kwarg1")
     cursor.fetchmany.assert_called_once_with("arg_1", kwarg1="kwarg1")
Ejemplo n.º 3
0
    def test_execute_wrapped_is_called_and_returned(self):
        cursor = self.cursor
        cursor.rowcount = 0
        cursor.execute.return_value = '__result__'

        pin = Pin('pin_name', tracer=self.tracer)
        traced_cursor = FetchTracedCursor(cursor, pin)
        assert '__result__' == traced_cursor.execute('__query__', 'arg_1', kwarg1='kwarg1')
        cursor.execute.assert_called_once_with('__query__', 'arg_1', kwarg1='kwarg1')
Ejemplo n.º 4
0
 def test_executemany_wrapped_is_called_and_returned(self):
     cursor = self.cursor
     cursor.rowcount = 0
     pin = Pin('pin_name', tracer=self.tracer)
     traced_cursor = FetchTracedCursor(cursor, pin)
     assert traced_cursor is traced_cursor.executemany(
         '__query__', 'arg_1', kwarg1='kwarg1')
     cursor.executemany.assert_called_once_with('__query__',
                                                'arg_1',
                                                kwarg1='kwarg1')
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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)'
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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)'
Ejemplo n.º 9
0
    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)"