Skip to content

Commit 927710c

Browse files
committed
add_dd_poc
1 parent a6c6171 commit 927710c

File tree

5 files changed

+144
-68
lines changed

5 files changed

+144
-68
lines changed

aws_lambda_powertools/tracing/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from typing import Any, Generator, List, Optional, Sequence, Union
66

77

8-
## TO: Discuss how to refactor this one. X-ray exclusive as well?
8+
## TO-Discuss how to refactor this one. Segment seems X-ray exclusive concept
99
class BaseSegment(abc.ABC):
1010
"""Holds common properties and methods on segment and subsegment."""
1111

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
from __future__ import annotations
2+
3+
from numbers import Number
4+
from traceback import StackSummary
5+
from typing import Any, Generator, List, Optional, Sequence
6+
7+
import ddtrace
8+
9+
from .base import BaseProvider, BaseSegment
10+
11+
12+
class DDSpan(BaseSegment):
13+
def __init__(self, dd_span=ddtrace.Span):
14+
self.dd_span = dd_span
15+
16+
def close(self, end_time: int | None = None):
17+
self.dd_span.finish(finish_time=float(end_time))
18+
19+
def add_subsegment(self, subsegment: Any):
20+
raise NotImplementedError
21+
22+
def remove_subsegment(self, subsegment: Any):
23+
raise NotImplementedError
24+
25+
def put_annotation(self, key: str, value: str | Number | bool) -> None:
26+
self.dd_span.set_tag(key=key, value=value)
27+
28+
def put_metadata(self, key: str, value: Any, namespace: str = "default") -> None:
29+
self.dd_span.set_tag(key=f"{namespace}.{key}", value=value)
30+
31+
def add_exception(self, exception: BaseException, stack: List[StackSummary], remote: bool = False):
32+
self.dd_span.set_exc_info(exc_type=exception, exc_val=exception, exc_tb=stack)
33+
34+
35+
class DDTraceProvider(BaseProvider):
36+
def __init__(self, dd_tracer=ddtrace.Tracer):
37+
self.dd_tracer = dd_tracer
38+
39+
def in_subsegment(
40+
self,
41+
name=None,
42+
service: Optional[str] = None,
43+
resource: Optional[str] = None,
44+
span_type: Optional[str] = None,
45+
span_api: str = ddtrace.SPAN_API_DATADOG,
46+
**kwargs,
47+
) -> Generator[BaseSegment, None, None]:
48+
return self.dd_tracer.start_span(
49+
name,
50+
child_of=self.dd_tracer.context_provider.active(),
51+
service=service,
52+
resource=resource,
53+
span_type=span_type,
54+
activate=True,
55+
span_api=span_api,
56+
)
57+
58+
in_subsegment_async = in_subsegment
59+
60+
def put_annotation(self, key: str, value: str | Number | bool) -> None:
61+
self.dd_tracer.context_provider.active().set_tag(key=key, value=value)
62+
63+
def put_metadata(self, key: str, value: Any, namespace: str = "default") -> None:
64+
self.dd_tracer.context_provider.active().set_tag(key=f"{namespace},{key}", value=value)
65+
66+
def patch(self, modules: Sequence[str]) -> None:
67+
module_to_patch = {}
68+
for m in modules:
69+
module_to_patch[m] = True
70+
ddtrace.patch(**module_to_patch)
71+
72+
def patch_all(self) -> None:
73+
ddtrace.patch_all()

0 commit comments

Comments
 (0)