NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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