示例#1
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 = TracedCursor(cursor, pin, {})

        def method():
            pass

        traced_cursor._trace_method(method, 'my_name', 'my_resource',
                                    {'extra1': 'value_extra1'})
        span = tracer.pop()[0]  # type: Span
        # Only measure if the name passed matches the default name (e.g. `sql.query` and not `sql.query.fetchall`)
        assert_is_not_measured(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)'
示例#2
0
    def test_sqlite_fetchall_is_traced(self):
        q = "select * from sqlite_master"

        # Not traced by default
        connection = self._given_a_traced_connection(self.tracer)
        cursor = connection.execute(q)
        cursor.fetchall()
        self.assert_structure(dict(name="sqlite.query", resource=q))
        self.reset()

        with self.override_config("sqlite", dict(trace_fetch_methods=True)):
            connection = self._given_a_traced_connection(self.tracer)
            cursor = connection.execute(q)
            cursor.fetchall()

            # We have two spans side by side
            query_span, fetchall_span = self.get_root_spans()

            # Assert query
            query_span.assert_structure(dict(name="sqlite.query", resource=q))
            assert_is_measured(query_span)

            # Assert fetchall
            fetchall_span.assert_structure(
                dict(name="sqlite.query.fetchall",
                     resource=q,
                     span_type="sql",
                     error=0))
            assert_is_not_measured(fetchall_span)
            self.assertIsNone(fetchall_span.get_tag("sql.query"))
示例#3
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 = TracedCursor(cursor, pin, {})

        def method():
            pass

        traced_cursor._trace_method(method, "my_name", "my_resource",
                                    {"extra1": "value_extra1"})
        span = tracer.pop()[0]  # type: Span
        # Only measure if the name passed matches the default name (e.g. `sql.query` and not `sql.query.fetchall`)
        assert_is_not_measured(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)"
示例#4
0
def test_set_tag_measured_change_value():
    s = Span(tracer=None, name="test.span")
    s.set_tag(SPAN_MEASURED_KEY, True)
    assert_is_measured(s)

    s.set_tag(SPAN_MEASURED_KEY, False)
    assert_is_not_measured(s)

    s.set_tag(SPAN_MEASURED_KEY)
    assert_is_measured(s)
示例#5
0
    def test_file_template(self):
        loader = jinja2.loaders.FileSystemLoader(TMPL_DIR)
        env = jinja2.Environment(loader=loader)
        t = env.get_template('template.html')
        assert t.render(name='Jinja') == 'Message: Hello Jinja!'

        # tests
        spans = self.pop_spans()
        assert len(spans) == 5

        for span in spans:
            assert span.span_type == 'template'
            assert span.service is None

        # templates.html extends base.html
        def get_def(s):
            return s.name, s.get_tag('jinja2.template_name')

        assert get_def(spans[0]) == ('jinja2.load', 'template.html')
        assert_is_not_measured(spans[0])
        assert get_def(spans[1]) == ('jinja2.compile', 'template.html')
        assert_is_not_measured(spans[1])
        assert get_def(spans[2]) == ('jinja2.render', 'template.html')
        assert_is_measured(spans[2])
        assert get_def(spans[3]) == ('jinja2.load', 'base.html')
        assert_is_not_measured(spans[3])
        assert get_def(spans[4]) == ('jinja2.compile', 'base.html')
        assert_is_not_measured(spans[4])

        # additional checks for jinja2.load
        assert spans[0].get_tag('jinja2.template_path') == os.path.join(
            TMPL_DIR, 'template.html')
        assert spans[3].get_tag('jinja2.template_path') == os.path.join(
            TMPL_DIR, 'base.html')
示例#6
0
    def test_generate_inline_template(self):
        t = jinja2.environment.Template('Hello {{name}}!')
        assert ''.join(t.generate(name='Jinja')) == 'Hello Jinja!'

        # tests
        spans = self.pop_spans()
        assert len(spans) == 2

        for span in spans:
            assert span.service is None
            assert span.span_type == 'template'
            assert span.get_tag('jinja2.template_name') == '<memory>'

        assert spans[0].name == 'jinja2.compile'
        assert_is_not_measured(spans[0])
        assert spans[1].name == 'jinja2.render'
        assert_is_measured(spans[1])
示例#7
0
    def test_generate_inline_template(self):
        t = jinja2.environment.Template("Hello {{name}}!")
        assert "".join(t.generate(name="Jinja")) == "Hello Jinja!"

        # tests
        spans = self.pop_spans()
        assert len(spans) == 2

        for span in spans:
            assert span.service is None
            assert span.span_type == "template"
            assert span.get_tag("jinja2.template_name") == "<memory>"

        assert spans[0].name == "jinja2.compile"
        assert_is_not_measured(spans[0])
        assert spans[1].name == "jinja2.render"
        assert_is_measured(spans[1])
示例#8
0
def test_set_tag_measured_not_set():
    # Span is not measured by default
    s = Span(tracer=None, name="test.span")
    assert_is_not_measured(s)