Skip to content

Commit 27751eb

Browse files
committed
Use Utils file
1 parent 12331fd commit 27751eb

File tree

9 files changed

+26
-170
lines changed

9 files changed

+26
-170
lines changed

ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/__init__.py

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -52,38 +52,11 @@ def strip_query_params(url: yarl.URL) -> str:
5252
from opentelemetry import context as context_api
5353
from opentelemetry import propagators, trace
5454
from opentelemetry.ext.aiohttp_client.version import __version__
55+
from opentelemetry.instrumentation.utils import http_status_to_canonical_code
5556
from opentelemetry.trace import SpanKind
5657
from opentelemetry.trace.status import Status, StatusCanonicalCode
5758

5859

59-
# TODO: refactor this code to some common utility
60-
def http_status_to_canonical_code(status: int) -> StatusCanonicalCode:
61-
# pylint:disable=too-many-branches,too-many-return-statements
62-
if status < 100:
63-
return StatusCanonicalCode.UNKNOWN
64-
if status <= 399:
65-
return StatusCanonicalCode.OK
66-
if status <= 499:
67-
if status == 401: # HTTPStatus.UNAUTHORIZED:
68-
return StatusCanonicalCode.UNAUTHENTICATED
69-
if status == 403: # HTTPStatus.FORBIDDEN:
70-
return StatusCanonicalCode.PERMISSION_DENIED
71-
if status == 404: # HTTPStatus.NOT_FOUND:
72-
return StatusCanonicalCode.NOT_FOUND
73-
if status == 429: # HTTPStatus.TOO_MANY_REQUESTS:
74-
return StatusCanonicalCode.RESOURCE_EXHAUSTED
75-
return StatusCanonicalCode.INVALID_ARGUMENT
76-
if status <= 599:
77-
if status == 501: # HTTPStatus.NOT_IMPLEMENTED:
78-
return StatusCanonicalCode.UNIMPLEMENTED
79-
if status == 503: # HTTPStatus.SERVICE_UNAVAILABLE:
80-
return StatusCanonicalCode.UNAVAILABLE
81-
if status == 504: # HTTPStatus.GATEWAY_TIMEOUT:
82-
return StatusCanonicalCode.DEADLINE_EXCEEDED
83-
return StatusCanonicalCode.INTERNAL
84-
return StatusCanonicalCode.UNKNOWN
85-
86-
8760
def url_path_span_name(params: aiohttp.TraceRequestStartParams) -> str:
8861
"""Extract a span name from the request URL path.
8962

ext/opentelemetry-ext-aiohttp-client/tests/test_aiohttp_client_integration.py

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -98,43 +98,6 @@ async def default_handler(request):
9898
loop = asyncio.get_event_loop()
9999
return loop.run_until_complete(do_request())
100100

101-
def test_http_status_to_canonical_code(self):
102-
for status_code, expected in (
103-
(HTTPStatus.OK, StatusCanonicalCode.OK),
104-
(HTTPStatus.ACCEPTED, StatusCanonicalCode.OK),
105-
(HTTPStatus.IM_USED, StatusCanonicalCode.OK),
106-
(HTTPStatus.MULTIPLE_CHOICES, StatusCanonicalCode.OK),
107-
(HTTPStatus.BAD_REQUEST, StatusCanonicalCode.INVALID_ARGUMENT),
108-
(HTTPStatus.UNAUTHORIZED, StatusCanonicalCode.UNAUTHENTICATED),
109-
(HTTPStatus.FORBIDDEN, StatusCanonicalCode.PERMISSION_DENIED),
110-
(HTTPStatus.NOT_FOUND, StatusCanonicalCode.NOT_FOUND),
111-
(
112-
HTTPStatus.UNPROCESSABLE_ENTITY,
113-
StatusCanonicalCode.INVALID_ARGUMENT,
114-
),
115-
(
116-
HTTPStatus.TOO_MANY_REQUESTS,
117-
StatusCanonicalCode.RESOURCE_EXHAUSTED,
118-
),
119-
(HTTPStatus.NOT_IMPLEMENTED, StatusCanonicalCode.UNIMPLEMENTED),
120-
(HTTPStatus.SERVICE_UNAVAILABLE, StatusCanonicalCode.UNAVAILABLE),
121-
(
122-
HTTPStatus.GATEWAY_TIMEOUT,
123-
StatusCanonicalCode.DEADLINE_EXCEEDED,
124-
),
125-
(
126-
HTTPStatus.HTTP_VERSION_NOT_SUPPORTED,
127-
StatusCanonicalCode.INTERNAL,
128-
),
129-
(600, StatusCanonicalCode.UNKNOWN),
130-
(99, StatusCanonicalCode.UNKNOWN),
131-
):
132-
with self.subTest(status_code=status_code):
133-
actual = opentelemetry.ext.aiohttp_client.http_status_to_canonical_code(
134-
int(status_code)
135-
)
136-
self.assertEqual(actual, expected, status_code)
137-
138101
def test_status_codes(self):
139102
for status_code, span_status in (
140103
(HTTPStatus.OK, StatusCanonicalCode.OK),

ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import wrapt
4848

4949
from opentelemetry.ext.dbapi.version import __version__
50+
from opentelemetry.instrumentation.utils import unwrap
5051
from opentelemetry.trace import SpanKind, Tracer, TracerProvider, get_tracer
5152
from opentelemetry.trace.status import Status, StatusCanonicalCode
5253

@@ -141,9 +142,7 @@ def unwrap_connect(
141142
connect_module: Module name where the connect method is available.
142143
connect_method_name: The connect method name.
143144
"""
144-
conn = getattr(connect_module, connect_method_name, None)
145-
if isinstance(conn, wrapt.ObjectProxy):
146-
setattr(connect_module, connect_method_name, conn.__wrapped__)
145+
unwrap(connect_module, connect_method_name)
147146

148147

149148
def instrument_connection(

ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/__init__.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050

5151
from opentelemetry.ext.jinja2.version import __version__
5252
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
53+
from opentelemetry.instrumentation.utils import unwrap
5354
from opentelemetry.trace import SpanKind, get_tracer
5455
from opentelemetry.trace.status import Status, StatusCanonicalCode
5556

@@ -115,12 +116,6 @@ def _wrap_load_template(tracer, wrapped, _, args, kwargs):
115116
)
116117

117118

118-
def _unwrap(obj, attr):
119-
func = getattr(obj, attr, None)
120-
if func and isinstance(func, ObjectProxy) and hasattr(func, "__wrapped__"):
121-
setattr(obj, attr, func.__wrapped__)
122-
123-
124119
class Jinja2Instrumentor(BaseInstrumentor):
125120
"""An instrumentor for jinja2
126121
@@ -141,7 +136,7 @@ def _instrument(self, **kwargs):
141136
)
142137

143138
def _uninstrument(self, **kwargs):
144-
_unwrap(jinja2.Template, "render")
145-
_unwrap(jinja2.Template, "generate")
146-
_unwrap(jinja2.Environment, "compile")
147-
_unwrap(jinja2.Environment, "_load_template")
139+
unwrap(jinja2.Template, "render")
140+
unwrap(jinja2.Template, "generate")
141+
unwrap(jinja2.Environment, "compile")
142+
unwrap(jinja2.Environment, "_load_template")

ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/__init__.py

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
)
5656
from opentelemetry.ext.redis.version import __version__
5757
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
58+
from opentelemetry.instrumentation.utils import unwrap
5859

5960
_DEFAULT_SERVICE = "redis"
6061
_RAWCMD = "db.statement"
@@ -68,12 +69,6 @@ def _set_connection_attributes(span, conn):
6869
span.set_attribute(key, value)
6970

7071

71-
def _unwrap(obj, attr):
72-
func = getattr(obj, attr, None)
73-
if isinstance(func, ObjectProxy) and hasattr(func, "__wrapped__"):
74-
setattr(obj, attr, func.__wrapped__)
75-
76-
7772
def _traced_execute_command(func, instance, args, kwargs):
7873
tracer = getattr(redis, "_opentelemetry_tracer")
7974
query = _format_command_args(args)
@@ -145,19 +140,19 @@ def _instrument(self, **kwargs):
145140

146141
def _uninstrument(self, **kwargs):
147142
if redis.VERSION < (3, 0, 0):
148-
_unwrap(redis.StrictRedis, "execute_command")
149-
_unwrap(redis.StrictRedis, "pipeline")
150-
_unwrap(redis.Redis, "pipeline")
151-
_unwrap(
143+
unwrap(redis.StrictRedis, "execute_command")
144+
unwrap(redis.StrictRedis, "pipeline")
145+
unwrap(redis.Redis, "pipeline")
146+
unwrap(
152147
redis.client.BasePipeline, # pylint:disable=no-member
153148
"execute",
154149
)
155-
_unwrap(
150+
unwrap(
156151
redis.client.BasePipeline, # pylint:disable=no-member
157152
"immediate_execute_command",
158153
)
159154
else:
160-
_unwrap(redis.Redis, "execute_command")
161-
_unwrap(redis.Redis, "pipeline")
162-
_unwrap(redis.client.Pipeline, "execute")
163-
_unwrap(redis.client.Pipeline, "immediate_execute_command")
155+
unwrap(redis.Redis, "execute_command")
156+
unwrap(redis.Redis, "pipeline")
157+
unwrap(redis.client.Pipeline, "execute")
158+
unwrap(redis.client.Pipeline, "immediate_execute_command")

ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py

Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@
5050
from opentelemetry import context, propagators, trace
5151
from opentelemetry.ext.requests.version import __version__
5252
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
53+
from opentelemetry.instrumentation.utils import http_status_to_canonical_code
5354
from opentelemetry.trace import SpanKind, get_tracer
54-
from opentelemetry.trace.status import Status, StatusCanonicalCode
55+
from opentelemetry.trace.status import Status
5556

5657

5758
# pylint: disable=unused-argument
@@ -99,7 +100,7 @@ def instrumented_request(self, method, url, *args, **kwargs):
99100
span.set_attribute("http.status_code", result.status_code)
100101
span.set_attribute("http.status_text", result.reason)
101102
span.set_status(
102-
Status(_http_status_to_canonical_code(result.status_code))
103+
Status(http_status_to_canonical_code(result.status_code))
103104
)
104105
if span_callback is not None:
105106
span_callback(span, result)
@@ -126,37 +127,6 @@ def _uninstrument():
126127
Session.request = original
127128

128129

129-
def _http_status_to_canonical_code(code: int, allow_redirect: bool = True):
130-
# pylint:disable=too-many-branches,too-many-return-statements
131-
if code < 100:
132-
return StatusCanonicalCode.UNKNOWN
133-
if code <= 299:
134-
return StatusCanonicalCode.OK
135-
if code <= 399:
136-
if allow_redirect:
137-
return StatusCanonicalCode.OK
138-
return StatusCanonicalCode.DEADLINE_EXCEEDED
139-
if code <= 499:
140-
if code == 401: # HTTPStatus.UNAUTHORIZED:
141-
return StatusCanonicalCode.UNAUTHENTICATED
142-
if code == 403: # HTTPStatus.FORBIDDEN:
143-
return StatusCanonicalCode.PERMISSION_DENIED
144-
if code == 404: # HTTPStatus.NOT_FOUND:
145-
return StatusCanonicalCode.NOT_FOUND
146-
if code == 429: # HTTPStatus.TOO_MANY_REQUESTS:
147-
return StatusCanonicalCode.RESOURCE_EXHAUSTED
148-
return StatusCanonicalCode.INVALID_ARGUMENT
149-
if code <= 599:
150-
if code == 501: # HTTPStatus.NOT_IMPLEMENTED:
151-
return StatusCanonicalCode.UNIMPLEMENTED
152-
if code == 503: # HTTPStatus.SERVICE_UNAVAILABLE:
153-
return StatusCanonicalCode.UNAVAILABLE
154-
if code == 504: # HTTPStatus.GATEWAY_TIMEOUT:
155-
return StatusCanonicalCode.DEADLINE_EXCEEDED
156-
return StatusCanonicalCode.INTERNAL
157-
return StatusCanonicalCode.UNKNOWN
158-
159-
160130
class RequestsInstrumentor(BaseInstrumentor):
161131
"""An instrumentor for requests
162132
See `BaseInstrumentor`

ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/__init__.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,7 @@
5353
_wrap_create_engine,
5454
)
5555
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
56-
57-
58-
def _unwrap(obj, attr):
59-
func = getattr(obj, attr, None)
60-
if (
61-
func
62-
and isinstance(func, wrapt.ObjectProxy)
63-
and hasattr(func, "__wrapped__")
64-
):
65-
setattr(obj, attr, func.__wrapped__)
56+
from opentelemetry.instrumentation.utils import unwrap
6657

6758

6859
class SQLAlchemyInstrumentor(BaseInstrumentor):
@@ -96,5 +87,5 @@ def _instrument(self, **kwargs):
9687
return None
9788

9889
def _uninstrument(self, **kwargs):
99-
_unwrap(sqlalchemy, "create_engine")
100-
_unwrap(sqlalchemy.engine, "create_engine")
90+
unwrap(sqlalchemy, "create_engine")
91+
unwrap(sqlalchemy.engine, "create_engine")

ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def hello():
6161

6262
from opentelemetry import context, propagators, trace
6363
from opentelemetry.ext.wsgi.version import __version__
64+
from opentelemetry.instrumentation.utils import http_status_to_canonical_code
6465
from opentelemetry.trace.propagation import get_span_from_context
6566
from opentelemetry.trace.status import Status, StatusCanonicalCode
6667

@@ -87,37 +88,6 @@ def setifnotnone(dic, key, value):
8788
dic[key] = value
8889

8990

90-
def http_status_to_canonical_code(code: int, allow_redirect: bool = True):
91-
# pylint:disable=too-many-branches,too-many-return-statements
92-
if code < 100:
93-
return StatusCanonicalCode.UNKNOWN
94-
if code <= 299:
95-
return StatusCanonicalCode.OK
96-
if code <= 399:
97-
if allow_redirect:
98-
return StatusCanonicalCode.OK
99-
return StatusCanonicalCode.DEADLINE_EXCEEDED
100-
if code <= 499:
101-
if code == 401: # HTTPStatus.UNAUTHORIZED:
102-
return StatusCanonicalCode.UNAUTHENTICATED
103-
if code == 403: # HTTPStatus.FORBIDDEN:
104-
return StatusCanonicalCode.PERMISSION_DENIED
105-
if code == 404: # HTTPStatus.NOT_FOUND:
106-
return StatusCanonicalCode.NOT_FOUND
107-
if code == 429: # HTTPStatus.TOO_MANY_REQUESTS:
108-
return StatusCanonicalCode.RESOURCE_EXHAUSTED
109-
return StatusCanonicalCode.INVALID_ARGUMENT
110-
if code <= 599:
111-
if code == 501: # HTTPStatus.NOT_IMPLEMENTED:
112-
return StatusCanonicalCode.UNIMPLEMENTED
113-
if code == 503: # HTTPStatus.SERVICE_UNAVAILABLE:
114-
return StatusCanonicalCode.UNAVAILABLE
115-
if code == 504: # HTTPStatus.GATEWAY_TIMEOUT:
116-
return StatusCanonicalCode.DEADLINE_EXCEEDED
117-
return StatusCanonicalCode.INTERNAL
118-
return StatusCanonicalCode.UNKNOWN
119-
120-
12191
def collect_request_attributes(environ):
12292
"""Collects HTTP request attributes from the PEP3333-conforming
12393
WSGI environ and returns a dictionary to be used as span creation attributes."""

opentelemetry-instrumentation/src/opentelemetry/instrumentation/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from wrapt import ObjectProxy
1616

17-
from opentelemetry.trace.status import Status, StatusCanonicalCode
17+
from opentelemetry.trace.status import StatusCanonicalCode
1818

1919

2020
def http_status_to_canonical_code(

0 commit comments

Comments
 (0)