in aws_advanced_python_wrapper/utils/telemetry/open_telemetry.py [0:0]
def __init__(self, tracer: Tracer, name: str, trace_level: TelemetryTraceLevel,
start_time: Optional[int] = None, link_span: Optional[Span] = None):
self._name = name
self._tracer = tracer
self._span: Optional[Span]
self._meter: Meter
self._token: Optional[object] = None
current_span: Span = trace.get_current_span() # type: ignore
is_root = (current_span is None or current_span == trace.INVALID_SPAN)
if is_root and trace_level == TelemetryTraceLevel.NESTED:
trace_level = TelemetryTraceLevel.TOP_LEVEL
links: Sequence[trace_api.Link] = ()
if trace_level in [TelemetryTraceLevel.FORCE_TOP_LEVEL, TelemetryTraceLevel.TOP_LEVEL]:
if link_span is not None:
links = [trace.Link(link_span.get_span_context())]
else:
if not is_root:
links = [trace.Link(current_span.get_span_context())]
self._span = self._tracer.start_span(self._name, context=context_api.Context(),
links=links, start_time=start_time) # type: ignore
if not is_root:
self.set_attribute(TelemetryConst.TRACE_NAME_ANNOTATION, self._name)
ctx = trace.set_span_in_context(self._span) # type: ignore
self._token = context_api.attach(ctx)
logger.debug("OpenTelemetryContext.TelemetryTraceID", self._name,
self._span.get_span_context().trace_id) # type: ignore
elif trace_level == TelemetryTraceLevel.NESTED:
if link_span is not None:
links = [trace.Link(link_span.get_span_context())]
self._span = self._tracer.start_span(self._name, links=links, start_time=start_time) # type: ignore
ctx = trace.set_span_in_context(self._span) # type: ignore
self._token = context_api.attach(ctx)
self.set_attribute(TelemetryConst.TRACE_NAME_ANNOTATION, self._name)
elif trace_level == TelemetryTraceLevel.NO_TRACE:
self._span = None