Skip to content

Commit a190a12

Browse files
authored
Implement resource detection e2e scenario (#234)
1 parent a34b6dc commit a190a12

File tree

6 files changed

+51
-11
lines changed

6 files changed

+51
-11
lines changed

cloudbuild-e2e-cloud-run.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ steps:
3232

3333
logsBucket: gs://opentelemetry-ops-e2e-cloud-build-logs
3434
substitutions:
35-
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.9.0
35+
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.16.0
3636
_TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-python-e2e-test-server:${SHORT_SHA}

cloudbuild-e2e-gce.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ steps:
3434

3535
logsBucket: gs://opentelemetry-ops-e2e-cloud-build-logs
3636
substitutions:
37-
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.9.0
37+
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.16.0
3838
_TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-python-e2e-test-server:${SHORT_SHA}

cloudbuild-e2e-gke.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ steps:
3232

3333
logsBucket: gs://opentelemetry-ops-e2e-cloud-build-logs
3434
substitutions:
35-
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.9.0
35+
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.16.0
3636
_TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-python-e2e-test-server:${SHORT_SHA}

cloudbuild-e2e-local.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ steps:
3434

3535
logsBucket: gs://opentelemetry-ops-e2e-cloud-build-logs
3636
substitutions:
37-
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.9.0
37+
_TEST_RUNNER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-e2e-testing:0.16.0
3838
_TEST_SERVER_IMAGE: gcr.io/${PROJECT_ID}/opentelemetry-operations-python-e2e-test-server:${SHORT_SHA}

e2e-test-server/e2e_test_server/scenarios.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@
1414

1515
import contextlib
1616
import dataclasses
17-
from typing import Callable, Iterator, Mapping
17+
import os
18+
from typing import Any, Callable, Iterator, Mapping
1819

1920
from google.rpc import code_pb2
2021
from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
2122
from opentelemetry.propagators.cloud_trace_propagator import (
2223
CloudTraceFormatPropagator,
2324
)
25+
from opentelemetry.resourcedetector.gcp_resource_detector._detector import (
26+
GoogleCloudResourceDetector,
27+
)
2428
from opentelemetry.sdk.trace import TracerProvider
2529
from opentelemetry.sdk.trace.export import BatchSpanProcessor
2630
from opentelemetry.sdk.trace.sampling import ALWAYS_ON
@@ -44,17 +48,24 @@ class Response:
4448

4549

4650
@contextlib.contextmanager
47-
def _tracer_setup() -> Iterator[Tracer]:
51+
def _tracer_setup(
52+
tracer_provider_config: Mapping[str, Any] = {},
53+
exporter_config: Mapping[str, Any] = {},
54+
) -> Iterator[Tracer]:
4855
"""\
4956
Context manager with common setup for tracing endpoints
5057
5158
Yields a tracer (from a fresh SDK with new exporter) then finally flushes
5259
spans created during the test after.
5360
"""
5461

55-
tracer_provider = TracerProvider(sampler=ALWAYS_ON)
62+
tracer_provider = TracerProvider(
63+
sampler=ALWAYS_ON, **tracer_provider_config
64+
)
5665
tracer_provider.add_span_processor(
57-
BatchSpanProcessor(CloudTraceSpanExporter(project_id=PROJECT_ID))
66+
BatchSpanProcessor(
67+
CloudTraceSpanExporter(project_id=PROJECT_ID, **exporter_config)
68+
)
5869
)
5970
tracer = tracer_provider.get_tracer(INSTRUMENTING_MODULE_NAME)
6071

@@ -124,6 +135,33 @@ def basic_propagator(request: Request) -> Response:
124135
return Response(status_code=code_pb2.OK, headers={TRACE_ID: trace_id})
125136

126137

138+
def detect_resource(request: Request) -> Response:
139+
"""Create a trace with GCP resource detector"""
140+
141+
# Temporarily skip if on Cloud Run until it is implemented
142+
if "K_CONFIGURATION" in os.environ:
143+
return Response(
144+
status_code=code_pb2.UNIMPLEMENTED,
145+
data=b"Resource detection not yet implemented on Cloud Run",
146+
)
147+
148+
with _tracer_setup(
149+
tracer_provider_config={
150+
"resource": GoogleCloudResourceDetector(
151+
raise_on_error=True
152+
).detect()
153+
},
154+
exporter_config={"resource_regex": r".*"},
155+
) as tracer:
156+
with tracer.start_span(
157+
"resourceDetectionTrace",
158+
attributes={TEST_ID: request.test_id},
159+
) as span:
160+
trace_id = format_trace_id(span.get_span_context().trace_id)
161+
162+
return Response(status_code=code_pb2.OK, headers={TRACE_ID: trace_id})
163+
164+
127165
def not_implemented_handler(_: Request) -> Response:
128166
return Response(status_code=str(code_pb2.UNIMPLEMENTED))
129167

@@ -133,4 +171,5 @@ def not_implemented_handler(_: Request) -> Response:
133171
"/basicTrace": basic_trace,
134172
"/complexTrace": complex_trace,
135173
"/basicPropagator": basic_propagator,
174+
"/detectResource": detect_resource,
136175
}

opentelemetry-resourcedetector-gcp/src/opentelemetry/resourcedetector/gcp_resource_detector/_metadata.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,16 @@ def get_metadata() -> Metadata:
6262
Cached for the lifetime of the process.
6363
"""
6464
try:
65-
all_metadata = requests.get(
65+
res = requests.get(
6666
f"{_GCP_METADATA_URL}",
6767
params=_RECURSIVE_PARAMS,
6868
headers=_GCP_METADATA_URL_HEADER,
6969
timeout=_TIMEOUT_SEC,
70-
).json()
70+
)
71+
res.raise_for_status()
72+
all_metadata = res.json()
7173
except requests.RequestException as err:
7274
raise MetadataAccessException() from err
73-
7475
return all_metadata
7576

7677

0 commit comments

Comments
 (0)