diff --git a/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md index 96089a9da..00d730f4f 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +## Version 0.15b0 + +Released 2020-11-02 + +- Add support for tracking http metrics + ([#1230](https://github.com/open-telemetry/opentelemetry-python/pull/1230)) + ## Version 0.13b0 Released 2020-09-17 @@ -10,7 +17,7 @@ Released 2020-09-17 ([#1040](https://github.com/open-telemetry/opentelemetry-python/pull/1040)) - Drop support for Python 3.4 ([#1099](https://github.com/open-telemetry/opentelemetry-python/pull/1099)) -- Add support for tracking http metrics +- Add support for http metrics ([#1116](https://github.com/open-telemetry/opentelemetry-python/pull/1116)) ## Version 0.12b0 diff --git a/instrumentation/opentelemetry-instrumentation-requests/setup.cfg b/instrumentation/opentelemetry-instrumentation-requests/setup.cfg index cf3c11d7e..9cdb5b8d0 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-requests/setup.cfg @@ -39,13 +39,13 @@ package_dir= =src packages=find_namespace: install_requires = - opentelemetry-api == 0.15.dev0 - opentelemetry-instrumentation == 0.15.dev0 + opentelemetry-api == 0.15b0 + opentelemetry-instrumentation == 0.15b0 requests ~= 2.0 [options.extras_require] test = - opentelemetry-test == 0.15.dev0 + opentelemetry-test == 0.15b0 httpretty ~= 1.0 [options.packages.find] diff --git a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py index 770eacf5e..b4738647d 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py @@ -49,12 +49,12 @@ from opentelemetry.instrumentation.metric import ( MetricMixin, ) from opentelemetry.instrumentation.requests.version import __version__ -from opentelemetry.instrumentation.utils import http_status_to_canonical_code +from opentelemetry.instrumentation.utils import http_status_to_status_code from opentelemetry.trace import SpanKind, get_tracer from opentelemetry.trace.status import ( EXCEPTION_STATUS_FIELD, Status, - StatusCanonicalCode, + StatusCode, ) # A key to a context variable to avoid creating duplicate spans when instrumenting @@ -155,9 +155,7 @@ def _instrument(tracer_provider=None, span_callback=None): except Exception as exc: # pylint: disable=W0703 exception = exc setattr( - exception, - EXCEPTION_STATUS_FIELD, - _exception_to_canonical_code(exception), + exception, EXCEPTION_STATUS_FIELD, StatusCode.ERROR, ) result = getattr(exc, "response", None) finally: @@ -171,9 +169,7 @@ def _instrument(tracer_provider=None, span_callback=None): span.set_attribute("http.status_text", result.reason) span.set_status( Status( - http_status_to_canonical_code( - result.status_code - ) + http_status_to_status_code(result.status_code) ) ) labels["http.status_code"] = str(result.status_code) @@ -221,17 +217,6 @@ def _uninstrument_from(instr_root, restore_as_bound_func=False): setattr(instr_root, instr_func_name, original) -def _exception_to_canonical_code(exc: Exception) -> StatusCanonicalCode: - if isinstance( - exc, - (InvalidURL, InvalidSchema, MissingSchema, URLRequired, ValueError), - ): - return StatusCanonicalCode.INVALID_ARGUMENT - if isinstance(exc, Timeout): - return StatusCanonicalCode.DEADLINE_EXCEEDED - return StatusCanonicalCode.UNKNOWN - - class RequestsInstrumentor(BaseInstrumentor, MetricMixin): """An instrumentor for requests See `BaseInstrumentor` diff --git a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py index e7b342d64..ff494d225 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py +++ b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -__version__ = "0.15.dev0" +__version__ = "0.15b0" diff --git a/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py b/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py index f41e597b2..f5209108e 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py +++ b/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py @@ -25,7 +25,7 @@ from opentelemetry.sdk import resources from opentelemetry.sdk.util import get_dict_as_key from opentelemetry.test.mock_textmap import MockTextMapPropagator from opentelemetry.test.test_base import TestBase -from opentelemetry.trace.status import StatusCanonicalCode +from opentelemetry.trace.status import StatusCode class RequestsIntegrationTestBase(abc.ABC): @@ -81,9 +81,7 @@ class RequestsIntegrationTestBase(abc.ABC): }, ) - self.assertIs( - span.status.canonical_code, trace.status.StatusCanonicalCode.OK - ) + self.assertIs(span.status.status_code, trace.status.StatusCode.UNSET) self.check_span_instrumentation_info( span, opentelemetry.instrumentation.requests @@ -123,8 +121,7 @@ class RequestsIntegrationTestBase(abc.ABC): self.assertEqual(span.attributes.get("http.status_text"), "Not Found") self.assertIs( - span.status.canonical_code, - trace.status.StatusCanonicalCode.NOT_FOUND, + span.status.status_code, trace.status.StatusCode.ERROR, ) def test_uninstrument(self): @@ -263,9 +260,7 @@ class RequestsIntegrationTestBase(abc.ABC): span.attributes, {"component": "http", "http.method": "GET", "http.url": self.URL}, ) - self.assertEqual( - span.status.canonical_code, StatusCanonicalCode.UNKNOWN - ) + self.assertEqual(span.status.status_code, StatusCode.ERROR) self.assertIsNotNone(RequestsInstrumentor().meter) self.assertEqual(len(RequestsInstrumentor().meter.metrics), 1) @@ -307,9 +302,7 @@ class RequestsIntegrationTestBase(abc.ABC): "http.status_text": "Internal Server Error", }, ) - self.assertEqual( - span.status.canonical_code, StatusCanonicalCode.INTERNAL - ) + self.assertEqual(span.status.status_code, StatusCode.ERROR) self.assertIsNotNone(RequestsInstrumentor().meter) self.assertEqual(len(RequestsInstrumentor().meter.metrics), 1) recorder = RequestsInstrumentor().meter.metrics.pop() @@ -334,9 +327,7 @@ class RequestsIntegrationTestBase(abc.ABC): self.perform_request(self.URL) span = self.assert_span() - self.assertEqual( - span.status.canonical_code, StatusCanonicalCode.UNKNOWN - ) + self.assertEqual(span.status.status_code, StatusCode.ERROR) @mock.patch( "requests.adapters.HTTPAdapter.send", side_effect=requests.Timeout @@ -346,9 +337,7 @@ class RequestsIntegrationTestBase(abc.ABC): self.perform_request(self.URL) span = self.assert_span() - self.assertEqual( - span.status.canonical_code, StatusCanonicalCode.DEADLINE_EXCEEDED - ) + self.assertEqual(span.status.status_code, StatusCode.ERROR) class TestRequestsIntegration(RequestsIntegrationTestBase, TestBase): @@ -371,9 +360,7 @@ class TestRequestsIntegration(RequestsIntegrationTestBase, TestBase): span.attributes, {"component": "http", "http.method": "POST", "http.url": url}, ) - self.assertEqual( - span.status.canonical_code, StatusCanonicalCode.INVALID_ARGUMENT - ) + self.assertEqual(span.status.status_code, StatusCode.ERROR) def test_if_headers_equals_none(self): result = requests.get(self.URL, headers=None)