tasklet_tracer.py (1935B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\stackless_tracing\tasklet_tracer.py 2 from __future__ import absolute_import 3 from .attributes import SPAN_NAME, SERVICE_NAME, SPAN_KIND, TASKLET_CONTEXT, TASKLET_PARENT_CALLSITE, NET_COMPONENT 4 import stackless_tracing 5 import monolithconfig 6 NO_TRACE_METHOD_NAMES = [None, 'inner', 'MollycoddledUthread'] 7 NO_TRACE_MODULE_NAMES = [None, 'uthread'] 8 GATEWAY_MODULE_NAMES = ['externalQueueMgr'] 9 10 class TaskletTracer(object): 11 12 def __init__(self, tasklet): 13 self.tasklet = tasklet 14 self.span = None 15 16 def __enter__(self): 17 self.module_name = getattr(self.tasklet, 'module_name', '').split('.')[-1] 18 self.method_name = getattr(self.tasklet, 'method_name') 19 if not self._is_traceable(): 20 return 21 span_name = '{}.{}'.format(self.module_name, self.method_name) 22 self.span, trace_context = stackless_tracing.start_span(span_name, self.module_name) 23 if not stackless_tracing.get_sampled_from_context(trace_context): 24 return self 25 parent_callsite = getattr(self.tasklet, 'parent_callsite', '') 26 tasklet_context = getattr(self.tasklet, 'context', '') 27 self.span.add_context({SPAN_KIND: 'internal', 28 TASKLET_CONTEXT: tasklet_context, 29 TASKLET_PARENT_CALLSITE: parent_callsite}) 30 if self._is_gateway(): 31 self.span.add_context({NET_COMPONENT: 'proxy'}) 32 return self 33 34 def __exit__(self, exc_type, exc_val, exc_tb): 35 stackless_tracing.end_span(self.span) 36 37 def _is_traceable(self): 38 if not monolithconfig.on_server(): 39 return False 40 if self.method_name in NO_TRACE_METHOD_NAMES: 41 return False 42 if self.module_name in NO_TRACE_MODULE_NAMES: 43 return False 44 return True 45 46 def _is_gateway(self): 47 return self.module_name in GATEWAY_MODULE_NAMES