34 """Wrapped method call""" |
34 """Wrapped method call""" |
35 with capture_span('COOK', |
35 with capture_span('COOK', |
36 span_type='template', |
36 span_type='template', |
37 span_subtype='chameleon', |
37 span_subtype='chameleon', |
38 span_action='cook', |
38 span_action='cook', |
39 extra={'filename': instance.filename}, |
39 extra={ |
40 leaf=True): |
40 'filename': instance.filename |
|
41 }, |
|
42 leaf=False): |
41 return wrapped(*args, **kwargs) |
43 return wrapped(*args, **kwargs) |
42 |
44 |
43 |
45 |
44 class ChameleonRenderingInstrumentation(AbstractInstrumentedModule): |
46 class ChameleonRenderingInstrumentation(AbstractInstrumentedModule): |
45 """Chameleon rendering instrumentation""" |
47 """Chameleon rendering instrumentation""" |
49 instrument_list = [("chameleon.template", "BaseTemplate.render")] |
51 instrument_list = [("chameleon.template", "BaseTemplate.render")] |
50 |
52 |
51 def call(self, module, method, wrapped, instance, args, kwargs): |
53 def call(self, module, method, wrapped, instance, args, kwargs): |
52 # pylint: disable=too-many-arguments |
54 # pylint: disable=too-many-arguments |
53 """Wrapped method call""" |
55 """Wrapped method call""" |
|
56 view = kwargs.get('view') |
|
57 context = kwargs.get('context') |
54 with capture_span('RENDER', |
58 with capture_span('RENDER', |
55 span_type='template', |
59 span_type='template', |
56 span_subtype='chameleon', |
60 span_subtype='chameleon', |
57 span_action='render', |
61 span_action='render', |
58 extra={'filename': instance.filename}, |
62 tags={ |
59 leaf=True): |
63 'view': '{}.{}'.format(view.__class__.__module__, |
|
64 view.__class__.__name__) |
|
65 if view is not None else None, |
|
66 'context': '{}.{}'.format(context.__class__.__module__, |
|
67 context.__class__.__name__) |
|
68 if context is not None else None |
|
69 }, |
|
70 extra={ |
|
71 'filename': instance.filename |
|
72 }, |
|
73 leaf=False): |
60 return wrapped(*args, **kwargs) |
74 return wrapped(*args, **kwargs) |