Skip to content

Commit b2c0d53

Browse files
author
Andrew Xue
authored
add gco agent span label (#833)
1 parent 9e20f74 commit b2c0d53

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,17 @@
4444
from typing import Any, Dict, List, Optional, Sequence, Tuple
4545

4646
import google.auth
47+
import pkg_resources
4748
from google.cloud.trace_v2 import TraceServiceClient
4849
from google.cloud.trace_v2.proto.trace_pb2 import AttributeValue
4950
from google.cloud.trace_v2.proto.trace_pb2 import Span as ProtoSpan
5051
from google.cloud.trace_v2.proto.trace_pb2 import TruncatableString
5152
from google.rpc.status_pb2 import Status
5253

5354
import opentelemetry.trace as trace_api
55+
from opentelemetry.exporter.cloud_trace.version import (
56+
__version__ as cloud_trace_version,
57+
)
5458
from opentelemetry.sdk.trace import Event
5559
from opentelemetry.sdk.trace.export import Span, SpanExporter, SpanExportResult
5660
from opentelemetry.sdk.util import BoundedDict
@@ -157,7 +161,7 @@ def _translate_to_cloud_trace(
157161
"end_time": end_time,
158162
"parent_span_id": parent_id,
159163
"attributes": _extract_attributes(
160-
span.attributes, MAX_SPAN_ATTRS
164+
span.attributes, MAX_SPAN_ATTRS, add_agent_attr=True
161165
),
162166
"links": _extract_links(span.links),
163167
"status": _extract_status(span.status),
@@ -288,20 +292,32 @@ def _extract_events(events: Sequence[Event]) -> ProtoSpan.TimeEvents:
288292

289293

290294
def _extract_attributes(
291-
attrs: types.Attributes, num_attrs_limit: int
295+
attrs: types.Attributes,
296+
num_attrs_limit: int,
297+
add_agent_attr: bool = False,
292298
) -> ProtoSpan.Attributes:
293299
"""Convert span.attributes to dict."""
294300
attributes_dict = BoundedDict(num_attrs_limit)
295-
301+
invalid_value_dropped_count = 0
296302
for key, value in attrs.items():
297303
key = _truncate_str(key, 128)[0]
298304
value = _format_attribute_value(value)
299305

300-
if value is not None:
306+
if value:
301307
attributes_dict[key] = value
308+
else:
309+
invalid_value_dropped_count += 1
310+
if add_agent_attr:
311+
attributes_dict["g.co/agent"] = _format_attribute_value(
312+
"opentelemetry-python {}; google-cloud-trace-exporter {}".format(
313+
pkg_resources.get_distribution("opentelemetry-sdk").version,
314+
cloud_trace_version,
315+
)
316+
)
302317
return ProtoSpan.Attributes(
303318
attribute_map=attributes_dict,
304-
dropped_attributes_count=len(attrs) - len(attributes_dict),
319+
dropped_attributes_count=attributes_dict.dropped
320+
+ invalid_value_dropped_count,
305321
)
306322

307323

ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import unittest
1616
from unittest import mock
1717

18+
import pkg_resources
1819
from google.cloud.trace_v2.proto.trace_pb2 import AttributeValue
1920
from google.cloud.trace_v2.proto.trace_pb2 import Span as ProtoSpan
2021
from google.cloud.trace_v2.proto.trace_pb2 import TruncatableString
@@ -33,7 +34,11 @@
3334
_format_attribute_value,
3435
_truncate_str,
3536
)
36-
from opentelemetry.sdk.trace import Event, Span
37+
from opentelemetry.exporter.cloud_trace.version import (
38+
__version__ as cloud_trace_version,
39+
)
40+
from opentelemetry.sdk.trace import Event
41+
from opentelemetry.sdk.trace.export import Span
3742
from opentelemetry.trace import Link, SpanContext, SpanKind
3843
from opentelemetry.trace.status import Status as SpanStatus
3944
from opentelemetry.trace.status import StatusCanonicalCode
@@ -108,7 +113,18 @@ def test_export(self):
108113
"display_name": TruncatableString(
109114
value="span_name", truncated_byte_count=0
110115
),
111-
"attributes": ProtoSpan.Attributes(attribute_map={}),
116+
"attributes": ProtoSpan.Attributes(
117+
attribute_map={
118+
"g.co/agent": _format_attribute_value(
119+
"opentelemetry-python {}; google-cloud-trace-exporter {}".format(
120+
pkg_resources.get_distribution(
121+
"opentelemetry-sdk"
122+
).version,
123+
cloud_trace_version,
124+
)
125+
)
126+
}
127+
),
112128
"links": None,
113129
"status": None,
114130
"time_events": None,

0 commit comments

Comments
 (0)