Skip to content

Commit e6b3a7c

Browse files
committed
first working POC for dd
1 parent 927710c commit e6b3a7c

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

aws_lambda_powertools/tracing/dd_tracer.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import logging
34
from numbers import Number
45
from traceback import StackSummary
56
from typing import Any, Generator, List, Optional, Sequence
@@ -8,12 +9,15 @@
89

910
from .base import BaseProvider, BaseSegment
1011

12+
logger = logging.getLogger(__name__)
13+
1114

1215
class DDSpan(BaseSegment):
1316
def __init__(self, dd_span=ddtrace.Span):
1417
self.dd_span = dd_span
1518

1619
def close(self, end_time: int | None = None):
20+
print("close is called")
1721
self.dd_span.finish(finish_time=float(end_time))
1822

1923
def add_subsegment(self, subsegment: Any):
@@ -31,9 +35,22 @@ def put_metadata(self, key: str, value: Any, namespace: str = "default") -> None
3135
def add_exception(self, exception: BaseException, stack: List[StackSummary], remote: bool = False):
3236
self.dd_span.set_exc_info(exc_type=exception, exc_val=exception, exc_tb=stack)
3337

38+
def __enter__(self):
39+
print("entered")
40+
return self
41+
42+
def __exit__(self, exc_type, exc_val, exc_tb):
43+
try:
44+
if exc_type:
45+
self.dd_span.set_exc_info(exc_type, exc_val, exc_tb)
46+
print("exited")
47+
self.close()
48+
except Exception:
49+
logger.exception("error closing trace")
50+
3451

3552
class DDTraceProvider(BaseProvider):
36-
def __init__(self, dd_tracer=ddtrace.Tracer):
53+
def __init__(self, dd_tracer: ddtrace.Tracer):
3754
self.dd_tracer = dd_tracer
3855

3956
def in_subsegment(
@@ -42,18 +59,15 @@ def in_subsegment(
4259
service: Optional[str] = None,
4360
resource: Optional[str] = None,
4461
span_type: Optional[str] = None,
45-
span_api: str = ddtrace.SPAN_API_DATADOG,
4662
**kwargs,
4763
) -> Generator[BaseSegment, None, None]:
48-
return self.dd_tracer.start_span(
64+
dd_span = self.dd_tracer.trace(
4965
name,
50-
child_of=self.dd_tracer.context_provider.active(),
5166
service=service,
5267
resource=resource,
5368
span_type=span_type,
54-
activate=True,
55-
span_api=span_api,
5669
)
70+
return DDSpan(dd_span=dd_span)
5771

5872
in_subsegment_async = in_subsegment
5973

0 commit comments

Comments
 (0)