mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-30 21:56:07 +08:00
Use is_recording flag in jinja, celery, esearch, falcon instrumentations (#1241)
This commit is contained in:
@ -78,39 +78,44 @@ def _with_tracer_wrapper(func):
|
||||
def _wrap_render(tracer, wrapped, instance, args, kwargs):
|
||||
"""Wrap `Template.render()` or `Template.generate()`
|
||||
"""
|
||||
template_name = instance.name or DEFAULT_TEMPLATE_NAME
|
||||
attributes = {ATTRIBUTE_JINJA2_TEMPLATE_NAME: template_name}
|
||||
with tracer.start_as_current_span(
|
||||
"jinja2.render", kind=SpanKind.INTERNAL, attributes=attributes
|
||||
):
|
||||
"jinja2.render", kind=SpanKind.INTERNAL,
|
||||
) as span:
|
||||
if span.is_recording():
|
||||
template_name = instance.name or DEFAULT_TEMPLATE_NAME
|
||||
span.set_attribute(ATTRIBUTE_JINJA2_TEMPLATE_NAME, template_name)
|
||||
return wrapped(*args, **kwargs)
|
||||
|
||||
|
||||
@_with_tracer_wrapper
|
||||
def _wrap_compile(tracer, wrapped, _, args, kwargs):
|
||||
template_name = (
|
||||
args[1] if len(args) > 1 else kwargs.get("name", DEFAULT_TEMPLATE_NAME)
|
||||
)
|
||||
attributes = {ATTRIBUTE_JINJA2_TEMPLATE_NAME: template_name}
|
||||
with tracer.start_as_current_span(
|
||||
"jinja2.compile", kind=SpanKind.INTERNAL, attributes=attributes
|
||||
):
|
||||
"jinja2.compile", kind=SpanKind.INTERNAL,
|
||||
) as span:
|
||||
if span.is_recording():
|
||||
template_name = (
|
||||
args[1]
|
||||
if len(args) > 1
|
||||
else kwargs.get("name", DEFAULT_TEMPLATE_NAME)
|
||||
)
|
||||
span.set_attribute(ATTRIBUTE_JINJA2_TEMPLATE_NAME, template_name)
|
||||
return wrapped(*args, **kwargs)
|
||||
|
||||
|
||||
@_with_tracer_wrapper
|
||||
def _wrap_load_template(tracer, wrapped, _, args, kwargs):
|
||||
template_name = kwargs.get("name", args[0])
|
||||
attributes = {ATTRIBUTE_JINJA2_TEMPLATE_NAME: template_name}
|
||||
with tracer.start_as_current_span(
|
||||
"jinja2.load", kind=SpanKind.INTERNAL, attributes=attributes
|
||||
"jinja2.load", kind=SpanKind.INTERNAL,
|
||||
) as span:
|
||||
if span.is_recording():
|
||||
template_name = kwargs.get("name", args[0])
|
||||
span.set_attribute(ATTRIBUTE_JINJA2_TEMPLATE_NAME, template_name)
|
||||
template = None
|
||||
try:
|
||||
template = wrapped(*args, **kwargs)
|
||||
return template
|
||||
finally:
|
||||
if template:
|
||||
if template and span.is_recording():
|
||||
span.set_attribute(
|
||||
ATTRIBUTE_JINJA2_TEMPLATE_PATH, template.filename
|
||||
)
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
import os
|
||||
from unittest import mock
|
||||
|
||||
import jinja2
|
||||
|
||||
@ -53,6 +54,21 @@ class TestJinja2Instrumentor(TestBase):
|
||||
self.assertIs(template.parent, root.get_span_context())
|
||||
self.assertIsNone(root.parent)
|
||||
|
||||
def test_render_not_recording(self):
|
||||
mock_tracer = mock.Mock()
|
||||
mock_span = mock.Mock()
|
||||
mock_span.is_recording.return_value = False
|
||||
mock_tracer.start_span.return_value = mock_span
|
||||
mock_tracer.use_span.return_value.__enter__ = mock_span
|
||||
mock_tracer.use_span.return_value.__exit__ = mock_span
|
||||
with mock.patch("opentelemetry.trace.get_tracer") as tracer:
|
||||
tracer.return_value = mock_tracer
|
||||
jinja2.environment.Template("Hello {{name}}!")
|
||||
self.assertFalse(mock_span.is_recording())
|
||||
self.assertTrue(mock_span.is_recording.called)
|
||||
self.assertFalse(mock_span.set_attribute.called)
|
||||
self.assertFalse(mock_span.set_status.called)
|
||||
|
||||
def test_render_inline_template(self):
|
||||
template = jinja2.environment.Template("Hello {{name}}!")
|
||||
self.assertEqual(template.render(name="Jinja"), "Hello Jinja!")
|
||||
|
Reference in New Issue
Block a user