Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 78f6949

Browse files
author
alrex
authored
adding readable span (open-telemetry#1560)
1 parent 806d4d6 commit 78f6949

File tree

17 files changed

+368
-243
lines changed

17 files changed

+368
-243
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ env:
1010
# Otherwise, set variable to the commit of your branch on
1111
# opentelemetry-python-contrib which is compatible with these Core repo
1212
# changes.
13-
CONTRIB_REPO_SHA: 43df76e5ed69f45d993c98ea68daea3c4622ea2d
13+
CONTRIB_REPO_SHA: 263adc5f7f524fae2c84571f656cef0896de0868
1414

1515
jobs:
1616
build:

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2020
- Allow missing carrier headers to continue without raising AttributeError
2121
([#1545](https://github.com/open-telemetry/opentelemetry-python/pull/1545))
2222

23+
24+
### Changed
25+
- Read-only Span attributes have been moved to ReadableSpan class
26+
([#1560](https://github.com/open-telemetry/opentelemetry-python/pull/1560))
27+
2328
### Removed
2429
- Remove Configuration
2530
([#1523](https://github.com/open-telemetry/opentelemetry-python/pull/1523))

exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/translate/protobuf.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
VERSION_KEY,
2525
Translator,
2626
)
27-
from opentelemetry.sdk.trace import Span, StatusCode
27+
from opentelemetry.sdk.trace import ReadableSpan, StatusCode
2828
from opentelemetry.util import types
2929

3030
# pylint: disable=no-member,too-many-locals,no-self-use
@@ -93,7 +93,7 @@ def _translate_attribute(
9393
return translated
9494

9595

96-
def _extract_resource_tags(span: Span) -> Sequence[model_pb2.KeyValue]:
96+
def _extract_resource_tags(span: ReadableSpan) -> Sequence[model_pb2.KeyValue]:
9797
"""Extracts resource attributes from span and returns
9898
list of jaeger keyvalues.
9999
@@ -143,7 +143,7 @@ class ProtobufTranslator(Translator):
143143
def __init__(self, svc_name):
144144
self.svc_name = svc_name
145145

146-
def _translate_span(self, span: Span) -> model_pb2.Span:
146+
def _translate_span(self, span: ReadableSpan) -> model_pb2.Span:
147147

148148
ctx = span.get_span_context()
149149
# pb2 span expects in byte format
@@ -177,7 +177,9 @@ def _translate_span(self, span: Span) -> model_pb2.Span:
177177
)
178178
return jaeger_span
179179

180-
def _extract_tags(self, span: Span) -> Sequence[model_pb2.KeyValue]:
180+
def _extract_tags(
181+
self, span: ReadableSpan
182+
) -> Sequence[model_pb2.KeyValue]:
181183
translated = []
182184
if span.attributes:
183185
for key, value in span.attributes.items():
@@ -226,7 +228,7 @@ def _extract_tags(self, span: Span) -> Sequence[model_pb2.KeyValue]:
226228
return translated
227229

228230
def _extract_refs(
229-
self, span: Span
231+
self, span: ReadableSpan
230232
) -> Optional[Sequence[model_pb2.SpanRef]]:
231233
if not span.links:
232234
return None
@@ -244,7 +246,9 @@ def _extract_refs(
244246
)
245247
return refs
246248

247-
def _extract_logs(self, span: Span) -> Optional[Sequence[model_pb2.Log]]:
249+
def _extract_logs(
250+
self, span: ReadableSpan
251+
) -> Optional[Sequence[model_pb2.Log]]:
248252
if not span.events:
249253
return None
250254

exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/translate/thrift.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
_convert_int_to_i64,
2424
_nsec_to_usec_round,
2525
)
26-
from opentelemetry.sdk.trace import Span, StatusCode
26+
from opentelemetry.sdk.trace import ReadableSpan, StatusCode
2727
from opentelemetry.util import types
2828

2929

@@ -75,7 +75,7 @@ def _translate_attribute(
7575

7676

7777
class ThriftTranslator(Translator):
78-
def _translate_span(self, span: Span) -> TCollector.Span:
78+
def _translate_span(self, span: ReadableSpan) -> TCollector.Span:
7979
ctx = span.get_span_context()
8080
trace_id = ctx.trace_id
8181
span_id = ctx.span_id
@@ -106,7 +106,7 @@ def _translate_span(self, span: Span) -> TCollector.Span:
106106
)
107107
return jaeger_span
108108

109-
def _extract_tags(self, span: Span) -> Sequence[TCollector.Tag]:
109+
def _extract_tags(self, span: ReadableSpan) -> Sequence[TCollector.Tag]:
110110

111111
translated = []
112112
if span.attributes:
@@ -151,7 +151,7 @@ def _extract_tags(self, span: Span) -> Sequence[TCollector.Tag]:
151151
return translated
152152

153153
def _extract_refs(
154-
self, span: Span
154+
self, span: ReadableSpan
155155
) -> Optional[Sequence[TCollector.SpanRef]]:
156156
if not span.links:
157157
return None
@@ -170,7 +170,9 @@ def _extract_refs(
170170
)
171171
return refs
172172

173-
def _extract_logs(self, span: Span) -> Optional[Sequence[TCollector.Log]]:
173+
def _extract_logs(
174+
self, span: ReadableSpan
175+
) -> Optional[Sequence[TCollector.Log]]:
174176
"""Returns jaeger logs if events exists, otherwise None.
175177
176178
Args:

exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter_protobuf.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,24 @@ def test_translate_to_jaeger(self):
156156
events=(event,),
157157
links=(link,),
158158
kind=trace_api.SpanKind.CLIENT,
159+
resource=Resource(
160+
attributes={"key_resource": "some_resource"}
161+
),
159162
),
160163
trace._Span(
161-
name=span_names[1], context=parent_span_context, parent=None
164+
name=span_names[1],
165+
context=parent_span_context,
166+
parent=None,
167+
resource=Resource({}),
162168
),
163169
trace._Span(
164-
name=span_names[2], context=other_context, parent=None
170+
name=span_names[2],
171+
context=other_context,
172+
parent=None,
173+
resource=Resource({}),
174+
instrumentation_info=InstrumentationInfo(
175+
name="name", version="version"
176+
),
165177
),
166178
]
167179

@@ -171,25 +183,17 @@ def test_translate_to_jaeger(self):
171183
otel_spans[0].set_attribute("key_string", "hello_world")
172184
otel_spans[0].set_attribute("key_float", 111.22)
173185
otel_spans[0].set_attribute("key_tuple", ("tuple_element",))
174-
otel_spans[0].resource = Resource(
175-
attributes={"key_resource": "some_resource"}
176-
)
177186
otel_spans[0].set_status(
178187
Status(StatusCode.ERROR, "Example description")
179188
)
180189
otel_spans[0].end(end_time=end_times[0])
181190

182191
otel_spans[1].start(start_time=start_times[1])
183-
otel_spans[1].resource = Resource({})
184192
otel_spans[1].end(end_time=end_times[1])
185193

186194
otel_spans[2].start(start_time=start_times[2])
187-
otel_spans[2].resource = Resource({})
188195
otel_spans[2].set_status(Status(StatusCode.OK, "Example description"))
189196
otel_spans[2].end(end_time=end_times[2])
190-
otel_spans[2].instrumentation_info = InstrumentationInfo(
191-
name="name", version="version"
192-
)
193197

194198
translate = Translate(otel_spans)
195199
# pylint: disable=protected-access

exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter_thrift.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,24 @@ def test_translate_to_jaeger(self):
235235
events=(event,),
236236
links=(link,),
237237
kind=trace_api.SpanKind.CLIENT,
238+
resource=Resource(
239+
attributes={"key_resource": "some_resource"}
240+
),
238241
),
239242
trace._Span(
240-
name=span_names[1], context=parent_span_context, parent=None
243+
name=span_names[1],
244+
context=parent_span_context,
245+
parent=None,
246+
resource=Resource({}),
241247
),
242248
trace._Span(
243-
name=span_names[2], context=other_context, parent=None
249+
name=span_names[2],
250+
context=other_context,
251+
parent=None,
252+
resource=Resource({}),
253+
instrumentation_info=InstrumentationInfo(
254+
name="name", version="version"
255+
),
244256
),
245257
]
246258

@@ -250,25 +262,17 @@ def test_translate_to_jaeger(self):
250262
otel_spans[0].set_attribute("key_string", "hello_world")
251263
otel_spans[0].set_attribute("key_float", 111.22)
252264
otel_spans[0].set_attribute("key_tuple", ("tuple_element",))
253-
otel_spans[0].resource = Resource(
254-
attributes={"key_resource": "some_resource"}
255-
)
256265
otel_spans[0].set_status(
257266
Status(StatusCode.ERROR, "Example description")
258267
)
259268
otel_spans[0].end(end_time=end_times[0])
260269

261270
otel_spans[1].start(start_time=start_times[1])
262-
otel_spans[1].resource = Resource({})
263271
otel_spans[1].end(end_time=end_times[1])
264272

265273
otel_spans[2].start(start_time=start_times[2])
266-
otel_spans[2].resource = Resource({})
267274
otel_spans[2].set_status(Status(StatusCode.OK, "Example description"))
268275
otel_spans[2].end(end_time=end_times[2])
269-
otel_spans[2].instrumentation_info = InstrumentationInfo(
270-
name="name", version="version"
271-
)
272276

273277
translate = Translate(otel_spans)
274278
# pylint: disable=protected-access

exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from opencensus.proto.trace.v1 import trace_pb2
2626

2727
import opentelemetry.exporter.opencensus.util as utils
28-
from opentelemetry.sdk.trace import Span
28+
from opentelemetry.sdk.trace import ReadableSpan
2929
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
3030

3131
DEFAULT_ENDPOINT = "localhost:55678"
@@ -62,7 +62,7 @@ def __init__(
6262

6363
self.node = utils.get_node(service_name, host_name)
6464

65-
def export(self, spans: Sequence[Span]) -> SpanExportResult:
65+
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
6666
try:
6767
responses = self.client.Export(self.generate_span_requests(spans))
6868

@@ -87,7 +87,7 @@ def generate_span_requests(self, spans):
8787

8888

8989
# pylint: disable=too-many-branches
90-
def translate_to_collector(spans: Sequence[Span]):
90+
def translate_to_collector(spans: Sequence[ReadableSpan]):
9191
collector_spans = []
9292
for span in spans:
9393
status = None

exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
OTEL_EXPORTER_OTLP_SPAN_INSECURE,
4646
OTEL_EXPORTER_OTLP_SPAN_TIMEOUT,
4747
)
48-
from opentelemetry.sdk.trace import Span as SDKSpan
48+
from opentelemetry.sdk.trace import Span as ReadableSpan
4949
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
5050
from opentelemetry.trace.status import StatusCode
5151

@@ -55,7 +55,9 @@
5555
# pylint: disable=no-member
5656
class OTLPSpanExporter(
5757
SpanExporter,
58-
OTLPExporterMixin[SDKSpan, ExportTraceServiceRequest, SpanExportResult],
58+
OTLPExporterMixin[
59+
ReadableSpan, ExportTraceServiceRequest, SpanExportResult
60+
],
5961
):
6062
# pylint: disable=unsubscriptable-object
6163
"""OTLP span exporter
@@ -107,34 +109,34 @@ def __init__(
107109
}
108110
)
109111

110-
def _translate_name(self, sdk_span: SDKSpan) -> None:
112+
def _translate_name(self, sdk_span: ReadableSpan) -> None:
111113
self._collector_span_kwargs["name"] = sdk_span.name
112114

113-
def _translate_start_time(self, sdk_span: SDKSpan) -> None:
115+
def _translate_start_time(self, sdk_span: ReadableSpan) -> None:
114116
self._collector_span_kwargs[
115117
"start_time_unix_nano"
116118
] = sdk_span.start_time
117119

118-
def _translate_end_time(self, sdk_span: SDKSpan) -> None:
120+
def _translate_end_time(self, sdk_span: ReadableSpan) -> None:
119121
self._collector_span_kwargs["end_time_unix_nano"] = sdk_span.end_time
120122

121-
def _translate_span_id(self, sdk_span: SDKSpan) -> None:
123+
def _translate_span_id(self, sdk_span: ReadableSpan) -> None:
122124
self._collector_span_kwargs[
123125
"span_id"
124126
] = sdk_span.context.span_id.to_bytes(8, "big")
125127

126-
def _translate_trace_id(self, sdk_span: SDKSpan) -> None:
128+
def _translate_trace_id(self, sdk_span: ReadableSpan) -> None:
127129
self._collector_span_kwargs[
128130
"trace_id"
129131
] = sdk_span.context.trace_id.to_bytes(16, "big")
130132

131-
def _translate_parent(self, sdk_span: SDKSpan) -> None:
133+
def _translate_parent(self, sdk_span: ReadableSpan) -> None:
132134
if sdk_span.parent is not None:
133135
self._collector_span_kwargs[
134136
"parent_span_id"
135137
] = sdk_span.parent.span_id.to_bytes(8, "big")
136138

137-
def _translate_context_trace_state(self, sdk_span: SDKSpan) -> None:
139+
def _translate_context_trace_state(self, sdk_span: ReadableSpan) -> None:
138140
if sdk_span.context.trace_state is not None:
139141
self._collector_span_kwargs["trace_state"] = ",".join(
140142
[
@@ -143,7 +145,7 @@ def _translate_context_trace_state(self, sdk_span: SDKSpan) -> None:
143145
]
144146
)
145147

146-
def _translate_attributes(self, sdk_span: SDKSpan) -> None:
148+
def _translate_attributes(self, sdk_span: ReadableSpan) -> None:
147149
if sdk_span.attributes:
148150

149151
self._collector_span_kwargs["attributes"] = []
@@ -157,7 +159,7 @@ def _translate_attributes(self, sdk_span: SDKSpan) -> None:
157159
except Exception as error: # pylint: disable=broad-except
158160
logger.exception(error)
159161

160-
def _translate_events(self, sdk_span: SDKSpan) -> None:
162+
def _translate_events(self, sdk_span: ReadableSpan) -> None:
161163
if sdk_span.events:
162164
self._collector_span_kwargs["events"] = []
163165

@@ -181,7 +183,7 @@ def _translate_events(self, sdk_span: SDKSpan) -> None:
181183
collector_span_event
182184
)
183185

184-
def _translate_links(self, sdk_span: SDKSpan) -> None:
186+
def _translate_links(self, sdk_span: ReadableSpan) -> None:
185187
if sdk_span.links:
186188
self._collector_span_kwargs["links"] = []
187189

@@ -207,7 +209,7 @@ def _translate_links(self, sdk_span: SDKSpan) -> None:
207209
collector_span_link
208210
)
209211

210-
def _translate_status(self, sdk_span: SDKSpan) -> None:
212+
def _translate_status(self, sdk_span: ReadableSpan) -> None:
211213
# pylint: disable=no-member
212214
if sdk_span.status is not None:
213215
deprecated_code = Status.DEPRECATED_STATUS_CODE_OK
@@ -220,7 +222,7 @@ def _translate_status(self, sdk_span: SDKSpan) -> None:
220222
)
221223

222224
def _translate_data(
223-
self, data: Sequence[SDKSpan]
225+
self, data: Sequence[ReadableSpan]
224226
) -> ExportTraceServiceRequest:
225227
# pylint: disable=attribute-defined-outside-init
226228

@@ -279,5 +281,5 @@ def _translate_data(
279281
)
280282
)
281283

282-
def export(self, spans: Sequence[SDKSpan]) -> SpanExportResult:
284+
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
283285
return self._export(spans)

0 commit comments

Comments
 (0)