Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding readable span #1560

Merged
merged 23 commits into from
Feb 10, 2021
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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: aade876a94f0efe712aaf4a3f4827065e1edd64a

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