Skip to content

Commit 5a1f6c0

Browse files
committed
formatting
1 parent 93aecc5 commit 5a1f6c0

File tree

7 files changed

+125
-176
lines changed

7 files changed

+125
-176
lines changed

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/_utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
AGENT_OBSERVABILITY_ENABLED = "AGENT_OBSERVABILITY_ENABLED"
1313

14+
1415
def is_installed(req: str) -> bool:
1516
"""Is the given required package installed?"""
1617

@@ -24,5 +25,6 @@ def is_installed(req: str) -> bool:
2425
return False
2526
return True
2627

28+
2729
def is_agent_observability_enabled() -> bool:
28-
return os.environ.get(AGENT_OBSERVABILITY_ENABLED, "false").lower() == "true"
30+
return os.environ.get(AGENT_OBSERVABILITY_ENABLED, "false").lower() == "true"

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_opentelemetry_configurator.py

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,15 @@
33
# Modifications Copyright The OpenTelemetry Authors. Licensed under the Apache License 2.0 License.
44
import os
55
import re
6-
from logging import NOTSET, CRITICAL, Logger, getLogger
6+
from logging import CRITICAL, NOTSET, Logger, getLogger
77
from typing import ClassVar, Dict, List, Type, Union
88

99
from importlib_metadata import version
1010
from typing_extensions import override
1111

1212
from amazon.opentelemetry.distro._aws_attribute_keys import AWS_LOCAL_SERVICE
13-
from amazon.opentelemetry.distro.exporter.otlp.aws.logs.aws_batch_log_processor import AwsBatchLogRecordProcessor
14-
from amazon.opentelemetry.distro._utils import is_agent_observability_enabled
1513
from amazon.opentelemetry.distro._aws_resource_attribute_configurator import get_service_attribute
14+
from amazon.opentelemetry.distro._utils import is_agent_observability_enabled
1615
from amazon.opentelemetry.distro.always_record_sampler import AlwaysRecordSampler
1716
from amazon.opentelemetry.distro.attribute_propagating_span_processor_builder import (
1817
AttributePropagatingSpanProcessorBuilder,
@@ -23,13 +22,14 @@
2322
AwsMetricAttributesSpanExporterBuilder,
2423
)
2524
from amazon.opentelemetry.distro.aws_span_metrics_processor_builder import AwsSpanMetricsProcessorBuilder
25+
from amazon.opentelemetry.distro.exporter.otlp.aws.logs.aws_batch_log_record_processor import AwsBatchLogRecordProcessor
2626
from amazon.opentelemetry.distro.exporter.otlp.aws.logs.otlp_aws_logs_exporter import OTLPAwsLogExporter
2727
from amazon.opentelemetry.distro.exporter.otlp.aws.traces.otlp_aws_span_exporter import OTLPAwsSpanExporter
2828
from amazon.opentelemetry.distro.otlp_udp_exporter import OTLPUdpSpanExporter
2929
from amazon.opentelemetry.distro.sampler.aws_xray_remote_sampler import AwsXRayRemoteSampler
3030
from amazon.opentelemetry.distro.scope_based_exporter import ScopeBasedPeriodicExportingMetricReader
3131
from amazon.opentelemetry.distro.scope_based_filtering_view import ScopeBasedRetainingView
32-
from opentelemetry._logs import set_logger_provider, get_logger_provider
32+
from opentelemetry._logs import get_logger_provider, set_logger_provider
3333
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
3434
from opentelemetry.exporter.otlp.proto.http.metric_exporter import OTLPMetricExporter as OTLPHttpOTLPMetricExporter
3535
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
@@ -124,24 +124,6 @@ class AwsOpenTelemetryConfigurator(_OTelSDKConfigurator):
124124
# pylint: disable=no-self-use
125125
@override
126126
def _configure(self, **kwargs):
127-
128-
print(f"OTEL_EXPORTER_OTLP_LOGS_HEADERS: {os.environ.get('OTEL_EXPORTER_OTLP_LOGS_HEADERS', 'Not set')}")
129-
print(f"OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED: {os.environ.get('OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED', 'Not set')}")
130-
print(f"OTEL_METRICS_EXPORTER: {os.environ.get('OTEL_METRICS_EXPORTER', 'Not set')}")
131-
print(f"OTEL_TRACES_EXPORTER: {os.environ.get('OTEL_TRACES_EXPORTER', 'Not set')}")
132-
print(f"OTEL_LOGS_EXPORTER: {os.environ.get('OTEL_LOGS_EXPORTER', 'Not set')}")
133-
print(f"OTEL_PYTHON_DISTRO: {os.environ.get('OTEL_PYTHON_DISTRO', 'Not set')}")
134-
print(f"OTEL_PYTHON_CONFIGURATOR: {os.environ.get('OTEL_PYTHON_CONFIGURATOR', 'Not set')}")
135-
print(f"OTEL_EXPORTER_OTLP_PROTOCOL: {os.environ.get('OTEL_EXPORTER_OTLP_PROTOCOL', 'Not set')}")
136-
print(f"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: {os.environ.get('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT', 'Not set')}")
137-
print(f"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT: {os.environ.get('OTEL_EXPORTER_OTLP_LOGS_ENDPOINT', 'Not set')}")
138-
print(f"OTEL_RESOURCE_ATTRIBUTES: {os.environ.get('OTEL_RESOURCE_ATTRIBUTES', 'Not set')}")
139-
print(f"AGENT_OBSERVABILITY_ENABLED: {os.environ.get('AGENT_OBSERVABILITY_ENABLED', 'Not set')}")
140-
print(f"AWS_CLOUDWATCH_LOG_GROUP: {os.environ.get('AWS_CLOUDWATCH_LOG_GROUP', 'Not set')}")
141-
print(f"AWS_CLOUDWATCH_LOG_STREAM: {os.environ.get('AWS_CLOUDWATCH_LOG_STREAM', 'Not set')}")
142-
print(f"OTEL_PYTHON_DISABLED_INSTRUMENTATIONS: {os.environ.get('OTEL_PYTHON_DISABLED_INSTRUMENTATIONS', 'Not set')}")
143-
print(f"PYTHONPATH: {os.environ.get('PYTHONPATH', 'Not set')}")
144-
145127
if _is_defer_to_workers_enabled() and _is_wsgi_master_process():
146128
_logger.info(
147129
"Skipping ADOT initialization since deferral to worker is enabled, and this is a master process."
@@ -184,7 +166,7 @@ def _initialize_components():
184166
sampler = _custom_import_sampler(sampler_name, resource)
185167

186168
logging_enabled = os.getenv(_OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED, "false")
187-
169+
188170
if logging_enabled.strip().lower() == "true":
189171
_init_logging(log_exporters, resource)
190172

@@ -195,7 +177,6 @@ def _initialize_components():
195177
resource=resource,
196178
)
197179
_init_metrics(metric_exporters, resource)
198-
199180

200181

201182
def _init_logging(
@@ -214,7 +195,12 @@ def _init_logging(
214195
for _, exporter_class in exporters.items():
215196
exporter_args: Dict[str, any] = {}
216197
log_exporter = _customize_logs_exporter(exporter_class(**exporter_args), resource)
217-
provider.add_log_record_processor(AwsBatchLogRecordProcessor(exporter=log_exporter))
198+
199+
if isinstance(log_exporter, OTLPAwsLogExporter):
200+
provider.add_log_record_processor(AwsBatchLogRecordProcessor(exporter=log_exporter))
201+
202+
else:
203+
provider.add_log_record_processor(BatchLogRecordProcessor(exporter=log_exporter))
218204

219205
handler = LoggingHandler(level=NOTSET, logger_provider=provider)
220206

@@ -387,10 +373,7 @@ def _customize_span_exporter(span_exporter: SpanExporter, resource: Resource) ->
387373
if isinstance(span_exporter, OTLPSpanExporter):
388374
if is_agent_observability_enabled():
389375

390-
span_exporter = OTLPAwsSpanExporter(
391-
endpoint=traces_endpoint,
392-
logs_provider=get_logger_provider()
393-
)
376+
span_exporter = OTLPAwsSpanExporter(endpoint=traces_endpoint, logs_provider=get_logger_provider())
394377
else:
395378
span_exporter = OTLPAwsSpanExporter(endpoint=traces_endpoint)
396379

@@ -657,4 +640,4 @@ def create_exporter(self):
657640
endpoint=application_signals_endpoint, preferred_temporality=temporality_dict
658641
)
659642

660-
raise RuntimeError(f"Unsupported AWS Application Signals export protocol: {protocol} ")
643+
raise RuntimeError(f"Unsupported AWS Application Signals export protocol: {protocol} ")
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
BASE_LOG_BUFFER_BYTE_SIZE = 450000
2-
MAX_LOG_REQUEST_BYTE_SIZE = 1048576 # https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPEndpoint.html
2+
MAX_LOG_REQUEST_BYTE_SIZE = (
3+
1048576 # https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPEndpoint.html
4+
)
Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,46 @@
1-
from time import sleep
21
import json
32
import logging
43
import os
54
import threading
5+
from time import sleep
66
from typing import Mapping, Sequence
7-
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
8-
from amazon.opentelemetry.distro.exporter.otlp.aws.common.constants import MAX_LOG_REQUEST_BYTE_SIZE, BASE_LOG_BUFFER_BYTE_SIZE
9-
from amazon.opentelemetry.distro.exporter.otlp.aws.logs.otlp_aws_logs_exporter import OTLPAwsLogExporter
10-
from opentelemetry.sdk._logs._internal.export import BatchLogExportStrategy, detach, attach, set_value, _SUPPRESS_INSTRUMENTATION_KEY
117

8+
from amazon.opentelemetry.distro.exporter.otlp.aws.common.constants import (
9+
BASE_LOG_BUFFER_BYTE_SIZE,
10+
MAX_LOG_REQUEST_BYTE_SIZE,
11+
)
12+
from amazon.opentelemetry.distro.exporter.otlp.aws.logs.otlp_aws_logs_exporter import OTLPAwsLogExporter
1213
from opentelemetry.sdk._logs import LogData
14+
from opentelemetry.sdk._logs._internal.export import (
15+
_SUPPRESS_INSTRUMENTATION_KEY,
16+
BatchLogExportStrategy,
17+
attach,
18+
detach,
19+
set_value,
20+
)
21+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
1322
from opentelemetry.util.types import AnyValue
1423

1524
_logger = logging.getLogger(__name__)
1625

26+
1727
class AwsBatchLogRecordProcessor(BatchLogRecordProcessor):
1828

19-
def __init__(
29+
def __init__(
2030
self,
2131
exporter: OTLPAwsLogExporter,
2232
schedule_delay_millis: float | None = None,
2333
max_export_batch_size: int | None = None,
2434
export_timeout_millis: float | None = None,
25-
max_queue_size: int | None = None
26-
):
35+
max_queue_size: int | None = None,
36+
):
2737

2838
super().__init__(
2939
exporter=exporter,
3040
schedule_delay_millis=schedule_delay_millis,
3141
max_export_batch_size=max_export_batch_size,
3242
export_timeout_millis=export_timeout_millis,
33-
max_queue_size=max_queue_size
43+
max_queue_size=max_queue_size,
3444
)
3545

3646
# Code based off of:
@@ -41,7 +51,7 @@ def _export(self, batch_strategy: BatchLogExportStrategy) -> None:
4151
will intermediarly export small log batches if the size of the data in the batch is at or above AWS CloudWatch's maximum request size limit
4252
of 1 MB.
4353
44-
- Data size of exported batches will ALWAYS be <= 1 MB except for the case below:
54+
- Data size of exported batches will ALWAYS be <= 1 MB except for the case below:
4555
- If the data size of an exported batch is ever > 1 MB then the batch size is guaranteed to be 1
4656
"""
4757

@@ -57,42 +67,42 @@ def _export(self, batch_strategy: BatchLogExportStrategy) -> None:
5767
batch_length = min(self._max_export_batch_size, len(self._queue))
5868
batch_data_size = 0
5969
batch = []
60-
70+
6171
for _ in range(batch_length):
62-
72+
6373
log_data = self._queue.pop()
6474
log_size = self._get_size_of_log(log_data)
65-
75+
6676
if batch and (batch_data_size + log_size > MAX_LOG_REQUEST_BYTE_SIZE):
6777
# if batch_data_size > MAX_LOG_REQUEST_BYTE_SIZE then len(batch) == 1
6878
if batch_data_size > MAX_LOG_REQUEST_BYTE_SIZE:
6979
self._exporter.set_gen_ai_flag()
70-
80+
7181
self._exporter.export(batch)
7282
batch_data_size = 0
7383
batch = []
74-
84+
7585
batch_data_size += log_size
7686
batch.append(log_data)
77-
87+
7888
if batch:
7989
# if batch_data_size > MAX_LOG_REQUEST_BYTE_SIZE then len(batch) == 1
8090
if batch_data_size > MAX_LOG_REQUEST_BYTE_SIZE:
8191
self._exporter.set_gen_ai_flag()
82-
92+
8393
self._exporter.export(batch)
8494
except Exception: # pylint: disable=broad-exception-caught
8595
_logger.exception("Exception while exporting logs.")
86-
detach(token)
87-
96+
detach(token)
97+
8898
def _get_size_of_log(self, log_data: LogData) -> int:
8999
"""
90100
Estimates the size of a given LogData based on the size of the body + a buffer amount representing a rough guess of other data present
91101
in the log.
92102
"""
93103
size = BASE_LOG_BUFFER_BYTE_SIZE
94104
body = log_data.log_record.body
95-
105+
96106
if body:
97107
size += self._get_size_of_any_value(body)
98108

@@ -103,32 +113,24 @@ def _get_size_of_any_value(self, val: AnyValue) -> int:
103113
Recursively calculates the size of an AnyValue type in bytes.
104114
"""
105115
size = 0
106-
116+
107117
if isinstance(val, str) or isinstance(val, bytes):
108118
return len(val)
109-
119+
110120
if isinstance(val, bool):
111121
if val:
112-
return 4 #len(True) = 4
113-
return 5 #len(False) = 5
114-
122+
return 4 # len(True) = 4
123+
return 5 # len(False) = 5
124+
115125
if isinstance(val, int) or isinstance(val, float):
116126
return len(str(val))
117-
127+
118128
if isinstance(val, Sequence):
119129
for content in val:
120130
size += self._get_size_of_any_value(content)
121-
131+
122132
if isinstance(val, Mapping):
123133
for _, content in val.items():
124134
size += self._get_size_of_any_value(content)
125-
126-
return size
127-
128-
129135

130-
131-
132-
133-
134-
136+
return size

0 commit comments

Comments
 (0)