Skip to content

Commit

Permalink
adding readable span (#1560)
Browse files Browse the repository at this point in the history
  • Loading branch information
alrex authored Feb 10, 2021
1 parent 806d4d6 commit 78f6949
Show file tree
Hide file tree
Showing 17 changed files with 368 additions and 243 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ env:
# Otherwise, set variable to the commit of your branch on
# opentelemetry-python-contrib which is compatible with these Core repo
# changes.
CONTRIB_REPO_SHA: 43df76e5ed69f45d993c98ea68daea3c4622ea2d
CONTRIB_REPO_SHA: 263adc5f7f524fae2c84571f656cef0896de0868

jobs:
build:
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Allow missing carrier headers to continue without raising AttributeError
([#1545](https:/open-telemetry/opentelemetry-python/pull/1545))


### Changed
- Read-only Span attributes have been moved to ReadableSpan class
([#1560](https:/open-telemetry/opentelemetry-python/pull/1560))

### Removed
- Remove Configuration
([#1523](https:/open-telemetry/opentelemetry-python/pull/1523))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
VERSION_KEY,
Translator,
)
from opentelemetry.sdk.trace import Span, StatusCode
from opentelemetry.sdk.trace import ReadableSpan, StatusCode
from opentelemetry.util import types

# pylint: disable=no-member,too-many-locals,no-self-use
Expand Down Expand Up @@ -93,7 +93,7 @@ def _translate_attribute(
return translated


def _extract_resource_tags(span: Span) -> Sequence[model_pb2.KeyValue]:
def _extract_resource_tags(span: ReadableSpan) -> Sequence[model_pb2.KeyValue]:
"""Extracts resource attributes from span and returns
list of jaeger keyvalues.
Expand Down Expand Up @@ -143,7 +143,7 @@ class ProtobufTranslator(Translator):
def __init__(self, svc_name):
self.svc_name = svc_name

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

ctx = span.get_span_context()
# pb2 span expects in byte format
Expand Down Expand Up @@ -177,7 +177,9 @@ def _translate_span(self, span: Span) -> model_pb2.Span:
)
return jaeger_span

def _extract_tags(self, span: Span) -> Sequence[model_pb2.KeyValue]:
def _extract_tags(
self, span: ReadableSpan
) -> Sequence[model_pb2.KeyValue]:
translated = []
if span.attributes:
for key, value in span.attributes.items():
Expand Down Expand Up @@ -226,7 +228,7 @@ def _extract_tags(self, span: Span) -> Sequence[model_pb2.KeyValue]:
return translated

def _extract_refs(
self, span: Span
self, span: ReadableSpan
) -> Optional[Sequence[model_pb2.SpanRef]]:
if not span.links:
return None
Expand All @@ -244,7 +246,9 @@ def _extract_refs(
)
return refs

def _extract_logs(self, span: Span) -> Optional[Sequence[model_pb2.Log]]:
def _extract_logs(
self, span: ReadableSpan
) -> Optional[Sequence[model_pb2.Log]]:
if not span.events:
return None

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
_convert_int_to_i64,
_nsec_to_usec_round,
)
from opentelemetry.sdk.trace import Span, StatusCode
from opentelemetry.sdk.trace import ReadableSpan, StatusCode
from opentelemetry.util import types


Expand Down Expand Up @@ -75,7 +75,7 @@ def _translate_attribute(


class ThriftTranslator(Translator):
def _translate_span(self, span: Span) -> TCollector.Span:
def _translate_span(self, span: ReadableSpan) -> TCollector.Span:
ctx = span.get_span_context()
trace_id = ctx.trace_id
span_id = ctx.span_id
Expand Down Expand Up @@ -106,7 +106,7 @@ def _translate_span(self, span: Span) -> TCollector.Span:
)
return jaeger_span

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

translated = []
if span.attributes:
Expand Down Expand Up @@ -151,7 +151,7 @@ def _extract_tags(self, span: Span) -> Sequence[TCollector.Tag]:
return translated

def _extract_refs(
self, span: Span
self, span: ReadableSpan
) -> Optional[Sequence[TCollector.SpanRef]]:
if not span.links:
return None
Expand All @@ -170,7 +170,9 @@ def _extract_refs(
)
return refs

def _extract_logs(self, span: Span) -> Optional[Sequence[TCollector.Log]]:
def _extract_logs(
self, span: ReadableSpan
) -> Optional[Sequence[TCollector.Log]]:
"""Returns jaeger logs if events exists, otherwise None.
Args:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,12 +156,24 @@ def test_translate_to_jaeger(self):
events=(event,),
links=(link,),
kind=trace_api.SpanKind.CLIENT,
resource=Resource(
attributes={"key_resource": "some_resource"}
),
),
trace._Span(
name=span_names[1], context=parent_span_context, parent=None
name=span_names[1],
context=parent_span_context,
parent=None,
resource=Resource({}),
),
trace._Span(
name=span_names[2], context=other_context, parent=None
name=span_names[2],
context=other_context,
parent=None,
resource=Resource({}),
instrumentation_info=InstrumentationInfo(
name="name", version="version"
),
),
]

Expand All @@ -171,25 +183,17 @@ def test_translate_to_jaeger(self):
otel_spans[0].set_attribute("key_string", "hello_world")
otel_spans[0].set_attribute("key_float", 111.22)
otel_spans[0].set_attribute("key_tuple", ("tuple_element",))
otel_spans[0].resource = Resource(
attributes={"key_resource": "some_resource"}
)
otel_spans[0].set_status(
Status(StatusCode.ERROR, "Example description")
)
otel_spans[0].end(end_time=end_times[0])

otel_spans[1].start(start_time=start_times[1])
otel_spans[1].resource = Resource({})
otel_spans[1].end(end_time=end_times[1])

otel_spans[2].start(start_time=start_times[2])
otel_spans[2].resource = Resource({})
otel_spans[2].set_status(Status(StatusCode.OK, "Example description"))
otel_spans[2].end(end_time=end_times[2])
otel_spans[2].instrumentation_info = InstrumentationInfo(
name="name", version="version"
)

translate = Translate(otel_spans)
# pylint: disable=protected-access
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,24 @@ def test_translate_to_jaeger(self):
events=(event,),
links=(link,),
kind=trace_api.SpanKind.CLIENT,
resource=Resource(
attributes={"key_resource": "some_resource"}
),
),
trace._Span(
name=span_names[1], context=parent_span_context, parent=None
name=span_names[1],
context=parent_span_context,
parent=None,
resource=Resource({}),
),
trace._Span(
name=span_names[2], context=other_context, parent=None
name=span_names[2],
context=other_context,
parent=None,
resource=Resource({}),
instrumentation_info=InstrumentationInfo(
name="name", version="version"
),
),
]

Expand All @@ -250,25 +262,17 @@ def test_translate_to_jaeger(self):
otel_spans[0].set_attribute("key_string", "hello_world")
otel_spans[0].set_attribute("key_float", 111.22)
otel_spans[0].set_attribute("key_tuple", ("tuple_element",))
otel_spans[0].resource = Resource(
attributes={"key_resource": "some_resource"}
)
otel_spans[0].set_status(
Status(StatusCode.ERROR, "Example description")
)
otel_spans[0].end(end_time=end_times[0])

otel_spans[1].start(start_time=start_times[1])
otel_spans[1].resource = Resource({})
otel_spans[1].end(end_time=end_times[1])

otel_spans[2].start(start_time=start_times[2])
otel_spans[2].resource = Resource({})
otel_spans[2].set_status(Status(StatusCode.OK, "Example description"))
otel_spans[2].end(end_time=end_times[2])
otel_spans[2].instrumentation_info = InstrumentationInfo(
name="name", version="version"
)

translate = Translate(otel_spans)
# pylint: disable=protected-access
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from opencensus.proto.trace.v1 import trace_pb2

import opentelemetry.exporter.opencensus.util as utils
from opentelemetry.sdk.trace import Span
from opentelemetry.sdk.trace import ReadableSpan
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult

DEFAULT_ENDPOINT = "localhost:55678"
Expand Down Expand Up @@ -62,7 +62,7 @@ def __init__(

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

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

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


# pylint: disable=too-many-branches
def translate_to_collector(spans: Sequence[Span]):
def translate_to_collector(spans: Sequence[ReadableSpan]):
collector_spans = []
for span in spans:
status = None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
OTEL_EXPORTER_OTLP_SPAN_INSECURE,
OTEL_EXPORTER_OTLP_SPAN_TIMEOUT,
)
from opentelemetry.sdk.trace import Span as SDKSpan
from opentelemetry.sdk.trace import Span as ReadableSpan
from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
from opentelemetry.trace.status import StatusCode

Expand All @@ -55,7 +55,9 @@
# pylint: disable=no-member
class OTLPSpanExporter(
SpanExporter,
OTLPExporterMixin[SDKSpan, ExportTraceServiceRequest, SpanExportResult],
OTLPExporterMixin[
ReadableSpan, ExportTraceServiceRequest, SpanExportResult
],
):
# pylint: disable=unsubscriptable-object
"""OTLP span exporter
Expand Down Expand Up @@ -107,34 +109,34 @@ def __init__(
}
)

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

def _translate_start_time(self, sdk_span: SDKSpan) -> None:
def _translate_start_time(self, sdk_span: ReadableSpan) -> None:
self._collector_span_kwargs[
"start_time_unix_nano"
] = sdk_span.start_time

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

def _translate_span_id(self, sdk_span: SDKSpan) -> None:
def _translate_span_id(self, sdk_span: ReadableSpan) -> None:
self._collector_span_kwargs[
"span_id"
] = sdk_span.context.span_id.to_bytes(8, "big")

def _translate_trace_id(self, sdk_span: SDKSpan) -> None:
def _translate_trace_id(self, sdk_span: ReadableSpan) -> None:
self._collector_span_kwargs[
"trace_id"
] = sdk_span.context.trace_id.to_bytes(16, "big")

def _translate_parent(self, sdk_span: SDKSpan) -> None:
def _translate_parent(self, sdk_span: ReadableSpan) -> None:
if sdk_span.parent is not None:
self._collector_span_kwargs[
"parent_span_id"
] = sdk_span.parent.span_id.to_bytes(8, "big")

def _translate_context_trace_state(self, sdk_span: SDKSpan) -> None:
def _translate_context_trace_state(self, sdk_span: ReadableSpan) -> None:
if sdk_span.context.trace_state is not None:
self._collector_span_kwargs["trace_state"] = ",".join(
[
Expand All @@ -143,7 +145,7 @@ def _translate_context_trace_state(self, sdk_span: SDKSpan) -> None:
]
)

def _translate_attributes(self, sdk_span: SDKSpan) -> None:
def _translate_attributes(self, sdk_span: ReadableSpan) -> None:
if sdk_span.attributes:

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

def _translate_events(self, sdk_span: SDKSpan) -> None:
def _translate_events(self, sdk_span: ReadableSpan) -> None:
if sdk_span.events:
self._collector_span_kwargs["events"] = []

Expand All @@ -181,7 +183,7 @@ def _translate_events(self, sdk_span: SDKSpan) -> None:
collector_span_event
)

def _translate_links(self, sdk_span: SDKSpan) -> None:
def _translate_links(self, sdk_span: ReadableSpan) -> None:
if sdk_span.links:
self._collector_span_kwargs["links"] = []

Expand All @@ -207,7 +209,7 @@ def _translate_links(self, sdk_span: SDKSpan) -> None:
collector_span_link
)

def _translate_status(self, sdk_span: SDKSpan) -> None:
def _translate_status(self, sdk_span: ReadableSpan) -> None:
# pylint: disable=no-member
if sdk_span.status is not None:
deprecated_code = Status.DEPRECATED_STATUS_CODE_OK
Expand All @@ -220,7 +222,7 @@ def _translate_status(self, sdk_span: SDKSpan) -> None:
)

def _translate_data(
self, data: Sequence[SDKSpan]
self, data: Sequence[ReadableSpan]
) -> ExportTraceServiceRequest:
# pylint: disable=attribute-defined-outside-init

Expand Down Expand Up @@ -279,5 +281,5 @@ def _translate_data(
)
)

def export(self, spans: Sequence[SDKSpan]) -> SpanExportResult:
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
return self._export(spans)
Loading

0 comments on commit 78f6949

Please sign in to comment.