Skip to content

Commit

Permalink
Put asgi and wsgi back as instrumentations
Browse files Browse the repository at this point in the history
  • Loading branch information
ocelotl committed Feb 4, 2021
1 parent 0b0705e commit b246cce
Show file tree
Hide file tree
Showing 37 changed files with 485 additions and 30 deletions.
7 changes: 7 additions & 0 deletions docs-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,18 @@ sphinx~=2.4
sphinx-rtd-theme~=0.4
sphinx-autodoc-typehints~=1.10.2

# Need to install the api/sdk in the venv for autodoc. Modifying sys.path
# doesn't work for pkg_resources.
-e "git+https://github.com/open-telemetry/opentelemetry-python.git#egg=opentelemetry-api&subdirectory=opentelemetry-api"
-e "git+https://github.com/open-telemetry/opentelemetry-python.git#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk"

# Required by opentelemetry-instrumentation
fastapi~=0.58.1
psutil~=5.7.0
pymemcache~=1.3

-e "git+https://github.com/open-telemetry/opentelemetry-python.git#egg=opentelemetry-instrumentation&subdirectory=opentelemetry-instrumentation"

# Required by conf
django>=2.2

Expand Down
9 changes: 9 additions & 0 deletions docs/instrumentation/asgi/asgi.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.. include:: ../../../instrumentation/opentelemetry-instrumentation-asgi/README.rst

API
---

.. automodule:: opentelemetry.instrumentation.asgi
:members:
:undoc-members:
:show-inheritance:
7 changes: 7 additions & 0 deletions docs/instrumentation/wsgi/wsgi.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
OpenTelemetry WSGI Instrumentation
==================================

.. automodule:: opentelemetry.instrumentation.wsgi
:members:
:undoc-members:
:show-inheritance:
2 changes: 2 additions & 0 deletions eachdist.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ ignore=

sortfirst=
util/opentelemetry-util-http
instrumentation/opentelemetry-instrumentation-wsgi
instrumentation/opentelemetry-instrumentation-dbapi
instrumentation/opentelemetry-instrumentation-asgi
instrumentation/opentelemetry-instrumentation-botocore
instrumentation/*
exporter/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
"opentelemetry.instrumentation.redis": DatadogSpanTypes.REDIS,
"opentelemetry.instrumentation.requests": DatadogSpanTypes.HTTP,
"opentelemetry.instrumentation.sqlalchemy": DatadogSpanTypes.SQL,
"opentelemetry.util.http.wsgi": DatadogSpanTypes.WEB,
"opentelemetry.instrumentation.wsgi": DatadogSpanTypes.WEB,
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ def test_span_types(self):
"opentelemetry.instrumentation.redis",
"opentelemetry.instrumentation.requests",
"opentelemetry.instrumentation.sqlalchemy",
"opentelemetry.util.http.wsgi",
"opentelemetry.instrumentation.wsgi",
]

for index, instrumentation in enumerate(test_instrumentations):
Expand Down
71 changes: 71 additions & 0 deletions instrumentation/opentelemetry-instrumentation-asgi/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
OpenTelemetry ASGI Instrumentation
==================================

|pypi|

.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-asgi.svg
:target: https://pypi.org/project/opentelemetry-instrumentation-asgi/


This library provides a ASGI middleware that can be used on any ASGI framework
(such as Django, Starlette, FastAPI or Quart) to track requests timing through OpenTelemetry.

Installation
------------

::

pip install opentelemetry-instrumentation-asgi


Usage (Quart)
-------------

.. code-block:: python
from quart import Quart
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
app = Quart(__name__)
app.asgi_app = OpenTelemetryMiddleware(app.asgi_app)
@app.route("/")
async def hello():
return "Hello!"
if __name__ == "__main__":
app.run(debug=True)
Usage (Django 3.0)
------------------

Modify the application's ``asgi.py`` file as shown below.

.. code-block:: python
import os
from django.core.asgi import get_asgi_application
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'asgi_example.settings')
application = get_asgi_application()
application = OpenTelemetryMiddleware(application)
Usage (Raw ASGI)
----------------

.. code-block:: python
from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
app = ... # An ASGI application.
app = OpenTelemetryMiddleware(app)
References
----------

* `OpenTelemetry Project <https://opentelemetry.io/>`_
26 changes: 26 additions & 0 deletions instrumentation/opentelemetry-instrumentation-asgi/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright The OpenTelemetry Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os

import setuptools

BASE_DIR = os.path.dirname(__file__)
VERSION_FILENAME = os.path.join(
BASE_DIR, "src", "opentelemetry", "instrumentation", "asgi", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
exec(f.read(), PACKAGE_INFO)

setuptools.setup(version=PACKAGE_INFO["__version__"])
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
# limitations under the License.

"""
The opentelemetry.util.http.asgi package provides an ASGI middleware that can
be used on any ASGI framework (such as Django-channels / Quart) to track
requests timing through OpenTelemetry.
The opentelemetry-instrumentation-asgi package provides an ASGI middleware that can be used
on any ASGI framework (such as Django-channels / Quart) to track requests
timing through OpenTelemetry.
"""

import typing
Expand All @@ -26,10 +26,10 @@
from asgiref.compatibility import guarantee_single_callable

from opentelemetry import context, propagators, trace
from opentelemetry.instrumentation.asgi.version import __version__ # noqa
from opentelemetry.instrumentation.utils import http_status_to_status_code
from opentelemetry.trace.propagation.textmap import DictGetter
from opentelemetry.trace.status import Status, StatusCode
from opentelemetry.util.http.asgi.version import __version__ # noqa


class CarrierGetter(DictGetter):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import unittest
import unittest.mock as mock

import opentelemetry.util.http.asgi as otel_asgi
import opentelemetry.instrumentation.asgi as otel_asgi
from opentelemetry import trace as trace_api
from opentelemetry.test.asgitestutil import (
AsgiTestBase,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ packages=find_namespace:
install_requires =
django >= 1.10
opentelemetry-util-http == 0.18.dev0
opentelemetry-instrumentation-wsgi == 0.18.dev0
opentelemetry-instrumentation == 0.18.dev0
opentelemetry-api == 0.18.dev0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,14 @@
from opentelemetry.context import attach, detach
from opentelemetry.instrumentation.django.version import __version__
from opentelemetry.instrumentation.utils import extract_attributes_from_object
from opentelemetry.propagators import extract
from opentelemetry.trace import SpanKind, get_tracer
from opentelemetry.util.http import get_excluded_urls, get_traced_request_attrs
from opentelemetry.util.http.wsgi import (
from opentelemetry.instrumentation.wsgi import (
add_response_attributes,
carrier_getter,
collect_request_attributes,
)
from opentelemetry.propagators import extract
from opentelemetry.trace import SpanKind, get_tracer
from opentelemetry.util.http import get_excluded_urls, get_traced_request_attrs

try:
from django.core.urlresolvers import ( # pylint: disable=no-name-in-module
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ package_dir=
packages=find_namespace:
install_requires =
falcon ~= 2.0
opentelemetry-instrumentation-wsgi == 0.18.dev0
opentelemetry-util-http == 0.18.dev0
opentelemetry-instrumentation == 0.18.dev0
opentelemetry-api == 0.18.dev0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

"""
This library builds on the OpenTelemetry WSGI middleware to track web requests
in Falcon applications. In addition to opentelemetry-util-http,
in Falcon applications. In addition to opentelemetry-instrumentation-wsgi,
it supports falcon-specific features such as:
* The Falcon resource and method name is used as the Span name.
Expand Down Expand Up @@ -48,7 +48,7 @@ def on_get(self, req, resp):

import falcon

import opentelemetry.util.http.wsgi as otel_wsgi
import opentelemetry.instrumentation.wsgi as otel_wsgi
from opentelemetry import context, propagators, trace
from opentelemetry.instrumentation.falcon.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ package_dir=
packages=find_namespace:
install_requires =
opentelemetry-api == 0.18.dev0
opentelemetry-instrumentation-asgi == 0.18.dev0
opentelemetry-util-http == 0.18.dev0

[options.entry_points]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
import fastapi
from starlette.routing import Match

from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.util.http import get_excluded_urls
from opentelemetry.util.http.asgi import OpenTelemetryMiddleware

_excluded_urls = get_excluded_urls("FASTAPI")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ install_requires =
flask ~= 1.0
opentelemetry-util-http == 0.18.dev0
opentelemetry-instrumentation == 0.18.dev0
opentelemetry-instrumentation-wsgi == 0.18.dev0
opentelemetry-api == 0.18.dev0

[options.extras_require]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def hello():

import flask

import opentelemetry.util.http.wsgi as otel_wsgi
import opentelemetry.instrumentation.wsgi as otel_wsgi
from opentelemetry import context, propagators, trace
from opentelemetry.instrumentation.flask.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ install_requires =
pyramid >= 1.7
opentelemetry-instrumentation == 0.18.dev0
opentelemetry-api == 0.18.dev0
opentelemetry-instrumentation-wsgi == 0.18.dev0
opentelemetry-util-http == 0.18.dev0
wrapt >= 1.0.0, < 2.0.0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pyramid.settings import asbool
from pyramid.tweens import EXCVIEW

import opentelemetry.util.http.wsgi as otel_wsgi
import opentelemetry.instrumentation.wsgi as otel_wsgi
from opentelemetry import context, propagators, trace
from opentelemetry.instrumentation.pyramid.version import __version__
from opentelemetry.util import time_ns
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ package_dir=
packages=find_namespace:
install_requires =
opentelemetry-api == 0.18.dev0
opentelemetry-instrumentation-asgi == 0.18.dev0
opentelemetry-util-http == 0.18.dev0

[options.entry_points]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
from starlette import applications
from starlette.routing import Match

from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.util.http import get_excluded_urls
from opentelemetry.util.http.asgi import OpenTelemetryMiddleware

_excluded_urls = get_excluded_urls("STARLETTE")

Expand Down
Loading

0 comments on commit b246cce

Please sign in to comment.