Skip to content

Commit 6602941

Browse files
authored
feat: add HYPERDX_ENABLE_ADVANCED_NETWORK_CAPTURE flag (#6)
* docs: honeycomb attibution * feat: add HYPERDX_ENABLE_ADVANCED_NETWORK_CAPTURE flag * ci: add flag
1 parent 6cd4412 commit 6602941

File tree

4 files changed

+36
-16
lines changed

4 files changed

+36
-16
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
[![CircleCI](https://circleci.com/gh/hyperdxio/hyperdx-opentelemetry-python.svg?style=shield)](https://circleci.com/gh/hyperdxio/hyperdx-opentelemetry-python)
55
[![PyPi](https://img.shields.io/pypi/v/hyperdx-opentelemetry)](https://pypi.org/project/hyperdx-opentelemetry/)
66

7+
> This project is a fork from https://github.com/honeycombio/honeycomb-opentelemetry-python
8+
79
**STATUS: this library is BETA.**
810
You're welcome to try it, and let us know your feedback in the issues!
911

smoke-tests/docker-compose.yml

+1
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,4 @@ services:
7070
<<: *env_base
7171
HYPERDX_API_ENDPOINT: http://collector:4318
7272
OTEL_EXPORTER_OTLP_PROTOCOL: http/protobuf
73+
HYPERDX_ENABLE_ADVANCED_NETWORK_CAPTURE: 1

src/hyperdx/opentelemetry/manual.py

+19-16
Original file line numberDiff line numberDiff line change
@@ -129,18 +129,20 @@ def client_response_hook(span: FastAPISpan, message: dict):
129129

130130

131131
def configure_custom_env_vars(options: HyperDXOptions, resource: Resource):
132-
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_REQUEST"] = os.getenv(
133-
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_REQUEST", ".*"
134-
)
135-
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_RESPONSE"] = os.getenv(
136-
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_RESPONSE", ".*"
137-
)
138-
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST"] = os.getenv(
139-
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST", ".*"
140-
)
141-
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE"] = os.getenv(
142-
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE", ".*"
143-
)
132+
if options.enable_advanced_network_capture:
133+
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_REQUEST"] = os.getenv(
134+
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_REQUEST", ".*"
135+
)
136+
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_RESPONSE"] = os.getenv(
137+
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_CLIENT_RESPONSE", ".*"
138+
)
139+
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST"] = os.getenv(
140+
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST", ".*"
141+
)
142+
os.environ["OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE"] = os.getenv(
143+
"OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE", ".*"
144+
)
145+
144146
os.environ["OTEL_PYTHON_LOG_CORRELATION"] = os.getenv(
145147
"OTEL_PYTHON_LOG_CORRELATION", "true"
146148
)
@@ -152,7 +154,8 @@ def instrument_custom_libs(
152154
tracer_provider: TracerProvider,
153155
meter_provider: MeterProvider,
154156
):
155-
_instrument_urllib(options, tracer_provider, meter_provider)
156-
_instrument_requests(options, tracer_provider, meter_provider)
157-
_instrument_flask(options, tracer_provider, meter_provider)
158-
_instrument_fastapi(options, tracer_provider, meter_provider)
157+
if options.enable_advanced_network_capture:
158+
_instrument_urllib(options, tracer_provider, meter_provider)
159+
_instrument_requests(options, tracer_provider, meter_provider)
160+
_instrument_flask(options, tracer_provider, meter_provider)
161+
_instrument_fastapi(options, tracer_provider, meter_provider)

src/hyperdx/opentelemetry/options.py

+14
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
# Environment Variable Names
2222
DEBUG = "DEBUG"
2323
HYPERDX_ENABLE_LOCAL_VISUALIZATIONS = "HYPERDX_ENABLE_LOCAL_VISUALIZATIONS"
24+
HYPERDX_ENABLE_ADVANCED_NETWORK_CAPTURE = "HYPERDX_ENABLE_ADVANCED_NETWORK_CAPTURE"
2425
OTEL_SERVICE_VERSION = "OTEL_SERVICE_VERSION"
2526
SAMPLE_RATE = "SAMPLE_RATE"
2627

@@ -52,6 +53,11 @@
5253
+ "HYPERDX_ENABLE_LOCAL_VISUALIZATIONS environment variable. "
5354
+ "Defaulting to false."
5455
)
56+
INVALID_LOCAL_ADVANCED_NETWORK_CAPTURE_ERROR = (
57+
"Unable to parse "
58+
+ "HYPERDX_ENABLE_ADVANCED_NETWORK_CAPTURE environment variable. "
59+
+ "Defaulting to false."
60+
)
5561
INVALID_LOGS_INSECURE_ERROR = (
5662
"Unable to parse " + "OTEL_EXPORTER_OTLP_LOGS_INSECURE. Defaulting to False."
5763
)
@@ -243,6 +249,7 @@ class HyperDXOptions:
243249
dataset = None
244250
metrics_dataset = None
245251
enable_local_visualizations = False
252+
enable_advanced_network_capture = False
246253

247254
# pylint: disable=too-many-locals,too-many-branches,too-many-statements
248255
def __init__(
@@ -271,6 +278,7 @@ def __init__(
271278
traces_exporter_protocol: str = None,
272279
metrics_exporter_protocol: str = None,
273280
logs_exporter_protocol: str = None,
281+
enable_advanced_network_capture: bool = False,
274282
):
275283
self.debug = parse_bool(DEBUG, (debug or False), INVALID_DEBUG_ERROR)
276284
if self.debug:
@@ -433,6 +441,12 @@ def __init__(
433441
INVALID_LOCAL_VIS_ERROR,
434442
)
435443

444+
self.enable_advanced_network_capture = parse_bool(
445+
HYPERDX_ENABLE_ADVANCED_NETWORK_CAPTURE,
446+
enable_advanced_network_capture,
447+
INVALID_LOCAL_ADVANCED_NETWORK_CAPTURE_ERROR,
448+
)
449+
436450
def get_traces_endpoint(self) -> str:
437451
"""
438452
Returns the OTLP traces endpoint to send spans to.

0 commit comments

Comments
 (0)