mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-30 21:56:07 +08:00
Merge branch 'core-instrumentation-aiohttp-client-v0.15b0'
This commit is contained in:
@ -39,8 +39,8 @@ package_dir=
|
|||||||
=src
|
=src
|
||||||
packages=find_namespace:
|
packages=find_namespace:
|
||||||
install_requires =
|
install_requires =
|
||||||
opentelemetry-api == 0.15.dev0
|
opentelemetry-api == 0.15b0
|
||||||
opentelemetry-instrumentation == 0.15.dev0
|
opentelemetry-instrumentation == 0.15b0
|
||||||
aiohttp ~= 3.0
|
aiohttp ~= 3.0
|
||||||
wrapt >= 1.0.0, < 2.0.0
|
wrapt >= 1.0.0, < 2.0.0
|
||||||
|
|
||||||
|
@ -74,11 +74,11 @@ from opentelemetry import propagators, trace
|
|||||||
from opentelemetry.instrumentation.aiohttp_client.version import __version__
|
from opentelemetry.instrumentation.aiohttp_client.version import __version__
|
||||||
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
||||||
from opentelemetry.instrumentation.utils import (
|
from opentelemetry.instrumentation.utils import (
|
||||||
http_status_to_canonical_code,
|
http_status_to_status_code,
|
||||||
unwrap,
|
unwrap,
|
||||||
)
|
)
|
||||||
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
|
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
|
||||||
from opentelemetry.trace.status import Status, StatusCanonicalCode
|
from opentelemetry.trace.status import Status, StatusCode
|
||||||
|
|
||||||
_UrlFilterT = typing.Optional[typing.Callable[[str], str]]
|
_UrlFilterT = typing.Optional[typing.Callable[[str], str]]
|
||||||
_SpanNameT = typing.Optional[
|
_SpanNameT = typing.Optional[
|
||||||
@ -194,9 +194,7 @@ def create_trace_config(
|
|||||||
|
|
||||||
if trace_config_ctx.span.is_recording():
|
if trace_config_ctx.span.is_recording():
|
||||||
trace_config_ctx.span.set_status(
|
trace_config_ctx.span.set_status(
|
||||||
Status(
|
Status(http_status_to_status_code(int(params.response.status)))
|
||||||
http_status_to_canonical_code(int(params.response.status))
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
trace_config_ctx.span.set_attribute(
|
trace_config_ctx.span.set_attribute(
|
||||||
"http.status_code", params.response.status
|
"http.status_code", params.response.status
|
||||||
@ -214,22 +212,8 @@ def create_trace_config(
|
|||||||
if trace_config_ctx.span is None:
|
if trace_config_ctx.span is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
if trace_config_ctx.span.is_recording():
|
if trace_config_ctx.span.is_recording() and params.exception:
|
||||||
if isinstance(
|
trace_config_ctx.span.set_status(Status(StatusCode.ERROR))
|
||||||
params.exception,
|
|
||||||
(aiohttp.ServerTimeoutError, aiohttp.TooManyRedirects),
|
|
||||||
):
|
|
||||||
status = StatusCanonicalCode.DEADLINE_EXCEEDED
|
|
||||||
# Assume any getaddrinfo error is a DNS failure.
|
|
||||||
elif isinstance(
|
|
||||||
params.exception, aiohttp.ClientConnectorError
|
|
||||||
) and isinstance(params.exception.os_error, socket.gaierror):
|
|
||||||
# DNS resolution failed
|
|
||||||
status = StatusCanonicalCode.UNKNOWN
|
|
||||||
else:
|
|
||||||
status = StatusCanonicalCode.UNAVAILABLE
|
|
||||||
|
|
||||||
trace_config_ctx.span.set_status(Status(status))
|
|
||||||
trace_config_ctx.span.record_exception(params.exception)
|
trace_config_ctx.span.record_exception(params.exception)
|
||||||
_end_trace(trace_config_ctx)
|
_end_trace(trace_config_ctx)
|
||||||
|
|
||||||
|
@ -12,4 +12,4 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
__version__ = "0.15.dev0"
|
__version__ = "0.15b0"
|
||||||
|
@ -31,7 +31,7 @@ from opentelemetry.instrumentation.aiohttp_client import (
|
|||||||
AioHttpClientInstrumentor,
|
AioHttpClientInstrumentor,
|
||||||
)
|
)
|
||||||
from opentelemetry.test.test_base import TestBase
|
from opentelemetry.test.test_base import TestBase
|
||||||
from opentelemetry.trace.status import StatusCanonicalCode
|
from opentelemetry.trace.status import StatusCode
|
||||||
|
|
||||||
|
|
||||||
def run_with_test_server(
|
def run_with_test_server(
|
||||||
@ -61,7 +61,7 @@ class TestAioHttpIntegration(TestBase):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
span.name,
|
span.name,
|
||||||
(span.status.canonical_code, span.status.description),
|
(span.status.status_code, span.status.description),
|
||||||
dict(span.attributes),
|
dict(span.attributes),
|
||||||
)
|
)
|
||||||
for span in self.memory_exporter.get_finished_spans()
|
for span in self.memory_exporter.get_finished_spans()
|
||||||
@ -111,13 +111,10 @@ class TestAioHttpIntegration(TestBase):
|
|||||||
|
|
||||||
def test_status_codes(self):
|
def test_status_codes(self):
|
||||||
for status_code, span_status in (
|
for status_code, span_status in (
|
||||||
(HTTPStatus.OK, StatusCanonicalCode.OK),
|
(HTTPStatus.OK, StatusCode.UNSET),
|
||||||
(HTTPStatus.TEMPORARY_REDIRECT, StatusCanonicalCode.OK),
|
(HTTPStatus.TEMPORARY_REDIRECT, StatusCode.UNSET),
|
||||||
(HTTPStatus.SERVICE_UNAVAILABLE, StatusCanonicalCode.UNAVAILABLE),
|
(HTTPStatus.SERVICE_UNAVAILABLE, StatusCode.ERROR),
|
||||||
(
|
(HTTPStatus.GATEWAY_TIMEOUT, StatusCode.ERROR,),
|
||||||
HTTPStatus.GATEWAY_TIMEOUT,
|
|
||||||
StatusCanonicalCode.DEADLINE_EXCEEDED,
|
|
||||||
),
|
|
||||||
):
|
):
|
||||||
with self.subTest(status_code=status_code):
|
with self.subTest(status_code=status_code):
|
||||||
host, port = self._http_request(
|
host, port = self._http_request(
|
||||||
@ -188,7 +185,7 @@ class TestAioHttpIntegration(TestBase):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
expected,
|
expected,
|
||||||
(StatusCanonicalCode.OK, None),
|
(StatusCode.UNSET, None),
|
||||||
{
|
{
|
||||||
"component": "http",
|
"component": "http",
|
||||||
"http.method": method,
|
"http.method": method,
|
||||||
@ -220,7 +217,7 @@ class TestAioHttpIntegration(TestBase):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
"HTTP GET",
|
"HTTP GET",
|
||||||
(StatusCanonicalCode.OK, None),
|
(StatusCode.UNSET, None),
|
||||||
{
|
{
|
||||||
"component": "http",
|
"component": "http",
|
||||||
"http.method": "GET",
|
"http.method": "GET",
|
||||||
@ -238,8 +235,8 @@ class TestAioHttpIntegration(TestBase):
|
|||||||
trace_configs = [aiohttp_client.create_trace_config()]
|
trace_configs = [aiohttp_client.create_trace_config()]
|
||||||
|
|
||||||
for url, expected_status in (
|
for url, expected_status in (
|
||||||
("http://this-is-unknown.local/", StatusCanonicalCode.UNKNOWN),
|
("http://this-is-unknown.local/", StatusCode.ERROR),
|
||||||
("http://127.0.0.1:1/", StatusCanonicalCode.UNAVAILABLE),
|
("http://127.0.0.1:1/", StatusCode.ERROR),
|
||||||
):
|
):
|
||||||
with self.subTest(expected_status=expected_status):
|
with self.subTest(expected_status=expected_status):
|
||||||
|
|
||||||
@ -286,7 +283,7 @@ class TestAioHttpIntegration(TestBase):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
"HTTP GET",
|
"HTTP GET",
|
||||||
(StatusCanonicalCode.DEADLINE_EXCEEDED, None),
|
(StatusCode.ERROR, None),
|
||||||
{
|
{
|
||||||
"component": "http",
|
"component": "http",
|
||||||
"http.method": "GET",
|
"http.method": "GET",
|
||||||
@ -316,7 +313,7 @@ class TestAioHttpIntegration(TestBase):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
"HTTP GET",
|
"HTTP GET",
|
||||||
(StatusCanonicalCode.DEADLINE_EXCEEDED, None),
|
(StatusCode.ERROR, None),
|
||||||
{
|
{
|
||||||
"component": "http",
|
"component": "http",
|
||||||
"http.method": "GET",
|
"http.method": "GET",
|
||||||
|
Reference in New Issue
Block a user