Merge pull request #93 from NathanielRN/move-instrumentation-aiohttp-client

Move instrumentation aiohttp client
This commit is contained in:
alrex
2020-11-02 11:32:42 -08:00
committed by GitHub
4 changed files with 20 additions and 39 deletions

View File

@ -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

View File

@ -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)

View File

@ -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"

View File

@ -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",