Skip to content

Commit ed4735b

Browse files
authored
chore: Add gcp resource name span attribute (#1480)
Adding a new span attribute called gcp.resource.name which contains an identifier to a particular spanner instance and database in the following format: //spanner.googleapis.com/projects/{project}/instances/{instance_id}/databases/{database_id} Example: //spanner.googleapis.com/projects/my_project/instances/my_instance/databases/my_database
1 parent f8f3f87 commit ed4735b

File tree

8 files changed

+31
-2
lines changed

8 files changed

+31
-2
lines changed

google/cloud/spanner_v1/_opentelemetry_tracing.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
TRACER_NAME = "cloud.google.com/python/spanner"
3838
TRACER_VERSION = gapic_version.__version__
39+
GCP_RESOURCE_NAME_PREFIX = "//spanner.googleapis.com/"
3940
extended_tracing_globally_disabled = (
4041
os.getenv("SPANNER_ENABLE_EXTENDED_TRACING", "").lower() == "false"
4142
)
@@ -106,6 +107,7 @@ def trace_call(
106107
"gcp.client.service": "spanner",
107108
"gcp.client.version": TRACER_VERSION,
108109
"gcp.client.repo": "googleapis/python-spanner",
110+
"gcp.resource.name": GCP_RESOURCE_NAME_PREFIX + db_name,
109111
}
110112

111113
if extra_attributes:

tests/system/test_session_api.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import threading
2222
import time
2323
import uuid
24+
from google.cloud.spanner_v1 import _opentelemetry_tracing
2425
import pytest
2526

2627
import grpc
@@ -362,6 +363,8 @@ def _make_attributes(db_instance, **kwargs):
362363
"gcp.client.service": "spanner",
363364
"gcp.client.version": ot_helpers.LIB_VERSION,
364365
"gcp.client.repo": "googleapis/python-spanner",
366+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX
367+
+ db_instance,
365368
}
366369
ot_helpers.enrich_with_otel_scope(attributes)
367370

tests/unit/test__opentelemetry_tracing.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ def _make_rpc_error(error_cls, trailing_metadata=None):
2828
def _make_session():
2929
from google.cloud.spanner_v1.session import Session
3030

31-
return mock.Mock(autospec=Session, instance=True)
31+
session = mock.Mock(autospec=Session, instance=True)
32+
# Set a string name to allow concatenation
33+
session._database.name = "projects/p/instances/i/databases/d"
34+
return session
3235

3336

3437
class TestTracing(OpenTelemetryBase):
@@ -52,6 +55,8 @@ def test_trace_call(self, mock_region):
5255
"gcp.client.service": "spanner",
5356
"gcp.client.version": LIB_VERSION,
5457
"gcp.client.repo": "googleapis/python-spanner",
58+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX
59+
+ "projects/p/instances/i/databases/d",
5560
}
5661
)
5762
expected_attributes.update(extra_attributes)
@@ -87,6 +92,8 @@ def test_trace_error(self, mock_region):
8792
"gcp.client.service": "spanner",
8893
"gcp.client.version": LIB_VERSION,
8994
"gcp.client.repo": "googleapis/python-spanner",
95+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX
96+
+ "projects/p/instances/i/databases/d",
9097
}
9198
)
9299
expected_attributes.update(extra_attributes)

tests/unit/test_batch.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
Mutation,
3030
BatchWriteResponse,
3131
DefaultTransactionOptions,
32+
_opentelemetry_tracing,
3233
)
3334
import mock
3435
from google.cloud._helpers import UTC, _datetime_to_pb_timestamp
@@ -58,6 +59,7 @@
5859
"gcp.client.service": "spanner",
5960
"gcp.client.version": LIB_VERSION,
6061
"gcp.client.repo": "googleapis/python-spanner",
62+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX + "testing",
6163
"cloud.region": "global",
6264
}
6365
enrich_with_otel_scope(BASE_ATTRIBUTES)

tests/unit/test_pool.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from datetime import datetime, timedelta
2020

2121
import mock
22+
from google.cloud.spanner_v1 import _opentelemetry_tracing
2223
from google.cloud.spanner_v1._helpers import (
2324
_metadata_with_request_id,
2425
AtomicCounter,
@@ -155,6 +156,7 @@ class TestFixedSizePool(OpenTelemetryBase):
155156
"gcp.client.service": "spanner",
156157
"gcp.client.version": LIB_VERSION,
157158
"gcp.client.repo": "googleapis/python-spanner",
159+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX + "name",
158160
"cloud.region": "global",
159161
}
160162
enrich_with_otel_scope(BASE_ATTRIBUTES)
@@ -549,6 +551,7 @@ class TestBurstyPool(OpenTelemetryBase):
549551
"gcp.client.service": "spanner",
550552
"gcp.client.version": LIB_VERSION,
551553
"gcp.client.repo": "googleapis/python-spanner",
554+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX + "name",
552555
"cloud.region": "global",
553556
}
554557
enrich_with_otel_scope(BASE_ATTRIBUTES)
@@ -839,6 +842,7 @@ class TestPingingPool(OpenTelemetryBase):
839842
"gcp.client.service": "spanner",
840843
"gcp.client.version": LIB_VERSION,
841844
"gcp.client.repo": "googleapis/python-spanner",
845+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX + "name",
842846
"cloud.region": "global",
843847
}
844848
enrich_with_otel_scope(BASE_ATTRIBUTES)

tests/unit/test_session.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414

1515

1616
import google.api_core.gapic_v1.method
17-
from google.cloud.spanner_v1._opentelemetry_tracing import trace_call
17+
from google.cloud.spanner_v1._opentelemetry_tracing import (
18+
trace_call,
19+
GCP_RESOURCE_NAME_PREFIX,
20+
)
1821
import mock
1922
import datetime
2023
from google.cloud.spanner_v1 import (
@@ -130,6 +133,7 @@ class TestSession(OpenTelemetryBase):
130133
"gcp.client.service": "spanner",
131134
"gcp.client.version": LIB_VERSION,
132135
"gcp.client.repo": "googleapis/python-spanner",
136+
"gcp.resource.name": GCP_RESOURCE_NAME_PREFIX + DATABASE_NAME,
133137
"cloud.region": "global",
134138
}
135139
enrich_with_otel_scope(BASE_ATTRIBUTES)

tests/unit/test_snapshot.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
BeginTransactionRequest,
2727
TransactionOptions,
2828
TransactionSelector,
29+
_opentelemetry_tracing,
2930
)
3031
from google.cloud.spanner_v1.snapshot import _SnapshotBase
3132
from tests._builders import (
@@ -80,6 +81,7 @@
8081
"gcp.client.service": "spanner",
8182
"gcp.client.version": LIB_VERSION,
8283
"gcp.client.repo": "googleapis/python-spanner",
84+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX + "testing",
8385
}
8486
enrich_with_otel_scope(BASE_ATTRIBUTES)
8587

@@ -2282,6 +2284,8 @@ def _build_span_attributes(
22822284
"gcp.client.service": "spanner",
22832285
"gcp.client.version": LIB_VERSION,
22842286
"gcp.client.repo": "googleapis/python-spanner",
2287+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX
2288+
+ database.name,
22852289
"x_goog_spanner_request_id": _build_request_id(database, attempt),
22862290
}
22872291
attributes.update(extra_attributes)

tests/unit/test_transaction.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
BeginTransactionRequest,
2626
TransactionOptions,
2727
ResultSetMetadata,
28+
_opentelemetry_tracing,
2829
)
2930
from google.cloud.spanner_v1._helpers import GOOGLE_CLOUD_REGION_GLOBAL
3031
from google.cloud.spanner_v1 import DefaultTransactionOptions
@@ -1345,6 +1346,8 @@ def _build_span_attributes(
13451346
"gcp.client.service": "spanner",
13461347
"gcp.client.version": LIB_VERSION,
13471348
"gcp.client.repo": "googleapis/python-spanner",
1349+
"gcp.resource.name": _opentelemetry_tracing.GCP_RESOURCE_NAME_PREFIX
1350+
+ database.name,
13481351
"cloud.region": GOOGLE_CLOUD_REGION_GLOBAL,
13491352
}
13501353
)

0 commit comments

Comments
 (0)