Skip to content

Commit d26699d

Browse files
authored
Opencensus exporters should populate service_name from Span Resource (open-telemetry#1897)
1 parent 3ae6c2e commit d26699d

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.3.0-0.22b0...HEAD)
88

9+
### Changed
10+
- Updated `opentelemetry-opencensus-exporter` to use `service_name` of spans instead of resource
11+
([#1897](https://github.com/open-telemetry/opentelemetry-python/pull/1897))
12+
913
## [1.3.0-0.22b0](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.3.0-0.22b0) - 2021-06-01
1014

1115
### Added

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,19 @@ def __init__(
6666
else:
6767
self.client = client
6868

69+
self.host_name = host_name
6970
self.node = utils.get_node(service_name, host_name)
7071

7172
def export(self, spans: Sequence[ReadableSpan]) -> SpanExportResult:
73+
# Populate service_name from first span
74+
# We restrict any SpanProcessor to be only associated with a single
75+
# TracerProvider, so it is safe to assume that all Spans in a single
76+
# batch all originate from one TracerProvider (and in turn have all
77+
# the same service_name)
78+
if spans:
79+
service_name = spans[0].resource.attributes.get(SERVICE_NAME)
80+
if service_name:
81+
self.node = utils.get_node(service_name, self.host_name)
7282
try:
7383
responses = self.client.Export(self.generate_span_requests(spans))
7484

exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434

3535
# pylint: disable=no-member
3636
class TestCollectorSpanExporter(unittest.TestCase):
37+
@mock.patch(
38+
"opentelemetry.exporter.opencensus.trace_exporter.trace._TRACER_PROVIDER",
39+
None,
40+
)
3741
def test_constructor(self):
3842
mock_get_node = mock.Mock()
3943
patch = mock.patch(
@@ -324,3 +328,46 @@ def test_export(self):
324328
self.assertEqual(
325329
getattr(output_identifier, "host_name"), "testHostName"
326330
)
331+
332+
@mock.patch(
333+
"opentelemetry.exporter.opencensus.trace_exporter.trace._TRACER_PROVIDER",
334+
None,
335+
)
336+
def test_export_service_name(self):
337+
trace_api.set_tracer_provider(
338+
TracerProvider(
339+
resource=Resource.create({SERVICE_NAME: "testServiceName"})
340+
)
341+
)
342+
mock_client = mock.MagicMock()
343+
mock_export = mock.MagicMock()
344+
mock_client.Export = mock_export
345+
host_name = "testHostName"
346+
collector_exporter = OpenCensusSpanExporter(
347+
client=mock_client, host_name=host_name
348+
)
349+
self.assertEqual(
350+
collector_exporter.node.service_info.name, "testServiceName"
351+
)
352+
353+
trace_id = 0x6E0C63257DE34C926F9EFCD03927272E
354+
span_id = 0x34BF92DEEFC58C92
355+
span_context = trace_api.SpanContext(
356+
trace_id,
357+
span_id,
358+
is_remote=False,
359+
trace_flags=TraceFlags(TraceFlags.SAMPLED),
360+
)
361+
resource = Resource.create({SERVICE_NAME: "test"})
362+
otel_spans = [
363+
trace._Span(
364+
name="test1",
365+
context=span_context,
366+
kind=trace_api.SpanKind.CLIENT,
367+
resource=resource,
368+
)
369+
]
370+
371+
result_status = collector_exporter.export(otel_spans)
372+
self.assertEqual(SpanExportResult.SUCCESS, result_status)
373+
self.assertEqual(collector_exporter.node.service_info.name, "test")

0 commit comments

Comments
 (0)