Skip to content

Commit 582a1f3

Browse files
committed
linting
1 parent bb82d09 commit 582a1f3

File tree

3 files changed

+42
-32
lines changed

3 files changed

+42
-32
lines changed

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

Lines changed: 8 additions & 12 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 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_record_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
@@ -166,7 +166,7 @@ def _initialize_components():
166166
sampler = _custom_import_sampler(sampler_name, resource)
167167

168168
logging_enabled = os.getenv(_OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED, "false")
169-
169+
170170
if logging_enabled.strip().lower() == "true":
171171
_init_logging(log_exporters, resource)
172172

@@ -177,7 +177,6 @@ def _initialize_components():
177177
resource=resource,
178178
)
179179
_init_metrics(metric_exporters, resource)
180-
181180

182181

183182
def _init_logging(
@@ -187,7 +186,7 @@ def _init_logging(
187186

188187
# Provides a default OTLP log exporter when the environment is not set.
189188
# This is the behavior for the logs exporters for other languages.
190-
if not exporters and os.environ.get(OTEL_LOGS_EXPORTER) == None:
189+
if not exporters and os.environ.get(OTEL_LOGS_EXPORTER) is None:
191190
exporters = {"otlp": OTLPLogExporter}
192191

193192
provider = LoggerProvider(resource=resource)
@@ -373,10 +372,7 @@ def _customize_span_exporter(span_exporter: SpanExporter, resource: Resource) ->
373372
if isinstance(span_exporter, OTLPSpanExporter):
374373
if is_agent_observability_enabled():
375374

376-
span_exporter = OTLPAwsSpanExporter(
377-
endpoint=traces_endpoint,
378-
logs_provider=get_logger_provider()
379-
)
375+
span_exporter = OTLPAwsSpanExporter(endpoint=traces_endpoint, logs_provider=get_logger_provider())
380376
else:
381377
span_exporter = OTLPAwsSpanExporter(endpoint=traces_endpoint)
382378

@@ -643,4 +639,4 @@ def create_exporter(self):
643639
endpoint=application_signals_endpoint, preferred_temporality=temporality_dict
644640
)
645641

646-
raise RuntimeError(f"Unsupported AWS Application Signals export protocol: {protocol} ")
642+
raise RuntimeError(f"Unsupported AWS Application Signals export protocol: {protocol} ")

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/aws_batch_log_record_processor.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import json
21
import logging
3-
import os
4-
import threading
5-
from time import sleep
62
from typing import Mapping, Sequence
73

84
from amazon.opentelemetry.distro.exporter.otlp.aws.common.constants import (
@@ -48,8 +44,8 @@ def __init__(
4844
def _export(self, batch_strategy: BatchLogExportStrategy) -> None:
4945
"""
5046
Overrides the batching behavior of upstream's export method. Preserves existing batching behavior but
51-
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
52-
of 1 MB.
47+
will intermediarly export small log batches if the size of the data in the batch is at or
48+
above AWS CloudWatch's maximum request size limit of 1 MB.
5349
5450
- Data size of exported batches will ALWAYS be <= 1 MB except for the case below:
5551
- If the data size of an exported batch is ever > 1 MB then the batch size is guaranteed to be 1
@@ -97,8 +93,8 @@ def _export(self, batch_strategy: BatchLogExportStrategy) -> None:
9793

9894
def _get_size_of_log(self, log_data: LogData) -> int:
9995
"""
100-
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
101-
in the log.
96+
Estimates the size of a given LogData based on the size of the body + a buffer
97+
amount representing a rough guess of other data present in the log.
10298
"""
10399
size = BASE_LOG_BUFFER_BYTE_SIZE
104100
body = log_data.log_record.body

aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/otlp_aws_logs_exporter.py

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
# SPDX-License-Identifier: Apache-2.0
33

44
import gzip
5-
import itertools
65
import logging
76
from io import BytesIO
87
from time import sleep
9-
from typing import Dict, Iterator, Mapping, Optional, Sequence
8+
from typing import Dict, Mapping, Optional, Sequence
109

1110
import requests
1211

@@ -26,6 +25,7 @@
2625

2726

2827
class OTLPAwsLogExporter(OTLPLogExporter):
28+
COUNT = 0
2929
_LARGE_LOG_HEADER = {"x-aws-log-semantics": "otel"}
3030
_RETRY_AFTER_HEADER = "Retry-After" # https://opentelemetry.io/docs/specs/otlp/#otlphttp-throttling
3131

@@ -62,7 +62,8 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
6262

6363
print(f"Exporting batch of {len(batch)} logs")
6464
print("TOTAL DATA SIZE " + str(sum(self._get_size_of_log(logz) for logz in batch)))
65-
print("GEN_AI_FLAG " + str(self._gen_ai_flag))
65+
self.COUNT += len(batch)
66+
print("COUNT " + str(self.COUNT))
6667

6768
"""
6869
Exports the given batch of OTLP log data.
@@ -74,8 +75,8 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
7475
- inject the 'x-aws-log-semantics' flag into the header.
7576
7677
3. Retry behavior is now the following:
77-
- if the response contains a status code that is retryable and the response contains Retry-After in its headers,
78-
the serialized data will be exported after that set delay
78+
- if the response contains a status code that is retryable and the response contains Retry-After in its
79+
headers, the serialized data will be exported after that set delay
7980
8081
- if the response does not contain that Retry-After header, default back to the current iteration of the
8182
exponential backoff delay
@@ -93,11 +94,18 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
9394

9495
data = gzip_data.getvalue()
9596

96-
backoff = _create_exp_backoff_generator(self._MAX_RETRY_TIMEOUT)
97+
backoff = _create_exp_backoff_generator(max_value=self._MAX_RETRY_TIMEOUT)
9798

9899
while True:
99100
resp = self._send(data)
100101

102+
print(f"Response status: {resp.status_code}")
103+
print(f"Response headers: {resp.headers}")
104+
try:
105+
print(f"Response body: {resp.text}")
106+
except:
107+
print("Could not print response body")
108+
101109
if resp.ok:
102110
return LogExportResult.SUCCESS
103111

@@ -111,13 +119,18 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
111119
return LogExportResult.FAILURE
112120

113121
# https://opentelemetry.io/docs/specs/otlp/#otlphttp-throttling
114-
retry_after = resp.headers.get(self._RETRY_AFTER_HEADER, None)
122+
maybe_retry_after = resp.headers.get(self._RETRY_AFTER_HEADER, None)
115123

116124
# Set the next retry delay to the value of the Retry-After response in the headers.
117-
# If Retry-After is not present in the headers, default to the next iteration of the exponential backoff strategy.
118-
delay = next(backoff, -1) if retry_after == None else self._parse_retryable_header(retry_after)
125+
# If Retry-After is not present in the headers, default to the next iteration of the
126+
# exponential backoff strategy.
127+
128+
delay = self._parse_retryable_header(maybe_retry_after)
119129

120130
if delay == -1:
131+
delay = next(backoff, self._MAX_RETRY_TIMEOUT)
132+
133+
if delay == self._MAX_RETRY_TIMEOUT:
121134
_logger.error(
122135
"Transient error %s encountered while exporting logs batch. "
123136
"No Retry-After header found and all backoff retries exhausted. "
@@ -134,7 +147,7 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
134147
)
135148

136149
sleep(delay)
137-
150+
138151
def set_gen_ai_flag(self):
139152
"""
140153
Sets the gen_ai flag to true to signal injecting the LLO flag to the headers of the export request.
@@ -171,10 +184,15 @@ def _retryable(resp: requests.Response) -> bool:
171184

172185
return OTLPLogExporter._retryable(resp)
173186

174-
def _parse_retryable_header(self, retry_header: str) -> float:
187+
def _parse_retryable_header(self, retry_header: Optional[str]) -> float:
175188
"""
176-
Converts the given retryable header into a delay in seconds, returns -1 if there's an error with the parsing
189+
Converts the given retryable header into a delay in seconds, returns -1 if there's no header
190+
or error with the parsing
177191
"""
192+
193+
if not retry_header:
194+
return -1
195+
178196
try:
179197
return float(retry_header)
180198
except ValueError:

0 commit comments

Comments
 (0)