From c2c634e347ee9d5b3ba60bad922b2c9c30cb6652 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 12:08:07 -0700 Subject: [PATCH 01/35] exporters --- .../cloud_monitoring/cloud_monitoring.rst | 0 .../cloud_trace/cloud_trace.rst | 0 docs/{ext => exporter}/datadog/datadog.rst | 0 docs/{ext => exporter}/jaeger/jaeger.rst | 0 .../opencensus/opencensus.rst} | 0 docs/{ext => exporter}/otlp/otlp.rst | 0 .../prometheus/prometheus.rst | 0 docs/{ext => exporter}/zipkin/zipkin.rst | 0 .../CHANGELOG.md | 3 ++ .../README.rst | 6 +-- .../opentelemetry-exporter-datadog}/setup.cfg | 4 +- .../opentelemetry-exporter-datadog}/setup.py | 0 .../src/opentelemetry/ext/datadog/__init__.py | 0 .../opentelemetry/ext/datadog/constants.py | 0 .../src/opentelemetry/ext/datadog/exporter.py | 0 .../opentelemetry/ext/datadog/propagator.py | 0 .../ext/datadog/spanprocessor.py | 0 .../src/opentelemetry/ext/datadog/version.py | 0 .../tests/__init__.py | 0 .../tests/test_datadog_exporter.py | 0 .../tests/test_datadog_format.py | 0 .../CHANGELOG.md | 3 ++ .../opentelemetry-exporter-jaeger}/LICENSE | 0 .../MANIFEST.in | 0 .../opentelemetry-exporter-jaeger}/README.rst | 8 ++-- .../examples/jaeger_exporter_example.py | 0 .../opentelemetry-exporter-jaeger}/setup.cfg | 0 .../opentelemetry-exporter-jaeger}/setup.py | 0 .../src/opentelemetry/ext/jaeger/__init__.py | 0 .../opentelemetry/ext/jaeger/gen/__init__.py | 0 .../ext/jaeger/gen/agent/Agent-remote | 0 .../ext/jaeger/gen/agent/Agent.py | 0 .../ext/jaeger/gen/agent/__init__.py | 0 .../ext/jaeger/gen/agent/constants.py | 0 .../ext/jaeger/gen/agent/ttypes.py | 0 .../ext/jaeger/gen/jaeger/Collector-remote | 0 .../ext/jaeger/gen/jaeger/Collector.py | 0 .../ext/jaeger/gen/jaeger/__init__.py | 0 .../ext/jaeger/gen/jaeger/constants.py | 0 .../ext/jaeger/gen/jaeger/ttypes.py | 0 .../gen/zipkincore/ZipkinCollector-remote | 0 .../jaeger/gen/zipkincore/ZipkinCollector.py | 0 .../ext/jaeger/gen/zipkincore/__init__.py | 0 .../ext/jaeger/gen/zipkincore/constants.py | 0 .../ext/jaeger/gen/zipkincore/ttypes.py | 0 .../src/opentelemetry/ext/jaeger/version.py | 0 .../tests/__init__.py | 0 .../tests/test_jaeger_exporter.py | 0 .../thrift/agent.thrift | 0 .../thrift/jaeger.thrift | 0 .../thrift/zipkincore.thrift | 0 .../CHANGELOG.md | 3 ++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 8 ++-- .../setup.cfg | 4 +- .../setup.py | 0 .../ext/opencensusexporter/__init__.py | 0 .../metrics_exporter/__init__.py | 0 .../trace_exporter/__init__.py | 0 .../ext/opencensusexporter/util.py | 0 .../ext/opencensusexporter/version.py | 0 .../tests/__init__.py | 0 .../test_otcollector_metrics_exporter.py | 0 .../tests/test_otcollector_trace_exporter.py | 0 .../opentelemetry-exporter-otlp}/CHANGELOG.md | 2 + .../opentelemetry-exporter-otlp}/LICENSE | 0 .../opentelemetry-exporter-otlp}/MANIFEST.in | 0 .../opentelemetry-exporter-otlp}/README.rst | 8 ++-- .../opentelemetry-exporter-otlp}/setup.cfg | 4 +- .../opentelemetry-exporter-otlp}/setup.py | 0 .../src/opentelemetry/ext/otlp/__init__.py | 0 .../ext/otlp/trace_exporter/__init__.py | 0 .../src/opentelemetry/ext/otlp/version.py | 0 .../tests/__init__.py | 0 .../tests/test_otlp_trace_exporter.py | 0 .../CHANGELOG.md | 12 +++++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 8 ++-- .../setup.cfg | 4 +- .../setup.py | 0 .../opentelemetry/ext/prometheus/__init__.py | 0 .../opentelemetry/ext/prometheus/version.py | 0 .../tests/__init__.py | 0 .../tests/test_prometheus_exporter.py | 0 .../CHANGELOG.md | 3 ++ .../opentelemetry-exporter-zipkin}/LICENSE | 0 .../MANIFEST.in | 0 .../opentelemetry-exporter-zipkin}/README.rst | 8 ++-- .../opentelemetry-exporter-zipkin}/setup.cfg | 4 +- .../opentelemetry-exporter-zipkin}/setup.py | 0 .../src/opentelemetry/ext/zipkin/__init__.py | 0 .../src/opentelemetry/ext/zipkin/version.py | 0 .../tests/__init__.py | 0 .../tests/test_zipkin_exporter.py | 0 .../setup.cfg | 2 +- ext/opentelemetry-ext-elasticsearch/setup.cfg | 2 +- ext/opentelemetry-ext-jinja2/setup.cfg | 2 +- ext/opentelemetry-ext-mysql/setup.cfg | 2 +- ext/opentelemetry-ext-prometheus/CHANGELOG.md | 9 ---- ext/opentelemetry-ext-psycopg2/setup.cfg | 2 +- ext/opentelemetry-ext-pymemcache/setup.cfg | 2 +- ext/opentelemetry-ext-pymongo/setup.cfg | 2 +- ext/opentelemetry-ext-pymysql/setup.cfg | 2 +- ext/opentelemetry-ext-pyramid/setup.cfg | 2 +- ext/opentelemetry-ext-requests/setup.cfg | 2 +- ext/opentelemetry-ext-sqlite3/setup.cfg | 2 +- scripts/build.sh | 2 +- scripts/coverage.sh | 6 +-- tox.ini | 44 +++++++++---------- 111 files changed, 96 insertions(+), 79 deletions(-) rename docs/{ext => exporter}/cloud_monitoring/cloud_monitoring.rst (100%) rename docs/{ext => exporter}/cloud_trace/cloud_trace.rst (100%) rename docs/{ext => exporter}/datadog/datadog.rst (100%) rename docs/{ext => exporter}/jaeger/jaeger.rst (100%) rename docs/{ext/opencensusexporter/opencensusexporter.rst => exporter/opencensus/opencensus.rst} (100%) rename docs/{ext => exporter}/otlp/otlp.rst (100%) rename docs/{ext => exporter}/prometheus/prometheus.rst (100%) rename docs/{ext => exporter}/zipkin/zipkin.rst (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/CHANGELOG.md (55%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/README.rst (71%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/setup.cfg (91%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/setup.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/src/opentelemetry/ext/datadog/__init__.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/src/opentelemetry/ext/datadog/constants.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/src/opentelemetry/ext/datadog/exporter.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/src/opentelemetry/ext/datadog/propagator.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/src/opentelemetry/ext/datadog/spanprocessor.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/src/opentelemetry/ext/datadog/version.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/tests/test_datadog_exporter.py (100%) rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/tests/test_datadog_format.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/CHANGELOG.md (87%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/LICENSE (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/README.rst (66%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/examples/jaeger_exporter_example.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/setup.cfg (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/setup.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote (100%) mode change 100755 => 100644 rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/agent/Agent.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/agent/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/agent/constants.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote (100%) mode change 100755 => 100644 rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote (100%) mode change 100755 => 100644 rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/src/opentelemetry/ext/jaeger/version.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/tests/test_jaeger_exporter.py (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/thrift/agent.thrift (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/thrift/jaeger.thrift (100%) rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/thrift/zipkincore.thrift (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/CHANGELOG.md (61%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/LICENSE (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/README.rst (57%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/setup.cfg (94%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/setup.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/src/opentelemetry/ext/opencensusexporter/__init__.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/src/opentelemetry/ext/opencensusexporter/util.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/src/opentelemetry/ext/opencensusexporter/version.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/tests/test_otcollector_metrics_exporter.py (100%) rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/tests/test_otcollector_trace_exporter.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/CHANGELOG.md (61%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/LICENSE (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/README.rst (70%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/setup.cfg (95%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/setup.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/src/opentelemetry/ext/otlp/__init__.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/src/opentelemetry/ext/otlp/trace_exporter/__init__.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/src/opentelemetry/ext/otlp/version.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/tests/test_otlp_trace_exporter.py (100%) create mode 100644 exporter/opentelemetry-exporter-prometheus/CHANGELOG.md rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/LICENSE (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/README.rst (58%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/setup.cfg (94%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/setup.py (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/src/opentelemetry/ext/prometheus/__init__.py (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/src/opentelemetry/ext/prometheus/version.py (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-prometheus => exporter/opentelemetry-exporter-prometheus}/tests/test_prometheus_exporter.py (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/CHANGELOG.md (73%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/LICENSE (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/README.rst (59%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/setup.cfg (95%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/setup.py (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/src/opentelemetry/ext/zipkin/__init__.py (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/src/opentelemetry/ext/zipkin/version.py (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-zipkin => exporter/opentelemetry-exporter-zipkin}/tests/test_zipkin_exporter.py (100%) delete mode 100644 ext/opentelemetry-ext-prometheus/CHANGELOG.md diff --git a/docs/ext/cloud_monitoring/cloud_monitoring.rst b/docs/exporter/cloud_monitoring/cloud_monitoring.rst similarity index 100% rename from docs/ext/cloud_monitoring/cloud_monitoring.rst rename to docs/exporter/cloud_monitoring/cloud_monitoring.rst diff --git a/docs/ext/cloud_trace/cloud_trace.rst b/docs/exporter/cloud_trace/cloud_trace.rst similarity index 100% rename from docs/ext/cloud_trace/cloud_trace.rst rename to docs/exporter/cloud_trace/cloud_trace.rst diff --git a/docs/ext/datadog/datadog.rst b/docs/exporter/datadog/datadog.rst similarity index 100% rename from docs/ext/datadog/datadog.rst rename to docs/exporter/datadog/datadog.rst diff --git a/docs/ext/jaeger/jaeger.rst b/docs/exporter/jaeger/jaeger.rst similarity index 100% rename from docs/ext/jaeger/jaeger.rst rename to docs/exporter/jaeger/jaeger.rst diff --git a/docs/ext/opencensusexporter/opencensusexporter.rst b/docs/exporter/opencensus/opencensus.rst similarity index 100% rename from docs/ext/opencensusexporter/opencensusexporter.rst rename to docs/exporter/opencensus/opencensus.rst diff --git a/docs/ext/otlp/otlp.rst b/docs/exporter/otlp/otlp.rst similarity index 100% rename from docs/ext/otlp/otlp.rst rename to docs/exporter/otlp/otlp.rst diff --git a/docs/ext/prometheus/prometheus.rst b/docs/exporter/prometheus/prometheus.rst similarity index 100% rename from docs/ext/prometheus/prometheus.rst rename to docs/exporter/prometheus/prometheus.rst diff --git a/docs/ext/zipkin/zipkin.rst b/docs/exporter/zipkin/zipkin.rst similarity index 100% rename from docs/ext/zipkin/zipkin.rst rename to docs/exporter/zipkin/zipkin.rst diff --git a/ext/opentelemetry-ext-datadog/CHANGELOG.md b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md similarity index 55% rename from ext/opentelemetry-ext-datadog/CHANGELOG.md rename to exporter/opentelemetry-exporter-datadog/CHANGELOG.md index 15c6ff4b000..68084a7d1a4 100644 --- a/ext/opentelemetry-ext-datadog/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-datadog + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-datadog/README.rst b/exporter/opentelemetry-exporter-datadog/README.rst similarity index 71% rename from ext/opentelemetry-ext-datadog/README.rst rename to exporter/opentelemetry-exporter-datadog/README.rst index 9f9a2aeb889..cb97e5997fe 100644 --- a/ext/opentelemetry-ext-datadog/README.rst +++ b/exporter/opentelemetry-exporter-datadog/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Datadog Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-datadog.svg - :target: https://pypi.org/project/opentelemetry-ext-datadog/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-datadog.svg + :target: https://pypi.org/project/opentelemetry-exporter-datadog/ This library allows to export tracing data to `Datadog `_. OpenTelemetry span event and links are not @@ -15,7 +15,7 @@ Installation :: - pip install opentelemetry-ext-datadog + pip install opentelemetry-exporter-datadog .. _Datadog: https://www.datadoghq.com/ diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/exporter/opentelemetry-exporter-datadog/setup.cfg similarity index 91% rename from ext/opentelemetry-ext-datadog/setup.cfg rename to exporter/opentelemetry-exporter-datadog/setup.cfg index d97bcdaa69f..e49efbb19ea 100644 --- a/ext/opentelemetry-ext-datadog/setup.cfg +++ b/exporter/opentelemetry-exporter-datadog/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-datadog +name = opentelemetry-exporter-datadog description = Datadog Span Exporter for OpenTelemetry long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-datadog +url = https://github.com/open-telemetry/opentelemetry-python/exporter/opentelemetry-exporter-datadog platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-datadog/setup.py b/exporter/opentelemetry-exporter-datadog/setup.py similarity index 100% rename from ext/opentelemetry-ext-datadog/setup.py rename to exporter/opentelemetry-exporter-datadog/setup.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/__init__.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/__init__.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/__init__.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/__init__.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/constants.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/constants.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/constants.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/constants.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/exporter.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/exporter.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/exporter.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/exporter.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/propagator.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/propagator.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/spanprocessor.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/spanprocessor.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/spanprocessor.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/spanprocessor.py diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/version.py similarity index 100% rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/version.py diff --git a/ext/opentelemetry-ext-datadog/tests/__init__.py b/exporter/opentelemetry-exporter-datadog/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-datadog/tests/__init__.py rename to exporter/opentelemetry-exporter-datadog/tests/__init__.py diff --git a/ext/opentelemetry-ext-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py similarity index 100% rename from ext/opentelemetry-ext-datadog/tests/test_datadog_exporter.py rename to exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py diff --git a/ext/opentelemetry-ext-datadog/tests/test_datadog_format.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py similarity index 100% rename from ext/opentelemetry-ext-datadog/tests/test_datadog_format.py rename to exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py diff --git a/ext/opentelemetry-ext-jaeger/CHANGELOG.md b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md similarity index 87% rename from ext/opentelemetry-ext-jaeger/CHANGELOG.md rename to exporter/opentelemetry-exporter-jaeger/CHANGELOG.md index dada0101e0d..0447864e56a 100644 --- a/ext/opentelemetry-ext-jaeger/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-jaeger + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-jaeger/LICENSE b/exporter/opentelemetry-exporter-jaeger/LICENSE similarity index 100% rename from ext/opentelemetry-ext-jaeger/LICENSE rename to exporter/opentelemetry-exporter-jaeger/LICENSE diff --git a/ext/opentelemetry-ext-jaeger/MANIFEST.in b/exporter/opentelemetry-exporter-jaeger/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-jaeger/MANIFEST.in rename to exporter/opentelemetry-exporter-jaeger/MANIFEST.in diff --git a/ext/opentelemetry-ext-jaeger/README.rst b/exporter/opentelemetry-exporter-jaeger/README.rst similarity index 66% rename from ext/opentelemetry-ext-jaeger/README.rst rename to exporter/opentelemetry-exporter-jaeger/README.rst index caa3afa9327..0069d130cdf 100644 --- a/ext/opentelemetry-ext-jaeger/README.rst +++ b/exporter/opentelemetry-exporter-jaeger/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Jaeger Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-jaeger.svg - :target: https://pypi.org/project/opentelemetry-ext-jaeger/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-jaeger.svg + :target: https://pypi.org/project/opentelemetry-exporter-jaeger/ This library allows to export tracing data to `Jaeger `_. @@ -13,7 +13,7 @@ Installation :: - pip install opentelemetry-ext-jaeger + pip install opentelemetry-exporter-jaeger .. _Jaeger: https://www.jaegertracing.io/ @@ -23,6 +23,6 @@ Installation References ---------- -* `OpenTelemetry Jaeger Exporter `_ +* `OpenTelemetry Jaeger Exporter `_ * `Jaeger `_ * `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-jaeger/examples/jaeger_exporter_example.py b/exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/examples/jaeger_exporter_example.py rename to exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py diff --git a/ext/opentelemetry-ext-jaeger/setup.cfg b/exporter/opentelemetry-exporter-jaeger/setup.cfg similarity index 100% rename from ext/opentelemetry-ext-jaeger/setup.cfg rename to exporter/opentelemetry-exporter-jaeger/setup.cfg diff --git a/ext/opentelemetry-ext-jaeger/setup.py b/exporter/opentelemetry-exporter-jaeger/setup.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/setup.py rename to exporter/opentelemetry-exporter-jaeger/setup.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote old mode 100755 new mode 100644 similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote old mode 100755 new mode 100644 similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote old mode 100755 new mode 100644 similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/version.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/version.py diff --git a/ext/opentelemetry-ext-jaeger/tests/__init__.py b/exporter/opentelemetry-exporter-jaeger/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/tests/__init__.py rename to exporter/opentelemetry-exporter-jaeger/tests/__init__.py diff --git a/ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py b/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py similarity index 100% rename from ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py rename to exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py diff --git a/ext/opentelemetry-ext-jaeger/thrift/agent.thrift b/exporter/opentelemetry-exporter-jaeger/thrift/agent.thrift similarity index 100% rename from ext/opentelemetry-ext-jaeger/thrift/agent.thrift rename to exporter/opentelemetry-exporter-jaeger/thrift/agent.thrift diff --git a/ext/opentelemetry-ext-jaeger/thrift/jaeger.thrift b/exporter/opentelemetry-exporter-jaeger/thrift/jaeger.thrift similarity index 100% rename from ext/opentelemetry-ext-jaeger/thrift/jaeger.thrift rename to exporter/opentelemetry-exporter-jaeger/thrift/jaeger.thrift diff --git a/ext/opentelemetry-ext-jaeger/thrift/zipkincore.thrift b/exporter/opentelemetry-exporter-jaeger/thrift/zipkincore.thrift similarity index 100% rename from ext/opentelemetry-ext-jaeger/thrift/zipkincore.thrift rename to exporter/opentelemetry-exporter-jaeger/thrift/zipkincore.thrift diff --git a/ext/opentelemetry-ext-opencensusexporter/CHANGELOG.md b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md similarity index 61% rename from ext/opentelemetry-ext-opencensusexporter/CHANGELOG.md rename to exporter/opentelemetry-exporter-opencensus/CHANGELOG.md index 4d1c9a97b82..968e1e72200 100644 --- a/ext/opentelemetry-ext-opencensusexporter/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-opencensus + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-opencensusexporter/LICENSE b/exporter/opentelemetry-exporter-opencensus/LICENSE similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/LICENSE rename to exporter/opentelemetry-exporter-opencensus/LICENSE diff --git a/ext/opentelemetry-ext-opencensusexporter/MANIFEST.in b/exporter/opentelemetry-exporter-opencensus/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/MANIFEST.in rename to exporter/opentelemetry-exporter-opencensus/MANIFEST.in diff --git a/ext/opentelemetry-ext-opencensusexporter/README.rst b/exporter/opentelemetry-exporter-opencensus/README.rst similarity index 57% rename from ext/opentelemetry-ext-opencensusexporter/README.rst rename to exporter/opentelemetry-exporter-opencensus/README.rst index 75563053d10..7f282d307e1 100644 --- a/ext/opentelemetry-ext-opencensusexporter/README.rst +++ b/exporter/opentelemetry-exporter-opencensus/README.rst @@ -3,8 +3,8 @@ OpenCensus Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-opencensusexporter.svg - :target: https://pypi.org/project/opentelemetry-ext-opencensusexporter/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-opencensus.svg + :target: https://pypi.org/project/opentelemetry-exporter-opencensus/ This library allows to export traces and metrics using OpenCensus. @@ -13,12 +13,12 @@ Installation :: - pip install opentelemetry-ext-opencensusexporter + pip install opentelemetry-exporter-opencensus References ---------- -* `OpenCensus Exporter `_ +* `OpenCensus Exporter `_ * `OpenTelemetry Collector `_ * `OpenTelemetry `_ diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.cfg b/exporter/opentelemetry-exporter-opencensus/setup.cfg similarity index 94% rename from ext/opentelemetry-ext-opencensusexporter/setup.cfg rename to exporter/opentelemetry-exporter-opencensus/setup.cfg index ea963dce187..f5df1f46ce1 100644 --- a/ext/opentelemetry-ext-opencensusexporter/setup.cfg +++ b/exporter/opentelemetry-exporter-opencensus/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-opencensusexporter +name = opentelemetry-exporter-opencensus description = OpenCensus Exporter long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-opencensusexporter +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-opencensus platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.py b/exporter/opentelemetry-exporter-opencensus/setup.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/setup.py rename to exporter/opentelemetry-exporter-opencensus/setup.py diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/__init__.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/__init__.py diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/util.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/util.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/util.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/util.py diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/version.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/version.py diff --git a/ext/opentelemetry-ext-opencensusexporter/tests/__init__.py b/exporter/opentelemetry-exporter-opencensus/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/tests/__init__.py rename to exporter/opentelemetry-exporter-opencensus/tests/__init__.py diff --git a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py rename to exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py diff --git a/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_trace_exporter.py b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py similarity index 100% rename from ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_trace_exporter.py rename to exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py diff --git a/ext/opentelemetry-ext-otlp/CHANGELOG.md b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md similarity index 61% rename from ext/opentelemetry-ext-otlp/CHANGELOG.md rename to exporter/opentelemetry-exporter-otlp/CHANGELOG.md index fbfff4496e0..54c09948828 100644 --- a/ext/opentelemetry-ext-otlp/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md @@ -3,6 +3,8 @@ ## Unreleased - Update span exporter to use OpenTelemetry Proto v0.4.0 ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/889)) +- Change package name to opentelemetry-exporter-otlp + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) ## 0.9b0 diff --git a/ext/opentelemetry-ext-otlp/LICENSE b/exporter/opentelemetry-exporter-otlp/LICENSE similarity index 100% rename from ext/opentelemetry-ext-otlp/LICENSE rename to exporter/opentelemetry-exporter-otlp/LICENSE diff --git a/ext/opentelemetry-ext-otlp/MANIFEST.in b/exporter/opentelemetry-exporter-otlp/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-otlp/MANIFEST.in rename to exporter/opentelemetry-exporter-otlp/MANIFEST.in diff --git a/ext/opentelemetry-ext-otlp/README.rst b/exporter/opentelemetry-exporter-otlp/README.rst similarity index 70% rename from ext/opentelemetry-ext-otlp/README.rst rename to exporter/opentelemetry-exporter-otlp/README.rst index ab233cbc62b..8adf6571815 100644 --- a/ext/opentelemetry-ext-otlp/README.rst +++ b/exporter/opentelemetry-exporter-otlp/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Collector Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-otlp.svg - :target: https://pypi.org/project/opentelemetry-ext-otlp/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-otlp.svg + :target: https://pypi.org/project/opentelemetry-exporter-otlp/ This library allows to export data to the OpenTelemetry Collector using the OpenTelemetry Protocol. @@ -13,13 +13,13 @@ Installation :: - pip install opentelemetry-ext-otlp + pip install opentelemetry-exporter-otlp References ---------- -* `OpenTelemetry Collector Exporter `_ +* `OpenTelemetry Collector Exporter `_ * `OpenTelemetry Collector `_ * `OpenTelemetry `_ * `OpenTelemetry Protocol Specification `_ diff --git a/ext/opentelemetry-ext-otlp/setup.cfg b/exporter/opentelemetry-exporter-otlp/setup.cfg similarity index 95% rename from ext/opentelemetry-ext-otlp/setup.cfg rename to exporter/opentelemetry-exporter-otlp/setup.cfg index 65908e0a3c0..f6c4873d5c7 100644 --- a/ext/opentelemetry-ext-otlp/setup.cfg +++ b/exporter/opentelemetry-exporter-otlp/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-otlp +name = opentelemetry-exporter-otlp description = OpenTelemetry Collector Exporter long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-otlp +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-otlp platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-otlp/setup.py b/exporter/opentelemetry-exporter-otlp/setup.py similarity index 100% rename from ext/opentelemetry-ext-otlp/setup.py rename to exporter/opentelemetry-exporter-otlp/setup.py diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/__init__.py similarity index 100% rename from ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/__init__.py diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py similarity index 100% rename from ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/version.py similarity index 100% rename from ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/version.py diff --git a/ext/opentelemetry-ext-otlp/tests/__init__.py b/exporter/opentelemetry-exporter-otlp/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-otlp/tests/__init__.py rename to exporter/opentelemetry-exporter-otlp/tests/__init__.py diff --git a/ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py b/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py similarity index 100% rename from ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py rename to exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py diff --git a/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md new file mode 100644 index 00000000000..8b6a43594f8 --- /dev/null +++ b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-exporter-prometheus + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + +## 0.4a0 + +Released 2020-02-21 + +- Initial release diff --git a/ext/opentelemetry-ext-prometheus/LICENSE b/exporter/opentelemetry-exporter-prometheus/LICENSE similarity index 100% rename from ext/opentelemetry-ext-prometheus/LICENSE rename to exporter/opentelemetry-exporter-prometheus/LICENSE diff --git a/ext/opentelemetry-ext-prometheus/MANIFEST.in b/exporter/opentelemetry-exporter-prometheus/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-prometheus/MANIFEST.in rename to exporter/opentelemetry-exporter-prometheus/MANIFEST.in diff --git a/ext/opentelemetry-ext-prometheus/README.rst b/exporter/opentelemetry-exporter-prometheus/README.rst similarity index 58% rename from ext/opentelemetry-ext-prometheus/README.rst rename to exporter/opentelemetry-exporter-prometheus/README.rst index 5a85f03582a..a3eb9200005 100644 --- a/ext/opentelemetry-ext-prometheus/README.rst +++ b/exporter/opentelemetry-exporter-prometheus/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Prometheus Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-prometheus.svg - :target: https://pypi.org/project/opentelemetry-ext-prometheus/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-prometheus.svg + :target: https://pypi.org/project/opentelemetry-exporter-prometheus/ This library allows to export metrics data to `Prometheus `_. @@ -13,11 +13,11 @@ Installation :: - pip install opentelemetry-ext-prometheus + pip install opentelemetry-exporter-prometheus References ---------- -* `OpenTelemetry Prometheus Exporter `_ +* `OpenTelemetry Prometheus Exporter `_ * `Prometheus `_ * `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-prometheus/setup.cfg b/exporter/opentelemetry-exporter-prometheus/setup.cfg similarity index 94% rename from ext/opentelemetry-ext-prometheus/setup.cfg rename to exporter/opentelemetry-exporter-prometheus/setup.cfg index 5dae17f5cbc..2fcc3caed70 100644 --- a/ext/opentelemetry-ext-prometheus/setup.cfg +++ b/exporter/opentelemetry-exporter-prometheus/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-prometheus +name = opentelemetry-exporter-prometheus description = Prometheus Metric Exporter for OpenTelemetry long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-prometheus +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-prometheus platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-prometheus/setup.py b/exporter/opentelemetry-exporter-prometheus/setup.py similarity index 100% rename from ext/opentelemetry-ext-prometheus/setup.py rename to exporter/opentelemetry-exporter-prometheus/setup.py diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/__init__.py similarity index 100% rename from ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py rename to exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/__init__.py diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/version.py similarity index 100% rename from ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py rename to exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/version.py diff --git a/ext/opentelemetry-ext-prometheus/tests/__init__.py b/exporter/opentelemetry-exporter-prometheus/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-prometheus/tests/__init__.py rename to exporter/opentelemetry-exporter-prometheus/tests/__init__.py diff --git a/ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py similarity index 100% rename from ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py rename to exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py diff --git a/ext/opentelemetry-ext-zipkin/CHANGELOG.md b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md similarity index 73% rename from ext/opentelemetry-ext-zipkin/CHANGELOG.md rename to exporter/opentelemetry-exporter-zipkin/CHANGELOG.md index efad477d48a..33408ccbd32 100644 --- a/ext/opentelemetry-ext-zipkin/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-exporter-zipkin + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-zipkin/LICENSE b/exporter/opentelemetry-exporter-zipkin/LICENSE similarity index 100% rename from ext/opentelemetry-ext-zipkin/LICENSE rename to exporter/opentelemetry-exporter-zipkin/LICENSE diff --git a/ext/opentelemetry-ext-zipkin/MANIFEST.in b/exporter/opentelemetry-exporter-zipkin/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-zipkin/MANIFEST.in rename to exporter/opentelemetry-exporter-zipkin/MANIFEST.in diff --git a/ext/opentelemetry-ext-zipkin/README.rst b/exporter/opentelemetry-exporter-zipkin/README.rst similarity index 59% rename from ext/opentelemetry-ext-zipkin/README.rst rename to exporter/opentelemetry-exporter-zipkin/README.rst index c746051992e..a23df5eeecc 100644 --- a/ext/opentelemetry-ext-zipkin/README.rst +++ b/exporter/opentelemetry-exporter-zipkin/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Zipkin Exporter |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-zipkin.svg - :target: https://pypi.org/project/opentelemetry-ext-zipkin/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-zipkin.svg + :target: https://pypi.org/project/opentelemetry-exporter-zipkin/ This library allows to export tracing data to `Zipkin `_. @@ -13,12 +13,12 @@ Installation :: - pip install opentelemetry-ext-zipkin + pip install opentelemetry-exporter-zipkin References ---------- -* `OpenTelemetry Zipkin Exporter `_ +* `OpenTelemetry Zipkin Exporter `_ * `Zipkin `_ * `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-zipkin/setup.cfg b/exporter/opentelemetry-exporter-zipkin/setup.cfg similarity index 95% rename from ext/opentelemetry-ext-zipkin/setup.cfg rename to exporter/opentelemetry-exporter-zipkin/setup.cfg index 164f0d84c23..8bc6c5aed5f 100644 --- a/ext/opentelemetry-ext-zipkin/setup.cfg +++ b/exporter/opentelemetry-exporter-zipkin/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-zipkin +name = opentelemetry-exporter-zipkin description = Zipkin Span Exporter for OpenTelemetry long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-zipkin +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-exporter-zipkin platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-zipkin/setup.py b/exporter/opentelemetry-exporter-zipkin/setup.py similarity index 100% rename from ext/opentelemetry-ext-zipkin/setup.py rename to exporter/opentelemetry-exporter-zipkin/setup.py diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/__init__.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/__init__.py similarity index 100% rename from ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/__init__.py rename to exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/__init__.py diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/version.py similarity index 100% rename from ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py rename to exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/version.py diff --git a/ext/opentelemetry-ext-zipkin/tests/__init__.py b/exporter/opentelemetry-exporter-zipkin/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-zipkin/tests/__init__.py rename to exporter/opentelemetry-exporter-zipkin/tests/__init__.py diff --git a/ext/opentelemetry-ext-zipkin/tests/test_zipkin_exporter.py b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py similarity index 100% rename from ext/opentelemetry-ext-zipkin/tests/test_zipkin_exporter.py rename to exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/ext/opentelemetry-ext-aiohttp-client/setup.cfg index 157b6918033..fbdce437aea 100644 --- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg +++ b/ext/opentelemetry-ext-aiohttp-client/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-aiohttp-client -description = OpenTelemetry aiohttp client integration +description = OpenTelemetry aiohttp client instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/ext/opentelemetry-ext-elasticsearch/setup.cfg index 40f3b392b4d..42c80e299b9 100644 --- a/ext/opentelemetry-ext-elasticsearch/setup.cfg +++ b/ext/opentelemetry-ext-elasticsearch/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-elasticsearch -description = OpenTelemetry elasticsearch integration +description = OpenTelemetry elasticsearch instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/ext/opentelemetry-ext-jinja2/setup.cfg index 54a7515150f..10541241ebf 100644 --- a/ext/opentelemetry-ext-jinja2/setup.cfg +++ b/ext/opentelemetry-ext-jinja2/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-jinja2 -description = OpenTelemetry jinja2 integration +description = OpenTelemetry jinja2 instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg index ceb985e8b41..99a8374e75d 100644 --- a/ext/opentelemetry-ext-mysql/setup.cfg +++ b/ext/opentelemetry-ext-mysql/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-mysql -description = OpenTelemetry MySQL integration +description = OpenTelemetry MySQL instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-prometheus/CHANGELOG.md b/ext/opentelemetry-ext-prometheus/CHANGELOG.md deleted file mode 100644 index d5a548aa13d..00000000000 --- a/ext/opentelemetry-ext-prometheus/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## 0.4a0 - -Released 2020-02-21 - -- Initial release diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/ext/opentelemetry-ext-psycopg2/setup.cfg index bb0fd9a57c4..78ee1b147a5 100644 --- a/ext/opentelemetry-ext-psycopg2/setup.cfg +++ b/ext/opentelemetry-ext-psycopg2/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-psycopg2 -description = OpenTelemetry psycopg2 integration +description = OpenTelemetry psycopg2 instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/ext/opentelemetry-ext-pymemcache/setup.cfg index c2252274b1f..f6fcc0f70f9 100644 --- a/ext/opentelemetry-ext-pymemcache/setup.cfg +++ b/ext/opentelemetry-ext-pymemcache/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pymemcache -description = OpenTelemetry pymemcache integration +description = OpenTelemetry pymemcache instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/ext/opentelemetry-ext-pymongo/setup.cfg index 5e08d987763..c2055f65ced 100644 --- a/ext/opentelemetry-ext-pymongo/setup.cfg +++ b/ext/opentelemetry-ext-pymongo/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pymongo -description = OpenTelemetry pymongo integration +description = OpenTelemetry pymongo instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/ext/opentelemetry-ext-pymysql/setup.cfg index db28ef9581e..dedebed1ede 100644 --- a/ext/opentelemetry-ext-pymysql/setup.cfg +++ b/ext/opentelemetry-ext-pymysql/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pymysql -description = OpenTelemetry PyMySQL integration +description = OpenTelemetry PyMySQL instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/ext/opentelemetry-ext-pyramid/setup.cfg index bcdf850e87c..3350a0c6c9d 100644 --- a/ext/opentelemetry-ext-pyramid/setup.cfg +++ b/ext/opentelemetry-ext-pyramid/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pyramid -description = OpenTelemetry Pyramid integration +description = OpenTelemetry Pyramid instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/ext/opentelemetry-ext-requests/setup.cfg index 714a1b3231a..3d3f9f19189 100644 --- a/ext/opentelemetry-ext-requests/setup.cfg +++ b/ext/opentelemetry-ext-requests/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-requests -description = OpenTelemetry requests integration +description = OpenTelemetry requests instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/ext/opentelemetry-ext-sqlite3/setup.cfg index 95f60988eab..6eff4b1e688 100644 --- a/ext/opentelemetry-ext-sqlite3/setup.cfg +++ b/ext/opentelemetry-ext-sqlite3/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-sqlite3 -description = OpenTelemetry SQLite3 integration +description = OpenTelemetry SQLite3 instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/scripts/build.sh b/scripts/build.sh index 7a27105d76e..0d481b8165d 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -16,7 +16,7 @@ DISTDIR=dist mkdir -p $DISTDIR rm -rf $DISTDIR/* - for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-instrumentation/ opentelemetry-proto/ ext/*/ ; do + for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-instrumentation/ opentelemetry-proto/ exporter/*/ ext/*/ ; do ( echo "building $d" cd "$d" diff --git a/scripts/coverage.sh b/scripts/coverage.sh index 0b45fbf643b..5cf393e7e66 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -31,13 +31,13 @@ coverage erase cov opentelemetry-api cov opentelemetry-sdk -cov ext/opentelemetry-ext-datadog +cov exporter/opentelemetry-exporter-datadog cov ext/opentelemetry-ext-flask cov ext/opentelemetry-ext-requests -cov ext/opentelemetry-ext-jaeger +cov exporter/opentelemetry-exporter-jaeger cov ext/opentelemetry-ext-opentracing-shim cov ext/opentelemetry-ext-wsgi -cov ext/opentelemetry-ext-zipkin +cov exporter/opentelemetry-exporter-zipkin cov docs/examples/opentelemetry-example-app # aiohttp is only supported on Python 3.5+. diff --git a/tox.ini b/tox.ini index f956733d566..94895aa3bc9 100644 --- a/tox.ini +++ b/tox.ini @@ -78,26 +78,26 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-jinja2 pypy3-test-instrumentation-jinja2 - ; opentelemetry-ext-jaeger + ; opentelemetry-exporter-jaeger py3{4,5,6,7,8}-test-exporter-jaeger pypy3-test-exporter-jaeger - ; opentelemetry-ext-datadog + ; opentelemetry-exporter-datadog py3{5,6,7,8}-test-exporter-datadog ; opentelemetry-ext-mysql py3{4,5,6,7,8}-test-instrumentation-mysql pypy3-test-instrumentation-mysql - ; opentelemetry-ext-opencensusexporter - py3{4,5,6,7,8}-test-exporter-opencensusexporter - ; ext-opencensusexporter intentionally excluded from pypy3 + ; opentelemetry-exporter-opencensus + py3{4,5,6,7,8}-test-exporter-opencensus + ; exporter-opencensus intentionally excluded from pypy3 - ; opentelemetry-ext-otlp + ; opentelemetry-exporter-otlp py3{5,6,7,8}-test-exporter-otlp - ; ext-otlp intentionally excluded from pypy3 + ; exporter-otlp intentionally excluded from pypy3 - ; opentelemetry-ext-prometheus + ; opentelemetry-exporter-prometheus py3{4,5,6,7,8}-test-exporter-prometheus pypy3-test-exporter-prometheus @@ -137,7 +137,7 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-wsgi pypy3-test-instrumentation-wsgi - ; opentelemetry-ext-zipkin + ; opentelemetry-exporter-zipkin py3{4,5,6,7,8}-test-exporter-zipkin pypy3-test-exporter-zipkin @@ -226,12 +226,12 @@ changedir = test-instrumentation-system-metrics: ext/opentelemetry-ext-system-metrics/tests test-instrumentation-wsgi: ext/opentelemetry-ext-wsgi/tests - test-exporter-jaeger: ext/opentelemetry-ext-jaeger/tests - test-exporter-datadog: ext/opentelemetry-ext-datadog/tests - test-exporter-opencensusexporter: ext/opentelemetry-ext-opencensusexporter/tests - test-exporter-otlp: ext/opentelemetry-ext-otlp/tests - test-exporter-prometheus: ext/opentelemetry-ext-prometheus/tests - test-exporter-zipkin: ext/opentelemetry-ext-zipkin/tests + test-exporter-jaeger: exporter/opentelemetry-exporter-jaeger/tests + test-exporter-datadog: exporter/opentelemetry-exporter-datadog/tests + test-exporter-opencensus: exporter/opentelemetry-exporter-opencensus/tests + test-exporter-otlp: exporter/opentelemetry-exporter-otlp/tests + test-exporter-prometheus: exporter/opentelemetry-exporter-prometheus/tests + test-exporter-zipkin: exporter/opentelemetry-exporter-zipkin/tests commands_pre = ; Install without -e to test the actual installation @@ -271,12 +271,12 @@ commands_pre = mysql: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-mysql[test] - opencensusexporter: pip install {toxinidir}/ext/opentelemetry-ext-opencensusexporter + opencensus: pip install {toxinidir}/exporter/opentelemetry-exporter-opencensus otlp: pip install {toxinidir}/opentelemetry-proto - otlp: pip install {toxinidir}/ext/opentelemetry-ext-otlp + otlp: pip install {toxinidir}/exporter/opentelemetry-exporter-otlp - prometheus: pip install {toxinidir}/ext/opentelemetry-ext-prometheus + prometheus: pip install {toxinidir}/exporter/opentelemetry-exporter-prometheus pymemcache: pip install {toxinidir}/ext/opentelemetry-ext-pymemcache[test] @@ -302,14 +302,14 @@ commands_pre = aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/ext/opentelemetry-instrumentation-aiopg[test] - jaeger: pip install {toxinidir}/ext/opentelemetry-ext-jaeger + jaeger: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger opentracing-shim: pip install {toxinidir}/opentelemetry-sdk opentracing-shim: pip install {toxinidir}/ext/opentelemetry-ext-opentracing-shim - datadog: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/ext/opentelemetry-ext-datadog + datadog: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/exporter/opentelemetry-exporter-datadog - zipkin: pip install {toxinidir}/ext/opentelemetry-ext-zipkin + zipkin: pip install {toxinidir}/exporter/opentelemetry-exporter-zipkin sqlalchemy: pip install {toxinidir}/ext/opentelemetry-ext-sqlalchemy @@ -423,7 +423,7 @@ commands_pre = -e {toxinidir}/ext/opentelemetry-instrumentation-aiopg \ -e {toxinidir}/ext/opentelemetry-ext-redis \ -e {toxinidir}/ext/opentelemetry-ext-system-metrics \ - -e {toxinidir}/ext/opentelemetry-ext-opencensusexporter + -e {toxinidir}/ext/opentelemetry-exporter-opencensus docker-compose up -d python check_availability.py commands = From 97a85bf9f45cf97198d6df1a4318afc0267e6847 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 12:35:23 -0700 Subject: [PATCH 02/35] errors --- docs/exporter/datadog/datadog.rst | 2 +- docs/exporter/jaeger/jaeger.rst | 4 ++-- docs/exporter/opencensus/opencensus.rst | 2 +- docs/exporter/otlp/otlp.rst | 2 +- docs/exporter/prometheus/prometheus.rst | 2 +- docs/exporter/zipkin/zipkin.rst | 2 +- eachdist.ini | 1 + tox.ini | 2 +- 8 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/exporter/datadog/datadog.rst b/docs/exporter/datadog/datadog.rst index 5ae7e042890..3b43c2bdf72 100644 --- a/docs/exporter/datadog/datadog.rst +++ b/docs/exporter/datadog/datadog.rst @@ -1,7 +1,7 @@ OpenTelemetry Datadog Exporter ============================== -.. automodule:: opentelemetry.ext.datadog +.. automodule:: opentelemetry.exporter.datadog :members: :undoc-members: :show-inheritance: diff --git a/docs/exporter/jaeger/jaeger.rst b/docs/exporter/jaeger/jaeger.rst index d7b93a6f10f..6988d8cea9c 100644 --- a/docs/exporter/jaeger/jaeger.rst +++ b/docs/exporter/jaeger/jaeger.rst @@ -1,7 +1,7 @@ Opentelemetry Jaeger Exporter ============================= -.. automodule:: opentelemetry.ext.jaeger +.. automodule:: opentelemetry.exporter.jaeger :members: :undoc-members: :show-inheritance: @@ -10,7 +10,7 @@ Opentelemetry Jaeger Exporter Submodules ---------- -.. automodule:: opentelemetry.ext.jaeger.gen.jaeger.ttypes +.. automodule:: opentelemetry.exporter.jaeger.gen.jaeger.ttypes :members: :undoc-members: :show-inheritance: diff --git a/docs/exporter/opencensus/opencensus.rst b/docs/exporter/opencensus/opencensus.rst index 07b9a855582..6bdcd6a873c 100644 --- a/docs/exporter/opencensus/opencensus.rst +++ b/docs/exporter/opencensus/opencensus.rst @@ -1,7 +1,7 @@ OpenCensus Exporter =================== -.. automodule:: opentelemetry.ext.opencensusexporter +.. automodule:: opentelemetry.exporter.opencensus :members: :undoc-members: :show-inheritance: diff --git a/docs/exporter/otlp/otlp.rst b/docs/exporter/otlp/otlp.rst index 4739d21a581..7663ec9489c 100644 --- a/docs/exporter/otlp/otlp.rst +++ b/docs/exporter/otlp/otlp.rst @@ -1,7 +1,7 @@ Opentelemetry OTLP Exporter =========================== -.. automodule:: opentelemetry.ext.otlp +.. automodule:: opentelemetry.exporter.otlp :members: :undoc-members: :show-inheritance: diff --git a/docs/exporter/prometheus/prometheus.rst b/docs/exporter/prometheus/prometheus.rst index 9ca7754af95..f4ad1a8245b 100644 --- a/docs/exporter/prometheus/prometheus.rst +++ b/docs/exporter/prometheus/prometheus.rst @@ -1,7 +1,7 @@ OpenTelemetry Prometheus Exporter ================================= -.. automodule:: opentelemetry.ext.prometheus +.. automodule:: opentelemetry.exporter.prometheus :members: :undoc-members: :show-inheritance: diff --git a/docs/exporter/zipkin/zipkin.rst b/docs/exporter/zipkin/zipkin.rst index 8a5191a86d1..18042022a45 100644 --- a/docs/exporter/zipkin/zipkin.rst +++ b/docs/exporter/zipkin/zipkin.rst @@ -1,7 +1,7 @@ Opentelemetry Zipkin Exporter ============================= -.. automodule:: opentelemetry.ext.zipkin +.. automodule:: opentelemetry.exporter.zipkin :members: :undoc-members: :show-inheritance: diff --git a/eachdist.ini b/eachdist.ini index c77d82f345f..defc3e0c9dd 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -10,6 +10,7 @@ sortfirst= ext/opentelemetry-ext-wsgi ext/opentelemetry-ext-dbapi ext/opentelemetry-ext-asgi + exporter/* ext/* [lintroots] diff --git a/tox.ini b/tox.ini index 94895aa3bc9..9c38d26a337 100644 --- a/tox.ini +++ b/tox.ini @@ -423,7 +423,7 @@ commands_pre = -e {toxinidir}/ext/opentelemetry-instrumentation-aiopg \ -e {toxinidir}/ext/opentelemetry-ext-redis \ -e {toxinidir}/ext/opentelemetry-ext-system-metrics \ - -e {toxinidir}/ext/opentelemetry-exporter-opencensus + -e {toxinidir}/exporter/opentelemetry-exporter-opencensus docker-compose up -d python check_availability.py commands = From 5caffecdbe0f5d9ff072f44a7bbae327654cc185 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 12:36:19 -0700 Subject: [PATCH 03/35] changelog --- exporter/opentelemetry-exporter-datadog/CHANGELOG.md | 2 +- exporter/opentelemetry-exporter-jaeger/CHANGELOG.md | 2 +- exporter/opentelemetry-exporter-opencensus/CHANGELOG.md | 2 +- exporter/opentelemetry-exporter-zipkin/CHANGELOG.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/exporter/opentelemetry-exporter-datadog/CHANGELOG.md b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md index 68084a7d1a4..d15d5a4b5d1 100644 --- a/exporter/opentelemetry-exporter-datadog/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-exporter-datadog - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) ## 0.8b0 diff --git a/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md index 0447864e56a..7b9a03d3122 100644 --- a/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-exporter-jaeger - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) ## 0.8b0 diff --git a/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md index 968e1e72200..c7f0cf69b5c 100644 --- a/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-exporter-opencensus - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) ## 0.8b0 diff --git a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md index 33408ccbd32..2218d44c20b 100644 --- a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-exporter-zipkin - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) ## 0.8b0 From e95d42ad2be2c7026cc43a3fae61c4724f3479a7 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 12:57:33 -0700 Subject: [PATCH 04/35] rename --- .../src/opentelemetry/{ext => exporter}/datadog/__init__.py | 0 .../src/opentelemetry/{ext => exporter}/datadog/constants.py | 0 .../src/opentelemetry/{ext => exporter}/datadog/exporter.py | 0 .../src/opentelemetry/{ext => exporter}/datadog/propagator.py | 0 .../opentelemetry/{ext => exporter}/datadog/spanprocessor.py | 0 .../src/opentelemetry/{ext => exporter}/datadog/version.py | 0 .../src/opentelemetry/{ext => exporter}/jaeger/__init__.py | 0 .../src/opentelemetry/{ext => exporter}/jaeger/gen/__init__.py | 0 .../{ext => exporter}/jaeger/gen/agent/Agent-remote | 0 .../opentelemetry/{ext => exporter}/jaeger/gen/agent/Agent.py | 0 .../{ext => exporter}/jaeger/gen/agent/__init__.py | 0 .../{ext => exporter}/jaeger/gen/agent/constants.py | 0 .../opentelemetry/{ext => exporter}/jaeger/gen/agent/ttypes.py | 0 .../{ext => exporter}/jaeger/gen/jaeger/Collector-remote | 0 .../{ext => exporter}/jaeger/gen/jaeger/Collector.py | 0 .../{ext => exporter}/jaeger/gen/jaeger/__init__.py | 0 .../{ext => exporter}/jaeger/gen/jaeger/constants.py | 0 .../opentelemetry/{ext => exporter}/jaeger/gen/jaeger/ttypes.py | 0 .../jaeger/gen/zipkincore/ZipkinCollector-remote | 0 .../{ext => exporter}/jaeger/gen/zipkincore/ZipkinCollector.py | 0 .../{ext => exporter}/jaeger/gen/zipkincore/__init__.py | 0 .../{ext => exporter}/jaeger/gen/zipkincore/constants.py | 0 .../{ext => exporter}/jaeger/gen/zipkincore/ttypes.py | 0 .../src/opentelemetry/{ext => exporter}/jaeger/version.py | 0 .../{ext => exporter}/opencensusexporter/__init__.py | 0 .../opencensusexporter/metrics_exporter/__init__.py | 0 .../opencensusexporter/trace_exporter/__init__.py | 0 .../opentelemetry/{ext => exporter}/opencensusexporter/util.py | 0 .../{ext => exporter}/opencensusexporter/version.py | 0 exporter/opentelemetry-exporter-otlp/CHANGELOG.md | 2 +- .../src/opentelemetry/{ext => exporter}/otlp/__init__.py | 0 .../{ext => exporter}/otlp/trace_exporter/__init__.py | 0 .../src/opentelemetry/{ext => exporter}/otlp/version.py | 0 exporter/opentelemetry-exporter-prometheus/CHANGELOG.md | 2 +- .../src/opentelemetry/{ext => exporter}/prometheus/__init__.py | 0 .../src/opentelemetry/{ext => exporter}/prometheus/version.py | 0 .../src/opentelemetry/{ext => exporter}/zipkin/__init__.py | 0 .../src/opentelemetry/{ext => exporter}/zipkin/version.py | 0 38 files changed, 2 insertions(+), 2 deletions(-) rename exporter/opentelemetry-exporter-datadog/src/opentelemetry/{ext => exporter}/datadog/__init__.py (100%) rename exporter/opentelemetry-exporter-datadog/src/opentelemetry/{ext => exporter}/datadog/constants.py (100%) rename exporter/opentelemetry-exporter-datadog/src/opentelemetry/{ext => exporter}/datadog/exporter.py (100%) rename exporter/opentelemetry-exporter-datadog/src/opentelemetry/{ext => exporter}/datadog/propagator.py (100%) rename exporter/opentelemetry-exporter-datadog/src/opentelemetry/{ext => exporter}/datadog/spanprocessor.py (100%) rename exporter/opentelemetry-exporter-datadog/src/opentelemetry/{ext => exporter}/datadog/version.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/__init__.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/__init__.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/agent/Agent-remote (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/agent/Agent.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/agent/__init__.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/agent/constants.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/agent/ttypes.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/jaeger/Collector-remote (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/jaeger/Collector.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/jaeger/__init__.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/jaeger/constants.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/jaeger/ttypes.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/zipkincore/ZipkinCollector-remote (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/zipkincore/ZipkinCollector.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/zipkincore/__init__.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/zipkincore/constants.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/gen/zipkincore/ttypes.py (100%) rename exporter/opentelemetry-exporter-jaeger/src/opentelemetry/{ext => exporter}/jaeger/version.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/{ext => exporter}/opencensusexporter/__init__.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/{ext => exporter}/opencensusexporter/metrics_exporter/__init__.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/{ext => exporter}/opencensusexporter/trace_exporter/__init__.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/{ext => exporter}/opencensusexporter/util.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/{ext => exporter}/opencensusexporter/version.py (100%) rename exporter/opentelemetry-exporter-otlp/src/opentelemetry/{ext => exporter}/otlp/__init__.py (100%) rename exporter/opentelemetry-exporter-otlp/src/opentelemetry/{ext => exporter}/otlp/trace_exporter/__init__.py (100%) rename exporter/opentelemetry-exporter-otlp/src/opentelemetry/{ext => exporter}/otlp/version.py (100%) rename exporter/opentelemetry-exporter-prometheus/src/opentelemetry/{ext => exporter}/prometheus/__init__.py (100%) rename exporter/opentelemetry-exporter-prometheus/src/opentelemetry/{ext => exporter}/prometheus/version.py (100%) rename exporter/opentelemetry-exporter-zipkin/src/opentelemetry/{ext => exporter}/zipkin/__init__.py (100%) rename exporter/opentelemetry-exporter-zipkin/src/opentelemetry/{ext => exporter}/zipkin/version.py (100%) diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/__init__.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/__init__.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/constants.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/constants.py similarity index 100% rename from exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/constants.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/constants.py diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/exporter.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py similarity index 100% rename from exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/exporter.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/propagator.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/propagator.py similarity index 100% rename from exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/propagator.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/propagator.py diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/spanprocessor.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py similarity index 100% rename from exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/spanprocessor.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/spanprocessor.py diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/version.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py similarity index 100% rename from exporter/opentelemetry-exporter-datadog/src/opentelemetry/ext/datadog/version.py rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/__init__.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent-remote similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent-remote diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/Agent.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/Agent.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/__init__.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/constants.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/constants.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/ttypes.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/agent/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/agent/ttypes.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector-remote similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector-remote diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/Collector.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/Collector.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/__init__.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/constants.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/constants.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/ttypes.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/jaeger/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/jaeger/ttypes.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector-remote similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector-remote rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector-remote diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ZipkinCollector.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ZipkinCollector.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/__init__.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/__init__.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/constants.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/constants.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/constants.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ttypes.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/gen/zipkincore/ttypes.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/zipkincore/ttypes.py diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/version.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py similarity index 100% rename from exporter/opentelemetry-exporter-jaeger/src/opentelemetry/ext/jaeger/version.py rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/__init__.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/metrics_exporter/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/metrics_exporter/__init__.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/trace_exporter/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/trace_exporter/__init__.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/util.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/util.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/util.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/util.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/version.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/version.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/ext/opencensusexporter/version.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/version.py diff --git a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md index 54c09948828..12c79e064e7 100644 --- a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md @@ -4,7 +4,7 @@ - Update span exporter to use OpenTelemetry Proto v0.4.0 ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/889)) - Change package name to opentelemetry-exporter-otlp - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) ## 0.9b0 diff --git a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/__init__.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py diff --git a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py diff --git a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/version.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py similarity index 100% rename from exporter/opentelemetry-exporter-otlp/src/opentelemetry/ext/otlp/version.py rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py diff --git a/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md index 8b6a43594f8..5c978d394d4 100644 --- a/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-exporter-prometheus - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) ## 0.4a0 diff --git a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/__init__.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/__init__.py rename to exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py diff --git a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/version.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py similarity index 100% rename from exporter/opentelemetry-exporter-prometheus/src/opentelemetry/ext/prometheus/version.py rename to exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py diff --git a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/__init__.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/__init__.py rename to exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py diff --git a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/version.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py similarity index 100% rename from exporter/opentelemetry-exporter-zipkin/src/opentelemetry/ext/zipkin/version.py rename to exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py From 084ea18e209280ee2dd6d41fffe013e275c3410f Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 13:00:12 -0700 Subject: [PATCH 05/35] black --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5911dc4e9f5..db4df73b69e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ exclude = ''' ( /( # generated files docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen| - ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen| + exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen| opentelemetry-proto/src/opentelemetry/proto/collector| opentelemetry-proto/src/opentelemetry/proto/common| opentelemetry-proto/src/opentelemetry/proto/metrics| From 5154b72eb3d0266135efbaad2af73e7ed322290b Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 13:43:45 -0700 Subject: [PATCH 06/35] fix --- docs/exporter/cloud_monitoring/cloud_monitoring.rst | 7 ------- docs/exporter/cloud_trace/cloud_trace.rst | 7 ------- exporter/opentelemetry-exporter-datadog/setup.py | 2 +- exporter/opentelemetry-exporter-jaeger/setup.py | 2 +- exporter/opentelemetry-exporter-opencensus/setup.py | 2 +- .../{opencensusexporter => opencensus}/__init__.py | 0 .../metrics_exporter/__init__.py | 0 .../trace_exporter/__init__.py | 0 .../exporter/{opencensusexporter => opencensus}/util.py | 0 .../exporter/{opencensusexporter => opencensus}/version.py | 0 exporter/opentelemetry-exporter-otlp/setup.py | 2 +- exporter/opentelemetry-exporter-prometheus/setup.py | 2 +- exporter/opentelemetry-exporter-zipkin/setup.py | 2 +- ext/opentelemetry-ext-aiohttp-client/setup.cfg | 2 +- ext/opentelemetry-ext-elasticsearch/setup.cfg | 2 +- ext/opentelemetry-ext-jinja2/setup.cfg | 2 +- ext/opentelemetry-ext-mysql/setup.cfg | 2 +- ext/opentelemetry-ext-psycopg2/setup.cfg | 2 +- ext/opentelemetry-ext-pymemcache/setup.cfg | 2 +- ext/opentelemetry-ext-pymongo/setup.cfg | 2 +- ext/opentelemetry-ext-pymysql/setup.cfg | 2 +- ext/opentelemetry-ext-pyramid/setup.cfg | 2 +- ext/opentelemetry-ext-requests/setup.cfg | 2 +- ext/opentelemetry-ext-sqlite3/setup.cfg | 2 +- 24 files changed, 17 insertions(+), 31 deletions(-) delete mode 100644 docs/exporter/cloud_monitoring/cloud_monitoring.rst delete mode 100644 docs/exporter/cloud_trace/cloud_trace.rst rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/{opencensusexporter => opencensus}/__init__.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/{opencensusexporter => opencensus}/metrics_exporter/__init__.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/{opencensusexporter => opencensus}/trace_exporter/__init__.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/{opencensusexporter => opencensus}/util.py (100%) rename exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/{opencensusexporter => opencensus}/version.py (100%) diff --git a/docs/exporter/cloud_monitoring/cloud_monitoring.rst b/docs/exporter/cloud_monitoring/cloud_monitoring.rst deleted file mode 100644 index a3a4f5660ad..00000000000 --- a/docs/exporter/cloud_monitoring/cloud_monitoring.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry Cloud Monitoring Exporter -======================================= - -.. automodule:: opentelemetry.exporter.cloud_monitoring - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/exporter/cloud_trace/cloud_trace.rst b/docs/exporter/cloud_trace/cloud_trace.rst deleted file mode 100644 index 5914b00d1a4..00000000000 --- a/docs/exporter/cloud_trace/cloud_trace.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry Cloud Trace Exporter -================================== - -.. automodule:: opentelemetry.exporter.cloud_trace - :members: - :undoc-members: - :show-inheritance: diff --git a/exporter/opentelemetry-exporter-datadog/setup.py b/exporter/opentelemetry-exporter-datadog/setup.py index f6573911046..0c3bdf453fd 100644 --- a/exporter/opentelemetry-exporter-datadog/setup.py +++ b/exporter/opentelemetry-exporter-datadog/setup.py @@ -18,7 +18,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "datadog", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "datadog", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/exporter/opentelemetry-exporter-jaeger/setup.py b/exporter/opentelemetry-exporter-jaeger/setup.py index 842a6f6416b..1bd39703297 100644 --- a/exporter/opentelemetry-exporter-jaeger/setup.py +++ b/exporter/opentelemetry-exporter-jaeger/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "jaeger", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "jaeger", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/exporter/opentelemetry-exporter-opencensus/setup.py b/exporter/opentelemetry-exporter-opencensus/setup.py index dfb8fd82bff..65c91aba9ff 100644 --- a/exporter/opentelemetry-exporter-opencensus/setup.py +++ b/exporter/opentelemetry-exporter-opencensus/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "opencensusexporter", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "opencensus", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/__init__.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/metrics_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/metrics_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/trace_exporter/__init__.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/util.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/util.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/version.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py similarity index 100% rename from exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensusexporter/version.py rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py diff --git a/exporter/opentelemetry-exporter-otlp/setup.py b/exporter/opentelemetry-exporter-otlp/setup.py index 64c30afbaba..c04c30fca48 100644 --- a/exporter/opentelemetry-exporter-otlp/setup.py +++ b/exporter/opentelemetry-exporter-otlp/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "otlp", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "otlp", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/exporter/opentelemetry-exporter-prometheus/setup.py b/exporter/opentelemetry-exporter-prometheus/setup.py index 0276cd66554..86067a2bd56 100644 --- a/exporter/opentelemetry-exporter-prometheus/setup.py +++ b/exporter/opentelemetry-exporter-prometheus/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "prometheus", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "prometheus", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/exporter/opentelemetry-exporter-zipkin/setup.py b/exporter/opentelemetry-exporter-zipkin/setup.py index a01df70c9d0..9822805d9dc 100644 --- a/exporter/opentelemetry-exporter-zipkin/setup.py +++ b/exporter/opentelemetry-exporter-zipkin/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "zipkin", "version.py" + BASE_DIR, "src", "opentelemetry", "exporter", "zipkin", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/ext/opentelemetry-ext-aiohttp-client/setup.cfg index fbdce437aea..157b6918033 100644 --- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg +++ b/ext/opentelemetry-ext-aiohttp-client/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-aiohttp-client -description = OpenTelemetry aiohttp client instrumentation +description = OpenTelemetry aiohttp client integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/ext/opentelemetry-ext-elasticsearch/setup.cfg index 42c80e299b9..40f3b392b4d 100644 --- a/ext/opentelemetry-ext-elasticsearch/setup.cfg +++ b/ext/opentelemetry-ext-elasticsearch/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-elasticsearch -description = OpenTelemetry elasticsearch instrumentation +description = OpenTelemetry elasticsearch integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/ext/opentelemetry-ext-jinja2/setup.cfg index 10541241ebf..54a7515150f 100644 --- a/ext/opentelemetry-ext-jinja2/setup.cfg +++ b/ext/opentelemetry-ext-jinja2/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-jinja2 -description = OpenTelemetry jinja2 instrumentation +description = OpenTelemetry jinja2 integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg index 99a8374e75d..ceb985e8b41 100644 --- a/ext/opentelemetry-ext-mysql/setup.cfg +++ b/ext/opentelemetry-ext-mysql/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-mysql -description = OpenTelemetry MySQL instrumentation +description = OpenTelemetry MySQL integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/ext/opentelemetry-ext-psycopg2/setup.cfg index 78ee1b147a5..bb0fd9a57c4 100644 --- a/ext/opentelemetry-ext-psycopg2/setup.cfg +++ b/ext/opentelemetry-ext-psycopg2/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-psycopg2 -description = OpenTelemetry psycopg2 instrumentation +description = OpenTelemetry psycopg2 integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/ext/opentelemetry-ext-pymemcache/setup.cfg index f6fcc0f70f9..c2252274b1f 100644 --- a/ext/opentelemetry-ext-pymemcache/setup.cfg +++ b/ext/opentelemetry-ext-pymemcache/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pymemcache -description = OpenTelemetry pymemcache instrumentation +description = OpenTelemetry pymemcache integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/ext/opentelemetry-ext-pymongo/setup.cfg index c2055f65ced..5e08d987763 100644 --- a/ext/opentelemetry-ext-pymongo/setup.cfg +++ b/ext/opentelemetry-ext-pymongo/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pymongo -description = OpenTelemetry pymongo instrumentation +description = OpenTelemetry pymongo integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/ext/opentelemetry-ext-pymysql/setup.cfg index dedebed1ede..db28ef9581e 100644 --- a/ext/opentelemetry-ext-pymysql/setup.cfg +++ b/ext/opentelemetry-ext-pymysql/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pymysql -description = OpenTelemetry PyMySQL instrumentation +description = OpenTelemetry PyMySQL integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/ext/opentelemetry-ext-pyramid/setup.cfg index 3350a0c6c9d..bcdf850e87c 100644 --- a/ext/opentelemetry-ext-pyramid/setup.cfg +++ b/ext/opentelemetry-ext-pyramid/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-pyramid -description = OpenTelemetry Pyramid instrumentation +description = OpenTelemetry Pyramid integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/ext/opentelemetry-ext-requests/setup.cfg index 3d3f9f19189..714a1b3231a 100644 --- a/ext/opentelemetry-ext-requests/setup.cfg +++ b/ext/opentelemetry-ext-requests/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-requests -description = OpenTelemetry requests instrumentation +description = OpenTelemetry requests integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/ext/opentelemetry-ext-sqlite3/setup.cfg index 6eff4b1e688..95f60988eab 100644 --- a/ext/opentelemetry-ext-sqlite3/setup.cfg +++ b/ext/opentelemetry-ext-sqlite3/setup.cfg @@ -14,7 +14,7 @@ # [metadata] name = opentelemetry-ext-sqlite3 -description = OpenTelemetry SQLite3 instrumentation +description = OpenTelemetry SQLite3 integration long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors From 1472931e9899dbed6f4a62f561d132a8d3504a1b Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 14:01:00 -0700 Subject: [PATCH 07/35] rename --- docs/examples/opencensus-exporter-metrics/collector.py | 2 +- docs/examples/opencensus-exporter-tracer/collector.py | 2 +- docs/examples/opentracing/main.py | 2 +- docs/getting_started/prometheus_example.py | 2 +- .../src/opentelemetry/exporter/jaeger/__init__.py | 4 ++-- .../tests/test_jaeger_exporter.py | 4 ++-- .../exporter/opencensus/metrics_exporter/__init__.py | 2 +- .../exporter/opencensus/trace_exporter/__init__.py | 2 +- .../src/opentelemetry/exporter/opencensus/util.py | 2 +- .../tests/test_otcollector_metrics_exporter.py | 4 ++-- .../tests/test_otcollector_trace_exporter.py | 6 +++--- .../src/opentelemetry/exporter/otlp/__init__.py | 2 +- .../tests/test_otlp_trace_exporter.py | 10 +++++----- .../src/opentelemetry/exporter/prometheus/__init__.py | 2 +- .../tests/test_prometheus_exporter.py | 4 ++-- .../tests/test_zipkin_exporter.py | 2 +- .../opencensus/test_opencensusexporter_functional.py | 2 +- 17 files changed, 27 insertions(+), 27 deletions(-) diff --git a/docs/examples/opencensus-exporter-metrics/collector.py b/docs/examples/opencensus-exporter-metrics/collector.py index 725f07b77ab..dc39f0cf4cd 100644 --- a/docs/examples/opencensus-exporter-metrics/collector.py +++ b/docs/examples/opencensus-exporter-metrics/collector.py @@ -17,7 +17,7 @@ """ from opentelemetry import metrics -from opentelemetry.ext.opencensusexporter.metrics_exporter import ( +from opentelemetry.exporter.opencensus.metrics_exporter import ( OpenCensusMetricsExporter, ) from opentelemetry.sdk.metrics import Counter, MeterProvider diff --git a/docs/examples/opencensus-exporter-tracer/collector.py b/docs/examples/opencensus-exporter-tracer/collector.py index 3f0c18aaf75..d404cfbce5f 100644 --- a/docs/examples/opencensus-exporter-tracer/collector.py +++ b/docs/examples/opencensus-exporter-tracer/collector.py @@ -15,7 +15,7 @@ # limitations under the License. from opentelemetry import trace -from opentelemetry.ext.opencensusexporter.trace_exporter import ( +from opentelemetry.exporter.opencensus.trace_exporter import ( OpenCensusSpanExporter, ) from opentelemetry.sdk.trace import TracerProvider diff --git a/docs/examples/opentracing/main.py b/docs/examples/opentracing/main.py index 8586e0b789e..83cc8f86918 100755 --- a/docs/examples/opentracing/main.py +++ b/docs/examples/opentracing/main.py @@ -2,7 +2,7 @@ from opentelemetry import trace from opentelemetry.ext import opentracing_shim -from opentelemetry.ext.jaeger import JaegerSpanExporter +from opentelemetry.exporter.jaeger import JaegerSpanExporter from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor from rediscache import RedisCache diff --git a/docs/getting_started/prometheus_example.py b/docs/getting_started/prometheus_example.py index ce658d3419f..0377e570b86 100644 --- a/docs/getting_started/prometheus_example.py +++ b/docs/getting_started/prometheus_example.py @@ -19,7 +19,7 @@ from prometheus_client import start_http_server from opentelemetry import metrics -from opentelemetry.ext.prometheus import PrometheusMetricsExporter +from opentelemetry.exporter.prometheus import PrometheusMetricsExporter from opentelemetry.sdk.metrics import Counter, MeterProvider from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter from opentelemetry.sdk.metrics.export.controller import PushController diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py index f12031d510b..d9780a67432 100644 --- a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py +++ b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py @@ -69,8 +69,8 @@ from thrift.transport import THttpClient, TTransport import opentelemetry.trace as trace_api -from opentelemetry.ext.jaeger.gen.agent import Agent as agent -from opentelemetry.ext.jaeger.gen.jaeger import Collector as jaeger +from opentelemetry.exporter.jaeger.gen.agent import Agent as agent +from opentelemetry.exporter.jaeger.gen.jaeger import Collector as jaeger from opentelemetry.sdk.trace.export import Span, SpanExporter, SpanExportResult from opentelemetry.trace.status import StatusCanonicalCode diff --git a/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py b/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py index 7bca8e83178..30b7c85826a 100644 --- a/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py +++ b/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py @@ -18,9 +18,9 @@ # pylint:disable=no-name-in-module # pylint:disable=import-error -import opentelemetry.ext.jaeger as jaeger_exporter +import opentelemetry.exporter.jaeger as jaeger_exporter from opentelemetry import trace as trace_api -from opentelemetry.ext.jaeger.gen.jaeger import ttypes as jaeger +from opentelemetry.exporter.jaeger.gen.jaeger import ttypes as jaeger from opentelemetry.sdk import trace from opentelemetry.sdk.trace import Resource from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py index bb1a1ee888c..e83e779df67 100644 --- a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py +++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py @@ -24,7 +24,7 @@ ) from opencensus.proto.metrics.v1 import metrics_pb2 -import opentelemetry.ext.opencensusexporter.util as utils +import opentelemetry.exporter.opencensus.util as utils from opentelemetry.sdk.metrics import Counter, Metric from opentelemetry.sdk.metrics.export import ( MetricRecord, diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py index adadef1666f..e5eb4eaf770 100644 --- a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py +++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py @@ -24,7 +24,7 @@ ) from opencensus.proto.trace.v1 import trace_pb2 -import opentelemetry.ext.opencensusexporter.util as utils +import opentelemetry.exporter.opencensus.util as utils from opentelemetry.sdk.trace import Span from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py index 88ff6258f7d..9b9e7201906 100644 --- a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py +++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py @@ -21,7 +21,7 @@ from opencensus.proto.agent.common.v1 import common_pb2 from opencensus.proto.trace.v1 import trace_pb2 -from opentelemetry.ext.opencensusexporter.version import ( +from opentelemetry.exporter.opencensus.version import ( __version__ as opencensusexporter_exporter_version, ) from opentelemetry.trace import SpanKind diff --git a/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py index f538e5acecd..eddaf963608 100644 --- a/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py +++ b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py @@ -20,7 +20,7 @@ from opencensus.proto.metrics.v1 import metrics_pb2 from opentelemetry import metrics -from opentelemetry.ext.opencensusexporter import metrics_exporter +from opentelemetry.exporter.opencensus import metrics_exporter from opentelemetry.sdk.metrics import ( Counter, MeterProvider, @@ -47,7 +47,7 @@ def setUpClass(cls): def test_constructor(self): mock_get_node = mock.Mock() patch = mock.patch( - "opentelemetry.ext.opencensusexporter.util.get_node", + "opentelemetry.exporter.opencensus.util.get_node", side_effect=mock_get_node, ) service_name = "testServiceName" diff --git a/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py index 0801d6d0c1b..d07fd053b45 100644 --- a/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py +++ b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py @@ -19,9 +19,9 @@ from google.protobuf.timestamp_pb2 import Timestamp from opencensus.proto.trace.v1 import trace_pb2 -import opentelemetry.ext.opencensusexporter.util as utils +import opentelemetry.exporter.opencensus.util as utils from opentelemetry import trace as trace_api -from opentelemetry.ext.opencensusexporter.trace_exporter import ( +from opentelemetry.exporter.opencensus.trace_exporter import ( OpenCensusSpanExporter, translate_to_collector, ) @@ -35,7 +35,7 @@ class TestCollectorSpanExporter(unittest.TestCase): def test_constructor(self): mock_get_node = mock.Mock() patch = mock.patch( - "opentelemetry.ext.opencensusexporter.util.get_node", + "opentelemetry.exporter.opencensus.util.get_node", side_effect=mock_get_node, ) service_name = "testServiceName" diff --git a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py index 1b315c5847a..dca0042a68d 100644 --- a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py +++ b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py @@ -29,7 +29,7 @@ .. code:: python from opentelemetry import trace - from opentelemetry.ext.otlp.trace_exporter import OTLPSpanExporter + from opentelemetry.exporter.otlp.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.resources import Resource from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py b/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py index 3e7affb2213..c7e26508b25 100644 --- a/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py +++ b/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py @@ -21,7 +21,7 @@ from google.rpc.error_details_pb2 import RetryInfo from grpc import StatusCode, server -from opentelemetry.ext.otlp.trace_exporter import OTLPSpanExporter +from opentelemetry.exporter.otlp.trace_exporter import OTLPSpanExporter from opentelemetry.proto.collector.trace.v1.trace_service_pb2 import ( ExportTraceServiceRequest, ExportTraceServiceResponse, @@ -142,8 +142,8 @@ def setUp(self): def tearDown(self): self.server.stop(None) - @patch("opentelemetry.ext.otlp.trace_exporter.expo") - @patch("opentelemetry.ext.otlp.trace_exporter.sleep") + @patch("opentelemetry.exporter.otlp.trace_exporter.expo") + @patch("opentelemetry.exporter.otlp.trace_exporter.sleep") def test_unavailable(self, mock_sleep, mock_expo): mock_expo.configure_mock(**{"return_value": [1]}) @@ -156,8 +156,8 @@ def test_unavailable(self, mock_sleep, mock_expo): ) mock_sleep.assert_called_with(1) - @patch("opentelemetry.ext.otlp.trace_exporter.expo") - @patch("opentelemetry.ext.otlp.trace_exporter.sleep") + @patch("opentelemetry.exporter.otlp.trace_exporter.expo") + @patch("opentelemetry.exporter.otlp.trace_exporter.sleep") def test_unavailable_delay(self, mock_sleep, mock_expo): mock_expo.configure_mock(**{"return_value": [1]}) diff --git a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py index da22042dcc5..e03c23a99e1 100644 --- a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py +++ b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py @@ -27,7 +27,7 @@ .. code:: python from opentelemetry import metrics - from opentelemetry.ext.prometheus import PrometheusMetricsExporter + from opentelemetry.exporter.prometheus import PrometheusMetricsExporter from opentelemetry.sdk.metrics import Counter, Meter from prometheus_client import start_http_server diff --git a/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py index 2ba6b701215..d624086ce3c 100644 --- a/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py +++ b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py @@ -17,7 +17,7 @@ from prometheus_client.core import CounterMetricFamily -from opentelemetry.ext.prometheus import ( +from opentelemetry.exporter.prometheus import ( CustomCollector, PrometheusMetricsExporter, ) @@ -122,7 +122,7 @@ def test_invalid_metric(self): collector = CustomCollector("testprefix") collector.add_metrics_data([record]) collector.collect() - self.assertLogs("opentelemetry.ext.prometheus", level="WARNING") + self.assertLogs("opentelemetry.exporter.prometheus", level="WARNING") def test_sanitize(self): collector = CustomCollector("testprefix") diff --git a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py index 1f2d53d3048..9f6da2e240f 100644 --- a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py +++ b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py @@ -17,7 +17,7 @@ from unittest.mock import MagicMock, patch from opentelemetry import trace as trace_api -from opentelemetry.ext.zipkin import ZipkinSpanExporter +from opentelemetry.exporter.zipkin import ZipkinSpanExporter from opentelemetry.sdk import trace from opentelemetry.sdk.trace import Resource from opentelemetry.sdk.trace.export import SpanExportResult diff --git a/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py b/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py index af0f049bb02..c7948917834 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py @@ -14,7 +14,7 @@ from opentelemetry import trace from opentelemetry.context import attach, detach, set_value -from opentelemetry.ext.opencensusexporter.trace_exporter import ( +from opentelemetry.exporter.opencensus.trace_exporter import ( OpenCensusSpanExporter, ) from opentelemetry.sdk.trace import TracerProvider From aaf24e57d87c2cafdbd008c66ea3c77e111f75b7 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 14:17:49 -0700 Subject: [PATCH 08/35] lint --- docs/examples/opentracing/main.py | 2 +- docs/getting_started/jaeger_example.py | 2 +- .../tests/test_datadog_exporter.py | 2 +- .../examples/jaeger_exporter_example.py | 2 +- .../src/opentelemetry/exporter/jaeger/__init__.py | 2 +- .../src/opentelemetry/exporter/zipkin/__init__.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/examples/opentracing/main.py b/docs/examples/opentracing/main.py index 83cc8f86918..9ecbbba8ca4 100755 --- a/docs/examples/opentracing/main.py +++ b/docs/examples/opentracing/main.py @@ -1,8 +1,8 @@ #!/usr/bin/env python from opentelemetry import trace -from opentelemetry.ext import opentracing_shim from opentelemetry.exporter.jaeger import JaegerSpanExporter +from opentelemetry.ext import opentracing_shim from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor from rediscache import RedisCache diff --git a/docs/getting_started/jaeger_example.py b/docs/getting_started/jaeger_example.py index 8ddb4a0586d..f9c8e5cd059 100644 --- a/docs/getting_started/jaeger_example.py +++ b/docs/getting_started/jaeger_example.py @@ -14,7 +14,7 @@ # jaeger_example.py from opentelemetry import trace -from opentelemetry.ext import jaeger +from opentelemetry.exporter import jaeger from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py index 5306d517b76..a3e67790d97 100644 --- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py @@ -21,7 +21,7 @@ from ddtrace.internal.writer import AgentWriter from opentelemetry import trace as trace_api -from opentelemetry.ext import datadog +from opentelemetry.exporter import datadog from opentelemetry.sdk import trace from opentelemetry.sdk.util.instrumentation import InstrumentationInfo diff --git a/exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py b/exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py index 1aca62fc23f..68453fd9fac 100644 --- a/exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py +++ b/exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py @@ -1,7 +1,7 @@ import time from opentelemetry import trace -from opentelemetry.ext import jaeger +from opentelemetry.exporter import jaeger from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py index d9780a67432..993bf4f0872 100644 --- a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py +++ b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py @@ -25,7 +25,7 @@ .. code:: python from opentelemetry import trace - from opentelemetry.ext import jaeger + from opentelemetry.exporter import jaeger from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor diff --git a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py index 8a487290ce1..10bd6e93e97 100644 --- a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py +++ b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py @@ -28,7 +28,7 @@ .. code:: python from opentelemetry import trace - from opentelemetry.ext import zipkin + from opentelemetry.exporter import zipkin from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchExportSpanProcessor From 7a30143fb1c3cbf2a28ed1d32edf2d815466811e Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 14:30:01 -0700 Subject: [PATCH 09/35] datadog --- docs/examples/datadog_exporter/basic_example.py | 2 +- docs/examples/datadog_exporter/client.py | 2 +- docs/examples/datadog_exporter/server.py | 4 ++-- .../src/opentelemetry/exporter/datadog/__init__.py | 4 ++-- .../tests/test_datadog_format.py | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/examples/datadog_exporter/basic_example.py b/docs/examples/datadog_exporter/basic_example.py index a41f9e0462c..5eb470719b7 100644 --- a/docs/examples/datadog_exporter/basic_example.py +++ b/docs/examples/datadog_exporter/basic_example.py @@ -15,7 +15,7 @@ # limitations under the License. from opentelemetry import trace -from opentelemetry.ext.datadog import ( +from opentelemetry.exporter.datadog import ( DatadogExportSpanProcessor, DatadogSpanExporter, ) diff --git a/docs/examples/datadog_exporter/client.py b/docs/examples/datadog_exporter/client.py index 3969ef04d9a..2570c426d5f 100644 --- a/docs/examples/datadog_exporter/client.py +++ b/docs/examples/datadog_exporter/client.py @@ -17,7 +17,7 @@ from requests import get from opentelemetry import propagators, trace -from opentelemetry.ext.datadog import ( +from opentelemetry.exporter.datadog import ( DatadogExportSpanProcessor, DatadogSpanExporter, ) diff --git a/docs/examples/datadog_exporter/server.py b/docs/examples/datadog_exporter/server.py index e2099fdf25c..15d10f34934 100644 --- a/docs/examples/datadog_exporter/server.py +++ b/docs/examples/datadog_exporter/server.py @@ -15,11 +15,11 @@ from flask import Flask, request from opentelemetry import propagators, trace -from opentelemetry.ext.datadog import ( +from opentelemetry.exporter.datadog import ( DatadogExportSpanProcessor, DatadogSpanExporter, ) -from opentelemetry.ext.datadog.propagator import DatadogFormat +from opentelemetry.exporter.datadog.propagator import DatadogFormat from opentelemetry.sdk.trace import TracerProvider app = Flask(__name__) diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py index 85bdaea40aa..7adde5df500 100644 --- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py +++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py @@ -35,8 +35,8 @@ .. code:: python from opentelemetry import propagators, trace - from opentelemetry.ext.datadog import DatadogExportSpanProcessor, DatadogSpanExporter - from opentelemetry.ext.datadog.propagator import DatadogFormat + from opentelemetry.exporter.datadog import DatadogExportSpanProcessor, DatadogSpanExporter + from opentelemetry.exporter.datadog.propagator import DatadogFormat from opentelemetry.sdk.trace import TracerProvider trace.set_tracer_provider(TracerProvider()) diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py index 31633f83701..1a398745b8d 100644 --- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py @@ -15,7 +15,7 @@ import unittest from opentelemetry import trace as trace_api -from opentelemetry.ext.datadog import constants, propagator +from opentelemetry.exporter.datadog import constants, propagator from opentelemetry.sdk import trace from opentelemetry.trace import get_current_span, set_span_in_context From 5249771ea109334ea026e1e1d45688dbe9240899 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 14:48:29 -0700 Subject: [PATCH 10/35] flake --- .flake8 | 4 ++-- docs/conf.py | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.flake8 b/.flake8 index 8555d626c6f..5ab69e53e0a 100644 --- a/.flake8 +++ b/.flake8 @@ -16,8 +16,8 @@ exclude = venv*/ target __pycache__ - ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/ - ext/opentelemetry-ext-jaeger/build/* + exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/ + exporter/opentelemetry-ext-jaeger/build/* docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen/ docs/examples/opentelemetry-example-app/build/* opentelemetry-proto/build/* diff --git a/docs/conf.py b/docs/conf.py index 74ae754c60c..d3af10b7d66 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -30,13 +30,20 @@ os.path.abspath("../opentelemetry-instrumentation/src/"), ] +exp = "../exporter" +exp_dirs = [ + os.path.abspath("/".join(["../exporter", f, "src"])) + for f in listdir(exp) + if isdir(join(exp, f)) +] + ext = "../ext" ext_dirs = [ os.path.abspath("/".join(["../ext", f, "src"])) for f in listdir(ext) if isdir(join(ext, f)) ] -sys.path[:0] = source_dirs + ext_dirs +sys.path[:0] = source_dirs + exp_dirs + ext_dirs # -- Project information ----------------------------------------------------- From fb9e3db2dc36fbf941a2d1b60f5595f3afecac5c Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 15:07:44 -0700 Subject: [PATCH 11/35] toctree --- docs/index.rst | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index b25efa8acc6..b59af3a003c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -72,8 +72,16 @@ install .. toctree:: :maxdepth: 2 - :caption: OpenTelemetry Integrations - :name: integrations + :caption: OpenTelemetry Exporters + :name: exporters + :glob: + + exporter/** + +.. toctree:: + :maxdepth: 2 + :caption: OpenTelemetry Instrumentations + :name: Instrumentations :glob: ext/** From c1da72db4f6f8719c5078e523b34d89be4268f00 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Tue, 28 Jul 2020 15:23:51 -0700 Subject: [PATCH 12/35] docs --- docs/examples/cloud_monitoring/README.rst | 48 ----------- .../cloud_monitoring/basic_metrics.py | 43 ---------- docs/examples/cloud_trace_exporter/README.rst | 79 ------------------- .../cloud_trace_exporter/basic_trace.py | 14 ---- .../opencensus-exporter-metrics/README.rst | 4 +- .../opencensus-exporter-tracer/README.rst | 4 +- 6 files changed, 4 insertions(+), 188 deletions(-) delete mode 100644 docs/examples/cloud_monitoring/README.rst delete mode 100644 docs/examples/cloud_monitoring/basic_metrics.py delete mode 100644 docs/examples/cloud_trace_exporter/README.rst delete mode 100644 docs/examples/cloud_trace_exporter/basic_trace.py diff --git a/docs/examples/cloud_monitoring/README.rst b/docs/examples/cloud_monitoring/README.rst deleted file mode 100644 index 818446dc157..00000000000 --- a/docs/examples/cloud_monitoring/README.rst +++ /dev/null @@ -1,48 +0,0 @@ -Cloud Monitoring Exporter Example -================================= - -These examples show how to use OpenTelemetry to send metrics data to Cloud Monitoring. - - -Basic Example -------------- - -To use this exporter you first need to: - * `Create a Google Cloud project `_. - * Enable the Cloud Monitoring API (aka Stackdriver Monitoring API) in the project `here `_. - * Enable `Default Application Credentials `_. - -* Installation - -.. code-block:: sh - - pip install opentelemetry-api - pip install opentelemetry-sdk - pip install opentelemetry-exporter-cloud-monitoring - -* Run example - -.. literalinclude:: basic_metrics.py - :language: python - :lines: 1- - -Viewing Output --------------------------- - -After running the example: - * Go to the `Cloud Monitoring Metrics Explorer page `_. - * In "Find resource type and metric" enter "OpenTelemetry/request_counter". - * You can filter by labels and change the graphical output here as well. - -Troubleshooting --------------------------- - -``One or more points were written more frequently than the maximum sampling period configured for the metric`` -############################################################################################################## - -Currently, Cloud Monitoring allows one write every 10 seconds for any unique tuple (metric_name, metric_label_value_1, metric_label_value_2, ...). The exporter should rate limit on its own but issues arise if: - - * You are restarting the server more than once every 10 seconds. - * You have a multiple exporters (possibly on different threads) writing to the same tuple. - -For both cases, you can pass ``add_unique_identifier=True`` to the CloudMonitoringMetricsExporter constructor. This adds a UUID label_value, making the tuple unique again. For the first case, you can also choose to just wait longer than 10 seconds between restarts. diff --git a/docs/examples/cloud_monitoring/basic_metrics.py b/docs/examples/cloud_monitoring/basic_metrics.py deleted file mode 100644 index fa00fc068b6..00000000000 --- a/docs/examples/cloud_monitoring/basic_metrics.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -# 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 time - -from opentelemetry import metrics -from opentelemetry.exporter.cloud_monitoring import ( - CloudMonitoringMetricsExporter, -) -from opentelemetry.sdk.metrics import Counter, MeterProvider - -metrics.set_meter_provider(MeterProvider()) -meter = metrics.get_meter(__name__) -metrics.get_meter_provider().start_pipeline( - meter, CloudMonitoringMetricsExporter(), 5 -) - -requests_counter = meter.create_metric( - name="request_counter", - description="number of requests", - unit="1", - value_type=int, - metric_type=Counter, - label_keys=("environment"), -) - -staging_labels = {"environment": "staging"} - -for i in range(20): - requests_counter.add(25, staging_labels) - time.sleep(10) diff --git a/docs/examples/cloud_trace_exporter/README.rst b/docs/examples/cloud_trace_exporter/README.rst deleted file mode 100644 index 65674759b61..00000000000 --- a/docs/examples/cloud_trace_exporter/README.rst +++ /dev/null @@ -1,79 +0,0 @@ -Cloud Trace Exporter Example -============================ - -These examples show how to use OpenTelemetry to send tracing data to Cloud Trace. - - -Basic Example -------------- - -To use this exporter you first need to: - * A Google Cloud project. You can `create one here `_. - * Enable Cloud Trace API (listed in the Cloud Console as Stackdriver Trace API) in the project `here `_. - * If the page says "API Enabled" then you're done! No need to do anything. - * Enable Default Application Credentials by creating setting `GOOGLE_APPLICATION_CREDENTIALS `_ or by `installing gcloud sdk `_ and calling ``gcloud auth application-default login``. - -* Installation - -.. code-block:: sh - - pip install opentelemetry-api - pip install opentelemetry-sdk - pip install opentelemetry-exporter-cloud-trace - -* Run an example locally - -.. literalinclude:: basic_trace.py - :language: python - :lines: 1- - -Checking Output --------------------------- - -After running any of these examples, you can go to `Cloud Trace overview `_ to see the results. - - -Further Reading --------------------------- - -* `More information about exporters in general `_ - -Troubleshooting --------------------------- - -Running basic_trace.py hangs: -############################# - * Make sure you've setup Application Default Credentials. Either run ``gcloud auth application-default login`` or set the ``GOOGLE_APPLICATION_CREDENTIALS`` environment variable to be a path to a service account token file. - -Getting error ``google.api_core.exceptions.ResourceExhausted: 429 Resource has been exhausted``: -################################################################################################ - * Check that you've enabled the `Cloud Trace (Stackdriver Trace) API `_ - -bash: pip: command not found: -############################# - * `Install pip `_ - * If your machine uses python2 by default, pip will also be the python2 version. Try using ``pip3`` instead of ``pip``. - -pip install is hanging -###################### -Try upgrading pip - -.. code-block:: sh - - pip install --upgrade pip - -``pip install grcpio`` has been known to hang when you aren't using an upgraded version. - -ImportError: No module named opentelemetry -########################################## -Make sure you are using python3. If - -.. code-block:: sh - - python --version - -returns ``Python 2.X.X`` try calling - -.. code-block:: sh - - python3 basic_trace.py diff --git a/docs/examples/cloud_trace_exporter/basic_trace.py b/docs/examples/cloud_trace_exporter/basic_trace.py deleted file mode 100644 index 76840a291ec..00000000000 --- a/docs/examples/cloud_trace_exporter/basic_trace.py +++ /dev/null @@ -1,14 +0,0 @@ -from opentelemetry import trace -from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter -from opentelemetry.sdk.trace import TracerProvider -from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor - -trace.set_tracer_provider(TracerProvider()) - -cloud_trace_exporter = CloudTraceSpanExporter() -trace.get_tracer_provider().add_span_processor( - SimpleExportSpanProcessor(cloud_trace_exporter) -) -tracer = trace.get_tracer(__name__) -with tracer.start_as_current_span("foo"): - print("Hello world!") diff --git a/docs/examples/opencensus-exporter-metrics/README.rst b/docs/examples/opencensus-exporter-metrics/README.rst index 30961e061df..0a71685ee9f 100644 --- a/docs/examples/opencensus-exporter-metrics/README.rst +++ b/docs/examples/opencensus-exporter-metrics/README.rst @@ -13,7 +13,7 @@ Installation pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-opencensusexporter + pip install opentelemetry-exporter-opencensus Run the Example --------------- @@ -46,7 +46,7 @@ Useful links - OpenTelemetry_ - `OpenTelemetry Collector`_ - :doc:`../../api/trace` -- :doc:`../../ext/opencensusexporter/opencensusexporter` +- :doc:`../../exporter/opencensus/opencensus` .. _OpenTelemetry: https://github.com/open-telemetry/opentelemetry-python/ .. _OpenTelemetry Collector: https://github.com/open-telemetry/opentelemetry-collector diff --git a/docs/examples/opencensus-exporter-tracer/README.rst b/docs/examples/opencensus-exporter-tracer/README.rst index 00199943086..d147f008d49 100644 --- a/docs/examples/opencensus-exporter-tracer/README.rst +++ b/docs/examples/opencensus-exporter-tracer/README.rst @@ -13,7 +13,7 @@ Installation pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-opencensusexporter + pip install opentelemetry-exporter-opencensus Run the Example --------------- @@ -45,7 +45,7 @@ Useful links - OpenTelemetry_ - `OpenTelemetry Collector`_ - :doc:`../../api/trace` -- :doc:`../../ext/opencensusexporter/opencensusexporter` +- :doc:`../../exporter/opencensus/opencensus` .. _OpenTelemetry: https://github.com/open-telemetry/opentelemetry-python/ .. _OpenTelemetry Collector: https://github.com/open-telemetry/opentelemetry-collector From 10e4314337f5d7b888779525ae63ec0eb0b598ef Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Wed, 29 Jul 2020 09:50:42 -0700 Subject: [PATCH 13/35] jaeger --- .flake8 | 2 +- .github/workflows/docs.yml | 1 + docs/examples/datadog_exporter/README.rst | 4 ++-- docs/examples/opentracing/requirements.txt | 2 +- exporter/opentelemetry-exporter-jaeger/setup.cfg | 4 ++-- exporter/opentelemetry-exporter-otlp/CHANGELOG.md | 5 +++-- 6 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.flake8 b/.flake8 index 5ab69e53e0a..2780677a643 100644 --- a/.flake8 +++ b/.flake8 @@ -17,7 +17,7 @@ exclude = target __pycache__ exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/gen/ - exporter/opentelemetry-ext-jaeger/build/* + exporter/opentelemetry-exporter-jaeger/build/* docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen/ docs/examples/opentelemetry-example-app/build/* opentelemetry-proto/build/* diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 59c825e7e28..1860c696a0c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -6,6 +6,7 @@ on: - master paths: - 'docs/**' + - 'exporter/**' - 'ext/**' - 'opentelemetry-python/opentelemetry-api/src/opentelemetry/**' - 'opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/**' diff --git a/docs/examples/datadog_exporter/README.rst b/docs/examples/datadog_exporter/README.rst index d851550b279..250eec2b84a 100644 --- a/docs/examples/datadog_exporter/README.rst +++ b/docs/examples/datadog_exporter/README.rst @@ -13,7 +13,7 @@ Basic Example pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-datadog + pip install opentelemetry-exporter-datadog * Start Datadog Agent @@ -48,7 +48,7 @@ Distributed Example pip install opentelemetry-api pip install opentelemetry-sdk - pip install opentelemetry-ext-datadog + pip install opentelemetry-exporter-datadog pip install opentelemetry-instrumentation pip install opentelemetry-ext-flask pip install flask diff --git a/docs/examples/opentracing/requirements.txt b/docs/examples/opentracing/requirements.txt index d87842f4d89..fa4b520936d 100644 --- a/docs/examples/opentracing/requirements.txt +++ b/docs/examples/opentracing/requirements.txt @@ -1,6 +1,6 @@ opentelemetry-api opentelemetry-sdk -opentelemetry-ext-jaeger +opentelemetry-exporter-jaeger opentelemetry-opentracing-shim redis redis_opentracing diff --git a/exporter/opentelemetry-exporter-jaeger/setup.cfg b/exporter/opentelemetry-exporter-jaeger/setup.cfg index fc581301b6f..b660e8ec1c1 100644 --- a/exporter/opentelemetry-exporter-jaeger/setup.cfg +++ b/exporter/opentelemetry-exporter-jaeger/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-jaeger +name = opentelemetry-exporter-jaeger description = Jaeger Exporter for OpenTelemetry long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-jaeger +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter/opentelemetry-exporter-jaeger platforms = any license = Apache-2.0 classifiers = diff --git a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md index 878e7a14bca..bcaa7d11811 100644 --- a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md +++ b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md @@ -2,13 +2,14 @@ ## Unreleased +- Change package name to opentelemetry-exporter-otlp + ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) + ## Version 0.11b0 Released 2020-07-28 - Update span exporter to use OpenTelemetry Proto v0.4.0 ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/889)) -- Change package name to opentelemetry-exporter-otlp - ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953)) ## 0.9b0 From f2d07a16dd477bc1a2fe9b5e2c83d75e66786a72 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 01:25:04 -0700 Subject: [PATCH 14/35] init --- docs-requirements.txt | 2 - eachdist.ini | 5 +- .../CHANGELOG.md | 9 ---- ext/opentelemetry-ext-wsgi/setup.py | 26 ---------- .../CHANGELOG.md | 12 +++++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 6 +-- .../setup.py | 2 +- .../aiohttp_client/__init__.py | 0 .../aiohttp_client/version.py | 0 .../tests/__init__.py | 0 .../tests/test_aiohttp_client_integration.py | 0 .../CHANGELOG.md | 0 .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 0 .../setup.py | 0 .../instrumentation/aiopg/__init__.py | 0 .../aiopg/aiopg_integration.py | 0 .../instrumentation/aiopg}/version.py | 0 .../instrumentation/aiopg/wrappers.py | 0 .../tests/__init__.py | 0 .../tests/test_aiopg_integration.py | 0 .../CHANGELOG.md | 3 ++ .../README.rst | 0 .../setup.cfg | 6 +-- .../setup.py | 2 +- .../instrumentation}/asgi/__init__.py | 0 .../instrumentation/asgi}/version.py | 0 .../tests/__init__.py | 0 .../tests/test_asgi_middleware.py | 0 .../CHANGELOG.md | 3 ++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 6 +-- .../setup.py | 2 +- .../instrumentation}/django/__init__.py | 0 .../instrumentation}/django/middleware.py | 0 .../instrumentation/django}/version.py | 0 .../tests/__init__.py | 0 .../tests/conftest.py | 0 .../tests/test_middleware.py | 0 .../tests/views.py | 0 .../CHANGELOG.md | 0 .../README.rst | 0 .../setup.cfg | 0 .../setup.py | 0 .../instrumentation/fastapi/__init__.py | 0 .../instrumentation/fastapi}/version.py | 0 .../tests/__init__.py | 0 .../tests/test_fastapi_instrumentation.py | 0 .../CHANGELOG.md | 3 ++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 6 +-- .../setup.py | 4 +- .../instrumentation}/flask/__init__.py | 0 .../instrumentation/flask}/version.py | 0 .../tests/__init__.py | 0 .../tests/base_test.py | 0 .../tests/test_automatic.py | 0 .../tests/test_programmatic.py | 0 .../CHANGELOG.md | 3 ++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 10 ++-- .../setup.py | 2 +- .../instrumentation}/grpc/__init__.py | 0 .../instrumentation}/grpc/_client.py | 0 .../instrumentation}/grpc/_server.py | 0 .../instrumentation}/grpc/_utilities.py | 0 .../instrumentation}/grpc/grpcext/__init__.py | 0 .../grpc/grpcext/_interceptor.py | 0 .../instrumentation/grpc}/version.py | 0 .../tests/__init__.py | 0 .../tests/_client.py | 0 .../tests/_server.py | 0 .../tests/protobuf/test_server.proto | 0 .../tests/protobuf/test_server_pb2.py | 0 .../tests/protobuf/test_server_pb2_grpc.py | 0 .../tests/test_client_interceptor.py | 0 .../tests/test_server_interceptor.py | 0 .../CHANGELOG.md | 0 .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 8 +-- .../setup.py | 2 +- .../instrumentation}/pyramid/__init__.py | 0 .../instrumentation}/pyramid/callbacks.py | 0 .../instrumentation/pyramid}/version.py | 0 .../tests/__init__.py | 0 .../tests/pyramid_base_test.py | 0 .../tests/test_automatic.py | 0 .../tests/test_programmatic.py | 0 .../CHANGELOG.md | 3 ++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 8 +-- .../setup.py | 26 ++++++++++ .../instrumentation}/requests/__init__.py | 0 .../instrumentation/requests}/version.py | 0 .../tests/__init__.py | 0 .../tests/test_requests_integration.py | 0 .../CHANGELOG.md | 0 .../README.rst | 0 .../setup.cfg | 0 .../setup.py | 0 .../instrumentation/starlette/__init__.py | 0 .../instrumentation/starlette}/version.py | 0 .../tests/__init__.py | 0 .../tests/test_starlette_instrumentation.py | 0 .../CHANGELOG.md | 3 ++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 0 .../setup.cfg | 4 +- .../setup.py | 2 +- .../instrumentation}/wsgi/__init__.py | 0 .../instrumentation/wsgi}/version.py | 0 .../tests/__init__.py | 0 .../tests/test_wsgi_middleware.py | 0 tox.ini | 52 +++++++++---------- 130 files changed, 120 insertions(+), 100 deletions(-) delete mode 100644 ext/opentelemetry-ext-aiohttp-client/CHANGELOG.md delete mode 100644 ext/opentelemetry-ext-wsgi/setup.py create mode 100644 instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md rename {ext/opentelemetry-ext-aiohttp-client => instrumentation/opentelemetry-instrumentation-aiohttp-client}/LICENSE (100%) rename {ext/opentelemetry-ext-aiohttp-client => instrumentation/opentelemetry-instrumentation-aiohttp-client}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-aiohttp-client => instrumentation/opentelemetry-instrumentation-aiohttp-client}/README.rst (100%) rename {ext/opentelemetry-ext-aiohttp-client => instrumentation/opentelemetry-instrumentation-aiohttp-client}/setup.cfg (86%) rename {ext/opentelemetry-ext-aiohttp-client => instrumentation/opentelemetry-instrumentation-aiohttp-client}/setup.py (90%) rename {ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation}/aiohttp_client/__init__.py (100%) rename {ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation}/aiohttp_client/version.py (100%) rename {ext/opentelemetry-ext-aiohttp-client => instrumentation/opentelemetry-instrumentation-aiohttp-client}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-aiohttp-client => instrumentation/opentelemetry-instrumentation-aiohttp-client}/tests/test_aiohttp_client_integration.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/CHANGELOG.md (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-aiopg}/LICENSE (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-aiopg}/MANIFEST.in (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/README.rst (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/setup.cfg (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/setup.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py (100%) rename {ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi => instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg}/version.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py (100%) rename {ext/opentelemetry-ext-asgi => instrumentation/opentelemetry-instrumentation-aiopg}/tests/__init__.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py (100%) rename {ext/opentelemetry-ext-asgi => instrumentation/opentelemetry-instrumentation-asgi}/CHANGELOG.md (53%) rename {ext/opentelemetry-ext-asgi => instrumentation/opentelemetry-instrumentation-asgi}/README.rst (100%) rename {ext/opentelemetry-ext-asgi => instrumentation/opentelemetry-instrumentation-asgi}/setup.cfg (87%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-asgi}/setup.py (91%) rename {ext/opentelemetry-ext-asgi/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation}/asgi/__init__.py (100%) rename {ext/opentelemetry-ext-django/src/opentelemetry/ext/django => instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi}/version.py (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-asgi}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-asgi => instrumentation/opentelemetry-instrumentation-asgi}/tests/test_asgi_middleware.py (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/CHANGELOG.md (76%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-django}/LICENSE (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-django}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/README.rst (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/setup.cfg (90%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/setup.py (97%) rename {ext/opentelemetry-ext-django/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation}/django/__init__.py (100%) rename {ext/opentelemetry-ext-django/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation}/django/middleware.py (100%) rename {ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask => instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django}/version.py (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-django}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/tests/conftest.py (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/tests/test_middleware.py (100%) rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/tests/views.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/CHANGELOG.md (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/README.rst (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/setup.cfg (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/setup.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py (100%) rename {ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc => instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi}/version.py (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-fastapi}/tests/__init__.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/CHANGELOG.md (83%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-flask}/LICENSE (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-flask}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/README.rst (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/setup.cfg (91%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/setup.py (85%) rename {ext/opentelemetry-ext-flask/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation}/flask/__init__.py (100%) rename {ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid => instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask}/version.py (100%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-flask}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/tests/base_test.py (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/tests/test_automatic.py (100%) rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/tests/test_programmatic.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/CHANGELOG.md (83%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-grpc}/LICENSE (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-grpc}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/README.rst (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/setup.cfg (84%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/setup.py (91%) rename {ext/opentelemetry-ext-grpc/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation}/grpc/__init__.py (100%) rename {ext/opentelemetry-ext-grpc/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation}/grpc/_client.py (100%) rename {ext/opentelemetry-ext-grpc/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation}/grpc/_server.py (100%) rename {ext/opentelemetry-ext-grpc/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation}/grpc/_utilities.py (100%) rename {ext/opentelemetry-ext-grpc/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation}/grpc/grpcext/__init__.py (100%) rename {ext/opentelemetry-ext-grpc/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation}/grpc/grpcext/_interceptor.py (100%) rename {ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc}/version.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/_client.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/_server.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/protobuf/test_server.proto (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/protobuf/test_server_pb2.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/protobuf/test_server_pb2_grpc.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/test_client_interceptor.py (100%) rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/test_server_interceptor.py (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/CHANGELOG.md (100%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-pyramid}/LICENSE (100%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-pyramid}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/README.rst (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/setup.cfg (88%) rename {ext/opentelemetry-ext-asgi => instrumentation/opentelemetry-instrumentation-pyramid}/setup.py (91%) rename {ext/opentelemetry-ext-pyramid/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation}/pyramid/__init__.py (100%) rename {ext/opentelemetry-ext-pyramid/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation}/pyramid/callbacks.py (100%) rename {ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi => instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid}/version.py (100%) rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-pyramid}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/tests/pyramid_base_test.py (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/tests/test_automatic.py (100%) rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/tests/test_programmatic.py (100%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-requests}/CHANGELOG.md (83%) rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-requests}/LICENSE (100%) rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-requests}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-requests}/README.rst (100%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-requests}/setup.cfg (87%) create mode 100644 instrumentation/opentelemetry-instrumentation-requests/setup.py rename {ext/opentelemetry-ext-requests/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation}/requests/__init__.py (100%) rename {ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg => instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests}/version.py (100%) rename {ext/opentelemetry-instrumentation-aiopg => instrumentation/opentelemetry-instrumentation-requests}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-requests}/tests/test_requests_integration.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/CHANGELOG.md (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/README.rst (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/setup.cfg (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/setup.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py (100%) rename {ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi => instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette}/version.py (100%) rename {ext/opentelemetry-instrumentation-fastapi => instrumentation/opentelemetry-instrumentation-starlette}/tests/__init__.py (100%) rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py (100%) rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-wsgi}/CHANGELOG.md (82%) rename {ext/opentelemetry-instrumentation-aiopg => instrumentation/opentelemetry-instrumentation-wsgi}/LICENSE (100%) rename {ext/opentelemetry-instrumentation-aiopg => instrumentation/opentelemetry-instrumentation-wsgi}/MANIFEST.in (100%) rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-wsgi}/README.rst (100%) rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-wsgi}/setup.cfg (94%) rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-wsgi}/setup.py (91%) rename {ext/opentelemetry-ext-wsgi/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation}/wsgi/__init__.py (100%) rename {ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette => instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi}/version.py (100%) rename {ext/opentelemetry-instrumentation-starlette => instrumentation/opentelemetry-instrumentation-wsgi}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-wsgi}/tests/test_wsgi_middleware.py (100%) diff --git a/docs-requirements.txt b/docs-requirements.txt index 10ecacb2fd8..31e0cf3581f 100644 --- a/docs-requirements.txt +++ b/docs-requirements.txt @@ -29,5 +29,3 @@ boto~=2.0 botocore~=1.0 starlette~=0.13 fastapi~=0.58.1 -opentelemetry-exporter-cloud-trace==0.10b0 -opentelemetry-exporter-cloud-monitoring==0.10b0 \ No newline at end of file diff --git a/eachdist.ini b/eachdist.ini index 82fc0271eda..c839dac060f 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -8,9 +8,10 @@ sortfirst= opentelemetry-proto tests/util exporter/* - ext/opentelemetry-ext-wsgi + instrumentation/* + instrumentation/opentelemetry-instrumentation-wsgi ext/opentelemetry-ext-dbapi - ext/opentelemetry-ext-asgi + instrumentation/opentelemetry-instrumentation-asgi ext/opentelemetry-ext-botocore ext/* diff --git a/ext/opentelemetry-ext-aiohttp-client/CHANGELOG.md b/ext/opentelemetry-ext-aiohttp-client/CHANGELOG.md deleted file mode 100644 index 43990fab16e..00000000000 --- a/ext/opentelemetry-ext-aiohttp-client/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## 0.7b1 - -Released 2020-05-12 - -- Initial release diff --git a/ext/opentelemetry-ext-wsgi/setup.py b/ext/opentelemetry-ext-wsgi/setup.py deleted file mode 100644 index 886800eacf9..00000000000 --- a/ext/opentelemetry-ext-wsgi/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# 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", "ext", "wsgi", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md new file mode 100644 index 00000000000..805dbf8e7d1 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-aiohttp-client + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + +## 0.7b1 + +Released 2020-05-12 + +- Initial release diff --git a/ext/opentelemetry-ext-aiohttp-client/LICENSE b/instrumentation/opentelemetry-instrumentation-aiohttp-client/LICENSE similarity index 100% rename from ext/opentelemetry-ext-aiohttp-client/LICENSE rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/LICENSE diff --git a/ext/opentelemetry-ext-aiohttp-client/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-aiohttp-client/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-aiohttp-client/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/MANIFEST.in diff --git a/ext/opentelemetry-ext-aiohttp-client/README.rst b/instrumentation/opentelemetry-instrumentation-aiohttp-client/README.rst similarity index 100% rename from ext/opentelemetry-ext-aiohttp-client/README.rst rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/README.rst diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.cfg similarity index 86% rename from ext/opentelemetry-ext-aiohttp-client/setup.cfg rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.cfg index d2be7e8c6ea..318721ba64e 100644 --- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-aiohttp-client -description = OpenTelemetry aiohttp client integration +name = opentelemetry-instrumentation-aiohttp-client +description = OpenTelemetry aiohttp client instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-aiohttp-client +url = https://github.com/open-telemetry/opentelemetry-python/instrumentation/opentelemetry-instrumentation-aiohttp-client platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py similarity index 90% rename from ext/opentelemetry-ext-aiohttp-client/setup.py rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py index 1b44425f066..680aa111023 100644 --- a/ext/opentelemetry-ext-aiohttp-client/setup.py +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "aiohttp_client", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "aiohttp_client", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/__init__.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py similarity index 100% rename from ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/__init__.py rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py diff --git a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py similarity index 100% rename from ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py diff --git a/ext/opentelemetry-ext-aiohttp-client/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-aiohttp-client/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/__init__.py diff --git a/ext/opentelemetry-ext-aiohttp-client/tests/test_aiohttp_client_integration.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/test_aiohttp_client_integration.py similarity index 100% rename from ext/opentelemetry-ext-aiohttp-client/tests/test_aiohttp_client_integration.py rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/test_aiohttp_client_integration.py diff --git a/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-aiopg/CHANGELOG.md similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-aiopg/CHANGELOG.md diff --git a/ext/opentelemetry-ext-django/LICENSE b/instrumentation/opentelemetry-instrumentation-aiopg/LICENSE similarity index 100% rename from ext/opentelemetry-ext-django/LICENSE rename to instrumentation/opentelemetry-instrumentation-aiopg/LICENSE diff --git a/ext/opentelemetry-ext-django/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-aiopg/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-django/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-aiopg/MANIFEST.in diff --git a/ext/opentelemetry-instrumentation-aiopg/README.rst b/instrumentation/opentelemetry-instrumentation-aiopg/README.rst similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/README.rst rename to instrumentation/opentelemetry-instrumentation-aiopg/README.rst diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/setup.cfg rename to instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.py b/instrumentation/opentelemetry-instrumentation-aiopg/setup.py similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/setup.py rename to instrumentation/opentelemetry-instrumentation-aiopg/setup.py diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py rename to instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py rename to instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py diff --git a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py similarity index 100% rename from ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py rename to instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py rename to instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py diff --git a/ext/opentelemetry-ext-asgi/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-aiopg/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-asgi/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-aiopg/tests/__init__.py diff --git a/ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py b/instrumentation/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py rename to instrumentation/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py diff --git a/ext/opentelemetry-ext-asgi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md similarity index 53% rename from ext/opentelemetry-ext-asgi/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md index 886cbff8f19..cb4a246c714 100644 --- a/ext/opentelemetry-ext-asgi/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-asgi + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-asgi/README.rst b/instrumentation/opentelemetry-instrumentation-asgi/README.rst similarity index 100% rename from ext/opentelemetry-ext-asgi/README.rst rename to instrumentation/opentelemetry-instrumentation-asgi/README.rst diff --git a/ext/opentelemetry-ext-asgi/setup.cfg b/instrumentation/opentelemetry-instrumentation-asgi/setup.cfg similarity index 87% rename from ext/opentelemetry-ext-asgi/setup.cfg rename to instrumentation/opentelemetry-instrumentation-asgi/setup.cfg index 175e2649950..fdd1f813fbc 100644 --- a/ext/opentelemetry-ext-asgi/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-asgi/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-asgi -description = ASGI Middleware for OpenTelemetry +name = opentelemetry-instrumentation-asgi +description = ASGI instrumentation for OpenTelemetry long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-asgi +url = https://github.com/open-telemetry/opentelemetry-python/instrumentation/opentelemetry-instrumentation-asgi platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-pyramid/setup.py b/instrumentation/opentelemetry-instrumentation-asgi/setup.py similarity index 91% rename from ext/opentelemetry-ext-pyramid/setup.py rename to instrumentation/opentelemetry-instrumentation-asgi/setup.py index 175db54ed57..3369352fe1e 100644 --- a/ext/opentelemetry-ext-pyramid/setup.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "pyramid", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "asgi", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/__init__.py b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py similarity index 100% rename from ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/__init__.py rename to instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py similarity index 100% rename from ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py rename to instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py diff --git a/ext/opentelemetry-ext-django/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-asgi/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-django/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-asgi/tests/__init__.py diff --git a/ext/opentelemetry-ext-asgi/tests/test_asgi_middleware.py b/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py similarity index 100% rename from ext/opentelemetry-ext-asgi/tests/test_asgi_middleware.py rename to instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py diff --git a/ext/opentelemetry-ext-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md similarity index 76% rename from ext/opentelemetry-ext-django/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md index 6e3cc9c9827..abeb562d1ec 100644 --- a/ext/opentelemetry-ext-django/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-django + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/ext/opentelemetry-ext-flask/LICENSE b/instrumentation/opentelemetry-instrumentation-django/LICENSE similarity index 100% rename from ext/opentelemetry-ext-flask/LICENSE rename to instrumentation/opentelemetry-instrumentation-django/LICENSE diff --git a/ext/opentelemetry-ext-flask/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-django/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-flask/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-django/MANIFEST.in diff --git a/ext/opentelemetry-ext-django/README.rst b/instrumentation/opentelemetry-instrumentation-django/README.rst similarity index 100% rename from ext/opentelemetry-ext-django/README.rst rename to instrumentation/opentelemetry-instrumentation-django/README.rst diff --git a/ext/opentelemetry-ext-django/setup.cfg b/instrumentation/opentelemetry-instrumentation-django/setup.cfg similarity index 90% rename from ext/opentelemetry-ext-django/setup.cfg rename to instrumentation/opentelemetry-instrumentation-django/setup.cfg index 602a2cf7ba3..53cdf3373ad 100644 --- a/ext/opentelemetry-ext-django/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-django/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-django +name = opentelemetry-instrumentation-django description = OpenTelemetry Instrumentation for Django long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-django +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-django platforms = any license = Apache-2.0 classifiers = @@ -54,4 +54,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - django = opentelemetry.ext.django:DjangoInstrumentor + django = opentelemetry.instrumentation.django:DjangoInstrumentor diff --git a/ext/opentelemetry-ext-django/setup.py b/instrumentation/opentelemetry-instrumentation-django/setup.py similarity index 97% rename from ext/opentelemetry-ext-django/setup.py rename to instrumentation/opentelemetry-instrumentation-django/setup.py index 45cc68c0f42..fb9d615ce30 100644 --- a/ext/opentelemetry-ext-django/setup.py +++ b/instrumentation/opentelemetry-instrumentation-django/setup.py @@ -22,7 +22,7 @@ dirname(__file__), "src", "opentelemetry", - "ext", + "instrumentation", "django", "version.py", ) diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/__init__.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py similarity index 100% rename from ext/opentelemetry-ext-django/src/opentelemetry/ext/django/__init__.py rename to instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py similarity index 100% rename from ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py rename to instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py similarity index 100% rename from ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py rename to instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py diff --git a/ext/opentelemetry-ext-flask/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-django/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-flask/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-django/tests/__init__.py diff --git a/ext/opentelemetry-ext-django/tests/conftest.py b/instrumentation/opentelemetry-instrumentation-django/tests/conftest.py similarity index 100% rename from ext/opentelemetry-ext-django/tests/conftest.py rename to instrumentation/opentelemetry-instrumentation-django/tests/conftest.py diff --git a/ext/opentelemetry-ext-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py similarity index 100% rename from ext/opentelemetry-ext-django/tests/test_middleware.py rename to instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py diff --git a/ext/opentelemetry-ext-django/tests/views.py b/instrumentation/opentelemetry-instrumentation-django/tests/views.py similarity index 100% rename from ext/opentelemetry-ext-django/tests/views.py rename to instrumentation/opentelemetry-instrumentation-django/tests/views.py diff --git a/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-fastapi/CHANGELOG.md similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-fastapi/CHANGELOG.md diff --git a/ext/opentelemetry-instrumentation-fastapi/README.rst b/instrumentation/opentelemetry-instrumentation-fastapi/README.rst similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/README.rst rename to instrumentation/opentelemetry-instrumentation-fastapi/README.rst diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.cfg b/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/setup.cfg rename to instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.py b/instrumentation/opentelemetry-instrumentation-fastapi/setup.py similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/setup.py rename to instrumentation/opentelemetry-instrumentation-fastapi/setup.py diff --git a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py rename to instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py similarity index 100% rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py rename to instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py diff --git a/ext/opentelemetry-ext-pyramid/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-fastapi/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pyramid/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-fastapi/tests/__init__.py diff --git a/ext/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py b/instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py rename to instrumentation/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py diff --git a/ext/opentelemetry-ext-flask/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md similarity index 83% rename from ext/opentelemetry-ext-flask/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md index 3109c159023..347014575d8 100644 --- a/ext/opentelemetry-ext-flask/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-flask + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/ext/opentelemetry-ext-grpc/LICENSE b/instrumentation/opentelemetry-instrumentation-flask/LICENSE similarity index 100% rename from ext/opentelemetry-ext-grpc/LICENSE rename to instrumentation/opentelemetry-instrumentation-flask/LICENSE diff --git a/ext/opentelemetry-ext-grpc/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-flask/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-grpc/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-flask/MANIFEST.in diff --git a/ext/opentelemetry-ext-flask/README.rst b/instrumentation/opentelemetry-instrumentation-flask/README.rst similarity index 100% rename from ext/opentelemetry-ext-flask/README.rst rename to instrumentation/opentelemetry-instrumentation-flask/README.rst diff --git a/ext/opentelemetry-ext-flask/setup.cfg b/instrumentation/opentelemetry-instrumentation-flask/setup.cfg similarity index 91% rename from ext/opentelemetry-ext-flask/setup.cfg rename to instrumentation/opentelemetry-instrumentation-flask/setup.cfg index e4b978645b8..cda290f90a9 100644 --- a/ext/opentelemetry-ext-flask/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-flask/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-flask -description = Flask tracing for OpenTelemetry (based on opentelemetry-ext-wsgi) +name = opentelemetry-instrumentation-flask +description = Flask instrumentation for OpenTelemetry long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-flask +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-flask platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-flask/setup.py b/instrumentation/opentelemetry-instrumentation-flask/setup.py similarity index 85% rename from ext/opentelemetry-ext-flask/setup.py rename to instrumentation/opentelemetry-instrumentation-flask/setup.py index 84b33c23b22..587b697a7b0 100644 --- a/ext/opentelemetry-ext-flask/setup.py +++ b/instrumentation/opentelemetry-instrumentation-flask/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "flask", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "flask", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: @@ -27,7 +27,7 @@ version=PACKAGE_INFO["__version__"], entry_points={ "opentelemetry_instrumentor": [ - "flask = opentelemetry.ext.flask:FlaskInstrumentor" + "flask = opentelemetry.instrumentation.flask:FlaskInstrumentor" ] }, ) diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/__init__.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py similarity index 100% rename from ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/__init__.py rename to instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py similarity index 100% rename from ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py rename to instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py diff --git a/ext/opentelemetry-ext-requests/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-flask/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-requests/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-flask/tests/__init__.py diff --git a/ext/opentelemetry-ext-flask/tests/base_test.py b/instrumentation/opentelemetry-instrumentation-flask/tests/base_test.py similarity index 100% rename from ext/opentelemetry-ext-flask/tests/base_test.py rename to instrumentation/opentelemetry-instrumentation-flask/tests/base_test.py diff --git a/ext/opentelemetry-ext-flask/tests/test_automatic.py b/instrumentation/opentelemetry-instrumentation-flask/tests/test_automatic.py similarity index 100% rename from ext/opentelemetry-ext-flask/tests/test_automatic.py rename to instrumentation/opentelemetry-instrumentation-flask/tests/test_automatic.py diff --git a/ext/opentelemetry-ext-flask/tests/test_programmatic.py b/instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py similarity index 100% rename from ext/opentelemetry-ext-flask/tests/test_programmatic.py rename to instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md similarity index 83% rename from ext/opentelemetry-ext-grpc/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md index 5f272a80f8a..ae3c1cf7bf7 100644 --- a/ext/opentelemetry-ext-grpc/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-grpc + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/ext/opentelemetry-ext-pyramid/LICENSE b/instrumentation/opentelemetry-instrumentation-grpc/LICENSE similarity index 100% rename from ext/opentelemetry-ext-pyramid/LICENSE rename to instrumentation/opentelemetry-instrumentation-grpc/LICENSE diff --git a/ext/opentelemetry-ext-pyramid/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-grpc/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-pyramid/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-grpc/MANIFEST.in diff --git a/ext/opentelemetry-ext-grpc/README.rst b/instrumentation/opentelemetry-instrumentation-grpc/README.rst similarity index 100% rename from ext/opentelemetry-ext-grpc/README.rst rename to instrumentation/opentelemetry-instrumentation-grpc/README.rst diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg similarity index 84% rename from ext/opentelemetry-ext-grpc/setup.cfg rename to instrumentation/opentelemetry-instrumentation-grpc/setup.cfg index c7dac4c3561..0308a229f8f 100644 --- a/ext/opentelemetry-ext-grpc/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. [metadata] -name = opentelemetry-ext-grpc -description = OpenTelemetry gRPC Integration +name = opentelemetry-instrumentation-grpc +description = OpenTelemetry gRPC instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-grpc +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-grpc platforms = any license = Apache-2.0 classifiers = @@ -55,5 +55,5 @@ where = src [options.entry_points] opentelemetry_instrumentor = - grpc_client = opentelemetry.ext.grpc:GrpcInstrumentorClient - grpc_server = opentelemetry.ext.grpc:GrpcInstrumentorServer + grpc_client = opentelemetry.instrumentation.grpc:GrpcInstrumentorClient + grpc_server = opentelemetry.instrumentation.grpc:GrpcInstrumentorServer diff --git a/ext/opentelemetry-ext-grpc/setup.py b/instrumentation/opentelemetry-instrumentation-grpc/setup.py similarity index 91% rename from ext/opentelemetry-ext-grpc/setup.py rename to instrumentation/opentelemetry-instrumentation-grpc/setup.py index 9a0a4b5d1e3..87c720aea23 100644 --- a/ext/opentelemetry-ext-grpc/setup.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/setup.py @@ -18,7 +18,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "grpc", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "grpc", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py similarity index 100% rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py similarity index 100% rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_server.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py similarity index 100% rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_server.py rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_utilities.py similarity index 100% rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_utilities.py diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py similarity index 100% rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/__init__.py rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py similarity index 100% rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/_interceptor.py rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py similarity index 100% rename from ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py diff --git a/ext/opentelemetry-ext-grpc/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-grpc/tests/__init__.py diff --git a/ext/opentelemetry-ext-grpc/tests/_client.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/_client.py similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/_client.py rename to instrumentation/opentelemetry-instrumentation-grpc/tests/_client.py diff --git a/ext/opentelemetry-ext-grpc/tests/_server.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/_server.py similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/_server.py rename to instrumentation/opentelemetry-instrumentation-grpc/tests/_server.py diff --git a/ext/opentelemetry-ext-grpc/tests/protobuf/test_server.proto b/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server.proto similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/protobuf/test_server.proto rename to instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server.proto diff --git a/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2.py similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2.py rename to instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2.py diff --git a/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2_grpc.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2_grpc.py similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2_grpc.py rename to instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2_grpc.py diff --git a/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py rename to instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py similarity index 100% rename from ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py rename to instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py diff --git a/ext/opentelemetry-ext-pyramid/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pyramid/CHANGELOG.md similarity index 100% rename from ext/opentelemetry-ext-pyramid/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-pyramid/CHANGELOG.md diff --git a/ext/opentelemetry-ext-requests/LICENSE b/instrumentation/opentelemetry-instrumentation-pyramid/LICENSE similarity index 100% rename from ext/opentelemetry-ext-requests/LICENSE rename to instrumentation/opentelemetry-instrumentation-pyramid/LICENSE diff --git a/ext/opentelemetry-ext-requests/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-pyramid/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-requests/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-pyramid/MANIFEST.in diff --git a/ext/opentelemetry-ext-pyramid/README.rst b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst similarity index 100% rename from ext/opentelemetry-ext-pyramid/README.rst rename to instrumentation/opentelemetry-instrumentation-pyramid/README.rst diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg similarity index 88% rename from ext/opentelemetry-ext-pyramid/setup.cfg rename to instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg index 21a4910ac41..1b31a53f6c8 100644 --- a/ext/opentelemetry-ext-pyramid/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-pyramid -description = OpenTelemetry Pyramid integration +name = opentelemetry-instrumentation-pyramid +description = OpenTelemetry Pyramid instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-pyramid +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-pyramid platforms = any license = Apache-2.0 classifiers = @@ -56,4 +56,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - pyramid = opentelemetry.ext.pyramid:PyramidInstrumentor + pyramid = opentelemetry.instrumentation.pyramid:PyramidInstrumentor diff --git a/ext/opentelemetry-ext-asgi/setup.py b/instrumentation/opentelemetry-instrumentation-pyramid/setup.py similarity index 91% rename from ext/opentelemetry-ext-asgi/setup.py rename to instrumentation/opentelemetry-instrumentation-pyramid/setup.py index 8bf19bd4225..f4d02af59ab 100644 --- a/ext/opentelemetry-ext-asgi/setup.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "asgi", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "pyramid", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/__init__.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/__init__.py rename to instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py similarity index 100% rename from ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py rename to instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py similarity index 100% rename from ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py rename to instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py diff --git a/ext/opentelemetry-ext-wsgi/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-wsgi/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-pyramid/tests/__init__.py diff --git a/ext/opentelemetry-ext-pyramid/tests/pyramid_base_test.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/pyramid_base_test.py similarity index 100% rename from ext/opentelemetry-ext-pyramid/tests/pyramid_base_test.py rename to instrumentation/opentelemetry-instrumentation-pyramid/tests/pyramid_base_test.py diff --git a/ext/opentelemetry-ext-pyramid/tests/test_automatic.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_automatic.py similarity index 100% rename from ext/opentelemetry-ext-pyramid/tests/test_automatic.py rename to instrumentation/opentelemetry-instrumentation-pyramid/tests/test_automatic.py diff --git a/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py similarity index 100% rename from ext/opentelemetry-ext-pyramid/tests/test_programmatic.py rename to instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py diff --git a/ext/opentelemetry-ext-requests/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md similarity index 83% rename from ext/opentelemetry-ext-requests/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md index c7bb8774317..e986d345fb8 100644 --- a/ext/opentelemetry-ext-requests/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-requests + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.7b1 Released 2020-05-12 diff --git a/ext/opentelemetry-ext-wsgi/LICENSE b/instrumentation/opentelemetry-instrumentation-requests/LICENSE similarity index 100% rename from ext/opentelemetry-ext-wsgi/LICENSE rename to instrumentation/opentelemetry-instrumentation-requests/LICENSE diff --git a/ext/opentelemetry-ext-wsgi/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-requests/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-wsgi/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-requests/MANIFEST.in diff --git a/ext/opentelemetry-ext-requests/README.rst b/instrumentation/opentelemetry-instrumentation-requests/README.rst similarity index 100% rename from ext/opentelemetry-ext-requests/README.rst rename to instrumentation/opentelemetry-instrumentation-requests/README.rst diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/instrumentation/opentelemetry-instrumentation-requests/setup.cfg similarity index 87% rename from ext/opentelemetry-ext-requests/setup.cfg rename to instrumentation/opentelemetry-instrumentation-requests/setup.cfg index 52d6f96739e..77205b5816d 100644 --- a/ext/opentelemetry-ext-requests/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-requests/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-requests -description = OpenTelemetry requests integration +name = opentelemetry-instrumentation-requests +description = OpenTelemetry requests instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-requests +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-requests platforms = any license = Apache-2.0 classifiers = @@ -54,4 +54,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - requests = opentelemetry.ext.requests:RequestsInstrumentor + requests = opentelemetry.instrumentation.requests:RequestsInstrumentor diff --git a/instrumentation/opentelemetry-instrumentation-requests/setup.py b/instrumentation/opentelemetry-instrumentation-requests/setup.py new file mode 100644 index 00000000000..3b9ed6eb59f --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-requests/setup.py @@ -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", "requests", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py rename to instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py rename to instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py diff --git a/ext/opentelemetry-instrumentation-aiopg/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-requests/tests/__init__.py similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-requests/tests/__init__.py diff --git a/ext/opentelemetry-ext-requests/tests/test_requests_integration.py b/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py similarity index 100% rename from ext/opentelemetry-ext-requests/tests/test_requests_integration.py rename to instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py diff --git a/ext/opentelemetry-instrumentation-starlette/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-starlette/CHANGELOG.md similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-starlette/CHANGELOG.md diff --git a/ext/opentelemetry-instrumentation-starlette/README.rst b/instrumentation/opentelemetry-instrumentation-starlette/README.rst similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/README.rst rename to instrumentation/opentelemetry-instrumentation-starlette/README.rst diff --git a/ext/opentelemetry-instrumentation-starlette/setup.cfg b/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/setup.cfg rename to instrumentation/opentelemetry-instrumentation-starlette/setup.cfg diff --git a/ext/opentelemetry-instrumentation-starlette/setup.py b/instrumentation/opentelemetry-instrumentation-starlette/setup.py similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/setup.py rename to instrumentation/opentelemetry-instrumentation-starlette/setup.py diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py rename to instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py diff --git a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py rename to instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py diff --git a/ext/opentelemetry-instrumentation-fastapi/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-starlette/tests/__init__.py similarity index 100% rename from ext/opentelemetry-instrumentation-fastapi/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-starlette/tests/__init__.py diff --git a/ext/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py b/instrumentation/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py rename to instrumentation/opentelemetry-instrumentation-starlette/tests/test_starlette_instrumentation.py diff --git a/ext/opentelemetry-ext-wsgi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md similarity index 82% rename from ext/opentelemetry-ext-wsgi/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md index 739ee7b0cc5..0bfe048897f 100644 --- a/ext/opentelemetry-ext-wsgi/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-wsgi + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/ext/opentelemetry-instrumentation-aiopg/LICENSE b/instrumentation/opentelemetry-instrumentation-wsgi/LICENSE similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/LICENSE rename to instrumentation/opentelemetry-instrumentation-wsgi/LICENSE diff --git a/ext/opentelemetry-instrumentation-aiopg/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-wsgi/MANIFEST.in similarity index 100% rename from ext/opentelemetry-instrumentation-aiopg/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-wsgi/MANIFEST.in diff --git a/ext/opentelemetry-ext-wsgi/README.rst b/instrumentation/opentelemetry-instrumentation-wsgi/README.rst similarity index 100% rename from ext/opentelemetry-ext-wsgi/README.rst rename to instrumentation/opentelemetry-instrumentation-wsgi/README.rst diff --git a/ext/opentelemetry-ext-wsgi/setup.cfg b/instrumentation/opentelemetry-instrumentation-wsgi/setup.cfg similarity index 94% rename from ext/opentelemetry-ext-wsgi/setup.cfg rename to instrumentation/opentelemetry-instrumentation-wsgi/setup.cfg index 97445a847cd..b48d61dc849 100644 --- a/ext/opentelemetry-ext-wsgi/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-wsgi/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-wsgi +name = opentelemetry-instrumentation-wsgi description = WSGI Middleware for OpenTelemetry long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-wsgi +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-wsgi platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-requests/setup.py b/instrumentation/opentelemetry-instrumentation-wsgi/setup.py similarity index 91% rename from ext/opentelemetry-ext-requests/setup.py rename to instrumentation/opentelemetry-instrumentation-wsgi/setup.py index a71a8d44b5e..fb4ffa7437b 100644 --- a/ext/opentelemetry-ext-requests/setup.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "requests", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "wsgi", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py similarity index 100% rename from ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py rename to instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py rename to instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py diff --git a/ext/opentelemetry-instrumentation-starlette/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-wsgi/tests/__init__.py similarity index 100% rename from ext/opentelemetry-instrumentation-starlette/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-wsgi/tests/__init__.py diff --git a/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py b/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py similarity index 100% rename from ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py rename to instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py diff --git a/tox.ini b/tox.ini index a018ec7a896..d5027527d8f 100644 --- a/tox.ini +++ b/tox.ini @@ -28,7 +28,7 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-example-app pypy3-test-instrumentation-example-app - ; opentelemetry-ext-aiohttp-client + ; opentelemetry-instrumentation-aiohttp-client py3{5,6,7,8}-test-instrumentation-aiohttp-client pypy3-test-instrumentation-aiohttp-client @@ -40,7 +40,7 @@ envlist = py3{6,7,8}-test-instrumentation-botocore pypy3-test-instrumentation-botocore - ; opentelemetry-ext-django + ; opentelemetry-instrumentation-django py3{4,5,6,7,8}-test-instrumentation-django pypy3-test-instrumentation-django @@ -61,11 +61,11 @@ envlist = py3{6,7,8}-test-instrumentation-fastapi pypy3-test-instrumentation-fastapi - ; opentelemetry-ext-flask + ; opentelemetry-instrumentation-flask py3{4,5,6,7,8}-test-instrumentation-flask pypy3-test-instrumentation-flask - ; opentelemetry-ext-requests + ; opentelemetry-instrumentation-requests py3{4,5,6,7,8}-test-instrumentation-requests pypy3-test-instrumentation-requests @@ -117,11 +117,11 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-pymysql pypy3-test-instrumentation-pymysql - ; opentelemetry-ext-pyramid + ; opentelemetry-instrumentation-pyramid py3{4,5,6,7,8}-test-instrumentation-pyramid pypy3-test-instrumentation-pyramid - ; opentelemetry-ext-asgi + ; opentelemetry-instrumentation-asgi py3{5,6,7,8}-test-instrumentation-asgi pypy3-test-instrumentation-asgi @@ -133,7 +133,7 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-sqlite3 pypy3-test-instrumentation-sqlite3 - ; opentelemetry-ext-wsgi + ; opentelemetry-instrumentation-wsgi py3{4,5,6,7,8}-test-instrumentation-wsgi pypy3-test-instrumentation-wsgi @@ -145,7 +145,7 @@ envlist = py3{4,5,6,7,8}-test-core-opentracing-shim pypy3-test-core-opentracing-shim - ; opentelemetry-ext-grpc + ; opentelemetry-instrumentation-grpc py3{5,6,7,8}-test-instrumentation-grpc ; opentelemetry-ext-sqlalchemy @@ -199,7 +199,7 @@ changedir = test-instrumentation-aiohttp-client: ext/opentelemetry-ext-aiohttp-client/tests test-instrumentation-aiopg: ext/opentelemetry-instrumentation-aiopg/tests - test-instrumentation-asgi: ext/opentelemetry-ext-asgi/tests + test-instrumentation-asgi: instrumentation/opentelemetry-instrumentation-asgi/tests test-instrumentation-asyncpg: ext/opentelemetry-ext-asyncpg/tests test-instrumentation-boto: ext/opentelemetry-ext-boto/tests test-instrumentation-botocore: ext/opentelemetry-ext-botocore/tests @@ -209,22 +209,22 @@ changedir = test-instrumentation-example-app: docs/examples/opentelemetry-example-app/tests test-instrumentation-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests test-instrumentation-fastapi: ext/opentelemetry-instrumentation-fastapi/tests - test-instrumentation-flask: ext/opentelemetry-ext-flask/tests - test-instrumentation-grpc: ext/opentelemetry-ext-grpc/tests + test-instrumentation-flask: instrumentation/opentelemetry-instrumentation-flask/tests + test-instrumentation-grpc: instrumentation/opentelemetry-instrumentation-grpc/tests test-instrumentation-jinja2: ext/opentelemetry-ext-jinja2/tests test-instrumentation-mysql: ext/opentelemetry-ext-mysql/tests test-instrumentation-psycopg2: ext/opentelemetry-ext-psycopg2/tests test-instrumentation-pymemcache: ext/opentelemetry-ext-pymemcache/tests test-instrumentation-pymongo: ext/opentelemetry-ext-pymongo/tests test-instrumentation-pymysql: ext/opentelemetry-ext-pymysql/tests - test-instrumentation-pyramid: ext/opentelemetry-ext-pyramid/tests + test-instrumentation-pyramid: instrumentation/opentelemetry-instrumentation-pyramid/tests test-instrumentation-redis: ext/opentelemetry-ext-redis/tests - test-instrumentation-requests: ext/opentelemetry-ext-requests/tests + test-instrumentation-requests: instrumentation/opentelemetry-instrumentation-requests/tests test-instrumentation-sqlalchemy: ext/opentelemetry-ext-sqlalchemy/tests test-instrumentation-sqlite3: ext/opentelemetry-ext-sqlite3/tests test-instrumentation-starlette: ext/opentelemetry-instrumentation-starlette/tests test-instrumentation-system-metrics: ext/opentelemetry-ext-system-metrics/tests - test-instrumentation-wsgi: ext/opentelemetry-ext-wsgi/tests + test-instrumentation-wsgi: instrumentation/opentelemetry-instrumentation-wsgi/tests test-exporter-jaeger: exporter/opentelemetry-exporter-jaeger/tests test-exporter-datadog: exporter/opentelemetry-exporter-datadog/tests @@ -243,23 +243,23 @@ commands_pre = test-core-proto: pip install {toxinidir}/opentelemetry-proto ext,instrumentation: pip install {toxinidir}/opentelemetry-instrumentation - example-app: pip install {toxinidir}/opentelemetry-instrumentation {toxinidir}/ext/opentelemetry-ext-requests {toxinidir}/ext/opentelemetry-ext-wsgi {toxinidir}/ext/opentelemetry-ext-flask {toxinidir}/docs/examples/opentelemetry-example-app + example-app: pip install {toxinidir}/opentelemetry-instrumentation {toxinidir}/instrumentation/opentelemetry-instrumentation-requests {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi {toxinidir}/instrumentation/opentelemetry-instrumentation-flask {toxinidir}/docs/examples/opentelemetry-example-app - getting-started: pip install -e {toxinidir}/opentelemetry-instrumentation -e {toxinidir}/ext/opentelemetry-ext-requests -e {toxinidir}/ext/opentelemetry-ext-wsgi -e {toxinidir}/ext/opentelemetry-ext-flask + getting-started: pip install -e {toxinidir}/opentelemetry-instrumentation -e {toxinidir}/instrumentation/opentelemetry-instrumentation-requests -e {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi -e {toxinidir}/instrumentation/opentelemetry-instrumentation-flask celery: pip install {toxinidir}/ext/opentelemetry-ext-celery[test] - grpc: pip install {toxinidir}/ext/opentelemetry-ext-grpc[test] + grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test] - wsgi,flask,django,pyramid: pip install {toxinidir}/ext/opentelemetry-ext-wsgi - asgi,starlette,fastapi: pip install {toxinidir}/ext/opentelemetry-ext-asgi + wsgi,flask,django,pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi + asgi,starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi asyncpg: pip install {toxinidir}/ext/opentelemetry-ext-asyncpg boto: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test] boto: pip install {toxinidir}/ext/opentelemetry-ext-boto[test] - flask: pip install {toxinidir}/ext/opentelemetry-ext-flask[test] + flask: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-flask[test] botocore: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test] @@ -286,19 +286,19 @@ commands_pre = pymysql: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-pymysql[test] - pyramid: pip install {toxinidir}/ext/opentelemetry-ext-pyramid[test] + pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pyramid[test] sqlite3: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-sqlite3[test] redis: pip install {toxinidir}/ext/opentelemetry-ext-redis[test] - requests: pip install {toxinidir}/ext/opentelemetry-ext-requests[test] + requests: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-requests[test] starlette: pip install {toxinidir}/ext/opentelemetry-instrumentation-starlette[test] jinja2: pip install {toxinidir}/ext/opentelemetry-ext-jinja2[test] - aiohttp-client: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/ext/opentelemetry-ext-aiohttp-client + aiohttp-client: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/ext/opentelemetry-instrumentation-aiopg[test] @@ -383,9 +383,9 @@ commands_pre = pip install -e {toxinidir}/opentelemetry-api \ -e {toxinidir}/opentelemetry-instrumentation \ -e {toxinidir}/opentelemetry-sdk \ - -e {toxinidir}/ext/opentelemetry-ext-requests \ - -e {toxinidir}/ext/opentelemetry-ext-wsgi \ - -e {toxinidir}/ext/opentelemetry-ext-flask + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-requests \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-flask commands = {toxinidir}/scripts/tracecontext-integration-test.sh From 47d8beca07bfe54d95af56bab33ea7264350ca42 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 01:40:31 -0700 Subject: [PATCH 15/35] othher --- docs/examples/auto-instrumentation/README.rst | 2 +- .../server_instrumented.py | 2 +- docs/examples/datadog_exporter/README.rst | 2 +- docs/examples/django/README.rst | 8 ++-- docs/examples/django/manage.py | 2 +- .../opentelemetry-example-app/setup.cfg | 4 +- .../flask_example.py | 6 +-- .../grpc/hello_world_client.py | 8 ++-- .../grpc/hello_world_server.py | 8 ++-- .../grpc/route_guide_client.py | 8 ++-- .../grpc/route_guide_server.py | 8 ++-- docs/ext/aiohttp_client/aiohttp_client.rst | 2 +- docs/ext/asgi/asgi.rst | 4 +- docs/ext/django/django.rst | 2 +- docs/ext/flask/flask.rst | 2 +- docs/ext/grpc/grpc.rst | 2 +- docs/ext/pyramid/pyramid.rst | 2 +- docs/ext/requests/requests.rst | 2 +- docs/ext/wsgi/wsgi.rst | 2 +- docs/getting-started.rst | 4 +- docs/getting_started/flask_example.py | 4 +- .../exporter/datadog/exporter.py | 14 +++---- .../tests/test_datadog_exporter.py | 12 +++--- .../README.rst | 6 +-- .../aiohttp_client/__init__.py | 10 ++--- .../tests/test_aiohttp_client_integration.py | 16 ++++---- .../README.rst | 10 ++--- .../instrumentation/asgi/__init__.py | 4 +- .../tests/test_asgi_middleware.py | 2 +- .../README.rst | 6 +-- .../setup.cfg | 2 +- .../instrumentation/django/__init__.py | 2 +- .../instrumentation/django/middleware.py | 4 +- .../tests/test_middleware.py | 4 +- .../setup.cfg | 2 +- .../instrumentation/fastapi/__init__.py | 2 +- .../README.rst | 6 +-- .../setup.cfg | 2 +- .../instrumentation/flask/__init__.py | 8 ++-- .../tests/test_automatic.py | 2 +- .../tests/test_programmatic.py | 4 +- .../README.rst | 6 +-- .../instrumentation/grpc/__init__.py | 10 ++--- .../tests/test_client_interceptor.py | 14 +++---- .../tests/test_server_interceptor.py | 10 ++--- .../README.rst | 6 +-- .../setup.cfg | 2 +- .../instrumentation/pyramid/__init__.py | 18 ++++----- .../instrumentation/pyramid/callbacks.py | 8 ++-- .../tests/test_automatic.py | 2 +- .../tests/test_programmatic.py | 10 ++--- .../README.rst | 8 ++-- .../instrumentation/requests/__init__.py | 6 +-- .../tests/test_requests_integration.py | 6 +-- .../setup.cfg | 2 +- .../instrumentation/starlette/__init__.py | 2 +- .../README.rst | 6 +-- .../instrumentation/wsgi/__init__.py | 6 +-- .../tests/test_wsgi_middleware.py | 2 +- .../src/opentelemetry/metrics/__init__.py | 2 +- .../src/opentelemetry/trace/__init__.py | 2 +- .../instrumentation/bootstrap.py | 38 +++++++++---------- scripts/coverage.sh | 10 ++--- tests/w3c_tracecontext_validation_server.py | 4 +- tox.ini | 6 +-- 65 files changed, 194 insertions(+), 194 deletions(-) diff --git a/docs/examples/auto-instrumentation/README.rst b/docs/examples/auto-instrumentation/README.rst index b5a7649503f..e4af3c6bd56 100644 --- a/docs/examples/auto-instrumentation/README.rst +++ b/docs/examples/auto-instrumentation/README.rst @@ -73,7 +73,7 @@ Installation $ pip install opentelemetry-sdk $ pip install opentelemetry-instrumentation - $ pip install opentelemetry-ext-flask + $ pip install opentelemetry-instrumentation-flask $ pip install requests Execution diff --git a/docs/examples/auto-instrumentation/server_instrumented.py b/docs/examples/auto-instrumentation/server_instrumented.py index 528b107e03c..c8562828be9 100644 --- a/docs/examples/auto-instrumentation/server_instrumented.py +++ b/docs/examples/auto-instrumentation/server_instrumented.py @@ -15,7 +15,7 @@ from flask import Flask, request from opentelemetry import propagators, trace -from opentelemetry.ext.wsgi import collect_request_attributes +from opentelemetry.instrumentation.wsgi import collect_request_attributes from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/examples/datadog_exporter/README.rst b/docs/examples/datadog_exporter/README.rst index 250eec2b84a..03f485da159 100644 --- a/docs/examples/datadog_exporter/README.rst +++ b/docs/examples/datadog_exporter/README.rst @@ -50,7 +50,7 @@ Distributed Example pip install opentelemetry-sdk pip install opentelemetry-exporter-datadog pip install opentelemetry-instrumentation - pip install opentelemetry-ext-flask + pip install opentelemetry-instrumentation-flask pip install flask pip install requests diff --git a/docs/examples/django/README.rst b/docs/examples/django/README.rst index e8a043684f6..9df3b67f6b8 100644 --- a/docs/examples/django/README.rst +++ b/docs/examples/django/README.rst @@ -1,7 +1,7 @@ OpenTelemetry Django Instrumentation Example ============================================ -This shows how to use ``opentelemetry-ext-django`` to automatically instrument a +This shows how to use ``opentelemetry-instrumentation-django`` to automatically instrument a Django app. For more user convenience, a Django app is already provided in this directory. @@ -24,7 +24,7 @@ Installation .. code-block:: $ pip install opentelemetry-sdk - $ pip install opentelemetry-ext-django + $ pip install opentelemetry-instrumentation-django $ pip install requests @@ -40,7 +40,7 @@ Set these environment variables first: #. ``export DJANGO_SETTINGS_MODULE=instrumentation_example.settings`` The way to achieve OpenTelemetry instrumentation for your Django app is to use -an ``opentelemetry.ext.django.DjangoInstrumentor`` to instrument the app. +an ``opentelemetry.instrumentation.django.DjangoInstrumentor`` to instrument the app. Clone the ``opentelemetry-python`` repository and go to ``opentelemetry-python/docs/examples/django``. @@ -105,4 +105,4 @@ References * `Django `_ * `OpenTelemetry Project `_ -* `OpenTelemetry Django extension `_ +* `OpenTelemetry Django extension `_ diff --git a/docs/examples/django/manage.py b/docs/examples/django/manage.py index fdf32287c5c..3a67dbf8296 100755 --- a/docs/examples/django/manage.py +++ b/docs/examples/django/manage.py @@ -17,7 +17,7 @@ import os import sys -from opentelemetry.ext.django import DjangoInstrumentor +from opentelemetry.instrumentation.django import DjangoInstrumentor def main(): diff --git a/docs/examples/opentelemetry-example-app/setup.cfg b/docs/examples/opentelemetry-example-app/setup.cfg index f7dd1eccdf1..e77fbae3765 100644 --- a/docs/examples/opentelemetry-example-app/setup.cfg +++ b/docs/examples/opentelemetry-example-app/setup.cfg @@ -45,8 +45,8 @@ install_requires = typing; python_version<'3.5' opentelemetry-api == 0.12.dev0 opentelemetry-sdk == 0.12.dev0 - opentelemetry-ext-requests == 0.12.dev0 - opentelemetry-ext-flask == 0.12.dev0 + opentelemetry-instrumentation-requests == 0.12.dev0 + opentelemetry-instrumentation-flask == 0.12.dev0 flask requests protobuf~=3.11 diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/flask_example.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/flask_example.py index 8f44273b6ed..98383365040 100644 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/flask_example.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/flask_example.py @@ -19,9 +19,9 @@ import flask import requests -import opentelemetry.ext.requests +import opentelemetry.instrumentation.requests from opentelemetry import trace -from opentelemetry.ext.flask import FlaskInstrumentor +from opentelemetry.instrumentation.flask import FlaskInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, @@ -33,7 +33,7 @@ # It must be done before instrumenting any library trace.set_tracer_provider(TracerProvider()) -opentelemetry.ext.requests.RequestsInstrumentor().instrument() +opentelemetry.instrumentation.requests.RequestsInstrumentor().instrument() trace.get_tracer_provider().add_span_processor( SimpleExportSpanProcessor(ConsoleSpanExporter()) diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py index 7457c63148f..59dd1fa6108 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py @@ -17,11 +17,11 @@ """The Python implementation of the GRPC helloworld.Greeter client. -Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-ext-grpc/ + pip install -e ext/opentelemetry-instrumentation-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -42,8 +42,8 @@ import grpc from opentelemetry import trace -from opentelemetry.ext.grpc import client_interceptor -from opentelemetry.ext.grpc.grpcext import intercept_channel +from opentelemetry.instrumentation.grpc import client_interceptor +from opentelemetry.instrumentation.grpc.grpcext import intercept_channel from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py index 858426a4682..ae4562e5817 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py @@ -17,11 +17,11 @@ """The Python implementation of the GRPC helloworld.Greeter server. -Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-ext-grpc/ + pip install -e ext/opentelemetry-instrumentation-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -42,8 +42,8 @@ import grpc from opentelemetry import trace -from opentelemetry.ext.grpc import server_interceptor -from opentelemetry.ext.grpc.grpcext import intercept_server +from opentelemetry.instrumentation.grpc import server_interceptor +from opentelemetry.instrumentation.grpc.grpcext import intercept_server from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py index d24875913d2..110c68d113c 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py @@ -17,11 +17,11 @@ """The Python implementation of the gRPC route guide client. -Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-ext-grpc/ + pip install -e ext/opentelemetry-instrumentation-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -43,8 +43,8 @@ import grpc from opentelemetry import trace -from opentelemetry.ext.grpc import client_interceptor -from opentelemetry.ext.grpc.grpcext import intercept_channel +from opentelemetry.instrumentation.grpc import client_interceptor +from opentelemetry.instrumentation.grpc.grpcext import intercept_channel from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py index 54a68b9f5a9..a8b2a95e819 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py @@ -18,11 +18,11 @@ """The Python implementation of the gRPC route guide server. -Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-ext-grpc/ + pip install -e ext/opentelemetry-instrumentation-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -45,8 +45,8 @@ import grpc from opentelemetry import trace -from opentelemetry.ext.grpc import server_interceptor -from opentelemetry.ext.grpc.grpcext import intercept_server +from opentelemetry.instrumentation.grpc import server_interceptor +from opentelemetry.instrumentation.grpc.grpcext import intercept_server from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/ext/aiohttp_client/aiohttp_client.rst b/docs/ext/aiohttp_client/aiohttp_client.rst index e5ab26b0ea0..30cddbd9426 100644 --- a/docs/ext/aiohttp_client/aiohttp_client.rst +++ b/docs/ext/aiohttp_client/aiohttp_client.rst @@ -1,7 +1,7 @@ OpenTelemetry aiohttp client Integration ======================================== -.. automodule:: opentelemetry.ext.aiohttp_client +.. automodule:: opentelemetry.instrumentation.aiohttp_client :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/asgi/asgi.rst b/docs/ext/asgi/asgi.rst index 82c98330693..191dcc823a7 100644 --- a/docs/ext/asgi/asgi.rst +++ b/docs/ext/asgi/asgi.rst @@ -1,10 +1,10 @@ -opentelemetry.ext.asgi package +opentelemetry.instrumentation.asgi package ============================== Module contents --------------- -.. automodule:: opentelemetry.ext.asgi +.. automodule:: opentelemetry.instrumentation.asgi :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/django/django.rst b/docs/ext/django/django.rst index 1a2c844e28c..80767308439 100644 --- a/docs/ext/django/django.rst +++ b/docs/ext/django/django.rst @@ -1,7 +1,7 @@ OpenTelemetry Django Instrumentation ==================================== -.. automodule:: opentelemetry.ext.django +.. automodule:: opentelemetry.instrumentation.django :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/flask/flask.rst b/docs/ext/flask/flask.rst index 2fc19de3ec0..c75bba8399a 100644 --- a/docs/ext/flask/flask.rst +++ b/docs/ext/flask/flask.rst @@ -1,7 +1,7 @@ OpenTelemetry Flask Integration =============================== -.. automodule:: opentelemetry.ext.flask +.. automodule:: opentelemetry.instrumentation.flask :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/grpc/grpc.rst b/docs/ext/grpc/grpc.rst index 8a0775f28f2..22717335181 100644 --- a/docs/ext/grpc/grpc.rst +++ b/docs/ext/grpc/grpc.rst @@ -4,7 +4,7 @@ OpenTelemetry gRPC Integration Module contents --------------- -.. automodule:: opentelemetry.ext.grpc +.. automodule:: opentelemetry.instrumentation.grpc :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/pyramid/pyramid.rst b/docs/ext/pyramid/pyramid.rst index b46718c387a..3726c4dcf00 100644 --- a/docs/ext/pyramid/pyramid.rst +++ b/docs/ext/pyramid/pyramid.rst @@ -1,7 +1,7 @@ OpenTelemetry Pyramid Integration ================================= -.. automodule:: opentelemetry.ext.pyramid +.. automodule:: opentelemetry.instrumentation.pyramid :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/requests/requests.rst b/docs/ext/requests/requests.rst index 5959d4c9243..4110754e883 100644 --- a/docs/ext/requests/requests.rst +++ b/docs/ext/requests/requests.rst @@ -1,7 +1,7 @@ OpenTelemetry requests Integration ================================== -.. automodule:: opentelemetry.ext.requests +.. automodule:: opentelemetry.instrumentation.requests :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/wsgi/wsgi.rst b/docs/ext/wsgi/wsgi.rst index af2bd4dd365..f35fdc2cf91 100644 --- a/docs/ext/wsgi/wsgi.rst +++ b/docs/ext/wsgi/wsgi.rst @@ -1,7 +1,7 @@ OpenTelemetry WSGI Middleware ============================= -.. automodule:: opentelemetry.ext.wsgi +.. automodule:: opentelemetry.instrumentation.wsgi :members: :undoc-members: :show-inheritance: diff --git a/docs/getting-started.rst b/docs/getting-started.rst index c4ed47ad335..11e3a08fecf 100644 --- a/docs/getting-started.rst +++ b/docs/getting-started.rst @@ -156,8 +156,8 @@ We will now instrument a basic Flask application that uses the requests library .. code-block:: sh - pip install opentelemetry-ext-flask - pip install opentelemetry-ext-requests + pip install opentelemetry-instrumentation-flask + pip install opentelemetry-instrumentation-requests And let's write a small Flask application that sends an HTTP request, activating each instrumentation during the initialization: diff --git a/docs/getting_started/flask_example.py b/docs/getting_started/flask_example.py index 77a50a799bf..c4a172389cd 100644 --- a/docs/getting_started/flask_example.py +++ b/docs/getting_started/flask_example.py @@ -17,8 +17,8 @@ import requests from opentelemetry import trace -from opentelemetry.ext.flask import FlaskInstrumentor -from opentelemetry.ext.requests import RequestsInstrumentor +from opentelemetry.instrumentation.flask import FlaskInstrumentor +from opentelemetry.instrumentation.requests import RequestsInstrumentor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py index e11772d0d94..505c15d4823 100644 --- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py +++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py @@ -32,12 +32,12 @@ DEFAULT_AGENT_URL = "http://localhost:8126" _INSTRUMENTATION_SPAN_TYPES = { - "opentelemetry.ext.aiohttp-client": DatadogSpanTypes.HTTP, - "opentelemetry.ext.asgi": DatadogSpanTypes.WEB, + "opentelemetry.instrumentation.aiohttp-client": DatadogSpanTypes.HTTP, + "opentelemetry.instrumentation.asgi": DatadogSpanTypes.WEB, "opentelemetry.ext.dbapi": DatadogSpanTypes.SQL, - "opentelemetry.ext.django": DatadogSpanTypes.WEB, - "opentelemetry.ext.flask": DatadogSpanTypes.WEB, - "opentelemetry.ext.grpc": DatadogSpanTypes.GRPC, + "opentelemetry.instrumentation.django": DatadogSpanTypes.WEB, + "opentelemetry.instrumentation.flask": DatadogSpanTypes.WEB, + "opentelemetry.instrumentation.grpc": DatadogSpanTypes.GRPC, "opentelemetry.ext.jinja2": DatadogSpanTypes.TEMPLATE, "opentelemetry.ext.mysql": DatadogSpanTypes.SQL, "opentelemetry.ext.psycopg2": DatadogSpanTypes.SQL, @@ -45,9 +45,9 @@ "opentelemetry.ext.pymongo": DatadogSpanTypes.MONGODB, "opentelemetry.ext.pymysql": DatadogSpanTypes.SQL, "opentelemetry.ext.redis": DatadogSpanTypes.REDIS, - "opentelemetry.ext.requests": DatadogSpanTypes.HTTP, + "opentelemetry.instrumentation.requests": DatadogSpanTypes.HTTP, "opentelemetry.ext.sqlalchemy": DatadogSpanTypes.SQL, - "opentelemetry.ext.wsgi": DatadogSpanTypes.WEB, + "opentelemetry.instrumentation.wsgi": DatadogSpanTypes.WEB, } diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py index a3e67790d97..cbdb1ed74aa 100644 --- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py @@ -290,20 +290,20 @@ def test_resources(self): def test_span_types(self): test_instrumentations = [ - "opentelemetry.ext.aiohttp-client", + "opentelemetry.instrumentation.aiohttp-client", "opentelemetry.ext.dbapi", - "opentelemetry.ext.django", - "opentelemetry.ext.flask", - "opentelemetry.ext.grpc", + "opentelemetry.instrumentation.django", + "opentelemetry.instrumentation.flask", + "opentelemetry.instrumentation.grpc", "opentelemetry.ext.jinja2", "opentelemetry.ext.mysql", "opentelemetry.ext.psycopg2", "opentelemetry.ext.pymongo", "opentelemetry.ext.pymysql", "opentelemetry.ext.redis", - "opentelemetry.ext.requests", + "opentelemetry.instrumentation.requests", "opentelemetry.ext.sqlalchemy", - "opentelemetry.ext.wsgi", + "opentelemetry.instrumentation.wsgi", ] for index, instrumentation in enumerate(test_instrumentations): diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/README.rst b/instrumentation/opentelemetry-instrumentation-aiohttp-client/README.rst index c257639cf34..bc44e0e2627 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/README.rst +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/README.rst @@ -3,8 +3,8 @@ OpenTelemetry aiohttp client Integration |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-aiohttp-client.svg - :target: https://pypi.org/project/opentelemetry-ext-aiohttp-client/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-aiohttp-client.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-aiohttp-client/ This library allows tracing HTTP requests made by the `aiohttp client `_ library. @@ -14,7 +14,7 @@ Installation :: - pip install opentelemetry-ext-aiohttp-client + pip install opentelemetry-instrumentation-aiohttp-client References diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py index a05e7c06015..2d9b8bd7a58 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py @@ -13,8 +13,8 @@ # limitations under the License. """ -The opentelemetry-ext-aiohttp-client package allows tracing HTTP requests -made by the aiohttp client library. +The opentelemetry-instrumentation-aiohttp-client package allows tracing HTTP +requests made by the aiohttp client library. Usage ----- @@ -22,7 +22,7 @@ .. code:: python import aiohttp - from opentelemetry.ext.aiohttp_client import ( + from opentelemetry.instrumentation.aiohttp_client import ( create_trace_config, url_path_span_name ) @@ -51,7 +51,7 @@ def strip_query_params(url: yarl.URL) -> str: from opentelemetry import context as context_api from opentelemetry import propagators, trace -from opentelemetry.ext.aiohttp_client.version import __version__ +from opentelemetry.instrumentation.aiohttp_client.version import __version__ from opentelemetry.instrumentation.utils import http_status_to_canonical_code from opentelemetry.trace import SpanKind from opentelemetry.trace.status import Status, StatusCanonicalCode @@ -92,7 +92,7 @@ def create_trace_config( .. code:: python import aiohttp - from opentelemetry.ext.aiohttp_client import create_trace_config + from opentelemetry.instrumentation.aiohttp_client import create_trace_config async with aiohttp.ClientSession(trace_configs=[create_trace_config()]) as session: async with session.get(url) as response: diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/test_aiohttp_client_integration.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/test_aiohttp_client_integration.py index 8db20c227ec..f44e3df2da6 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/test_aiohttp_client_integration.py +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/tests/test_aiohttp_client_integration.py @@ -22,7 +22,7 @@ import aiohttp.test_utils import yarl -import opentelemetry.ext.aiohttp_client +import opentelemetry.instrumentation.aiohttp_client from opentelemetry.test.test_base import TestBase from opentelemetry.trace.status import StatusCanonicalCode @@ -53,7 +53,7 @@ def test_url_path_span_name(self): ): with self.subTest(url=url): params = aiohttp.TraceRequestStartParams("METHOD", url, {}) - actual = opentelemetry.ext.aiohttp_client.url_path_span_name( + actual = opentelemetry.instrumentation.aiohttp_client.url_path_span_name( params ) self.assertEqual(actual, expected) @@ -110,7 +110,7 @@ def test_status_codes(self): ): with self.subTest(status_code=status_code): host, port = self._http_request( - trace_config=opentelemetry.ext.aiohttp_client.create_trace_config(), + trace_config=opentelemetry.instrumentation.aiohttp_client.create_trace_config(), url="/test-path?query=param#foobar", status_code=status_code, ) @@ -149,7 +149,7 @@ def test_span_name_option(self): ): with self.subTest(span_name=span_name, method=method, path=path): host, port = self._http_request( - trace_config=opentelemetry.ext.aiohttp_client.create_trace_config( + trace_config=opentelemetry.instrumentation.aiohttp_client.create_trace_config( span_name=span_name ), method=method, @@ -182,7 +182,7 @@ def strip_query_params(url: yarl.URL) -> str: return str(url.with_query(None)) host, port = self._http_request( - trace_config=opentelemetry.ext.aiohttp_client.create_trace_config( + trace_config=opentelemetry.instrumentation.aiohttp_client.create_trace_config( url_filter=strip_query_params ), url="/some/path?query=param&other=param2", @@ -209,7 +209,7 @@ def strip_query_params(url: yarl.URL) -> str: def test_connection_errors(self): trace_configs = [ - opentelemetry.ext.aiohttp_client.create_trace_config() + opentelemetry.instrumentation.aiohttp_client.create_trace_config() ] for url, expected_status in ( @@ -251,7 +251,7 @@ async def request_handler(request): return aiohttp.web.Response() host, port = self._http_request( - trace_config=opentelemetry.ext.aiohttp_client.create_trace_config(), + trace_config=opentelemetry.instrumentation.aiohttp_client.create_trace_config(), url="/test_timeout", request_handler=request_handler, timeout=aiohttp.ClientTimeout(sock_read=0.01), @@ -281,7 +281,7 @@ async def request_handler(request): raise aiohttp.web.HTTPFound(location=location) host, port = self._http_request( - trace_config=opentelemetry.ext.aiohttp_client.create_trace_config(), + trace_config=opentelemetry.instrumentation.aiohttp_client.create_trace_config(), url="/test_too_many_redirects", request_handler=request_handler, max_redirects=2, diff --git a/instrumentation/opentelemetry-instrumentation-asgi/README.rst b/instrumentation/opentelemetry-instrumentation-asgi/README.rst index bc286e5c8b1..f2b760976a7 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/README.rst +++ b/instrumentation/opentelemetry-instrumentation-asgi/README.rst @@ -3,8 +3,8 @@ OpenTelemetry ASGI Middleware |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-asgi.svg - :target: https://pypi.org/project/opentelemetry-ext-asgi/ +.. |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 @@ -15,7 +15,7 @@ Installation :: - pip install opentelemetry-ext-asgi + pip install opentelemetry-instrumentation-asgi Usage (Quart) @@ -24,7 +24,7 @@ Usage (Quart) .. code-block:: python from quart import Quart - from opentelemetry.ext.asgi import OpenTelemetryMiddleware + from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware app = Quart(__name__) app.asgi_app = OpenTelemetryMiddleware(app.asgi_app) @@ -46,7 +46,7 @@ Modify the application's ``asgi.py`` file as shown below. import os from django.core.asgi import get_asgi_application - from opentelemetry.ext.asgi import OpenTelemetryMiddleware + from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'asgi_example.settings') diff --git a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py index 43b8804c245..02aabfea95c 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py @@ -13,7 +13,7 @@ # limitations under the License. """ -The opentelemetry-ext-asgi package provides an ASGI middleware that can be used +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. """ @@ -27,7 +27,7 @@ from asgiref.compatibility import guarantee_single_callable from opentelemetry import context, propagators, trace -from opentelemetry.ext.asgi.version import __version__ # noqa +from opentelemetry.instrumentation.asgi.version import __version__ # noqa from opentelemetry.instrumentation.utils import http_status_to_canonical_code from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py b/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py index 05aa84b3c41..f994e25966c 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py @@ -16,7 +16,7 @@ import unittest import unittest.mock as mock -import opentelemetry.ext.asgi as otel_asgi +import opentelemetry.instrumentation.asgi as otel_asgi from opentelemetry import trace as trace_api from opentelemetry.test.asgitestutil import ( AsgiTestBase, diff --git a/instrumentation/opentelemetry-instrumentation-django/README.rst b/instrumentation/opentelemetry-instrumentation-django/README.rst index 1759cb6602a..c80587ec075 100644 --- a/instrumentation/opentelemetry-instrumentation-django/README.rst +++ b/instrumentation/opentelemetry-instrumentation-django/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Django Tracing |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-django.svg - :target: https://pypi.org/project/opentelemetry-ext-django/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-django.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-django/ This library allows tracing requests for Django applications. @@ -13,7 +13,7 @@ Installation :: - pip install opentelemetry-ext-django + pip install opentelemetry-instrumentation-django Configuration ------------- diff --git a/instrumentation/opentelemetry-instrumentation-django/setup.cfg b/instrumentation/opentelemetry-instrumentation-django/setup.cfg index 53cdf3373ad..b2ccaf22b81 100644 --- a/instrumentation/opentelemetry-instrumentation-django/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-django/setup.cfg @@ -41,7 +41,7 @@ package_dir= packages=find_namespace: install_requires = django >= 1.10 - opentelemetry-ext-wsgi == 0.12.dev0 + opentelemetry-instrumentation-wsgi == 0.12.dev0 opentelemetry-instrumentation == 0.12.dev0 opentelemetry-api == 0.12.dev0 diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py index 3eb3b2dd728..e0992e9a30f 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py @@ -17,7 +17,7 @@ from django.conf import settings from opentelemetry.configuration import Configuration -from opentelemetry.ext.django.middleware import _DjangoMiddleware +from opentelemetry.instrumentation.django.middleware import _DjangoMiddleware from opentelemetry.instrumentation.instrumentor import BaseInstrumentor _logger = getLogger(__name__) diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py index c0cb2447564..2c155b1be14 100644 --- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py @@ -16,8 +16,8 @@ from opentelemetry.configuration import Configuration from opentelemetry.context import attach, detach -from opentelemetry.ext.django.version import __version__ -from opentelemetry.ext.wsgi import ( +from opentelemetry.instrumentation.django.version import __version__ +from opentelemetry.instrumentation.wsgi import ( add_response_attributes, collect_request_attributes, get_header_from_environ, diff --git a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py index e5c3e10d03b..3250ac0c1c3 100644 --- a/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py @@ -21,7 +21,7 @@ from django.test.utils import setup_test_environment, teardown_test_environment from opentelemetry.configuration import Configuration -from opentelemetry.ext.django import DjangoInstrumentor +from opentelemetry.instrumentation.django import DjangoInstrumentor from opentelemetry.test.wsgitestutil import WsgiTestBase from opentelemetry.trace import SpanKind from opentelemetry.trace.status import StatusCanonicalCode @@ -116,7 +116,7 @@ def test_error(self): self.assertEqual(span.attributes["http.scheme"], "http") @patch( - "opentelemetry.ext.django.middleware._DjangoMiddleware._excluded_urls", + "opentelemetry.instrumentation.django.middleware._DjangoMiddleware._excluded_urls", ExcludeList(["http://testserver/excluded_arg/123", "excluded_noarg"]), ) def test_exclude_lists(self): diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg b/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg index b700b3d724a..e0267dc5c92 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg @@ -39,7 +39,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 - opentelemetry-ext-asgi == 0.12.dev0 + opentelemetry-instrumentation-asgi == 0.12.dev0 [options.entry_points] opentelemetry_instrumentor = diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py index 65d608393d7..57c9a5bfc79 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py @@ -16,7 +16,7 @@ import fastapi from starlette.routing import Match -from opentelemetry.ext.asgi import OpenTelemetryMiddleware +from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware from opentelemetry.instrumentation.fastapi.version import __version__ # noqa from opentelemetry.instrumentation.instrumentor import BaseInstrumentor diff --git a/instrumentation/opentelemetry-instrumentation-flask/README.rst b/instrumentation/opentelemetry-instrumentation-flask/README.rst index 395053972ef..533d9b04687 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/README.rst +++ b/instrumentation/opentelemetry-instrumentation-flask/README.rst @@ -3,8 +3,8 @@ OpenTelemetry Flask Tracing |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-flask.svg - :target: https://pypi.org/project/opentelemetry-ext-flask/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-flask.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-flask/ This library builds on the OpenTelemetry WSGI middleware to track web requests in Flask applications. @@ -14,7 +14,7 @@ Installation :: - pip install opentelemetry-ext-flask + pip install opentelemetry-instrumentation-flask Configuration ------------- diff --git a/instrumentation/opentelemetry-instrumentation-flask/setup.cfg b/instrumentation/opentelemetry-instrumentation-flask/setup.cfg index cda290f90a9..281a11249dc 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-flask/setup.cfg @@ -41,7 +41,7 @@ package_dir= packages=find_namespace: install_requires = flask ~= 1.0 - opentelemetry-ext-wsgi == 0.12.dev0 + opentelemetry-instrumentation-wsgi == 0.12.dev0 opentelemetry-instrumentation == 0.12.dev0 opentelemetry-api == 0.12.dev0 diff --git a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py index 464958a7e99..d1936b1cd36 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py @@ -17,7 +17,7 @@ """ This library builds on the OpenTelemetry WSGI middleware to track web requests -in Flask applications. In addition to opentelemetry-ext-wsgi, it supports +in Flask applications. In addition to opentelemetry-instrumentation-wsgi, it supports flask-specific features such as: * The Flask endpoint name is used as the Span name. @@ -30,7 +30,7 @@ .. code-block:: python from flask import Flask - from opentelemetry.ext.flask import FlaskInstrumentor + from opentelemetry.instrumentation.flask import FlaskInstrumentor app = Flask(__name__) @@ -51,9 +51,9 @@ def hello(): import flask -import opentelemetry.ext.wsgi as otel_wsgi +import opentelemetry.instrumentation.wsgi as otel_wsgi from opentelemetry import configuration, context, propagators, trace -from opentelemetry.ext.flask.version import __version__ +from opentelemetry.instrumentation.flask.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.util import ExcludeList, time_ns diff --git a/instrumentation/opentelemetry-instrumentation-flask/tests/test_automatic.py b/instrumentation/opentelemetry-instrumentation-flask/tests/test_automatic.py index b94c7b33d6b..d081bed9ee8 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/tests/test_automatic.py +++ b/instrumentation/opentelemetry-instrumentation-flask/tests/test_automatic.py @@ -16,7 +16,7 @@ from werkzeug.test import Client from werkzeug.wrappers import BaseResponse -from opentelemetry.ext.flask import FlaskInstrumentor +from opentelemetry.instrumentation.flask import FlaskInstrumentor from opentelemetry.test.test_base import TestBase from opentelemetry.test.wsgitestutil import WsgiTestBase diff --git a/instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py b/instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py index 3a15979cb47..181f4e1e61e 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py +++ b/instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py @@ -17,7 +17,7 @@ from flask import Flask, request from opentelemetry import trace -from opentelemetry.ext.flask import FlaskInstrumentor +from opentelemetry.instrumentation.flask import FlaskInstrumentor from opentelemetry.test.test_base import TestBase from opentelemetry.test.wsgitestutil import WsgiTestBase from opentelemetry.util import ExcludeList @@ -144,7 +144,7 @@ def test_internal_error(self): self.assertEqual(span_list[0].attributes, expected_attrs) @patch( - "opentelemetry.ext.flask._excluded_urls", + "opentelemetry.instrumentation.flask._excluded_urls", ExcludeList(["http://localhost/excluded_arg/123", "excluded_noarg"]), ) def test_exclude_lists(self): diff --git a/instrumentation/opentelemetry-instrumentation-grpc/README.rst b/instrumentation/opentelemetry-instrumentation-grpc/README.rst index 335c03614b9..176bdf1a39b 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/README.rst +++ b/instrumentation/opentelemetry-instrumentation-grpc/README.rst @@ -3,8 +3,8 @@ OpenTelemetry gRPC Integration |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-grpc.svg - :target: https://pypi.org/project/opentelemetry-ext-grpc/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-grpc.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-grpc/ Client and server interceptors for `gRPC Python`_. @@ -15,4 +15,4 @@ Installation :: - pip install opentelemetry-ext-grpc + pip install opentelemetry-instrumentation-grpc diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py index 1a665662818..1d05153a007 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py @@ -26,7 +26,7 @@ import grpc from opentelemetry import trace - from opentelemetry.ext.grpc import GrpcInstrumentorClient, client_interceptor + from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient, client_interceptor from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, @@ -77,8 +77,8 @@ def run(): import grpc from opentelemetry import trace - from opentelemetry.ext.grpc import GrpcInstrumentorServer, server_interceptor - from opentelemetry.ext.grpc.grpcext import intercept_server + from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer, server_interceptor + from opentelemetry.instrumentation.grpc.grpcext import intercept_server from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, @@ -124,8 +124,8 @@ def serve(): from wrapt import wrap_function_wrapper as _wrap from opentelemetry import trace -from opentelemetry.ext.grpc.grpcext import intercept_channel, intercept_server -from opentelemetry.ext.grpc.version import __version__ +from opentelemetry.instrumentation.grpc.grpcext import intercept_channel, intercept_server +from opentelemetry.instrumentation.grpc.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py index a668f05ca79..ab7c7b5cbaf 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py @@ -14,9 +14,9 @@ import grpc -import opentelemetry.ext.grpc +import opentelemetry.instrumentation.grpc from opentelemetry import trace -from opentelemetry.ext.grpc import GrpcInstrumentorClient +from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient from opentelemetry.sdk.metrics.export.aggregate import ( MinMaxSumCountAggregator, SumAggregator, @@ -107,7 +107,7 @@ def test_unary_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") @@ -121,7 +121,7 @@ def test_unary_stream(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) self._verify_success_records( 8, 40, "/GRPCTestServer/ServerStreamingMethod" @@ -137,7 +137,7 @@ def test_stream_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) self._verify_success_records( 40, 8, "/GRPCTestServer/ClientStreamingMethod" @@ -155,7 +155,7 @@ def test_stream_stream(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) self._verify_success_records( 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" @@ -285,4 +285,4 @@ def test_unary_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py index 0ba57a43228..f5a2317119e 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py @@ -20,10 +20,10 @@ import grpc -import opentelemetry.ext.grpc +import opentelemetry.instrumentation.grpc from opentelemetry import trace -from opentelemetry.ext.grpc import GrpcInstrumentorServer, server_interceptor -from opentelemetry.ext.grpc.grpcext import intercept_server +from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer, server_interceptor +from opentelemetry.instrumentation.grpc.grpcext import intercept_server from opentelemetry.sdk import trace as trace_sdk from opentelemetry.test.test_base import TestBase @@ -76,7 +76,7 @@ def handler(request, context): span = spans_list[0] self.assertEqual(span.name, "test") self.assertIs(span.kind, trace.SpanKind.SERVER) - self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) grpc_server_instrumentor.uninstrument() def test_uninstrument(self): @@ -141,7 +141,7 @@ def handler(request, context): self.assertIs(span.kind, trace.SpanKind.SERVER) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) def test_span_lifetime(self): """Check that the span is active for the duration of the call.""" diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/README.rst b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst index 319d6bff4ce..e6162095bf5 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/README.rst +++ b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst @@ -3,15 +3,15 @@ OpenTelemetry Pyramid Integration |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-pyramid.svg - :target: https://pypi.org/project/opentelemetry-ext-pyramid/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-pyramid.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-pyramid/ Installation ------------ :: - pip install opentelemetry-ext-pyramid + pip install opentelemetry-instrumentation-pyramid Exclude lists ************* diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg b/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg index 1b31a53f6c8..7f23f27ca5a 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg @@ -43,7 +43,7 @@ install_requires = pyramid >= 1.7 opentelemetry-instrumentation == 0.12.dev0 opentelemetry-api == 0.12.dev0 - opentelemetry-ext-wsgi == 0.12.dev0 + opentelemetry-instrumentation-wsgi == 0.12.dev0 wrapt >= 1.0.0, < 2.0.0 [options.extras_require] diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py index c3db25ee7cb..c8bf1cafe91 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py @@ -28,7 +28,7 @@ .. code:: python from pyramid.config import Configurator - from opentelemetry.ext.pyramid import PyramidInstrumentor + from opentelemetry.instrumentation.pyramid import PyramidInstrumentor PyramidInstrumentor().instrument() @@ -43,7 +43,7 @@ .. code:: python from pyramid.config import Configurator - from opentelemetry.ext.pyramid import PyramidInstrumentor + from opentelemetry.instrumentation.pyramid import PyramidInstrumentor config = Configurator() PyramidInstrumentor().instrument_config(config) @@ -55,7 +55,7 @@ --------------------------------- If you use Method 2 and then set tweens for your application with the ``pyramid.tweens`` setting, -you need to add ``opentelemetry.ext.pyramid.trace_tween_factory`` explicity to the list, +you need to add ``opentelemetry.instrumentation.pyramid.trace_tween_factory`` explicity to the list, *as well as* instrumenting the config as shown above. For example: @@ -63,10 +63,10 @@ .. code:: python from pyramid.config import Configurator - from opentelemetry.ext.pyramid import PyramidInstrumentor + from opentelemetry.instrumentation.pyramid import PyramidInstrumentor settings = { - 'pyramid.tweens', 'opentelemetry.ext.pyramid.trace_tween_factory\\nyour_tween_no_1\\nyour_tween_no_2', + 'pyramid.tweens', 'opentelemetry.instrumentation.pyramid.trace_tween_factory\\nyour_tween_no_1\\nyour_tween_no_2', } config = Configurator(settings=settings) PyramidInstrumentor().instrument_config(config) @@ -86,12 +86,12 @@ from wrapt import ObjectProxy from wrapt import wrap_function_wrapper as _wrap -from opentelemetry.ext.pyramid.callbacks import ( +from opentelemetry.instrumentation.pyramid.callbacks import ( SETTING_TRACE_ENABLED, TWEEN_NAME, trace_tween_factory, ) -from opentelemetry.ext.pyramid.version import __version__ +from opentelemetry.instrumentation.pyramid.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap from opentelemetry.trace import TracerProvider, get_tracer @@ -121,7 +121,7 @@ def _traced_init(wrapped, instance, args, kwargs): kwargs["package"] = caller_package(level=3) wrapped(*args, **kwargs) - instance.include("opentelemetry.ext.pyramid.callbacks") + instance.include("opentelemetry.instrumentation.pyramid.callbacks") class PyramidInstrumentor(BaseInstrumentor): @@ -142,7 +142,7 @@ def instrument_config(self, config): Args: config: The Configurator to instrument. """ - config.include("opentelemetry.ext.pyramid.callbacks") + config.include("opentelemetry.instrumentation.pyramid.callbacks") def uninstrument_config(self, config): config.add_settings({SETTING_TRACE_ENABLED: False}) diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py index 4d3b81fdabf..fe45c39e2a7 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py @@ -5,12 +5,12 @@ from pyramid.settings import asbool from pyramid.tweens import EXCVIEW -import opentelemetry.ext.wsgi as otel_wsgi +import opentelemetry.instrumentation.wsgi as otel_wsgi from opentelemetry import configuration, context, propagators, trace -from opentelemetry.ext.pyramid.version import __version__ +from opentelemetry.instrumentation.pyramid.version import __version__ from opentelemetry.util import ExcludeList, time_ns -TWEEN_NAME = "opentelemetry.ext.pyramid.trace_tween_factory" +TWEEN_NAME = "opentelemetry.instrumentation.pyramid.trace_tween_factory" SETTING_TRACE_ENABLED = "opentelemetry-pyramid.trace_enabled" _ENVIRON_STARTTIME_KEY = "opentelemetry-pyramid.starttime_key" @@ -57,7 +57,7 @@ def _before_traversal(event): enabled = environ.get(_ENVIRON_ENABLED_KEY) if enabled is None: _logger.warning( - "Opentelemetry pyramid tween 'opentelemetry.ext.pyramid.trace_tween_factory'" + "Opentelemetry pyramid tween 'opentelemetry.instrumentation.pyramid.trace_tween_factory'" "was not called. Make sure that the tween is included in 'pyramid.tweens' if" "the tween list was created manually" ) diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_automatic.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_automatic.py index d19da3c2b36..b065e260648 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_automatic.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_automatic.py @@ -14,7 +14,7 @@ from pyramid.config import Configurator -from opentelemetry.ext.pyramid import PyramidInstrumentor +from opentelemetry.instrumentation.pyramid import PyramidInstrumentor from opentelemetry.test.test_base import TestBase from opentelemetry.test.wsgitestutil import WsgiTestBase diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py index d086fc37eb9..69ce8e21d55 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py @@ -17,7 +17,7 @@ from pyramid.config import Configurator from opentelemetry import trace -from opentelemetry.ext.pyramid import PyramidInstrumentor +from opentelemetry.instrumentation.pyramid import PyramidInstrumentor from opentelemetry.test.test_base import TestBase from opentelemetry.test.wsgitestutil import WsgiTestBase from opentelemetry.util import ExcludeList @@ -125,7 +125,7 @@ def test_internal_error(self): self.assertEqual(span_list[0].attributes, expected_attrs) def test_tween_list(self): - tween_list = "opentelemetry.ext.pyramid.trace_tween_factory\npyramid.tweens.excview_tween_factory" + tween_list = "opentelemetry.instrumentation.pyramid.trace_tween_factory\npyramid.tweens.excview_tween_factory" config = Configurator(settings={"pyramid.tweens": tween_list}) PyramidInstrumentor().instrument_config(config) self._common_initialization(config) @@ -146,7 +146,7 @@ def test_tween_list(self): span_list = self.memory_exporter.get_finished_spans() self.assertEqual(len(span_list), 1) - @patch("opentelemetry.ext.pyramid.callbacks._logger") + @patch("opentelemetry.instrumentation.pyramid.callbacks._logger") def test_warnings(self, mock_logger): tween_list = "pyramid.tweens.excview_tween_factory" config = Configurator(settings={"pyramid.tweens": tween_list}) @@ -160,7 +160,7 @@ def test_warnings(self, mock_logger): mock_logger.warning.called = False - tween_list = "opentelemetry.ext.pyramid.trace_tween_factory" + tween_list = "opentelemetry.instrumentation.pyramid.trace_tween_factory" config = Configurator(settings={"pyramid.tweens": tween_list}) self._common_initialization(config) @@ -170,7 +170,7 @@ def test_warnings(self, mock_logger): self.assertEqual(mock_logger.warning.called, True) @patch( - "opentelemetry.ext.pyramid.callbacks._excluded_urls", + "opentelemetry.instrumentation.pyramid.callbacks._excluded_urls", ExcludeList(["http://localhost/excluded_arg/123", "excluded_noarg"]), ) def test_exclude_lists(self): diff --git a/instrumentation/opentelemetry-instrumentation-requests/README.rst b/instrumentation/opentelemetry-instrumentation-requests/README.rst index 95d80d4997b..e189426e7ed 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/README.rst +++ b/instrumentation/opentelemetry-instrumentation-requests/README.rst @@ -3,8 +3,8 @@ OpenTelemetry requests Integration |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-requests.svg - :target: https://pypi.org/project/opentelemetry-ext-requests/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-requests.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-requests/ This library allows tracing HTTP requests made by the `requests `_ library. @@ -14,10 +14,10 @@ Installation :: - pip install opentelemetry-ext-requests + pip install opentelemetry-instrumentation-requests References ---------- -* `OpenTelemetry requests Integration `_ +* `OpenTelemetry requests Integration `_ * `OpenTelemetry Project `_ 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 a4db0591c8b..47925c56517 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py @@ -22,11 +22,11 @@ .. code-block:: python import requests - import opentelemetry.ext.requests + import opentelemetry.instrumentation.requests # You can optionally pass a custom TracerProvider to RequestInstrumentor.instrument() - opentelemetry.ext.requests.RequestsInstrumentor().instrument() + opentelemetry.instrumentation.requests.RequestsInstrumentor().instrument() response = requests.get(url="https://www.example.org/") Limitations @@ -51,7 +51,7 @@ from requests.sessions import Session from opentelemetry import context, propagators -from opentelemetry.ext.requests.version import __version__ +from opentelemetry.instrumentation.requests.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import http_status_to_canonical_code from opentelemetry.trace import SpanKind, get_tracer diff --git a/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py b/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py index 75a63f3cf8c..12410449947 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py +++ b/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py @@ -17,9 +17,9 @@ import httpretty import requests -import opentelemetry.ext.requests +import opentelemetry.instrumentation.requests from opentelemetry import context, propagators, trace -from opentelemetry.ext.requests import RequestsInstrumentor +from opentelemetry.instrumentation.requests import RequestsInstrumentor from opentelemetry.sdk import resources from opentelemetry.test.mock_httptextformat import MockHTTPTextFormat from opentelemetry.test.test_base import TestBase @@ -68,7 +68,7 @@ def test_basic(self): span.status.canonical_code, trace.status.StatusCanonicalCode.OK ) - self.check_span_instrumentation_info(span, opentelemetry.ext.requests) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.requests) def test_not_foundbasic(self): url_404 = "http://httpbin.org/status/404" diff --git a/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg b/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg index f1613a8cd8f..694571efc67 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg @@ -39,7 +39,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 - opentelemetry-ext-asgi == 0.12.dev0 + opentelemetry-instrumentation-asgi == 0.12.dev0 [options.entry_points] opentelemetry_instrumentor = diff --git a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py index b8763bba055..f469447f3ac 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py @@ -16,7 +16,7 @@ from starlette import applications from starlette.routing import Match -from opentelemetry.ext.asgi import OpenTelemetryMiddleware +from opentelemetry.instrumentation.asgi import OpenTelemetryMiddleware from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.starlette.version import __version__ # noqa diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/README.rst b/instrumentation/opentelemetry-instrumentation-wsgi/README.rst index 12ee81cb098..52185d745ac 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/README.rst +++ b/instrumentation/opentelemetry-instrumentation-wsgi/README.rst @@ -3,8 +3,8 @@ OpenTelemetry WSGI Middleware |pypi| -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-wsgi.svg - :target: https://pypi.org/project/opentelemetry-ext-wsgi/ +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-wsgi.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-wsgi/ This library provides a WSGI middleware that can be used on any WSGI framework @@ -15,7 +15,7 @@ Installation :: - pip install opentelemetry-ext-wsgi + pip install opentelemetry-instrumentation-wsgi References diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py index 709de24edf2..151ff7ab21f 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py @@ -21,7 +21,7 @@ .. code-block:: python from flask import Flask - from opentelemetry.ext.wsgi import OpenTelemetryMiddleware + from opentelemetry.instrumentation.wsgi import OpenTelemetryMiddleware app = Flask(__name__) app.wsgi_app = OpenTelemetryMiddleware(app.wsgi_app) @@ -42,7 +42,7 @@ def hello(): .. code-block:: python import os - from opentelemetry.ext.wsgi import OpenTelemetryMiddleware + from opentelemetry.instrumentation.wsgi import OpenTelemetryMiddleware from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings') @@ -59,7 +59,7 @@ def hello(): import wsgiref.util as wsgiref_util from opentelemetry import context, propagators, trace -from opentelemetry.ext.wsgi.version import __version__ +from opentelemetry.instrumentation.wsgi.version import __version__ from opentelemetry.instrumentation.utils import http_status_to_canonical_code from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py b/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py index 2a2d518513f..5734027b0aa 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py @@ -18,7 +18,7 @@ import wsgiref.util as wsgiref_util from urllib.parse import urlsplit -import opentelemetry.ext.wsgi as otel_wsgi +import opentelemetry.instrumentation.wsgi as otel_wsgi from opentelemetry import trace as trace_api from opentelemetry.test.wsgitestutil import WsgiTestBase from opentelemetry.trace.status import StatusCanonicalCode diff --git a/opentelemetry-api/src/opentelemetry/metrics/__init__.py b/opentelemetry-api/src/opentelemetry/metrics/__init__.py index 90f2f03f56b..66f5c638836 100644 --- a/opentelemetry-api/src/opentelemetry/metrics/__init__.py +++ b/opentelemetry-api/src/opentelemetry/metrics/__init__.py @@ -275,7 +275,7 @@ def get_meter( This should *not* be the name of the module that is instrumented but the name of the module doing the instrumentation. E.g., instead of ``"requests"``, use - ``"opentelemetry.ext.requests"``. + ``"opentelemetry.instrumentation.requests"``. instrumenting_library_version: Optional. The version string of the instrumenting library. Usually this should be the same as diff --git a/opentelemetry-api/src/opentelemetry/trace/__init__.py b/opentelemetry-api/src/opentelemetry/trace/__init__.py index 196cf3390cd..ffda0a15e71 100644 --- a/opentelemetry-api/src/opentelemetry/trace/__init__.py +++ b/opentelemetry-api/src/opentelemetry/trace/__init__.py @@ -242,7 +242,7 @@ def get_tracer( This should *not* be the name of the module that is instrumented but the name of the module doing the instrumentation. E.g., instead of ``"requests"``, use - ``"opentelemetry.ext.requests"``. + ``"opentelemetry.instrumentation.requests"``. instrumenting_library_version: Optional. The version string of the instrumenting library. Usually this should be the same as diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py index f624a2e4dde..049388bbaa4 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py @@ -25,58 +25,58 @@ # target library to desired instrumentor path/versioned package name instrumentations = { - "asgi": "opentelemetry-ext-asgi>=0.11b0", + "asgi": "opentelemetry-instrumentation-asgi>=0.11b0", "asyncpg": "opentelemetry-ext-asyncpg>=0.11b0", "boto": "opentelemetry-ext-boto>=0.11b0", "botocore": "opentelemetry-ext-botocore>=0.11b0", "celery": "opentelemetry-ext-celery>=0.11b0", "dbapi": "opentelemetry-ext-dbapi>=0.8b0", - "django": "opentelemetry-ext-django>=0.8b0", + "django": "opentelemetry-instrumentation-django>=0.8b0", "elasticsearch": "opentelemetry-ext-elasticsearch>=0.11b0", "fastapi": "opentelemetry-instrumentation-fastapi>=0.11b0", - "flask": "opentelemetry-ext-flask>=0.8b0", - "grpc": "opentelemetry-ext-grpc>=0.8b0", + "flask": "opentelemetry-instrumentation-flask>=0.8b0", + "grpc": "opentelemetry-instrumentation-grpc>=0.8b0", "jinja2": "opentelemetry-ext-jinja2>=0.8b0", "mysql": "opentelemetry-ext-mysql>=0.8b0", "psycopg2": "opentelemetry-ext-psycopg2>=0.8b0", "pymemcache": "opentelemetry-ext-pymemcache>=0.11b0", "pymongo": "opentelemetry-ext-pymongo>=0.8b0", "pymysql": "opentelemetry-ext-pymysql>=0.8b0", - "pyramid": "opentelemetry-ext-pyramid>=0.11b0", + "pyramid": "opentelemetry-instrumentation-pyramid>=0.11b0", "redis": "opentelemetry-ext-redis>=0.8b0", - "requests": "opentelemetry-ext-requests>=0.8b0", + "requests": "opentelemetry-instrumentation-requests>=0.8b0", "sqlalchemy": "opentelemetry-ext-sqlalchemy>=0.8b0", "sqlite3": "opentelemetry-ext-sqlite3>=0.11b0", "starlette": "opentelemetry-instrumentation-starlette>=0.11b0", - "wsgi": "opentelemetry-ext-wsgi>=0.8b0", + "wsgi": "opentelemetry-instrumentation-wsgi>=0.8b0", } # relevant instrumentors and tracers to uninstall and check for conflicts for target libraries libraries = { - "asgi": ("opentelemetry-ext-asgi",), + "asgi": ("opentelemetry-instrumentation-asgi",), "asyncpg": ("opentelemetry-ext-asyncpg",), "boto": ("opentelemetry-ext-boto",), "botocore": ("opentelemetry-ext-botocore",), "celery": ("opentelemetry-ext-celery",), "dbapi": ("opentelemetry-ext-dbapi",), - "django": ("opentelemetry-ext-django",), + "django": ("opentelemetry-instrumentation-django",), "elasticsearch": ("opentelemetry-ext-elasticsearch",), "fastapi": ("opentelemetry-instrumentation-fastapi",), - "flask": ("opentelemetry-ext-flask",), - "grpc": ("opentelemetry-ext-grpc",), + "flask": ("opentelemetry-instrumentation-flask",), + "grpc": ("opentelemetry-instrumentation-grpc",), "jinja2": ("opentelemetry-ext-jinja2",), "mysql": ("opentelemetry-ext-mysql",), "psycopg2": ("opentelemetry-ext-psycopg2",), "pymemcache": ("opentelemetry-ext-pymemcache",), "pymongo": ("opentelemetry-ext-pymongo",), "pymysql": ("opentelemetry-ext-pymysql",), - "pyramid": ("opentelemetry-ext-pyramid",), + "pyramid": ("opentelemetry-instrumentation-pyramid",), "redis": ("opentelemetry-ext-redis",), - "requests": ("opentelemetry-ext-requests",), + "requests": ("opentelemetry-instrumentation-requests",), "sqlalchemy": ("opentelemetry-ext-sqlalchemy",), "sqlite3": ("opentelemetry-ext-sqlite3",), "starlette": ("opentelemetry-instrumentation-starlette",), - "wsgi": ("opentelemetry-ext-wsgi",), + "wsgi": ("opentelemetry-instrumentation-wsgi",), } @@ -87,10 +87,10 @@ def _install_package(library, instrumentation): OpenTelemetry auto-instrumentation packages often have traced libraries - as instrumentation dependency (e.g. flask for opentelemetry-ext-flask), - so using -I on library could cause likely undesired Flask upgrade. - Using --no-dependencies alone would leave potential for nonfunctional - installations. + as instrumentation dependency (e.g. flask for + opentelemetry-instrumentation-flask), so using -I on library could cause + likely undesired Flask upgrade.Using --no-dependencies alone would leave + potential for nonfunctional installations. """ pip_list = _sys_pip_freeze() for package in libraries[library]: @@ -159,7 +159,7 @@ def _pip_check(): Clean check reported as: 'No broken requirements found.' Dependency conflicts are reported as: - 'opentelemetry-ext-flask 1.0.1 has requirement opentelemetry-sdk<2.0,>=1.0, but you have opentelemetry-sdk 0.5.' + 'opentelemetry-instrumentation-flask 1.0.1 has requirement opentelemetry-sdk<2.0,>=1.0, but you have opentelemetry-sdk 0.5.' To not be too restrictive, we'll only check for relevant packages. """ check_pipe = subprocess.Popen( diff --git a/scripts/coverage.sh b/scripts/coverage.sh index 5cf393e7e66..ccbd401955d 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -32,20 +32,20 @@ coverage erase cov opentelemetry-api cov opentelemetry-sdk cov exporter/opentelemetry-exporter-datadog -cov ext/opentelemetry-ext-flask -cov ext/opentelemetry-ext-requests +cov instrumentation/opentelemetry-instrumentation-flask +cov instrumentation/opentelemetry-instrumentation-requests cov exporter/opentelemetry-exporter-jaeger cov ext/opentelemetry-ext-opentracing-shim -cov ext/opentelemetry-ext-wsgi +cov instrumentation/opentelemetry-instrumentation-wsgi cov exporter/opentelemetry-exporter-zipkin cov docs/examples/opentelemetry-example-app # aiohttp is only supported on Python 3.5+. if [ ${PYTHON_VERSION_INFO[1]} -gt 4 ]; then - cov ext/opentelemetry-ext-aiohttp-client + cov ext/opentelemetry-instrumentation-aiohttp-client # ext-asgi is only supported on Python 3.5+. if [ ${PYTHON_VERSION_INFO[1]} -gt 4 ]; then - cov ext/opentelemetry-ext-asgi + cov ext/opentelemetry-instrumentation-asgi fi coverage report --show-missing diff --git a/tests/w3c_tracecontext_validation_server.py b/tests/w3c_tracecontext_validation_server.py index 5961a3b0396..f2fb14f206d 100644 --- a/tests/w3c_tracecontext_validation_server.py +++ b/tests/w3c_tracecontext_validation_server.py @@ -24,8 +24,8 @@ import requests from opentelemetry import trace -from opentelemetry.ext.requests import RequestsInstrumentor -from opentelemetry.ext.wsgi import OpenTelemetryMiddleware +from opentelemetry.instrumentation.requests import RequestsInstrumentor +from opentelemetry.instrumentation.wsgi import OpenTelemetryMiddleware from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/tox.ini b/tox.ini index d5027527d8f..651e6d86463 100644 --- a/tox.ini +++ b/tox.ini @@ -197,7 +197,7 @@ changedir = test-core-getting-started: docs/getting_started/tests test-core-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests - test-instrumentation-aiohttp-client: ext/opentelemetry-ext-aiohttp-client/tests + test-instrumentation-aiohttp-client: instrumentation/opentelemetry-instrumentation-aiohttp-client/tests test-instrumentation-aiopg: ext/opentelemetry-instrumentation-aiopg/tests test-instrumentation-asgi: instrumentation/opentelemetry-instrumentation-asgi/tests test-instrumentation-asyncpg: ext/opentelemetry-ext-asyncpg/tests @@ -205,7 +205,7 @@ changedir = test-instrumentation-botocore: ext/opentelemetry-ext-botocore/tests test-instrumentation-celery: ext/opentelemetry-ext-celery/tests test-instrumentation-dbapi: ext/opentelemetry-ext-dbapi/tests - test-instrumentation-django: ext/opentelemetry-ext-django/tests + test-instrumentation-django: instrumentation/opentelemetry-instrumentation-django/tests test-instrumentation-example-app: docs/examples/opentelemetry-example-app/tests test-instrumentation-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests test-instrumentation-fastapi: ext/opentelemetry-instrumentation-fastapi/tests @@ -265,7 +265,7 @@ commands_pre = dbapi: pip install {toxinidir}/ext/opentelemetry-ext-dbapi[test] - django: pip install {toxinidir}/ext/opentelemetry-ext-django[test] + django: pip install {toxinidir}/ext/opentelemetry-instrumentation-django[test] fastapi: pip install {toxinidir}/ext/opentelemetry-instrumentation-fastapi[test] From b8277ed18088a67094dc463f2e4877d6eba02b33 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 02:06:47 -0700 Subject: [PATCH 16/35] tox --- docs/ext/fastapi/fastapi.rst | 2 +- docs/ext/starlette/starlette.rst | 2 +- .../README.rst | 2 +- .../setup.cfg | 4 ++-- .../README.rst | 2 +- .../setup.cfg | 2 +- .../README.rst | 2 +- .../README.rst | 2 +- .../setup.cfg | 2 +- .../README.rst | 2 +- tox.ini | 16 ++++++++-------- 11 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/ext/fastapi/fastapi.rst b/docs/ext/fastapi/fastapi.rst index 9295261584b..09eb8a828b3 100644 --- a/docs/ext/fastapi/fastapi.rst +++ b/docs/ext/fastapi/fastapi.rst @@ -1,4 +1,4 @@ -.. include:: ../../../ext/opentelemetry-instrumentation-fastapi/README.rst +.. include:: ../../../instrumentation/opentelemetry-instrumentation-fastapi/README.rst API --- diff --git a/docs/ext/starlette/starlette.rst b/docs/ext/starlette/starlette.rst index 8e2d1d7bc83..0efa8cce832 100644 --- a/docs/ext/starlette/starlette.rst +++ b/docs/ext/starlette/starlette.rst @@ -1,4 +1,4 @@ -.. include:: ../../../ext/opentelemetry-instrumentation-starlette/README.rst +.. include:: ../../../instrumentation/opentelemetry-instrumentation-starlette/README.rst API --- diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/README.rst b/instrumentation/opentelemetry-instrumentation-aiopg/README.rst index 0e9248ec1d1..b7443898a4c 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/README.rst +++ b/instrumentation/opentelemetry-instrumentation-aiopg/README.rst @@ -17,5 +17,5 @@ Installation References ---------- -* `OpenTelemetry aiopg instrumentation `_ +* `OpenTelemetry aiopg instrumentation `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg index f2428301b5e..bd9a06c5248 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-instrumentaation-aiopg +name = opentelemetry-instrumentation-aiopg description = OpenTelemetry aiopg instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-instrumentation-aiopg +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-aiopg platforms = any license = Apache-2.0 classifiers = diff --git a/instrumentation/opentelemetry-instrumentation-django/README.rst b/instrumentation/opentelemetry-instrumentation-django/README.rst index c80587ec075..e4add2214b7 100644 --- a/instrumentation/opentelemetry-instrumentation-django/README.rst +++ b/instrumentation/opentelemetry-instrumentation-django/README.rst @@ -34,5 +34,5 @@ References ---------- * `Django `_ -* `OpenTelemetry Django Tracing `_ +* `OpenTelemetry Django Tracing `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg b/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg index e0267dc5c92..f4c64744f84 100644 --- a/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg @@ -19,7 +19,7 @@ long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-instrumentation-fastapi +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-fastapi platforms = any license = Apache-2.0 classifiers = diff --git a/instrumentation/opentelemetry-instrumentation-flask/README.rst b/instrumentation/opentelemetry-instrumentation-flask/README.rst index 533d9b04687..8eaea6bdba5 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/README.rst +++ b/instrumentation/opentelemetry-instrumentation-flask/README.rst @@ -34,5 +34,5 @@ will exclude requests such as ``https://site/client/123/info`` and ``https://sit References ---------- -* `OpenTelemetry Flask Tracing `_ +* `OpenTelemetry Flask Tracing `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/README.rst b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst index e6162095bf5..95417e7c113 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/README.rst +++ b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst @@ -27,6 +27,6 @@ will exclude requests such as ``https://site/client/123/info`` and ``https://sit References ---------- -* `OpenTelemetry Pyramid Integration `_ +* `OpenTelemetry Pyramid Integration `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg b/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg index 694571efc67..905f4992e48 100644 --- a/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg @@ -19,7 +19,7 @@ long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-instrumentation-starlette +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-starlette platforms = any license = Apache-2.0 classifiers = diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/README.rst b/instrumentation/opentelemetry-instrumentation-wsgi/README.rst index 52185d745ac..ac39dac0c7c 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/README.rst +++ b/instrumentation/opentelemetry-instrumentation-wsgi/README.rst @@ -21,6 +21,6 @@ Installation References ---------- -* `OpenTelemetry WSGI Middleware `_ +* `OpenTelemetry WSGI Middleware `_ * `OpenTelemetry Project `_ * `WSGI `_ diff --git a/tox.ini b/tox.ini index 651e6d86463..22831dfc07f 100644 --- a/tox.ini +++ b/tox.ini @@ -198,7 +198,7 @@ changedir = test-core-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests test-instrumentation-aiohttp-client: instrumentation/opentelemetry-instrumentation-aiohttp-client/tests - test-instrumentation-aiopg: ext/opentelemetry-instrumentation-aiopg/tests + test-instrumentation-aiopg: instrumentation/opentelemetry-instrumentation-aiopg/tests test-instrumentation-asgi: instrumentation/opentelemetry-instrumentation-asgi/tests test-instrumentation-asyncpg: ext/opentelemetry-ext-asyncpg/tests test-instrumentation-boto: ext/opentelemetry-ext-boto/tests @@ -208,7 +208,7 @@ changedir = test-instrumentation-django: instrumentation/opentelemetry-instrumentation-django/tests test-instrumentation-example-app: docs/examples/opentelemetry-example-app/tests test-instrumentation-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests - test-instrumentation-fastapi: ext/opentelemetry-instrumentation-fastapi/tests + test-instrumentation-fastapi: instrumentation/opentelemetry-instrumentation-fastapi/tests test-instrumentation-flask: instrumentation/opentelemetry-instrumentation-flask/tests test-instrumentation-grpc: instrumentation/opentelemetry-instrumentation-grpc/tests test-instrumentation-jinja2: ext/opentelemetry-ext-jinja2/tests @@ -222,7 +222,7 @@ changedir = test-instrumentation-requests: instrumentation/opentelemetry-instrumentation-requests/tests test-instrumentation-sqlalchemy: ext/opentelemetry-ext-sqlalchemy/tests test-instrumentation-sqlite3: ext/opentelemetry-ext-sqlite3/tests - test-instrumentation-starlette: ext/opentelemetry-instrumentation-starlette/tests + test-instrumentation-starlette: instrumentation/opentelemetry-instrumentation-starlette/tests test-instrumentation-system-metrics: ext/opentelemetry-ext-system-metrics/tests test-instrumentation-wsgi: instrumentation/opentelemetry-instrumentation-wsgi/tests @@ -265,9 +265,9 @@ commands_pre = dbapi: pip install {toxinidir}/ext/opentelemetry-ext-dbapi[test] - django: pip install {toxinidir}/ext/opentelemetry-instrumentation-django[test] + django: pip install {toxinidir}/django/opentelemetry-instrumentation-django[test] - fastapi: pip install {toxinidir}/ext/opentelemetry-instrumentation-fastapi[test] + fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi[test] mysql: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-mysql[test] @@ -294,13 +294,13 @@ commands_pre = requests: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-requests[test] - starlette: pip install {toxinidir}/ext/opentelemetry-instrumentation-starlette[test] + starlette: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-starlette[test] jinja2: pip install {toxinidir}/ext/opentelemetry-ext-jinja2[test] aiohttp-client: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client - aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/ext/opentelemetry-instrumentation-aiopg[test] + aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg[test] jaeger: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger @@ -420,7 +420,7 @@ commands_pre = -e {toxinidir}/ext/opentelemetry-ext-pymongo \ -e {toxinidir}/ext/opentelemetry-ext-pymysql \ -e {toxinidir}/ext/opentelemetry-ext-sqlalchemy \ - -e {toxinidir}/ext/opentelemetry-instrumentation-aiopg \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg \ -e {toxinidir}/ext/opentelemetry-ext-redis \ -e {toxinidir}/ext/opentelemetry-ext-system-metrics \ -e {toxinidir}/exporter/opentelemetry-exporter-opencensus From 7c04eef8ac3620790638dcf895533dce26e41daf Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 08:15:23 -0700 Subject: [PATCH 17/35] docs --- docs/conf.py | 10 +++++++++- .../aiohttp_client/aiohttp_client.rst | 0 docs/{ext => instrumentation}/asgi/asgi.rst | 0 docs/{ext => instrumentation}/django/django.rst | 0 docs/{ext => instrumentation}/fastapi/fastapi.rst | 0 docs/{ext => instrumentation}/grpc/grpc.rst | 0 docs/{ext => instrumentation}/pyramid/pyramid.rst | 0 docs/{ext => instrumentation}/requests/requests.rst | 0 docs/{ext => instrumentation}/starlette/starlette.rst | 0 docs/{ext => instrumentation}/wsgi/wsgi.rst | 0 eachdist.ini | 4 ++-- scripts/build.sh | 2 +- scripts/coverage.sh | 4 ++-- tox.ini | 2 +- 14 files changed, 15 insertions(+), 7 deletions(-) rename docs/{ext => instrumentation}/aiohttp_client/aiohttp_client.rst (100%) rename docs/{ext => instrumentation}/asgi/asgi.rst (100%) rename docs/{ext => instrumentation}/django/django.rst (100%) rename docs/{ext => instrumentation}/fastapi/fastapi.rst (100%) rename docs/{ext => instrumentation}/grpc/grpc.rst (100%) rename docs/{ext => instrumentation}/pyramid/pyramid.rst (100%) rename docs/{ext => instrumentation}/requests/requests.rst (100%) rename docs/{ext => instrumentation}/starlette/starlette.rst (100%) rename docs/{ext => instrumentation}/wsgi/wsgi.rst (100%) diff --git a/docs/conf.py b/docs/conf.py index d3af10b7d66..2af215e1b03 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -43,7 +43,15 @@ for f in listdir(ext) if isdir(join(ext, f)) ] -sys.path[:0] = source_dirs + exp_dirs + ext_dirs + +instr = "../instrumentation" +instr_dirs = [ + os.path.abspath("/".join(["../instrumentation", f, "src"])) + for f in listdir(ext) + if isdir(join(ext, f)) +] + +sys.path[:0] = source_dirs + exp_dirs + ext_dirs + instr_dirs # -- Project information ----------------------------------------------------- diff --git a/docs/ext/aiohttp_client/aiohttp_client.rst b/docs/instrumentation/aiohttp_client/aiohttp_client.rst similarity index 100% rename from docs/ext/aiohttp_client/aiohttp_client.rst rename to docs/instrumentation/aiohttp_client/aiohttp_client.rst diff --git a/docs/ext/asgi/asgi.rst b/docs/instrumentation/asgi/asgi.rst similarity index 100% rename from docs/ext/asgi/asgi.rst rename to docs/instrumentation/asgi/asgi.rst diff --git a/docs/ext/django/django.rst b/docs/instrumentation/django/django.rst similarity index 100% rename from docs/ext/django/django.rst rename to docs/instrumentation/django/django.rst diff --git a/docs/ext/fastapi/fastapi.rst b/docs/instrumentation/fastapi/fastapi.rst similarity index 100% rename from docs/ext/fastapi/fastapi.rst rename to docs/instrumentation/fastapi/fastapi.rst diff --git a/docs/ext/grpc/grpc.rst b/docs/instrumentation/grpc/grpc.rst similarity index 100% rename from docs/ext/grpc/grpc.rst rename to docs/instrumentation/grpc/grpc.rst diff --git a/docs/ext/pyramid/pyramid.rst b/docs/instrumentation/pyramid/pyramid.rst similarity index 100% rename from docs/ext/pyramid/pyramid.rst rename to docs/instrumentation/pyramid/pyramid.rst diff --git a/docs/ext/requests/requests.rst b/docs/instrumentation/requests/requests.rst similarity index 100% rename from docs/ext/requests/requests.rst rename to docs/instrumentation/requests/requests.rst diff --git a/docs/ext/starlette/starlette.rst b/docs/instrumentation/starlette/starlette.rst similarity index 100% rename from docs/ext/starlette/starlette.rst rename to docs/instrumentation/starlette/starlette.rst diff --git a/docs/ext/wsgi/wsgi.rst b/docs/instrumentation/wsgi/wsgi.rst similarity index 100% rename from docs/ext/wsgi/wsgi.rst rename to docs/instrumentation/wsgi/wsgi.rst diff --git a/eachdist.ini b/eachdist.ini index c839dac060f..06d940378c2 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -7,12 +7,12 @@ sortfirst= opentelemetry-instrumentation opentelemetry-proto tests/util - exporter/* - instrumentation/* instrumentation/opentelemetry-instrumentation-wsgi ext/opentelemetry-ext-dbapi instrumentation/opentelemetry-instrumentation-asgi ext/opentelemetry-ext-botocore + instrumentation/* + exporter/* ext/* [lintroots] diff --git a/scripts/build.sh b/scripts/build.sh index 0d481b8165d..056998ebc11 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -16,7 +16,7 @@ DISTDIR=dist mkdir -p $DISTDIR rm -rf $DISTDIR/* - for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-instrumentation/ opentelemetry-proto/ exporter/*/ ext/*/ ; do + for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-instrumentation/ opentelemetry-proto/ exporter/*/ ext/*/ instrumentation/*/ ; do ( echo "building $d" cd "$d" diff --git a/scripts/coverage.sh b/scripts/coverage.sh index ccbd401955d..830381225f4 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -42,10 +42,10 @@ cov docs/examples/opentelemetry-example-app # aiohttp is only supported on Python 3.5+. if [ ${PYTHON_VERSION_INFO[1]} -gt 4 ]; then - cov ext/opentelemetry-instrumentation-aiohttp-client + cov instrumentation/opentelemetry-instrumentation-aiohttp-client # ext-asgi is only supported on Python 3.5+. if [ ${PYTHON_VERSION_INFO[1]} -gt 4 ]; then - cov ext/opentelemetry-instrumentation-asgi + cov instrumentation/opentelemetry-instrumentation-asgi fi coverage report --show-missing diff --git a/tox.ini b/tox.ini index 22831dfc07f..10543cde547 100644 --- a/tox.ini +++ b/tox.ini @@ -265,7 +265,7 @@ commands_pre = dbapi: pip install {toxinidir}/ext/opentelemetry-ext-dbapi[test] - django: pip install {toxinidir}/django/opentelemetry-instrumentation-django[test] + django: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-django[test] fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi[test] From 570e6a8ea3c1f597f7f6b835dbdc3446ab490d36 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 08:19:36 -0700 Subject: [PATCH 18/35] changelog --- .../opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md | 2 +- instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md | 2 +- .../opentelemetry-instrumentation-django/CHANGELOG.md | 2 +- .../opentelemetry-instrumentation-flask/CHANGELOG.md | 2 +- instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md | 2 +- .../opentelemetry-instrumentation-requests/CHANGELOG.md | 2 +- instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md index 805dbf8e7d1..d7dce5f65cf 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-instrumentation-aiohttp-client - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) ## 0.7b1 diff --git a/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md index cb4a246c714..7f2812bd05b 100644 --- a/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-instrumentation-asgi - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) ## 0.8b0 diff --git a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md index 99501d4accd..ae682630db6 100644 --- a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-instrumentation-django - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) - Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) ## Version 0.11b0 diff --git a/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md index d0e78a3e40f..156cf9db317 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-instrumentation-flask - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) - Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904)) ## Version 0.11b0 diff --git a/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md index ae3c1cf7bf7..b21af319c44 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-instrumentation-grpc - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) ## Version 0.11b0 diff --git a/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md index e986d345fb8..dda179d918a 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-instrumentation-requests - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) ## 0.7b1 diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md index 0bfe048897f..6f1085b8bb4 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md @@ -3,7 +3,7 @@ ## Unreleased - Change package name to opentelemetry-instrumentation-wsgi - ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) ## Version 0.11b0 From 59d0f7604e5546d55c63cae0b33615b06bb7c43c Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 08:59:22 -0700 Subject: [PATCH 19/35] lint --- docs/{ext => instrumentation}/aiopg/aiopg.rst | 0 docs/{ext => instrumentation}/flask/flask.rst | 0 .../setup.py | 7 ++++++- .../instrumentation/grpc/__init__.py | 5 ++++- .../tests/test_client_interceptor.py | 20 ++++++++++++++----- .../tests/test_server_interceptor.py | 13 +++++++++--- .../setup.py | 7 ++++++- .../tests/test_programmatic.py | 4 +++- .../setup.py | 7 ++++++- .../tests/test_requests_integration.py | 4 +++- 10 files changed, 53 insertions(+), 14 deletions(-) rename docs/{ext => instrumentation}/aiopg/aiopg.rst (100%) rename docs/{ext => instrumentation}/flask/flask.rst (100%) diff --git a/docs/ext/aiopg/aiopg.rst b/docs/instrumentation/aiopg/aiopg.rst similarity index 100% rename from docs/ext/aiopg/aiopg.rst rename to docs/instrumentation/aiopg/aiopg.rst diff --git a/docs/ext/flask/flask.rst b/docs/instrumentation/flask/flask.rst similarity index 100% rename from docs/ext/flask/flask.rst rename to docs/instrumentation/flask/flask.rst diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py index 680aa111023..fe74e232353 100644 --- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py +++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "aiohttp_client", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "aiohttp_client", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py index 1d05153a007..9b6862eba0d 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py @@ -124,7 +124,10 @@ def serve(): from wrapt import wrap_function_wrapper as _wrap from opentelemetry import trace -from opentelemetry.instrumentation.grpc.grpcext import intercept_channel, intercept_server +from opentelemetry.instrumentation.grpc.grpcext import ( + intercept_channel, + intercept_server, +) from opentelemetry.instrumentation.grpc.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py index ab7c7b5cbaf..458f32e0472 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py @@ -107,7 +107,9 @@ def test_unary_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") @@ -121,7 +123,9 @@ def test_unary_stream(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) self._verify_success_records( 8, 40, "/GRPCTestServer/ServerStreamingMethod" @@ -137,7 +141,9 @@ def test_stream_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) self._verify_success_records( 40, 8, "/GRPCTestServer/ClientStreamingMethod" @@ -155,7 +161,9 @@ def test_stream_stream(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) self._verify_success_records( 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" @@ -285,4 +293,6 @@ def test_unary_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py index f5a2317119e..a41da47ae92 100644 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py +++ b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py @@ -22,7 +22,10 @@ import opentelemetry.instrumentation.grpc from opentelemetry import trace -from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer, server_interceptor +from opentelemetry.instrumentation.grpc import ( + GrpcInstrumentorServer, + server_interceptor, +) from opentelemetry.instrumentation.grpc.grpcext import intercept_server from opentelemetry.sdk import trace as trace_sdk from opentelemetry.test.test_base import TestBase @@ -76,7 +79,9 @@ def handler(request, context): span = spans_list[0] self.assertEqual(span.name, "test") self.assertIs(span.kind, trace.SpanKind.SERVER) - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) grpc_server_instrumentor.uninstrument() def test_uninstrument(self): @@ -141,7 +146,9 @@ def handler(request, context): self.assertIs(span.kind, trace.SpanKind.SERVER) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.grpc) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) def test_span_lifetime(self): """Check that the span is active for the duration of the call.""" diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/setup.py b/instrumentation/opentelemetry-instrumentation-pyramid/setup.py index f4d02af59ab..7141a898132 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/setup.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "pyramid", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "pyramid", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py index 69ce8e21d55..add4660caab 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py @@ -160,7 +160,9 @@ def test_warnings(self, mock_logger): mock_logger.warning.called = False - tween_list = "opentelemetry.instrumentation.pyramid.trace_tween_factory" + tween_list = ( + "opentelemetry.instrumentation.pyramid.trace_tween_factory" + ) config = Configurator(settings={"pyramid.tweens": tween_list}) self._common_initialization(config) diff --git a/instrumentation/opentelemetry-instrumentation-requests/setup.py b/instrumentation/opentelemetry-instrumentation-requests/setup.py index 3b9ed6eb59f..237fef583b9 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/setup.py +++ b/instrumentation/opentelemetry-instrumentation-requests/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "requests", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "requests", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py b/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py index 12410449947..afec0a88d0f 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py +++ b/instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py @@ -68,7 +68,9 @@ def test_basic(self): span.status.canonical_code, trace.status.StatusCanonicalCode.OK ) - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.requests) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.requests + ) def test_not_foundbasic(self): url_404 = "http://httpbin.org/status/404" From 4992f22228b3acbb6b2d678d99554c205d0de08e Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 10:41:09 -0700 Subject: [PATCH 20/35] docs --- docs/conf.py | 4 ++-- docs/index.rst | 8 ++++++++ docs/instrumentation/aiohttp_client/aiohttp_client.rst | 4 ++-- docs/instrumentation/aiopg/aiopg.rst | 2 +- docs/instrumentation/asgi/asgi.rst | 4 ++-- docs/instrumentation/flask/flask.rst | 4 ++-- docs/instrumentation/grpc/grpc.rst | 4 ++-- docs/instrumentation/instrumentation.rst | 4 ++-- docs/instrumentation/pyramid/pyramid.rst | 4 ++-- docs/instrumentation/requests/requests.rst | 4 ++-- docs/instrumentation/wsgi/wsgi.rst | 4 ++-- 11 files changed, 27 insertions(+), 19 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 2af215e1b03..db836ea27ef 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -47,8 +47,8 @@ instr = "../instrumentation" instr_dirs = [ os.path.abspath("/".join(["../instrumentation", f, "src"])) - for f in listdir(ext) - if isdir(join(ext, f)) + for f in listdir(instr) + if isdir(join(instr, f)) ] sys.path[:0] = source_dirs + exp_dirs + ext_dirs + instr_dirs diff --git a/docs/index.rst b/docs/index.rst index b59af3a003c..3378daac070 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -84,6 +84,14 @@ install :name: Instrumentations :glob: + instrumentation/** + +.. toctree:: + :maxdepth: 2 + :caption: OpenTelemetry Integrations + :name: integrations + :glob: + ext/** .. toctree:: diff --git a/docs/instrumentation/aiohttp_client/aiohttp_client.rst b/docs/instrumentation/aiohttp_client/aiohttp_client.rst index 30cddbd9426..f8549f07fa7 100644 --- a/docs/instrumentation/aiohttp_client/aiohttp_client.rst +++ b/docs/instrumentation/aiohttp_client/aiohttp_client.rst @@ -1,5 +1,5 @@ -OpenTelemetry aiohttp client Integration -======================================== +OpenTelemetry aiohttp client Instrumentation +============================================ .. automodule:: opentelemetry.instrumentation.aiohttp_client :members: diff --git a/docs/instrumentation/aiopg/aiopg.rst b/docs/instrumentation/aiopg/aiopg.rst index ff8d91ed11d..9da450c4e78 100644 --- a/docs/instrumentation/aiopg/aiopg.rst +++ b/docs/instrumentation/aiopg/aiopg.rst @@ -1,4 +1,4 @@ -OpenTelemetry aiopg instrumentation +OpenTelemetry aiopg Instrumentation =================================== .. automodule:: opentelemetry.instrumentation.aiopg diff --git a/docs/instrumentation/asgi/asgi.rst b/docs/instrumentation/asgi/asgi.rst index 191dcc823a7..abb1621973c 100644 --- a/docs/instrumentation/asgi/asgi.rst +++ b/docs/instrumentation/asgi/asgi.rst @@ -1,5 +1,5 @@ -opentelemetry.instrumentation.asgi package -============================== +OpenTelemetry asgi Instrumentation +=================================== Module contents --------------- diff --git a/docs/instrumentation/flask/flask.rst b/docs/instrumentation/flask/flask.rst index c75bba8399a..ac8932acd42 100644 --- a/docs/instrumentation/flask/flask.rst +++ b/docs/instrumentation/flask/flask.rst @@ -1,5 +1,5 @@ -OpenTelemetry Flask Integration -=============================== +OpenTelemetry Flask Instrumentation +=================================== .. automodule:: opentelemetry.instrumentation.flask :members: diff --git a/docs/instrumentation/grpc/grpc.rst b/docs/instrumentation/grpc/grpc.rst index 22717335181..243f6961439 100644 --- a/docs/instrumentation/grpc/grpc.rst +++ b/docs/instrumentation/grpc/grpc.rst @@ -1,5 +1,5 @@ -OpenTelemetry gRPC Integration -============================== +OpenTelemetry gRPC Instrumentation +================================== Module contents --------------- diff --git a/docs/instrumentation/instrumentation.rst b/docs/instrumentation/instrumentation.rst index bcb85043f4a..9c01b6b6f4f 100644 --- a/docs/instrumentation/instrumentation.rst +++ b/docs/instrumentation/instrumentation.rst @@ -1,5 +1,5 @@ -OpenTelemetry Python Instrumentation -==================================== +OpenTelemetry Python Instrumentor +================================= .. automodule:: opentelemetry.instrumentation :members: diff --git a/docs/instrumentation/pyramid/pyramid.rst b/docs/instrumentation/pyramid/pyramid.rst index 3726c4dcf00..56abd2800b4 100644 --- a/docs/instrumentation/pyramid/pyramid.rst +++ b/docs/instrumentation/pyramid/pyramid.rst @@ -1,5 +1,5 @@ -OpenTelemetry Pyramid Integration -================================= +OpenTelemetry Pyramid Instrumentation +===================================== .. automodule:: opentelemetry.instrumentation.pyramid :members: diff --git a/docs/instrumentation/requests/requests.rst b/docs/instrumentation/requests/requests.rst index 4110754e883..7a0665cd998 100644 --- a/docs/instrumentation/requests/requests.rst +++ b/docs/instrumentation/requests/requests.rst @@ -1,5 +1,5 @@ -OpenTelemetry requests Integration -================================== +OpenTelemetry requests Instrumentation +====================================== .. automodule:: opentelemetry.instrumentation.requests :members: diff --git a/docs/instrumentation/wsgi/wsgi.rst b/docs/instrumentation/wsgi/wsgi.rst index f35fdc2cf91..39ad5ffd583 100644 --- a/docs/instrumentation/wsgi/wsgi.rst +++ b/docs/instrumentation/wsgi/wsgi.rst @@ -1,5 +1,5 @@ -OpenTelemetry WSGI Middleware -============================= +OpenTelemetry WSGI Instrumentation +================================== .. automodule:: opentelemetry.instrumentation.wsgi :members: From cb0dd9c33f7b78b785ab5dd12fec7b0226c2dc3b Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 10:43:16 -0700 Subject: [PATCH 21/35] isort --- .../src/opentelemetry/instrumentation/pyramid/__init__.py | 2 +- .../src/opentelemetry/instrumentation/requests/__init__.py | 2 +- .../src/opentelemetry/instrumentation/wsgi/__init__.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py index c8bf1cafe91..4125453153b 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py @@ -86,13 +86,13 @@ from wrapt import ObjectProxy from wrapt import wrap_function_wrapper as _wrap +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.pyramid.callbacks import ( SETTING_TRACE_ENABLED, TWEEN_NAME, trace_tween_factory, ) from opentelemetry.instrumentation.pyramid.version import __version__ -from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap from opentelemetry.trace import TracerProvider, get_tracer 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 47925c56517..a12f05999e1 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py @@ -51,8 +51,8 @@ from requests.sessions import Session from opentelemetry import context, propagators -from opentelemetry.instrumentation.requests.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.requests.version import __version__ from opentelemetry.instrumentation.utils import http_status_to_canonical_code from opentelemetry.trace import SpanKind, get_tracer from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py index 151ff7ab21f..8a2d0bec085 100644 --- a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py @@ -59,8 +59,8 @@ def hello(): import wsgiref.util as wsgiref_util from opentelemetry import context, propagators, trace -from opentelemetry.instrumentation.wsgi.version import __version__ from opentelemetry.instrumentation.utils import http_status_to_canonical_code +from opentelemetry.instrumentation.wsgi.version import __version__ from opentelemetry.trace.status import Status, StatusCanonicalCode _HTTP_VERSION_PREFIX = "HTTP/" From 699a5895fef02206896e58e51dc16e1dbe2b6e59 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 11:30:06 -0700 Subject: [PATCH 22/35] lint --- .../src/opentelemetry/instrumentation/bootstrap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py index 049388bbaa4..9fca65b0799 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py @@ -87,7 +87,7 @@ def _install_package(library, instrumentation): OpenTelemetry auto-instrumentation packages often have traced libraries - as instrumentation dependency (e.g. flask for + as instrumentation dependency (e.g. flask for opentelemetry-instrumentation-flask), so using -I on library could cause likely undesired Flask upgrade.Using --no-dependencies alone would leave potential for nonfunctional installations. From a1d5963447dec6f051f16763fed62d53425a9088 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 12:10:54 -0700 Subject: [PATCH 23/35] grpcio --- docs-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs-requirements.txt b/docs-requirements.txt index 31e0cf3581f..e98a0d35dfb 100644 --- a/docs-requirements.txt +++ b/docs-requirements.txt @@ -8,6 +8,7 @@ asyncpg>=0.12.0 ddtrace>=0.34.0 aiohttp~= 3.0 aiopg>=0.13.0 +grpcio~=1.27 Deprecated>=1.2.6 django>=2.2 PyMySQL~=0.9.3 From 91dd6a40f487246862496e849f03fbfb5393e895 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 12:46:24 -0700 Subject: [PATCH 24/35] grpc --- docs-requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs-requirements.txt b/docs-requirements.txt index e98a0d35dfb..346a6cfc0e7 100644 --- a/docs-requirements.txt +++ b/docs-requirements.txt @@ -8,6 +8,7 @@ asyncpg>=0.12.0 ddtrace>=0.34.0 aiohttp~= 3.0 aiopg>=0.13.0 +grpc~=1.0.0 grpcio~=1.27 Deprecated>=1.2.6 django>=2.2 From c50b5e52beb9edc0d64b441991e15dd5ada6466a Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 13:33:52 -0700 Subject: [PATCH 25/35] grpc --- docs-requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/docs-requirements.txt b/docs-requirements.txt index 346a6cfc0e7..e98a0d35dfb 100644 --- a/docs-requirements.txt +++ b/docs-requirements.txt @@ -8,7 +8,6 @@ asyncpg>=0.12.0 ddtrace>=0.34.0 aiohttp~= 3.0 aiopg>=0.13.0 -grpc~=1.0.0 grpcio~=1.27 Deprecated>=1.2.6 django>=2.2 From 447f472ce3a9b5ce3f5edbd18ab6a8ba0ff9165f Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 13:55:04 -0700 Subject: [PATCH 26/35] test --- docs/{instrumentation => ext}/grpc/grpc.rst | 2 +- ext/opentelemetry-ext-grpc/CHANGELOG.md | 32 ++ ext/opentelemetry-ext-grpc/LICENSE | 201 ++++++++ ext/opentelemetry-ext-grpc/MANIFEST.in | 9 + ext/opentelemetry-ext-grpc/README.rst | 18 + ext/opentelemetry-ext-grpc/setup.cfg | 59 +++ ext/opentelemetry-ext-grpc/setup.py | 27 ++ .../src/opentelemetry/ext/grpc/__init__.py | 224 +++++++++ .../src/opentelemetry/ext/grpc/_client.py | 275 +++++++++++ .../src/opentelemetry/ext/grpc/_server.py | 209 +++++++++ .../src/opentelemetry/ext/grpc/_utilities.py | 112 +++++ .../ext/grpc/grpcext/__init__.py | 216 +++++++++ .../ext/grpc/grpcext/_interceptor.py | 431 ++++++++++++++++++ .../src/opentelemetry/ext/grpc/version.py | 15 + ext/opentelemetry-ext-grpc/tests/__init__.py | 13 + ext/opentelemetry-ext-grpc/tests/_client.py | 57 +++ ext/opentelemetry-ext-grpc/tests/_server.py | 87 ++++ .../tests/protobuf/test_server.proto | 34 ++ .../tests/protobuf/test_server_pb2.py | 215 +++++++++ .../tests/protobuf/test_server_pb2_grpc.py | 205 +++++++++ .../tests/test_client_interceptor.py | 298 ++++++++++++ .../tests/test_server_interceptor.py | 297 ++++++++++++ .../CHANGELOG.md | 32 ++ .../LICENSE | 201 ++++++++ .../MANIFEST.in | 9 + .../README.rst | 18 + .../setup.cfg | 59 +++ .../setup.py | 27 ++ .../instrumentation/grpc/__init__.py | 224 +++++++++ .../instrumentation/grpc/_client.py | 275 +++++++++++ .../instrumentation/grpc/_server.py | 209 +++++++++ .../instrumentation/grpc/_utilities.py | 112 +++++ .../instrumentation/grpc/grpcext/__init__.py | 216 +++++++++ .../grpc/grpcext/_interceptor.py | 431 ++++++++++++++++++ .../instrumentation/grpc/version.py | 15 + .../tests/__init__.py | 13 + .../tests/_client.py | 57 +++ .../tests/_server.py | 87 ++++ .../tests/protobuf/test_server.proto | 34 ++ .../tests/protobuf/test_server_pb2.py | 215 +++++++++ .../tests/protobuf/test_server_pb2_grpc.py | 205 +++++++++ .../tests/test_client_interceptor.py | 298 ++++++++++++ .../tests/test_server_interceptor.py | 297 ++++++++++++ 43 files changed, 6069 insertions(+), 1 deletion(-) rename docs/{instrumentation => ext}/grpc/grpc.rst (75%) create mode 100644 ext/opentelemetry-ext-grpc/CHANGELOG.md create mode 100644 ext/opentelemetry-ext-grpc/LICENSE create mode 100644 ext/opentelemetry-ext-grpc/MANIFEST.in create mode 100644 ext/opentelemetry-ext-grpc/README.rst create mode 100644 ext/opentelemetry-ext-grpc/setup.cfg create mode 100644 ext/opentelemetry-ext-grpc/setup.py create mode 100644 ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py create mode 100644 ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py create mode 100644 ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_server.py create mode 100644 ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py create mode 100644 ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/__init__.py create mode 100644 ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/_interceptor.py create mode 100644 ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py create mode 100644 ext/opentelemetry-ext-grpc/tests/__init__.py create mode 100644 ext/opentelemetry-ext-grpc/tests/_client.py create mode 100644 ext/opentelemetry-ext-grpc/tests/_server.py create mode 100644 ext/opentelemetry-ext-grpc/tests/protobuf/test_server.proto create mode 100644 ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2.py create mode 100644 ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2_grpc.py create mode 100644 ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py create mode 100644 ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/README.rst create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/setup.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py create mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py diff --git a/docs/instrumentation/grpc/grpc.rst b/docs/ext/grpc/grpc.rst similarity index 75% rename from docs/instrumentation/grpc/grpc.rst rename to docs/ext/grpc/grpc.rst index 243f6961439..351d3bfb0d5 100644 --- a/docs/instrumentation/grpc/grpc.rst +++ b/docs/ext/grpc/grpc.rst @@ -4,7 +4,7 @@ OpenTelemetry gRPC Instrumentation Module contents --------------- -.. automodule:: opentelemetry.instrumentation.grpc +.. automodule:: opentelemetry.ext.grpc :members: :undoc-members: :show-inheritance: diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md new file mode 100644 index 00000000000..b21af319c44 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md @@ -0,0 +1,32 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-grpc + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) + +## Version 0.11b0 + +Released 2020-07-28 + +- Add status code to gRPC client spans + ([896](https://github.com/open-telemetry/opentelemetry-python/pull/896)) +- Add gRPC client and server instrumentors + ([788](https://github.com/open-telemetry/opentelemetry-python/pull/788)) + +- Add metric recording (bytes in/out, errors, latency) to gRPC client + +## 0.8b0 + +Released 2020-05-27 + +- lint: version of grpc causes lint issues + ([#696](https://github.com/open-telemetry/opentelemetry-python/pull/696)) + +## 0.6b0 + +Released 2020-03-30 + +- Add gRPC integration + ([#476](https://github.com/open-telemetry/opentelemetry-python/pull/476)) +- Initial release diff --git a/ext/opentelemetry-ext-grpc/LICENSE b/ext/opentelemetry-ext-grpc/LICENSE new file mode 100644 index 00000000000..261eeb9e9f8 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/ext/opentelemetry-ext-grpc/MANIFEST.in b/ext/opentelemetry-ext-grpc/MANIFEST.in new file mode 100644 index 00000000000..aed3e33273b --- /dev/null +++ b/ext/opentelemetry-ext-grpc/MANIFEST.in @@ -0,0 +1,9 @@ +graft src +graft tests +global-exclude *.pyc +global-exclude *.pyo +global-exclude __pycache__/* +include CHANGELOG.md +include MANIFEST.in +include README.rst +include LICENSE diff --git a/ext/opentelemetry-ext-grpc/README.rst b/ext/opentelemetry-ext-grpc/README.rst new file mode 100644 index 00000000000..335c03614b9 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/README.rst @@ -0,0 +1,18 @@ +OpenTelemetry gRPC Integration +============================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-grpc.svg + :target: https://pypi.org/project/opentelemetry-ext-grpc/ + +Client and server interceptors for `gRPC Python`_. + +.. _gRPC Python: https://grpc.github.io/grpc/python/grpc.html + +Installation +------------ + +:: + + pip install opentelemetry-ext-grpc diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg new file mode 100644 index 00000000000..93759c445df --- /dev/null +++ b/ext/opentelemetry-ext-grpc/setup.cfg @@ -0,0 +1,59 @@ +# 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. + +[metadata] +name = opentelemetry-ext-grpc +description = OpenTelemetry gRPC instrumentation +long_description = file: README.rst +long_description_content_type = text/x-rst +author = OpenTelemetry Authors +author_email = cncf-opentelemetry-contributors@lists.cncf.io +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-grpc +platforms = any +license = Apache-2.0 +classifiers = + Development Status :: 4 - Beta + Intended Audience :: Developers + License :: OSI Approved :: Apache Software License + Programming Language :: Python + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.4 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + +[options] +python_requires = >=3.4 +package_dir= + =src +packages=find_namespace: +install_requires = + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 + grpcio ~= 1.27 + +[options.extras_require] +test = + opentelemetry-test == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 + protobuf == 3.12.2 + +[options.packages.find] +where = src + +[options.entry_points] +opentelemetry_instrumentor = + grpc_client = opentelemetry.instrumentation.grpc:GrpcInstrumentorClient + grpc_server = opentelemetry.instrumentation.grpc:GrpcInstrumentorServer diff --git a/ext/opentelemetry-ext-grpc/setup.py b/ext/opentelemetry-ext-grpc/setup.py new file mode 100644 index 00000000000..9a0a4b5d1e3 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/setup.py @@ -0,0 +1,27 @@ +# 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", "ext", "grpc", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py new file mode 100644 index 00000000000..e1e3fc6c43c --- /dev/null +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py @@ -0,0 +1,224 @@ +# 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. + +# pylint:disable=no-name-in-module +# pylint:disable=relative-beyond-top-level +# pylint:disable=import-error +# pylint:disable=no-self-use +""" +Usage Client +------------ +.. code-block:: python + + import logging + + import grpc + + from opentelemetry import trace + from opentelemetry.ext.grpc import GrpcInstrumentorClient, client_interceptor + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import ( + ConsoleSpanExporter, + SimpleExportSpanProcessor, + ) + + from opentelemetry import metrics + from opentelemetry.sdk.metrics import MeterProvider + from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter + + try: + from .gen import helloworld_pb2, helloworld_pb2_grpc + except ImportError: + from gen import helloworld_pb2, helloworld_pb2_grpc + + trace.set_tracer_provider(TracerProvider()) + trace.get_tracer_provider().add_span_processor( + SimpleExportSpanProcessor(ConsoleSpanExporter()) + ) + + # Set meter provider to opentelemetry-sdk's MeterProvider + metrics.set_meter_provider(MeterProvider()) + + # Optional - export GRPC specific metrics (latency, bytes in/out, errors) by passing an exporter + instrumentor = GrpcInstrumentorClient(exporter=ConsoleMetricsExporter(), interval=10) + instrumentor.instrument() + + def run(): + with grpc.insecure_channel("localhost:50051") as channel: + + stub = helloworld_pb2_grpc.GreeterStub(channel) + response = stub.SayHello(helloworld_pb2.HelloRequest(name="YOU")) + + print("Greeter client received: " + response.message) + + + if __name__ == "__main__": + logging.basicConfig() + run() + +Usage Server +------------ +.. code-block:: python + + import logging + from concurrent import futures + + import grpc + + from opentelemetry import trace + from opentelemetry.ext.grpc import GrpcInstrumentorServer, server_interceptor + from opentelemetry.ext.grpc.grpcext import intercept_server + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import ( + ConsoleSpanExporter, + SimpleExportSpanProcessor, + ) + + try: + from .gen import helloworld_pb2, helloworld_pb2_grpc + except ImportError: + from gen import helloworld_pb2, helloworld_pb2_grpc + + trace.set_tracer_provider(TracerProvider()) + trace.get_tracer_provider().add_span_processor( + SimpleExportSpanProcessor(ConsoleSpanExporter()) + ) + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + + + class Greeter(helloworld_pb2_grpc.GreeterServicer): + def SayHello(self, request, context): + return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name) + + + def serve(): + + server = grpc.server(futures.ThreadPoolExecutor()) + + helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) + server.add_insecure_port("[::]:50051") + server.start() + server.wait_for_termination() + + + if __name__ == "__main__": + logging.basicConfig() + serve() +""" +from contextlib import contextmanager +from functools import partial + +import grpc +from wrapt import wrap_function_wrapper as _wrap + +from opentelemetry import trace +from opentelemetry.ext.grpc.grpcext import ( + intercept_channel, + intercept_server, +) +from opentelemetry.ext.grpc.version import __version__ +from opentelemetry.ext.instrumentor import BaseInstrumentor +from opentelemetry.ext.utils import unwrap + +# pylint:disable=import-outside-toplevel +# pylint:disable=import-self +# pylint:disable=unused-argument +# isort:skip + + +class GrpcInstrumentorServer(BaseInstrumentor): + def _instrument(self, **kwargs): + _wrap("grpc", "server", self.wrapper_fn) + + def _uninstrument(self, **kwargs): + unwrap(grpc, "server") + + def wrapper_fn(self, original_func, instance, args, kwargs): + server = original_func(*args, **kwargs) + return intercept_server(server, server_interceptor()) + + +class GrpcInstrumentorClient(BaseInstrumentor): + def _instrument(self, **kwargs): + exporter = kwargs.get("exporter", None) + interval = kwargs.get("interval", 30) + if kwargs.get("channel_type") == "secure": + _wrap( + "grpc", + "secure_channel", + partial(self.wrapper_fn, exporter, interval), + ) + + else: + _wrap( + "grpc", + "insecure_channel", + partial(self.wrapper_fn, exporter, interval), + ) + + def _uninstrument(self, **kwargs): + if kwargs.get("channel_type") == "secure": + unwrap(grpc, "secure_channel") + + else: + unwrap(grpc, "insecure_channel") + + def wrapper_fn( + self, exporter, interval, original_func, instance, args, kwargs + ): + channel = original_func(*args, **kwargs) + tracer_provider = kwargs.get("tracer_provider") + return intercept_channel( + channel, + client_interceptor( + tracer_provider=tracer_provider, + exporter=exporter, + interval=interval, + ), + ) + + +def client_interceptor(tracer_provider=None, exporter=None, interval=30): + """Create a gRPC client channel interceptor. + + Args: + tracer: The tracer to use to create client-side spans. + exporter: The exporter that will receive client metrics + interval: Time between every export call + + Returns: + An invocation-side interceptor object. + """ + from . import _client + + tracer = trace.get_tracer(__name__, __version__, tracer_provider) + + return _client.OpenTelemetryClientInterceptor(tracer, exporter, interval) + + +def server_interceptor(tracer_provider=None): + """Create a gRPC server interceptor. + + Args: + tracer: The tracer to use to create server-side spans. + + Returns: + A service-side interceptor object. + """ + from . import _server + + tracer = trace.get_tracer(__name__, __version__, tracer_provider) + + return _server.OpenTelemetryServerInterceptor(tracer) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py new file mode 100644 index 00000000000..028804f599c --- /dev/null +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py @@ -0,0 +1,275 @@ +# 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. + +# pylint:disable=relative-beyond-top-level +# pylint:disable=arguments-differ +# pylint:disable=no-member +# pylint:disable=signature-differs + +"""Implementation of the invocation-side open-telemetry interceptor.""" + +from collections import OrderedDict +from typing import MutableMapping + +import grpc + +from opentelemetry import metrics, propagators, trace +from opentelemetry.sdk.metrics.export.controller import PushController +from opentelemetry.trace.status import Status, StatusCanonicalCode + +from . import grpcext +from ._utilities import RpcInfo, TimedMetricRecorder + + +class _GuardedSpan: + def __init__(self, span): + self.span = span + self.generated_span = None + self._engaged = True + + def __enter__(self): + self.generated_span = self.span.__enter__() + return self + + def __exit__(self, *args, **kwargs): + if self._engaged: + self.generated_span = None + return self.span.__exit__(*args, **kwargs) + return False + + def release(self): + self._engaged = False + return self.span + + +def _inject_span_context(metadata: MutableMapping[str, str]) -> None: + # pylint:disable=unused-argument + def append_metadata( + carrier: MutableMapping[str, str], key: str, value: str + ): + metadata[key] = value + + # Inject current active span from the context + propagators.inject(append_metadata, metadata) + + +def _make_future_done_callback(span, rpc_info, client_info, metrics_recorder): + def callback(response_future): + with span: + code = response_future.code() + if code != grpc.StatusCode.OK: + rpc_info.error = code + return + response = response_future.result() + rpc_info.response = response + if "ByteSize" in dir(response): + metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) + + return callback + + +class OpenTelemetryClientInterceptor( + grpcext.UnaryClientInterceptor, grpcext.StreamClientInterceptor +): + def __init__(self, tracer, exporter, interval): + self._tracer = tracer + + self._meter = None + if exporter and interval: + self._meter = metrics.get_meter(__name__) + self.controller = PushController( + meter=self._meter, exporter=exporter, interval=interval + ) + self._metrics_recorder = TimedMetricRecorder(self._meter, "client") + + def _start_span(self, method): + return self._tracer.start_as_current_span( + name=method, kind=trace.SpanKind.CLIENT + ) + + # pylint:disable=no-self-use + def _trace_result(self, guarded_span, rpc_info, result, client_info): + # If the RPC is called asynchronously, release the guard and add a + # callback so that the span can be finished once the future is done. + if isinstance(result, grpc.Future): + result.add_done_callback( + _make_future_done_callback( + guarded_span.release(), + rpc_info, + client_info, + self._metrics_recorder, + ) + ) + return result + response = result + # Handle the case when the RPC is initiated via the with_call + # method and the result is a tuple with the first element as the + # response. + # http://www.grpc.io/grpc/python/grpc.html#grpc.UnaryUnaryMultiCallable.with_call + if isinstance(result, tuple): + response = result[0] + rpc_info.response = response + + if "ByteSize" in dir(response): + self._metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) + return result + + def _start_guarded_span(self, *args, **kwargs): + return _GuardedSpan(self._start_span(*args, **kwargs)) + + def _bytes_out_iterator_wrapper(self, iterator, client_info): + for request in iterator: + if "ByteSize" in dir(request): + self._metrics_recorder.record_bytes_out( + request.ByteSize(), client_info.full_method + ) + yield request + + def intercept_unary(self, request, metadata, client_info, invoker): + if not metadata: + mutable_metadata = OrderedDict() + else: + mutable_metadata = OrderedDict(metadata) + + with self._start_guarded_span(client_info.full_method) as guarded_span: + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + + # If protobuf is used, we can record the bytes in/out. Otherwise, we have no way + # to get the size of the request/response properly, so don't record anything + if "ByteSize" in dir(request): + self._metrics_recorder.record_bytes_out( + request.ByteSize(), client_info.full_method + ) + + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + request=request, + ) + + try: + result = invoker(request, metadata) + except grpc.RpcError as exc: + guarded_span.generated_span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + return self._trace_result( + guarded_span, rpc_info, result, client_info + ) + + # For RPCs that stream responses, the result can be a generator. To record + # the span across the generated responses and detect any errors, we wrap + # the result in a new generator that yields the response values. + def _intercept_server_stream( + self, request_or_iterator, metadata, client_info, invoker + ): + if not metadata: + mutable_metadata = OrderedDict() + else: + mutable_metadata = OrderedDict(metadata) + + with self._start_span(client_info.full_method) as span: + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + ) + + if client_info.is_client_stream: + rpc_info.request = request_or_iterator + request_or_iterator = self._bytes_out_iterator_wrapper( + request_or_iterator, client_info + ) + else: + if "ByteSize" in dir(request_or_iterator): + self._metrics_recorder.record_bytes_out( + request_or_iterator.ByteSize(), + client_info.full_method, + ) + + try: + result = invoker(request_or_iterator, metadata) + + # Rewrap the result stream into a generator, and record the bytes received + for response in result: + if "ByteSize" in dir(response): + self._metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) + yield response + except grpc.RpcError as exc: + span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + def intercept_stream( + self, request_or_iterator, metadata, client_info, invoker + ): + if client_info.is_server_stream: + return self._intercept_server_stream( + request_or_iterator, metadata, client_info, invoker + ) + + if not metadata: + mutable_metadata = OrderedDict() + else: + mutable_metadata = OrderedDict(metadata) + + with self._start_guarded_span(client_info.full_method) as guarded_span: + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + request=request_or_iterator, + ) + + rpc_info.request = request_or_iterator + + request_or_iterator = self._bytes_out_iterator_wrapper( + request_or_iterator, client_info + ) + + try: + result = invoker(request_or_iterator, metadata) + except grpc.RpcError as exc: + guarded_span.generated_span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + return self._trace_result( + guarded_span, rpc_info, result, client_info + ) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_server.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_server.py new file mode 100644 index 00000000000..cb0e997d367 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_server.py @@ -0,0 +1,209 @@ +# 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. + +# pylint:disable=relative-beyond-top-level +# pylint:disable=arguments-differ +# pylint:disable=no-member +# pylint:disable=signature-differs + +"""Implementation of the service-side open-telemetry interceptor. + +This library borrows heavily from the OpenTracing gRPC integration: +https://github.com/opentracing-contrib/python-grpc +""" + +from contextlib import contextmanager +from typing import List + +import grpc + +from opentelemetry import propagators, trace +from opentelemetry.context import attach, detach + +from . import grpcext +from ._utilities import RpcInfo + + +# pylint:disable=abstract-method +class _OpenTelemetryServicerContext(grpc.ServicerContext): + def __init__(self, servicer_context, active_span): + self._servicer_context = servicer_context + self._active_span = active_span + self.code = grpc.StatusCode.OK + self.details = None + super(_OpenTelemetryServicerContext, self).__init__() + + def is_active(self, *args, **kwargs): + return self._servicer_context.is_active(*args, **kwargs) + + def time_remaining(self, *args, **kwargs): + return self._servicer_context.time_remaining(*args, **kwargs) + + def cancel(self, *args, **kwargs): + return self._servicer_context.cancel(*args, **kwargs) + + def add_callback(self, *args, **kwargs): + return self._servicer_context.add_callback(*args, **kwargs) + + def invocation_metadata(self, *args, **kwargs): + return self._servicer_context.invocation_metadata(*args, **kwargs) + + def peer(self, *args, **kwargs): + return self._servicer_context.peer(*args, **kwargs) + + def peer_identities(self, *args, **kwargs): + return self._servicer_context.peer_identities(*args, **kwargs) + + def peer_identity_key(self, *args, **kwargs): + return self._servicer_context.peer_identity_key(*args, **kwargs) + + def auth_context(self, *args, **kwargs): + return self._servicer_context.auth_context(*args, **kwargs) + + def send_initial_metadata(self, *args, **kwargs): + return self._servicer_context.send_initial_metadata(*args, **kwargs) + + def set_trailing_metadata(self, *args, **kwargs): + return self._servicer_context.set_trailing_metadata(*args, **kwargs) + + def abort(self, *args, **kwargs): + if not hasattr(self._servicer_context, "abort"): + raise RuntimeError( + "abort() is not supported with the installed version of grpcio" + ) + return self._servicer_context.abort(*args, **kwargs) + + def abort_with_status(self, *args, **kwargs): + if not hasattr(self._servicer_context, "abort_with_status"): + raise RuntimeError( + "abort_with_status() is not supported with the installed " + "version of grpcio" + ) + return self._servicer_context.abort_with_status(*args, **kwargs) + + def set_code(self, code): + self.code = code + return self._servicer_context.set_code(code) + + def set_details(self, details): + self.details = details + return self._servicer_context.set_details(details) + + +# On the service-side, errors can be signaled either by exceptions or by +# calling `set_code` on the `servicer_context`. This function checks for the +# latter and updates the span accordingly. +# pylint:disable=unused-argument +def _check_error_code(span, servicer_context, rpc_info): + if servicer_context.code != grpc.StatusCode.OK: + rpc_info.error = servicer_context.code + + +class OpenTelemetryServerInterceptor( + grpcext.UnaryServerInterceptor, grpcext.StreamServerInterceptor +): + def __init__(self, tracer): + self._tracer = tracer + + @contextmanager + # pylint:disable=no-self-use + def _set_remote_context(self, servicer_context): + metadata = servicer_context.invocation_metadata() + if metadata: + md_dict = {md.key: md.value for md in metadata} + + def get_from_grpc_metadata(metadata, key) -> List[str]: + return [md_dict[key]] if key in md_dict else [] + + # Update the context with the traceparent from the RPC metadata. + ctx = propagators.extract(get_from_grpc_metadata, metadata) + token = attach(ctx) + try: + yield + finally: + detach(token) + else: + yield + + def _start_span(self, method): + span = self._tracer.start_as_current_span( + name=method, kind=trace.SpanKind.SERVER + ) + return span + + def intercept_unary(self, request, servicer_context, server_info, handler): + + with self._set_remote_context(servicer_context): + with self._start_span(server_info.full_method) as span: + rpc_info = RpcInfo( + full_method=server_info.full_method, + metadata=servicer_context.invocation_metadata(), + timeout=servicer_context.time_remaining(), + request=request, + ) + servicer_context = _OpenTelemetryServicerContext( + servicer_context, span + ) + response = handler(request, servicer_context) + + _check_error_code(span, servicer_context, rpc_info) + + rpc_info.response = response + + return response + + # For RPCs that stream responses, the result can be a generator. To record + # the span across the generated responses and detect any errors, we wrap + # the result in a new generator that yields the response values. + def _intercept_server_stream( + self, request_or_iterator, servicer_context, server_info, handler + ): + with self._set_remote_context(servicer_context): + with self._start_span(server_info.full_method) as span: + rpc_info = RpcInfo( + full_method=server_info.full_method, + metadata=servicer_context.invocation_metadata(), + timeout=servicer_context.time_remaining(), + ) + if not server_info.is_client_stream: + rpc_info.request = request_or_iterator + servicer_context = _OpenTelemetryServicerContext( + servicer_context, span + ) + result = handler(request_or_iterator, servicer_context) + for response in result: + yield response + _check_error_code(span, servicer_context, rpc_info) + + def intercept_stream( + self, request_or_iterator, servicer_context, server_info, handler + ): + if server_info.is_server_stream: + return self._intercept_server_stream( + request_or_iterator, servicer_context, server_info, handler + ) + with self._set_remote_context(servicer_context): + with self._start_span(server_info.full_method) as span: + rpc_info = RpcInfo( + full_method=server_info.full_method, + metadata=servicer_context.invocation_metadata(), + timeout=servicer_context.time_remaining(), + ) + servicer_context = _OpenTelemetryServicerContext( + servicer_context, span + ) + response = handler(request_or_iterator, servicer_context) + _check_error_code(span, servicer_context, rpc_info) + rpc_info.response = response + return response diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py new file mode 100644 index 00000000000..1dfe31ec995 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py @@ -0,0 +1,112 @@ +# 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. + +"""Internal utilities.""" + +from contextlib import contextmanager +from time import time + +import grpc + +from opentelemetry.sdk.metrics import Counter, ValueRecorder + + +class RpcInfo: + def __init__( + self, + full_method=None, + metadata=None, + timeout=None, + request=None, + response=None, + error=None, + ): + self.full_method = full_method + self.metadata = metadata + self.timeout = timeout + self.request = request + self.response = response + self.error = error + + +class TimedMetricRecorder: + def __init__(self, meter, span_kind): + self._meter = meter + service_name = "grpcio" + self._span_kind = span_kind + base_attributes = ["method"] + + if self._meter: + self._duration = self._meter.create_metric( + name="{}/{}/duration".format(service_name, span_kind), + description="Duration of grpc requests to the server", + unit="ms", + value_type=float, + metric_type=ValueRecorder, + label_keys=base_attributes + ["error", "status_code"], + ) + self._error_count = self._meter.create_metric( + name="{}/{}/errors".format(service_name, span_kind), + description="Number of errors that were returned from the server", + unit="1", + value_type=int, + metric_type=Counter, + label_keys=base_attributes + ["status_code"], + ) + self._bytes_in = self._meter.create_metric( + name="{}/{}/bytes_in".format(service_name, span_kind), + description="Number of bytes received from the server", + unit="by", + value_type=int, + metric_type=Counter, + label_keys=base_attributes, + ) + self._bytes_out = self._meter.create_metric( + name="{}/{}/bytes_out".format(service_name, span_kind), + description="Number of bytes sent out through gRPC", + unit="by", + value_type=int, + metric_type=Counter, + label_keys=base_attributes, + ) + + def record_bytes_in(self, bytes_in, method): + if self._meter: + labels = {"method": method} + self._bytes_in.add(bytes_in, labels) + + def record_bytes_out(self, bytes_out, method): + if self._meter: + labels = {"method": method} + self._bytes_out.add(bytes_out, labels) + + @contextmanager + def record_latency(self, method): + start_time = time() + labels = {"method": method, "status_code": grpc.StatusCode.OK} + try: + yield labels + except grpc.RpcError as exc: + if self._meter: + # pylint: disable=no-member + labels["status_code"] = exc.code() + self._error_count.add(1, labels) + labels["error"] = True + raise + finally: + if self._meter: + if "error" not in labels: + labels["error"] = False + elapsed_time = (time() - start_time) * 1000 + self._duration.record(elapsed_time, labels) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/__init__.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/__init__.py new file mode 100644 index 00000000000..fe83467a70a --- /dev/null +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/__init__.py @@ -0,0 +1,216 @@ +# 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. + +# pylint:disable=import-outside-toplevel +# pylint:disable=import-self +# pylint:disable=no-name-in-module + +import abc + + +class UnaryClientInfo(abc.ABC): + """Consists of various information about a unary RPC on the + invocation-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + timeout: The length of time in seconds to wait for the computation to + terminate or be cancelled, or None if this method should block until + the computation is terminated or is cancelled no matter how long that + takes. + """ + + +class StreamClientInfo(abc.ABC): + """Consists of various information about a stream RPC on the + invocation-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + is_client_stream: Indicates whether the RPC is client-streaming. + is_server_stream: Indicates whether the RPC is server-streaming. + timeout: The length of time in seconds to wait for the computation to + terminate or be cancelled, or None if this method should block until + the computation is terminated or is cancelled no matter how long that + takes. + """ + + +class UnaryClientInterceptor(abc.ABC): + """Affords intercepting unary-unary RPCs on the invocation-side.""" + + @abc.abstractmethod + def intercept_unary(self, request, metadata, client_info, invoker): + """Intercepts unary-unary RPCs on the invocation-side. + + Args: + request: The request value for the RPC. + metadata: Optional :term:`metadata` to be transmitted to the + service-side of the RPC. + client_info: A UnaryClientInfo containing various information about + the RPC. + invoker: The handler to complete the RPC on the client. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling invoker(request, metadata). + """ + raise NotImplementedError() + + +class StreamClientInterceptor(abc.ABC): + """Affords intercepting stream RPCs on the invocation-side.""" + + @abc.abstractmethod + def intercept_stream( + self, request_or_iterator, metadata, client_info, invoker + ): + """Intercepts stream RPCs on the invocation-side. + + Args: + request_or_iterator: The request value for the RPC if + `client_info.is_client_stream` is `false`; otherwise, an iterator of + request values. + metadata: Optional :term:`metadata` to be transmitted to the service-side + of the RPC. + client_info: A StreamClientInfo containing various information about + the RPC. + invoker: The handler to complete the RPC on the client. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling invoker(metadata). + """ + raise NotImplementedError() + + +def intercept_channel(channel, *interceptors): + """Creates an intercepted channel. + + Args: + channel: A Channel. + interceptors: Zero or more UnaryClientInterceptors or + StreamClientInterceptors + + Returns: + A Channel. + + Raises: + TypeError: If an interceptor derives from neither UnaryClientInterceptor + nor StreamClientInterceptor. + """ + from . import _interceptor + + return _interceptor.intercept_channel(channel, *interceptors) + + +class UnaryServerInfo(abc.ABC): + """Consists of various information about a unary RPC on the service-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + """ + + +class StreamServerInfo(abc.ABC): + """Consists of various information about a stream RPC on the service-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + is_client_stream: Indicates whether the RPC is client-streaming. + is_server_stream: Indicates whether the RPC is server-streaming. + """ + + +class UnaryServerInterceptor(abc.ABC): + """Affords intercepting unary-unary RPCs on the service-side.""" + + @abc.abstractmethod + def intercept_unary(self, request, servicer_context, server_info, handler): + """Intercepts unary-unary RPCs on the service-side. + + Args: + request: The request value for the RPC. + servicer_context: A ServicerContext. + server_info: A UnaryServerInfo containing various information about + the RPC. + handler: The handler to complete the RPC on the server. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling handler(request, servicer_context). + """ + raise NotImplementedError() + + +class StreamServerInterceptor(abc.ABC): + """Affords intercepting stream RPCs on the service-side.""" + + @abc.abstractmethod + def intercept_stream( + self, request_or_iterator, servicer_context, server_info, handler + ): + """Intercepts stream RPCs on the service-side. + + Args: + request_or_iterator: The request value for the RPC if + `server_info.is_client_stream` is `False`; otherwise, an iterator of + request values. + servicer_context: A ServicerContext. + server_info: A StreamServerInfo containing various information about + the RPC. + handler: The handler to complete the RPC on the server. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling handler(servicer_context). + """ + raise NotImplementedError() + + +def intercept_server(server, *interceptors): + """Creates an intercepted server. + + Args: + server: A Server. + interceptors: Zero or more UnaryServerInterceptors or + StreamServerInterceptors + + Returns: + A Server. + + Raises: + TypeError: If an interceptor derives from neither UnaryServerInterceptor + nor StreamServerInterceptor. + """ + from . import _interceptor + + return _interceptor.intercept_server(server, *interceptors) + + +__all__ = ( + "UnaryClientInterceptor", + "StreamClientInfo", + "StreamClientInterceptor", + "UnaryServerInfo", + "StreamServerInfo", + "UnaryServerInterceptor", + "StreamServerInterceptor", + "intercept_channel", + "intercept_server", +) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/_interceptor.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/_interceptor.py new file mode 100644 index 00000000000..74861913b92 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/grpcext/_interceptor.py @@ -0,0 +1,431 @@ +# 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. + +# pylint:disable=relative-beyond-top-level +# pylint:disable=arguments-differ +# pylint:disable=no-member +# pylint:disable=signature-differs + +"""Implementation of gRPC Python interceptors.""" + + +import collections + +import grpc + +from .. import grpcext + + +class _UnaryClientInfo( + collections.namedtuple("_UnaryClientInfo", ("full_method", "timeout")) +): + pass + + +class _StreamClientInfo( + collections.namedtuple( + "_StreamClientInfo", + ("full_method", "is_client_stream", "is_server_stream", "timeout"), + ) +): + pass + + +class _InterceptorUnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + def invoker(request, metadata): + return self._base_callable(request, timeout, metadata, credentials) + + client_info = _UnaryClientInfo(self._method, timeout) + return self._interceptor.intercept_unary( + request, metadata, client_info, invoker + ) + + def with_call( + self, request, timeout=None, metadata=None, credentials=None + ): + def invoker(request, metadata): + return self._base_callable.with_call( + request, timeout, metadata, credentials + ) + + client_info = _UnaryClientInfo(self._method, timeout) + return self._interceptor.intercept_unary( + request, metadata, client_info, invoker + ) + + def future(self, request, timeout=None, metadata=None, credentials=None): + def invoker(request, metadata): + return self._base_callable.future( + request, timeout, metadata, credentials + ) + + client_info = _UnaryClientInfo(self._method, timeout) + return self._interceptor.intercept_unary( + request, metadata, client_info, invoker + ) + + +class _InterceptorUnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + def invoker(request, metadata): + return self._base_callable(request, timeout, metadata, credentials) + + client_info = _StreamClientInfo(self._method, False, True, timeout) + return self._interceptor.intercept_stream( + request, metadata, client_info, invoker + ) + + +class _InterceptorStreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, False, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + def with_call( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable.with_call( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, False, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + def future( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable.future( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, False, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + +class _InterceptorStreamStreamMultiCallable(grpc.StreamStreamMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, True, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + +class _InterceptorChannel(grpc.Channel): + def __init__(self, channel, interceptor): + self._channel = channel + self._interceptor = interceptor + + def subscribe(self, *args, **kwargs): + self._channel.subscribe(*args, **kwargs) + + def unsubscribe(self, *args, **kwargs): + self._channel.unsubscribe(*args, **kwargs) + + def unary_unary( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.unary_unary( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.UnaryClientInterceptor): + return _InterceptorUnaryUnaryMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def unary_stream( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.unary_stream( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.StreamClientInterceptor): + return _InterceptorUnaryStreamMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def stream_unary( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.stream_unary( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.StreamClientInterceptor): + return _InterceptorStreamUnaryMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def stream_stream( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.stream_stream( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.StreamClientInterceptor): + return _InterceptorStreamStreamMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def close(self): + if not hasattr(self._channel, "close"): + raise RuntimeError( + "close() is not supported with the installed version of grpcio" + ) + self._channel.close() + + def __enter__(self): + """Enters the runtime context related to the channel object.""" + raise NotImplementedError() + + def __exit__(self, exc_type, exc_val, exc_tb): + """Exits the runtime context related to the channel object.""" + raise NotImplementedError() + + +def intercept_channel(channel, *interceptors): + result = channel + for interceptor in interceptors: + if not isinstance( + interceptor, grpcext.UnaryClientInterceptor + ) and not isinstance(interceptor, grpcext.StreamClientInterceptor): + raise TypeError( + "interceptor must be either a " + "grpcext.UnaryClientInterceptor or a " + "grpcext.StreamClientInterceptor" + ) + result = _InterceptorChannel(result, interceptor) + return result + + +class _UnaryServerInfo( + collections.namedtuple("_UnaryServerInfo", ("full_method",)) +): + pass + + +class _StreamServerInfo( + collections.namedtuple( + "_StreamServerInfo", + ("full_method", "is_client_stream", "is_server_stream"), + ) +): + pass + + +class _InterceptorRpcMethodHandler(grpc.RpcMethodHandler): + def __init__(self, rpc_method_handler, method, interceptor): + self._rpc_method_handler = rpc_method_handler + self._method = method + self._interceptor = interceptor + + @property + def request_streaming(self): + return self._rpc_method_handler.request_streaming + + @property + def response_streaming(self): + return self._rpc_method_handler.response_streaming + + @property + def request_deserializer(self): + return self._rpc_method_handler.request_deserializer + + @property + def response_serializer(self): + return self._rpc_method_handler.response_serializer + + @property + def unary_unary(self): + if not isinstance(self._interceptor, grpcext.UnaryServerInterceptor): + return self._rpc_method_handler.unary_unary + + def adaptation(request, servicer_context): + def handler(request, servicer_context): + return self._rpc_method_handler.unary_unary( + request, servicer_context + ) + + return self._interceptor.intercept_unary( + request, + servicer_context, + _UnaryServerInfo(self._method), + handler, + ) + + return adaptation + + @property + def unary_stream(self): + if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): + return self._rpc_method_handler.unary_stream + + def adaptation(request, servicer_context): + def handler(request, servicer_context): + return self._rpc_method_handler.unary_stream( + request, servicer_context + ) + + return self._interceptor.intercept_stream( + request, + servicer_context, + _StreamServerInfo(self._method, False, True), + handler, + ) + + return adaptation + + @property + def stream_unary(self): + if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): + return self._rpc_method_handler.stream_unary + + def adaptation(request_iterator, servicer_context): + def handler(request_iterator, servicer_context): + return self._rpc_method_handler.stream_unary( + request_iterator, servicer_context + ) + + return self._interceptor.intercept_stream( + request_iterator, + servicer_context, + _StreamServerInfo(self._method, True, False), + handler, + ) + + return adaptation + + @property + def stream_stream(self): + if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): + return self._rpc_method_handler.stream_stream + + def adaptation(request_iterator, servicer_context): + def handler(request_iterator, servicer_context): + return self._rpc_method_handler.stream_stream( + request_iterator, servicer_context + ) + + return self._interceptor.intercept_stream( + request_iterator, + servicer_context, + _StreamServerInfo(self._method, True, True), + handler, + ) + + return adaptation + + +class _InterceptorGenericRpcHandler(grpc.GenericRpcHandler): + def __init__(self, generic_rpc_handler, interceptor): + self.generic_rpc_handler = generic_rpc_handler + self._interceptor = interceptor + + def service(self, handler_call_details): + result = self.generic_rpc_handler.service(handler_call_details) + if result: + result = _InterceptorRpcMethodHandler( + result, handler_call_details.method, self._interceptor + ) + return result + + +class _InterceptorServer(grpc.Server): + def __init__(self, server, interceptor): + self._server = server + self._interceptor = interceptor + + def add_generic_rpc_handlers(self, generic_rpc_handlers): + generic_rpc_handlers = [ + _InterceptorGenericRpcHandler( + generic_rpc_handler, self._interceptor + ) + for generic_rpc_handler in generic_rpc_handlers + ] + return self._server.add_generic_rpc_handlers(generic_rpc_handlers) + + def add_insecure_port(self, *args, **kwargs): + return self._server.add_insecure_port(*args, **kwargs) + + def add_secure_port(self, *args, **kwargs): + return self._server.add_secure_port(*args, **kwargs) + + def start(self, *args, **kwargs): + return self._server.start(*args, **kwargs) + + def stop(self, *args, **kwargs): + return self._server.stop(*args, **kwargs) + + def wait_for_termination(self, *args, **kwargs): + return self._server.wait_for_termination(*args, **kwargs) + + +def intercept_server(server, *interceptors): + result = server + for interceptor in interceptors: + if not isinstance( + interceptor, grpcext.UnaryServerInterceptor + ) and not isinstance(interceptor, grpcext.StreamServerInterceptor): + raise TypeError( + "interceptor must be either a " + "grpcext.UnaryServerInterceptor or a " + "grpcext.StreamServerInterceptor" + ) + result = _InterceptorServer(result, interceptor) + return result diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py new file mode 100644 index 00000000000..780a92b6a1b --- /dev/null +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py @@ -0,0 +1,15 @@ +# 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. + +__version__ = "0.12.dev0" diff --git a/ext/opentelemetry-ext-grpc/tests/__init__.py b/ext/opentelemetry-ext-grpc/tests/__init__.py new file mode 100644 index 00000000000..b0a6f428417 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/__init__.py @@ -0,0 +1,13 @@ +# 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. diff --git a/ext/opentelemetry-ext-grpc/tests/_client.py b/ext/opentelemetry-ext-grpc/tests/_client.py new file mode 100644 index 00000000000..43310b5f651 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/_client.py @@ -0,0 +1,57 @@ +# 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. + +from .protobuf.test_server_pb2 import Request + +CLIENT_ID = 1 + + +def simple_method(stub, error=False): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + stub.SimpleMethod(request) + + +def client_streaming_method(stub, error=False): + # create a generator + def request_messages(): + for _ in range(5): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + yield request + + stub.ClientStreamingMethod(request_messages()) + + +def server_streaming_method(stub, error=False): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + response_iterator = stub.ServerStreamingMethod(request) + list(response_iterator) + + +def bidirectional_streaming_method(stub, error=False): + def request_messages(): + for _ in range(5): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + yield request + + response_iterator = stub.BidirectionalStreamingMethod(request_messages()) + + list(response_iterator) diff --git a/ext/opentelemetry-ext-grpc/tests/_server.py b/ext/opentelemetry-ext-grpc/tests/_server.py new file mode 100644 index 00000000000..a4e1c266b8a --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/_server.py @@ -0,0 +1,87 @@ +# 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. + +from concurrent import futures + +import grpc + +from .protobuf import test_server_pb2, test_server_pb2_grpc + +SERVER_ID = 1 + + +class TestServer(test_server_pb2_grpc.GRPCTestServerServicer): + def SimpleMethod(self, request, context): + if request.request_data == "error": + context.set_code(grpc.StatusCode.INVALID_ARGUMENT) + return test_server_pb2.Response() + response = test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + return response + + def ClientStreamingMethod(self, request_iterator, context): + data = list(request_iterator) + if data[0].request_data == "error": + context.set_code(grpc.StatusCode.INVALID_ARGUMENT) + return test_server_pb2.Response() + response = test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + return response + + def ServerStreamingMethod(self, request, context): + if request.request_data == "error": + + context.abort( + code=grpc.StatusCode.INVALID_ARGUMENT, + details="server stream error", + ) + return test_server_pb2.Response() + + # create a generator + def response_messages(): + for _ in range(5): + response = test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + yield response + + return response_messages() + + def BidirectionalStreamingMethod(self, request_iterator, context): + data = list(request_iterator) + if data[0].request_data == "error": + context.abort( + code=grpc.StatusCode.INVALID_ARGUMENT, + details="bidirectional error", + ) + return + + for _ in range(5): + yield test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + + +def create_test_server(port): + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) + + test_server_pb2_grpc.add_GRPCTestServerServicer_to_server( + TestServer(), server + ) + + server.add_insecure_port("localhost:{}".format(port)) + + return server diff --git a/ext/opentelemetry-ext-grpc/tests/protobuf/test_server.proto b/ext/opentelemetry-ext-grpc/tests/protobuf/test_server.proto new file mode 100644 index 00000000000..790a7675de0 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/protobuf/test_server.proto @@ -0,0 +1,34 @@ +// Copyright 2019 gRPC 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. +syntax = "proto3"; + +message Request { + int64 client_id = 1; + string request_data = 2; +} + +message Response { + int64 server_id = 1; + string response_data = 2; +} + +service GRPCTestServer { + rpc SimpleMethod (Request) returns (Response); + + rpc ClientStreamingMethod (stream Request) returns (Response); + + rpc ServerStreamingMethod (Request) returns (stream Response); + + rpc BidirectionalStreamingMethod (stream Request) returns (stream Response); +} diff --git a/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2.py b/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2.py new file mode 100644 index 00000000000..735206f8505 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2.py @@ -0,0 +1,215 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: test_server.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database + +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +DESCRIPTOR = _descriptor.FileDescriptor( + name="test_server.proto", + package="", + syntax="proto3", + serialized_options=None, + serialized_pb=b'\n\x11test_server.proto"2\n\x07Request\x12\x11\n\tclient_id\x18\x01 \x01(\x03\x12\x14\n\x0crequest_data\x18\x02 \x01(\t"4\n\x08Response\x12\x11\n\tserver_id\x18\x01 \x01(\x03\x12\x15\n\rresponse_data\x18\x02 \x01(\t2\xce\x01\n\x0eGRPCTestServer\x12#\n\x0cSimpleMethod\x12\x08.Request\x1a\t.Response\x12.\n\x15\x43lientStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x12.\n\x15ServerStreamingMethod\x12\x08.Request\x1a\t.Response0\x01\x12\x37\n\x1c\x42idirectionalStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x30\x01\x62\x06proto3', +) + + +_REQUEST = _descriptor.Descriptor( + name="Request", + full_name="Request", + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name="client_id", + full_name="Request.client_id", + index=0, + number=1, + type=3, + cpp_type=2, + label=1, + has_default_value=False, + default_value=0, + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + _descriptor.FieldDescriptor( + name="request_data", + full_name="Request.request_data", + index=1, + number=2, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=b"".decode("utf-8"), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + ], + extensions=[], + nested_types=[], + enum_types=[], + serialized_options=None, + is_extendable=False, + syntax="proto3", + extension_ranges=[], + oneofs=[], + serialized_start=21, + serialized_end=71, +) + + +_RESPONSE = _descriptor.Descriptor( + name="Response", + full_name="Response", + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name="server_id", + full_name="Response.server_id", + index=0, + number=1, + type=3, + cpp_type=2, + label=1, + has_default_value=False, + default_value=0, + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + _descriptor.FieldDescriptor( + name="response_data", + full_name="Response.response_data", + index=1, + number=2, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=b"".decode("utf-8"), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + ], + extensions=[], + nested_types=[], + enum_types=[], + serialized_options=None, + is_extendable=False, + syntax="proto3", + extension_ranges=[], + oneofs=[], + serialized_start=73, + serialized_end=125, +) + +DESCRIPTOR.message_types_by_name["Request"] = _REQUEST +DESCRIPTOR.message_types_by_name["Response"] = _RESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Request = _reflection.GeneratedProtocolMessageType( + "Request", + (_message.Message,), + { + "DESCRIPTOR": _REQUEST, + "__module__": "test_server_pb2" + # @@protoc_insertion_point(class_scope:Request) + }, +) +_sym_db.RegisterMessage(Request) + +Response = _reflection.GeneratedProtocolMessageType( + "Response", + (_message.Message,), + { + "DESCRIPTOR": _RESPONSE, + "__module__": "test_server_pb2" + # @@protoc_insertion_point(class_scope:Response) + }, +) +_sym_db.RegisterMessage(Response) + + +_GRPCTESTSERVER = _descriptor.ServiceDescriptor( + name="GRPCTestServer", + full_name="GRPCTestServer", + file=DESCRIPTOR, + index=0, + serialized_options=None, + serialized_start=128, + serialized_end=334, + methods=[ + _descriptor.MethodDescriptor( + name="SimpleMethod", + full_name="GRPCTestServer.SimpleMethod", + index=0, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name="ClientStreamingMethod", + full_name="GRPCTestServer.ClientStreamingMethod", + index=1, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name="ServerStreamingMethod", + full_name="GRPCTestServer.ServerStreamingMethod", + index=2, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name="BidirectionalStreamingMethod", + full_name="GRPCTestServer.BidirectionalStreamingMethod", + index=3, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + ], +) +_sym_db.RegisterServiceDescriptor(_GRPCTESTSERVER) + +DESCRIPTOR.services_by_name["GRPCTestServer"] = _GRPCTESTSERVER + +# @@protoc_insertion_point(module_scope) diff --git a/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2_grpc.py b/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2_grpc.py new file mode 100644 index 00000000000..d0a6fd5184f --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/protobuf/test_server_pb2_grpc.py @@ -0,0 +1,205 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +from tests.protobuf import test_server_pb2 as test__server__pb2 + + +class GRPCTestServerStub(object): + """Missing associated documentation comment in .proto file""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.SimpleMethod = channel.unary_unary( + "/GRPCTestServer/SimpleMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + self.ClientStreamingMethod = channel.stream_unary( + "/GRPCTestServer/ClientStreamingMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + self.ServerStreamingMethod = channel.unary_stream( + "/GRPCTestServer/ServerStreamingMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + self.BidirectionalStreamingMethod = channel.stream_stream( + "/GRPCTestServer/BidirectionalStreamingMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + + +class GRPCTestServerServicer(object): + """Missing associated documentation comment in .proto file""" + + def SimpleMethod(self, request, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + def ClientStreamingMethod(self, request_iterator, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + def ServerStreamingMethod(self, request, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + def BidirectionalStreamingMethod(self, request_iterator, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + +def add_GRPCTestServerServicer_to_server(servicer, server): + rpc_method_handlers = { + "SimpleMethod": grpc.unary_unary_rpc_method_handler( + servicer.SimpleMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + "ClientStreamingMethod": grpc.stream_unary_rpc_method_handler( + servicer.ClientStreamingMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + "ServerStreamingMethod": grpc.unary_stream_rpc_method_handler( + servicer.ServerStreamingMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + "BidirectionalStreamingMethod": grpc.stream_stream_rpc_method_handler( + servicer.BidirectionalStreamingMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + "GRPCTestServer", rpc_method_handlers + ) + server.add_generic_rpc_handlers((generic_handler,)) + + +# This class is part of an EXPERIMENTAL API. +class GRPCTestServer(object): + """Missing associated documentation comment in .proto file""" + + @staticmethod + def SimpleMethod( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/GRPCTestServer/SimpleMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ClientStreamingMethod( + request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.stream_unary( + request_iterator, + target, + "/GRPCTestServer/ClientStreamingMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ServerStreamingMethod( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_stream( + request, + target, + "/GRPCTestServer/ServerStreamingMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def BidirectionalStreamingMethod( + request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.stream_stream( + request_iterator, + target, + "/GRPCTestServer/BidirectionalStreamingMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) diff --git a/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py new file mode 100644 index 00000000000..6af94808f66 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py @@ -0,0 +1,298 @@ +# 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 grpc + +import opentelemetry.ext.grpc +from opentelemetry import trace +from opentelemetry.ext.grpc import GrpcInstrumentorClient +from opentelemetry.sdk.metrics.export.aggregate import ( + MinMaxSumCountAggregator, + SumAggregator, +) +from opentelemetry.test.test_base import TestBase +from tests.protobuf import test_server_pb2_grpc + +from ._client import ( + bidirectional_streaming_method, + client_streaming_method, + server_streaming_method, + simple_method, +) +from ._server import create_test_server + + +class TestClientProto(TestBase): + def setUp(self): + super().setUp() + GrpcInstrumentorClient().instrument( + exporter=self.memory_metrics_exporter + ) + self.server = create_test_server(25565) + self.server.start() + self.channel = grpc.insecure_channel("localhost:25565") + self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) + + def tearDown(self): + super().tearDown() + GrpcInstrumentorClient().uninstrument() + self.memory_metrics_exporter.clear() + self.server.stop(None) + + def _verify_success_records(self, num_bytes_out, num_bytes_in, method): + # pylint: disable=protected-access,no-member + self.channel._interceptor.controller.tick() + records = self.memory_metrics_exporter.get_exported_metrics() + self.assertEqual(len(records), 3) + + bytes_out = None + bytes_in = None + duration = None + + for record in records: + if record.instrument.name == "grpcio/client/duration": + duration = record + elif record.instrument.name == "grpcio/client/bytes_out": + bytes_out = record + elif record.instrument.name == "grpcio/client/bytes_in": + bytes_in = record + + self.assertIsNotNone(bytes_out) + self.assertEqual(bytes_out.instrument.name, "grpcio/client/bytes_out") + self.assertEqual(bytes_out.labels, (("method", method),)) + + self.assertIsNotNone(bytes_in) + self.assertEqual(bytes_in.instrument.name, "grpcio/client/bytes_in") + self.assertEqual(bytes_in.labels, (("method", method),)) + + self.assertIsNotNone(duration) + self.assertEqual(duration.instrument.name, "grpcio/client/duration") + self.assertEqual( + duration.labels, + ( + ("error", False), + ("method", method), + ("status_code", grpc.StatusCode.OK), + ), + ) + + self.assertEqual(type(bytes_out.aggregator), SumAggregator) + self.assertEqual(type(bytes_in.aggregator), SumAggregator) + self.assertEqual(type(duration.aggregator), MinMaxSumCountAggregator) + + self.assertEqual(bytes_out.aggregator.checkpoint, num_bytes_out) + self.assertEqual(bytes_in.aggregator.checkpoint, num_bytes_in) + + self.assertEqual(duration.aggregator.checkpoint.count, 1) + self.assertGreaterEqual(duration.aggregator.checkpoint.sum, 0) + + def test_unary_unary(self): + simple_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.ext.grpc + ) + + self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") + + def test_unary_stream(self): + server_streaming_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/ServerStreamingMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.ext.grpc + ) + + self._verify_success_records( + 8, 40, "/GRPCTestServer/ServerStreamingMethod" + ) + + def test_stream_unary(self): + client_streaming_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/ClientStreamingMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.ext.grpc + ) + + self._verify_success_records( + 40, 8, "/GRPCTestServer/ClientStreamingMethod" + ) + + def test_stream_stream(self): + bidirectional_streaming_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual( + span.name, "/GRPCTestServer/BidirectionalStreamingMethod" + ) + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.ext.grpc + ) + + self._verify_success_records( + 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" + ) + + def _verify_error_records(self, method): + # pylint: disable=protected-access,no-member + self.channel._interceptor.controller.tick() + records = self.memory_metrics_exporter.get_exported_metrics() + self.assertEqual(len(records), 3) + + bytes_out = None + errors = None + duration = None + + for record in records: + if record.instrument.name == "grpcio/client/duration": + duration = record + elif record.instrument.name == "grpcio/client/bytes_out": + bytes_out = record + elif record.instrument.name == "grpcio/client/errors": + errors = record + + self.assertIsNotNone(bytes_out) + self.assertIsNotNone(errors) + self.assertIsNotNone(duration) + + self.assertEqual(errors.instrument.name, "grpcio/client/errors") + self.assertEqual( + errors.labels, + ( + ("method", method), + ("status_code", grpc.StatusCode.INVALID_ARGUMENT), + ), + ) + self.assertEqual(errors.aggregator.checkpoint, 1) + + self.assertEqual( + duration.labels, + ( + ("error", True), + ("method", method), + ("status_code", grpc.StatusCode.INVALID_ARGUMENT), + ), + ) + + def test_error_simple(self): + with self.assertRaises(grpc.RpcError): + simple_method(self._stub, error=True) + + self._verify_error_records("/GRPCTestServer/SimpleMethod") + + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + def test_error_stream_unary(self): + with self.assertRaises(grpc.RpcError): + client_streaming_method(self._stub, error=True) + + self._verify_error_records("/GRPCTestServer/ClientStreamingMethod") + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + def test_error_unary_stream(self): + with self.assertRaises(grpc.RpcError): + server_streaming_method(self._stub, error=True) + + self._verify_error_records("/GRPCTestServer/ServerStreamingMethod") + + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + def test_error_stream_stream(self): + with self.assertRaises(grpc.RpcError): + bidirectional_streaming_method(self._stub, error=True) + + self._verify_error_records( + "/GRPCTestServer/BidirectionalStreamingMethod" + ) + + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + +class TestClientNoMetrics(TestBase): + def setUp(self): + super().setUp() + GrpcInstrumentorClient().instrument() + self.server = create_test_server(25565) + self.server.start() + self.channel = grpc.insecure_channel("localhost:25565") + self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) + + def tearDown(self): + super().tearDown() + GrpcInstrumentorClient().uninstrument() + self.memory_metrics_exporter.clear() + self.server.stop(None) + + def test_unary_unary(self): + simple_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.ext.grpc + ) diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py new file mode 100644 index 00000000000..cf2484a4a05 --- /dev/null +++ b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py @@ -0,0 +1,297 @@ +# 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. + +# pylint:disable=unused-argument +# pylint:disable=no-self-use + +import threading +from concurrent import futures + +import grpc + +import opentelemetry.ext.grpc +from opentelemetry import trace +from opentelemetry.ext.grpc import ( + GrpcInstrumentorServer, + server_interceptor, +) +from opentelemetry.ext.grpc.grpcext import intercept_server +from opentelemetry.sdk import trace as trace_sdk +from opentelemetry.test.test_base import TestBase + + +class UnaryUnaryMethodHandler(grpc.RpcMethodHandler): + def __init__(self, handler): + self.request_streaming = False + self.response_streaming = False + self.request_deserializer = None + self.response_serializer = None + self.unary_unary = handler + self.unary_stream = None + self.stream_unary = None + self.stream_stream = None + + +class UnaryUnaryRpcHandler(grpc.GenericRpcHandler): + def __init__(self, handler): + self._unary_unary_handler = handler + + def service(self, handler_call_details): + return UnaryUnaryMethodHandler(self._unary_unary_handler) + + +class TestOpenTelemetryServerInterceptor(TestBase): + def test_instrumentor(self): + def handler(request, context): + return b"" + + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("test")(b"test") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertEqual(span.name, "test") + self.assertIs(span.kind, trace.SpanKind.SERVER) + self.check_span_instrumentation_info( + span, opentelemetry.ext.grpc + ) + grpc_server_instrumentor.uninstrument() + + def test_uninstrument(self): + def handler(request, context): + return b"" + + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + grpc_server_instrumentor.uninstrument() + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("test")(b"test") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 0) + + def test_create_span(self): + """Check that the interceptor wraps calls with spans server-side.""" + + # Intercept gRPC calls... + interceptor = server_interceptor() + + # No-op RPC handler + def handler(request, context): + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + # FIXME: grpcext interceptor doesn't apply to handlers passed to server + # init, should use intercept_service API instead. + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("")(b"") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + + self.assertEqual(span.name, "") + self.assertIs(span.kind, trace.SpanKind.SERVER) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.ext.grpc + ) + + def test_span_lifetime(self): + """Check that the span is active for the duration of the call.""" + + interceptor = server_interceptor() + + # To capture the current span at the time the handler is called + active_span_in_handler = None + + def handler(request, context): + nonlocal active_span_in_handler + active_span_in_handler = trace.get_current_span() + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + active_span_before_call = trace.get_current_span() + try: + server.start() + channel.unary_unary("")(b"") + finally: + server.stop(None) + active_span_after_call = trace.get_current_span() + + self.assertEqual(active_span_before_call, trace.INVALID_SPAN) + self.assertEqual(active_span_after_call, trace.INVALID_SPAN) + self.assertIsInstance(active_span_in_handler, trace_sdk.Span) + self.assertIsNone(active_span_in_handler.parent) + + def test_sequential_server_spans(self): + """Check that sequential RPCs get separate server spans.""" + + interceptor = server_interceptor() + + # Capture the currently active span in each thread + active_spans_in_handler = [] + + def handler(request, context): + active_spans_in_handler.append(trace.get_current_span()) + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("")(b"") + channel.unary_unary("")(b"") + finally: + server.stop(None) + + self.assertEqual(len(active_spans_in_handler), 2) + # pylint:disable=unbalanced-tuple-unpacking + span1, span2 = active_spans_in_handler + # Spans should belong to separate traces, and each should be a root + # span + self.assertNotEqual(span1.context.span_id, span2.context.span_id) + self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) + self.assertIsNone(span1.parent) + self.assertIsNone(span1.parent) + + def test_concurrent_server_spans(self): + """Check that concurrent RPC calls don't interfere with each other. + + This is the same check as test_sequential_server_spans except that the + RPCs are concurrent. Two handlers are invoked at the same time on two + separate threads. Each one should see a different active span and + context. + """ + + interceptor = server_interceptor() + + # Capture the currently active span in each thread + active_spans_in_handler = [] + latch = get_latch(2) + + def handler(request, context): + latch() + active_spans_in_handler.append(trace.get_current_span()) + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=2), + options=(("grpc.so_reuseport", 0),), + ) + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + # Interleave calls so spans are active on each thread at the same + # time + with futures.ThreadPoolExecutor(max_workers=2) as tpe: + f1 = tpe.submit(channel.unary_unary(""), b"") + f2 = tpe.submit(channel.unary_unary(""), b"") + futures.wait((f1, f2)) + finally: + server.stop(None) + + self.assertEqual(len(active_spans_in_handler), 2) + # pylint:disable=unbalanced-tuple-unpacking + span1, span2 = active_spans_in_handler + # Spans should belong to separate traces, and each should be a root + # span + self.assertNotEqual(span1.context.span_id, span2.context.span_id) + self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) + self.assertIsNone(span1.parent) + self.assertIsNone(span1.parent) + + +def get_latch(num): + """Get a countdown latch function for use in n threads.""" + cv = threading.Condition() + count = 0 + + def countdown_latch(): + """Block until n-1 other threads have called.""" + nonlocal count + cv.acquire() + count += 1 + cv.notify() + cv.release() + cv.acquire() + while count < num: + cv.wait() + cv.release() + + return countdown_latch diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md new file mode 100644 index 00000000000..b21af319c44 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md @@ -0,0 +1,32 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-grpc + ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) + +## Version 0.11b0 + +Released 2020-07-28 + +- Add status code to gRPC client spans + ([896](https://github.com/open-telemetry/opentelemetry-python/pull/896)) +- Add gRPC client and server instrumentors + ([788](https://github.com/open-telemetry/opentelemetry-python/pull/788)) + +- Add metric recording (bytes in/out, errors, latency) to gRPC client + +## 0.8b0 + +Released 2020-05-27 + +- lint: version of grpc causes lint issues + ([#696](https://github.com/open-telemetry/opentelemetry-python/pull/696)) + +## 0.6b0 + +Released 2020-03-30 + +- Add gRPC integration + ([#476](https://github.com/open-telemetry/opentelemetry-python/pull/476)) +- Initial release diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE b/instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE new file mode 100644 index 00000000000..261eeb9e9f8 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in new file mode 100644 index 00000000000..aed3e33273b --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in @@ -0,0 +1,9 @@ +graft src +graft tests +global-exclude *.pyc +global-exclude *.pyo +global-exclude __pycache__/* +include CHANGELOG.md +include MANIFEST.in +include README.rst +include LICENSE diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/README.rst b/instrumentation/opentelemetry-instrumentation-grpc copy/README.rst new file mode 100644 index 00000000000..176bdf1a39b --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/README.rst @@ -0,0 +1,18 @@ +OpenTelemetry gRPC Integration +============================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-grpc.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-grpc/ + +Client and server interceptors for `gRPC Python`_. + +.. _gRPC Python: https://grpc.github.io/grpc/python/grpc.html + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-grpc diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg b/instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg new file mode 100644 index 00000000000..0308a229f8f --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg @@ -0,0 +1,59 @@ +# 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. + +[metadata] +name = opentelemetry-instrumentation-grpc +description = OpenTelemetry gRPC instrumentation +long_description = file: README.rst +long_description_content_type = text/x-rst +author = OpenTelemetry Authors +author_email = cncf-opentelemetry-contributors@lists.cncf.io +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-grpc +platforms = any +license = Apache-2.0 +classifiers = + Development Status :: 4 - Beta + Intended Audience :: Developers + License :: OSI Approved :: Apache Software License + Programming Language :: Python + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.4 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 + Programming Language :: Python :: 3.8 + +[options] +python_requires = >=3.4 +package_dir= + =src +packages=find_namespace: +install_requires = + opentelemetry-api == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 + grpcio ~= 1.27 + +[options.extras_require] +test = + opentelemetry-test == 0.12.dev0 + opentelemetry-sdk == 0.12.dev0 + protobuf == 3.12.2 + +[options.packages.find] +where = src + +[options.entry_points] +opentelemetry_instrumentor = + grpc_client = opentelemetry.instrumentation.grpc:GrpcInstrumentorClient + grpc_server = opentelemetry.instrumentation.grpc:GrpcInstrumentorServer diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/setup.py b/instrumentation/opentelemetry-instrumentation-grpc copy/setup.py new file mode 100644 index 00000000000..87c720aea23 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/setup.py @@ -0,0 +1,27 @@ +# 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", "grpc", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py new file mode 100644 index 00000000000..9b6862eba0d --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py @@ -0,0 +1,224 @@ +# 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. + +# pylint:disable=no-name-in-module +# pylint:disable=relative-beyond-top-level +# pylint:disable=import-error +# pylint:disable=no-self-use +""" +Usage Client +------------ +.. code-block:: python + + import logging + + import grpc + + from opentelemetry import trace + from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient, client_interceptor + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import ( + ConsoleSpanExporter, + SimpleExportSpanProcessor, + ) + + from opentelemetry import metrics + from opentelemetry.sdk.metrics import MeterProvider + from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter + + try: + from .gen import helloworld_pb2, helloworld_pb2_grpc + except ImportError: + from gen import helloworld_pb2, helloworld_pb2_grpc + + trace.set_tracer_provider(TracerProvider()) + trace.get_tracer_provider().add_span_processor( + SimpleExportSpanProcessor(ConsoleSpanExporter()) + ) + + # Set meter provider to opentelemetry-sdk's MeterProvider + metrics.set_meter_provider(MeterProvider()) + + # Optional - export GRPC specific metrics (latency, bytes in/out, errors) by passing an exporter + instrumentor = GrpcInstrumentorClient(exporter=ConsoleMetricsExporter(), interval=10) + instrumentor.instrument() + + def run(): + with grpc.insecure_channel("localhost:50051") as channel: + + stub = helloworld_pb2_grpc.GreeterStub(channel) + response = stub.SayHello(helloworld_pb2.HelloRequest(name="YOU")) + + print("Greeter client received: " + response.message) + + + if __name__ == "__main__": + logging.basicConfig() + run() + +Usage Server +------------ +.. code-block:: python + + import logging + from concurrent import futures + + import grpc + + from opentelemetry import trace + from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer, server_interceptor + from opentelemetry.instrumentation.grpc.grpcext import intercept_server + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import ( + ConsoleSpanExporter, + SimpleExportSpanProcessor, + ) + + try: + from .gen import helloworld_pb2, helloworld_pb2_grpc + except ImportError: + from gen import helloworld_pb2, helloworld_pb2_grpc + + trace.set_tracer_provider(TracerProvider()) + trace.get_tracer_provider().add_span_processor( + SimpleExportSpanProcessor(ConsoleSpanExporter()) + ) + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + + + class Greeter(helloworld_pb2_grpc.GreeterServicer): + def SayHello(self, request, context): + return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name) + + + def serve(): + + server = grpc.server(futures.ThreadPoolExecutor()) + + helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) + server.add_insecure_port("[::]:50051") + server.start() + server.wait_for_termination() + + + if __name__ == "__main__": + logging.basicConfig() + serve() +""" +from contextlib import contextmanager +from functools import partial + +import grpc +from wrapt import wrap_function_wrapper as _wrap + +from opentelemetry import trace +from opentelemetry.instrumentation.grpc.grpcext import ( + intercept_channel, + intercept_server, +) +from opentelemetry.instrumentation.grpc.version import __version__ +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.utils import unwrap + +# pylint:disable=import-outside-toplevel +# pylint:disable=import-self +# pylint:disable=unused-argument +# isort:skip + + +class GrpcInstrumentorServer(BaseInstrumentor): + def _instrument(self, **kwargs): + _wrap("grpc", "server", self.wrapper_fn) + + def _uninstrument(self, **kwargs): + unwrap(grpc, "server") + + def wrapper_fn(self, original_func, instance, args, kwargs): + server = original_func(*args, **kwargs) + return intercept_server(server, server_interceptor()) + + +class GrpcInstrumentorClient(BaseInstrumentor): + def _instrument(self, **kwargs): + exporter = kwargs.get("exporter", None) + interval = kwargs.get("interval", 30) + if kwargs.get("channel_type") == "secure": + _wrap( + "grpc", + "secure_channel", + partial(self.wrapper_fn, exporter, interval), + ) + + else: + _wrap( + "grpc", + "insecure_channel", + partial(self.wrapper_fn, exporter, interval), + ) + + def _uninstrument(self, **kwargs): + if kwargs.get("channel_type") == "secure": + unwrap(grpc, "secure_channel") + + else: + unwrap(grpc, "insecure_channel") + + def wrapper_fn( + self, exporter, interval, original_func, instance, args, kwargs + ): + channel = original_func(*args, **kwargs) + tracer_provider = kwargs.get("tracer_provider") + return intercept_channel( + channel, + client_interceptor( + tracer_provider=tracer_provider, + exporter=exporter, + interval=interval, + ), + ) + + +def client_interceptor(tracer_provider=None, exporter=None, interval=30): + """Create a gRPC client channel interceptor. + + Args: + tracer: The tracer to use to create client-side spans. + exporter: The exporter that will receive client metrics + interval: Time between every export call + + Returns: + An invocation-side interceptor object. + """ + from . import _client + + tracer = trace.get_tracer(__name__, __version__, tracer_provider) + + return _client.OpenTelemetryClientInterceptor(tracer, exporter, interval) + + +def server_interceptor(tracer_provider=None): + """Create a gRPC server interceptor. + + Args: + tracer: The tracer to use to create server-side spans. + + Returns: + A service-side interceptor object. + """ + from . import _server + + tracer = trace.get_tracer(__name__, __version__, tracer_provider) + + return _server.OpenTelemetryServerInterceptor(tracer) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py new file mode 100644 index 00000000000..028804f599c --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py @@ -0,0 +1,275 @@ +# 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. + +# pylint:disable=relative-beyond-top-level +# pylint:disable=arguments-differ +# pylint:disable=no-member +# pylint:disable=signature-differs + +"""Implementation of the invocation-side open-telemetry interceptor.""" + +from collections import OrderedDict +from typing import MutableMapping + +import grpc + +from opentelemetry import metrics, propagators, trace +from opentelemetry.sdk.metrics.export.controller import PushController +from opentelemetry.trace.status import Status, StatusCanonicalCode + +from . import grpcext +from ._utilities import RpcInfo, TimedMetricRecorder + + +class _GuardedSpan: + def __init__(self, span): + self.span = span + self.generated_span = None + self._engaged = True + + def __enter__(self): + self.generated_span = self.span.__enter__() + return self + + def __exit__(self, *args, **kwargs): + if self._engaged: + self.generated_span = None + return self.span.__exit__(*args, **kwargs) + return False + + def release(self): + self._engaged = False + return self.span + + +def _inject_span_context(metadata: MutableMapping[str, str]) -> None: + # pylint:disable=unused-argument + def append_metadata( + carrier: MutableMapping[str, str], key: str, value: str + ): + metadata[key] = value + + # Inject current active span from the context + propagators.inject(append_metadata, metadata) + + +def _make_future_done_callback(span, rpc_info, client_info, metrics_recorder): + def callback(response_future): + with span: + code = response_future.code() + if code != grpc.StatusCode.OK: + rpc_info.error = code + return + response = response_future.result() + rpc_info.response = response + if "ByteSize" in dir(response): + metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) + + return callback + + +class OpenTelemetryClientInterceptor( + grpcext.UnaryClientInterceptor, grpcext.StreamClientInterceptor +): + def __init__(self, tracer, exporter, interval): + self._tracer = tracer + + self._meter = None + if exporter and interval: + self._meter = metrics.get_meter(__name__) + self.controller = PushController( + meter=self._meter, exporter=exporter, interval=interval + ) + self._metrics_recorder = TimedMetricRecorder(self._meter, "client") + + def _start_span(self, method): + return self._tracer.start_as_current_span( + name=method, kind=trace.SpanKind.CLIENT + ) + + # pylint:disable=no-self-use + def _trace_result(self, guarded_span, rpc_info, result, client_info): + # If the RPC is called asynchronously, release the guard and add a + # callback so that the span can be finished once the future is done. + if isinstance(result, grpc.Future): + result.add_done_callback( + _make_future_done_callback( + guarded_span.release(), + rpc_info, + client_info, + self._metrics_recorder, + ) + ) + return result + response = result + # Handle the case when the RPC is initiated via the with_call + # method and the result is a tuple with the first element as the + # response. + # http://www.grpc.io/grpc/python/grpc.html#grpc.UnaryUnaryMultiCallable.with_call + if isinstance(result, tuple): + response = result[0] + rpc_info.response = response + + if "ByteSize" in dir(response): + self._metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) + return result + + def _start_guarded_span(self, *args, **kwargs): + return _GuardedSpan(self._start_span(*args, **kwargs)) + + def _bytes_out_iterator_wrapper(self, iterator, client_info): + for request in iterator: + if "ByteSize" in dir(request): + self._metrics_recorder.record_bytes_out( + request.ByteSize(), client_info.full_method + ) + yield request + + def intercept_unary(self, request, metadata, client_info, invoker): + if not metadata: + mutable_metadata = OrderedDict() + else: + mutable_metadata = OrderedDict(metadata) + + with self._start_guarded_span(client_info.full_method) as guarded_span: + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + + # If protobuf is used, we can record the bytes in/out. Otherwise, we have no way + # to get the size of the request/response properly, so don't record anything + if "ByteSize" in dir(request): + self._metrics_recorder.record_bytes_out( + request.ByteSize(), client_info.full_method + ) + + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + request=request, + ) + + try: + result = invoker(request, metadata) + except grpc.RpcError as exc: + guarded_span.generated_span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + return self._trace_result( + guarded_span, rpc_info, result, client_info + ) + + # For RPCs that stream responses, the result can be a generator. To record + # the span across the generated responses and detect any errors, we wrap + # the result in a new generator that yields the response values. + def _intercept_server_stream( + self, request_or_iterator, metadata, client_info, invoker + ): + if not metadata: + mutable_metadata = OrderedDict() + else: + mutable_metadata = OrderedDict(metadata) + + with self._start_span(client_info.full_method) as span: + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + ) + + if client_info.is_client_stream: + rpc_info.request = request_or_iterator + request_or_iterator = self._bytes_out_iterator_wrapper( + request_or_iterator, client_info + ) + else: + if "ByteSize" in dir(request_or_iterator): + self._metrics_recorder.record_bytes_out( + request_or_iterator.ByteSize(), + client_info.full_method, + ) + + try: + result = invoker(request_or_iterator, metadata) + + # Rewrap the result stream into a generator, and record the bytes received + for response in result: + if "ByteSize" in dir(response): + self._metrics_recorder.record_bytes_in( + response.ByteSize(), client_info.full_method + ) + yield response + except grpc.RpcError as exc: + span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + def intercept_stream( + self, request_or_iterator, metadata, client_info, invoker + ): + if client_info.is_server_stream: + return self._intercept_server_stream( + request_or_iterator, metadata, client_info, invoker + ) + + if not metadata: + mutable_metadata = OrderedDict() + else: + mutable_metadata = OrderedDict(metadata) + + with self._start_guarded_span(client_info.full_method) as guarded_span: + with self._metrics_recorder.record_latency( + client_info.full_method + ): + _inject_span_context(mutable_metadata) + metadata = tuple(mutable_metadata.items()) + rpc_info = RpcInfo( + full_method=client_info.full_method, + metadata=metadata, + timeout=client_info.timeout, + request=request_or_iterator, + ) + + rpc_info.request = request_or_iterator + + request_or_iterator = self._bytes_out_iterator_wrapper( + request_or_iterator, client_info + ) + + try: + result = invoker(request_or_iterator, metadata) + except grpc.RpcError as exc: + guarded_span.generated_span.set_status( + Status(StatusCanonicalCode(exc.code().value[0])) + ) + raise + + return self._trace_result( + guarded_span, rpc_info, result, client_info + ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py new file mode 100644 index 00000000000..cb0e997d367 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py @@ -0,0 +1,209 @@ +# 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. + +# pylint:disable=relative-beyond-top-level +# pylint:disable=arguments-differ +# pylint:disable=no-member +# pylint:disable=signature-differs + +"""Implementation of the service-side open-telemetry interceptor. + +This library borrows heavily from the OpenTracing gRPC integration: +https://github.com/opentracing-contrib/python-grpc +""" + +from contextlib import contextmanager +from typing import List + +import grpc + +from opentelemetry import propagators, trace +from opentelemetry.context import attach, detach + +from . import grpcext +from ._utilities import RpcInfo + + +# pylint:disable=abstract-method +class _OpenTelemetryServicerContext(grpc.ServicerContext): + def __init__(self, servicer_context, active_span): + self._servicer_context = servicer_context + self._active_span = active_span + self.code = grpc.StatusCode.OK + self.details = None + super(_OpenTelemetryServicerContext, self).__init__() + + def is_active(self, *args, **kwargs): + return self._servicer_context.is_active(*args, **kwargs) + + def time_remaining(self, *args, **kwargs): + return self._servicer_context.time_remaining(*args, **kwargs) + + def cancel(self, *args, **kwargs): + return self._servicer_context.cancel(*args, **kwargs) + + def add_callback(self, *args, **kwargs): + return self._servicer_context.add_callback(*args, **kwargs) + + def invocation_metadata(self, *args, **kwargs): + return self._servicer_context.invocation_metadata(*args, **kwargs) + + def peer(self, *args, **kwargs): + return self._servicer_context.peer(*args, **kwargs) + + def peer_identities(self, *args, **kwargs): + return self._servicer_context.peer_identities(*args, **kwargs) + + def peer_identity_key(self, *args, **kwargs): + return self._servicer_context.peer_identity_key(*args, **kwargs) + + def auth_context(self, *args, **kwargs): + return self._servicer_context.auth_context(*args, **kwargs) + + def send_initial_metadata(self, *args, **kwargs): + return self._servicer_context.send_initial_metadata(*args, **kwargs) + + def set_trailing_metadata(self, *args, **kwargs): + return self._servicer_context.set_trailing_metadata(*args, **kwargs) + + def abort(self, *args, **kwargs): + if not hasattr(self._servicer_context, "abort"): + raise RuntimeError( + "abort() is not supported with the installed version of grpcio" + ) + return self._servicer_context.abort(*args, **kwargs) + + def abort_with_status(self, *args, **kwargs): + if not hasattr(self._servicer_context, "abort_with_status"): + raise RuntimeError( + "abort_with_status() is not supported with the installed " + "version of grpcio" + ) + return self._servicer_context.abort_with_status(*args, **kwargs) + + def set_code(self, code): + self.code = code + return self._servicer_context.set_code(code) + + def set_details(self, details): + self.details = details + return self._servicer_context.set_details(details) + + +# On the service-side, errors can be signaled either by exceptions or by +# calling `set_code` on the `servicer_context`. This function checks for the +# latter and updates the span accordingly. +# pylint:disable=unused-argument +def _check_error_code(span, servicer_context, rpc_info): + if servicer_context.code != grpc.StatusCode.OK: + rpc_info.error = servicer_context.code + + +class OpenTelemetryServerInterceptor( + grpcext.UnaryServerInterceptor, grpcext.StreamServerInterceptor +): + def __init__(self, tracer): + self._tracer = tracer + + @contextmanager + # pylint:disable=no-self-use + def _set_remote_context(self, servicer_context): + metadata = servicer_context.invocation_metadata() + if metadata: + md_dict = {md.key: md.value for md in metadata} + + def get_from_grpc_metadata(metadata, key) -> List[str]: + return [md_dict[key]] if key in md_dict else [] + + # Update the context with the traceparent from the RPC metadata. + ctx = propagators.extract(get_from_grpc_metadata, metadata) + token = attach(ctx) + try: + yield + finally: + detach(token) + else: + yield + + def _start_span(self, method): + span = self._tracer.start_as_current_span( + name=method, kind=trace.SpanKind.SERVER + ) + return span + + def intercept_unary(self, request, servicer_context, server_info, handler): + + with self._set_remote_context(servicer_context): + with self._start_span(server_info.full_method) as span: + rpc_info = RpcInfo( + full_method=server_info.full_method, + metadata=servicer_context.invocation_metadata(), + timeout=servicer_context.time_remaining(), + request=request, + ) + servicer_context = _OpenTelemetryServicerContext( + servicer_context, span + ) + response = handler(request, servicer_context) + + _check_error_code(span, servicer_context, rpc_info) + + rpc_info.response = response + + return response + + # For RPCs that stream responses, the result can be a generator. To record + # the span across the generated responses and detect any errors, we wrap + # the result in a new generator that yields the response values. + def _intercept_server_stream( + self, request_or_iterator, servicer_context, server_info, handler + ): + with self._set_remote_context(servicer_context): + with self._start_span(server_info.full_method) as span: + rpc_info = RpcInfo( + full_method=server_info.full_method, + metadata=servicer_context.invocation_metadata(), + timeout=servicer_context.time_remaining(), + ) + if not server_info.is_client_stream: + rpc_info.request = request_or_iterator + servicer_context = _OpenTelemetryServicerContext( + servicer_context, span + ) + result = handler(request_or_iterator, servicer_context) + for response in result: + yield response + _check_error_code(span, servicer_context, rpc_info) + + def intercept_stream( + self, request_or_iterator, servicer_context, server_info, handler + ): + if server_info.is_server_stream: + return self._intercept_server_stream( + request_or_iterator, servicer_context, server_info, handler + ) + with self._set_remote_context(servicer_context): + with self._start_span(server_info.full_method) as span: + rpc_info = RpcInfo( + full_method=server_info.full_method, + metadata=servicer_context.invocation_metadata(), + timeout=servicer_context.time_remaining(), + ) + servicer_context = _OpenTelemetryServicerContext( + servicer_context, span + ) + response = handler(request_or_iterator, servicer_context) + _check_error_code(span, servicer_context, rpc_info) + rpc_info.response = response + return response diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py new file mode 100644 index 00000000000..1dfe31ec995 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py @@ -0,0 +1,112 @@ +# 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. + +"""Internal utilities.""" + +from contextlib import contextmanager +from time import time + +import grpc + +from opentelemetry.sdk.metrics import Counter, ValueRecorder + + +class RpcInfo: + def __init__( + self, + full_method=None, + metadata=None, + timeout=None, + request=None, + response=None, + error=None, + ): + self.full_method = full_method + self.metadata = metadata + self.timeout = timeout + self.request = request + self.response = response + self.error = error + + +class TimedMetricRecorder: + def __init__(self, meter, span_kind): + self._meter = meter + service_name = "grpcio" + self._span_kind = span_kind + base_attributes = ["method"] + + if self._meter: + self._duration = self._meter.create_metric( + name="{}/{}/duration".format(service_name, span_kind), + description="Duration of grpc requests to the server", + unit="ms", + value_type=float, + metric_type=ValueRecorder, + label_keys=base_attributes + ["error", "status_code"], + ) + self._error_count = self._meter.create_metric( + name="{}/{}/errors".format(service_name, span_kind), + description="Number of errors that were returned from the server", + unit="1", + value_type=int, + metric_type=Counter, + label_keys=base_attributes + ["status_code"], + ) + self._bytes_in = self._meter.create_metric( + name="{}/{}/bytes_in".format(service_name, span_kind), + description="Number of bytes received from the server", + unit="by", + value_type=int, + metric_type=Counter, + label_keys=base_attributes, + ) + self._bytes_out = self._meter.create_metric( + name="{}/{}/bytes_out".format(service_name, span_kind), + description="Number of bytes sent out through gRPC", + unit="by", + value_type=int, + metric_type=Counter, + label_keys=base_attributes, + ) + + def record_bytes_in(self, bytes_in, method): + if self._meter: + labels = {"method": method} + self._bytes_in.add(bytes_in, labels) + + def record_bytes_out(self, bytes_out, method): + if self._meter: + labels = {"method": method} + self._bytes_out.add(bytes_out, labels) + + @contextmanager + def record_latency(self, method): + start_time = time() + labels = {"method": method, "status_code": grpc.StatusCode.OK} + try: + yield labels + except grpc.RpcError as exc: + if self._meter: + # pylint: disable=no-member + labels["status_code"] = exc.code() + self._error_count.add(1, labels) + labels["error"] = True + raise + finally: + if self._meter: + if "error" not in labels: + labels["error"] = False + elapsed_time = (time() - start_time) * 1000 + self._duration.record(elapsed_time, labels) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py new file mode 100644 index 00000000000..fe83467a70a --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py @@ -0,0 +1,216 @@ +# 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. + +# pylint:disable=import-outside-toplevel +# pylint:disable=import-self +# pylint:disable=no-name-in-module + +import abc + + +class UnaryClientInfo(abc.ABC): + """Consists of various information about a unary RPC on the + invocation-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + timeout: The length of time in seconds to wait for the computation to + terminate or be cancelled, or None if this method should block until + the computation is terminated or is cancelled no matter how long that + takes. + """ + + +class StreamClientInfo(abc.ABC): + """Consists of various information about a stream RPC on the + invocation-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + is_client_stream: Indicates whether the RPC is client-streaming. + is_server_stream: Indicates whether the RPC is server-streaming. + timeout: The length of time in seconds to wait for the computation to + terminate or be cancelled, or None if this method should block until + the computation is terminated or is cancelled no matter how long that + takes. + """ + + +class UnaryClientInterceptor(abc.ABC): + """Affords intercepting unary-unary RPCs on the invocation-side.""" + + @abc.abstractmethod + def intercept_unary(self, request, metadata, client_info, invoker): + """Intercepts unary-unary RPCs on the invocation-side. + + Args: + request: The request value for the RPC. + metadata: Optional :term:`metadata` to be transmitted to the + service-side of the RPC. + client_info: A UnaryClientInfo containing various information about + the RPC. + invoker: The handler to complete the RPC on the client. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling invoker(request, metadata). + """ + raise NotImplementedError() + + +class StreamClientInterceptor(abc.ABC): + """Affords intercepting stream RPCs on the invocation-side.""" + + @abc.abstractmethod + def intercept_stream( + self, request_or_iterator, metadata, client_info, invoker + ): + """Intercepts stream RPCs on the invocation-side. + + Args: + request_or_iterator: The request value for the RPC if + `client_info.is_client_stream` is `false`; otherwise, an iterator of + request values. + metadata: Optional :term:`metadata` to be transmitted to the service-side + of the RPC. + client_info: A StreamClientInfo containing various information about + the RPC. + invoker: The handler to complete the RPC on the client. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling invoker(metadata). + """ + raise NotImplementedError() + + +def intercept_channel(channel, *interceptors): + """Creates an intercepted channel. + + Args: + channel: A Channel. + interceptors: Zero or more UnaryClientInterceptors or + StreamClientInterceptors + + Returns: + A Channel. + + Raises: + TypeError: If an interceptor derives from neither UnaryClientInterceptor + nor StreamClientInterceptor. + """ + from . import _interceptor + + return _interceptor.intercept_channel(channel, *interceptors) + + +class UnaryServerInfo(abc.ABC): + """Consists of various information about a unary RPC on the service-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + """ + + +class StreamServerInfo(abc.ABC): + """Consists of various information about a stream RPC on the service-side. + + Attributes: + full_method: A string of the full RPC method, i.e., + /package.service/method. + is_client_stream: Indicates whether the RPC is client-streaming. + is_server_stream: Indicates whether the RPC is server-streaming. + """ + + +class UnaryServerInterceptor(abc.ABC): + """Affords intercepting unary-unary RPCs on the service-side.""" + + @abc.abstractmethod + def intercept_unary(self, request, servicer_context, server_info, handler): + """Intercepts unary-unary RPCs on the service-side. + + Args: + request: The request value for the RPC. + servicer_context: A ServicerContext. + server_info: A UnaryServerInfo containing various information about + the RPC. + handler: The handler to complete the RPC on the server. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling handler(request, servicer_context). + """ + raise NotImplementedError() + + +class StreamServerInterceptor(abc.ABC): + """Affords intercepting stream RPCs on the service-side.""" + + @abc.abstractmethod + def intercept_stream( + self, request_or_iterator, servicer_context, server_info, handler + ): + """Intercepts stream RPCs on the service-side. + + Args: + request_or_iterator: The request value for the RPC if + `server_info.is_client_stream` is `False`; otherwise, an iterator of + request values. + servicer_context: A ServicerContext. + server_info: A StreamServerInfo containing various information about + the RPC. + handler: The handler to complete the RPC on the server. It is the + interceptor's responsibility to call it. + + Returns: + The result from calling handler(servicer_context). + """ + raise NotImplementedError() + + +def intercept_server(server, *interceptors): + """Creates an intercepted server. + + Args: + server: A Server. + interceptors: Zero or more UnaryServerInterceptors or + StreamServerInterceptors + + Returns: + A Server. + + Raises: + TypeError: If an interceptor derives from neither UnaryServerInterceptor + nor StreamServerInterceptor. + """ + from . import _interceptor + + return _interceptor.intercept_server(server, *interceptors) + + +__all__ = ( + "UnaryClientInterceptor", + "StreamClientInfo", + "StreamClientInterceptor", + "UnaryServerInfo", + "StreamServerInfo", + "UnaryServerInterceptor", + "StreamServerInterceptor", + "intercept_channel", + "intercept_server", +) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py new file mode 100644 index 00000000000..74861913b92 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py @@ -0,0 +1,431 @@ +# 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. + +# pylint:disable=relative-beyond-top-level +# pylint:disable=arguments-differ +# pylint:disable=no-member +# pylint:disable=signature-differs + +"""Implementation of gRPC Python interceptors.""" + + +import collections + +import grpc + +from .. import grpcext + + +class _UnaryClientInfo( + collections.namedtuple("_UnaryClientInfo", ("full_method", "timeout")) +): + pass + + +class _StreamClientInfo( + collections.namedtuple( + "_StreamClientInfo", + ("full_method", "is_client_stream", "is_server_stream", "timeout"), + ) +): + pass + + +class _InterceptorUnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + def invoker(request, metadata): + return self._base_callable(request, timeout, metadata, credentials) + + client_info = _UnaryClientInfo(self._method, timeout) + return self._interceptor.intercept_unary( + request, metadata, client_info, invoker + ) + + def with_call( + self, request, timeout=None, metadata=None, credentials=None + ): + def invoker(request, metadata): + return self._base_callable.with_call( + request, timeout, metadata, credentials + ) + + client_info = _UnaryClientInfo(self._method, timeout) + return self._interceptor.intercept_unary( + request, metadata, client_info, invoker + ) + + def future(self, request, timeout=None, metadata=None, credentials=None): + def invoker(request, metadata): + return self._base_callable.future( + request, timeout, metadata, credentials + ) + + client_info = _UnaryClientInfo(self._method, timeout) + return self._interceptor.intercept_unary( + request, metadata, client_info, invoker + ) + + +class _InterceptorUnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__(self, request, timeout=None, metadata=None, credentials=None): + def invoker(request, metadata): + return self._base_callable(request, timeout, metadata, credentials) + + client_info = _StreamClientInfo(self._method, False, True, timeout) + return self._interceptor.intercept_stream( + request, metadata, client_info, invoker + ) + + +class _InterceptorStreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, False, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + def with_call( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable.with_call( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, False, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + def future( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable.future( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, False, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + +class _InterceptorStreamStreamMultiCallable(grpc.StreamStreamMultiCallable): + def __init__(self, method, base_callable, interceptor): + self._method = method + self._base_callable = base_callable + self._interceptor = interceptor + + def __call__( + self, request_iterator, timeout=None, metadata=None, credentials=None + ): + def invoker(request_iterator, metadata): + return self._base_callable( + request_iterator, timeout, metadata, credentials + ) + + client_info = _StreamClientInfo(self._method, True, True, timeout) + return self._interceptor.intercept_stream( + request_iterator, metadata, client_info, invoker + ) + + +class _InterceptorChannel(grpc.Channel): + def __init__(self, channel, interceptor): + self._channel = channel + self._interceptor = interceptor + + def subscribe(self, *args, **kwargs): + self._channel.subscribe(*args, **kwargs) + + def unsubscribe(self, *args, **kwargs): + self._channel.unsubscribe(*args, **kwargs) + + def unary_unary( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.unary_unary( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.UnaryClientInterceptor): + return _InterceptorUnaryUnaryMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def unary_stream( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.unary_stream( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.StreamClientInterceptor): + return _InterceptorUnaryStreamMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def stream_unary( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.stream_unary( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.StreamClientInterceptor): + return _InterceptorStreamUnaryMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def stream_stream( + self, method, request_serializer=None, response_deserializer=None + ): + base_callable = self._channel.stream_stream( + method, request_serializer, response_deserializer + ) + if isinstance(self._interceptor, grpcext.StreamClientInterceptor): + return _InterceptorStreamStreamMultiCallable( + method, base_callable, self._interceptor + ) + return base_callable + + def close(self): + if not hasattr(self._channel, "close"): + raise RuntimeError( + "close() is not supported with the installed version of grpcio" + ) + self._channel.close() + + def __enter__(self): + """Enters the runtime context related to the channel object.""" + raise NotImplementedError() + + def __exit__(self, exc_type, exc_val, exc_tb): + """Exits the runtime context related to the channel object.""" + raise NotImplementedError() + + +def intercept_channel(channel, *interceptors): + result = channel + for interceptor in interceptors: + if not isinstance( + interceptor, grpcext.UnaryClientInterceptor + ) and not isinstance(interceptor, grpcext.StreamClientInterceptor): + raise TypeError( + "interceptor must be either a " + "grpcext.UnaryClientInterceptor or a " + "grpcext.StreamClientInterceptor" + ) + result = _InterceptorChannel(result, interceptor) + return result + + +class _UnaryServerInfo( + collections.namedtuple("_UnaryServerInfo", ("full_method",)) +): + pass + + +class _StreamServerInfo( + collections.namedtuple( + "_StreamServerInfo", + ("full_method", "is_client_stream", "is_server_stream"), + ) +): + pass + + +class _InterceptorRpcMethodHandler(grpc.RpcMethodHandler): + def __init__(self, rpc_method_handler, method, interceptor): + self._rpc_method_handler = rpc_method_handler + self._method = method + self._interceptor = interceptor + + @property + def request_streaming(self): + return self._rpc_method_handler.request_streaming + + @property + def response_streaming(self): + return self._rpc_method_handler.response_streaming + + @property + def request_deserializer(self): + return self._rpc_method_handler.request_deserializer + + @property + def response_serializer(self): + return self._rpc_method_handler.response_serializer + + @property + def unary_unary(self): + if not isinstance(self._interceptor, grpcext.UnaryServerInterceptor): + return self._rpc_method_handler.unary_unary + + def adaptation(request, servicer_context): + def handler(request, servicer_context): + return self._rpc_method_handler.unary_unary( + request, servicer_context + ) + + return self._interceptor.intercept_unary( + request, + servicer_context, + _UnaryServerInfo(self._method), + handler, + ) + + return adaptation + + @property + def unary_stream(self): + if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): + return self._rpc_method_handler.unary_stream + + def adaptation(request, servicer_context): + def handler(request, servicer_context): + return self._rpc_method_handler.unary_stream( + request, servicer_context + ) + + return self._interceptor.intercept_stream( + request, + servicer_context, + _StreamServerInfo(self._method, False, True), + handler, + ) + + return adaptation + + @property + def stream_unary(self): + if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): + return self._rpc_method_handler.stream_unary + + def adaptation(request_iterator, servicer_context): + def handler(request_iterator, servicer_context): + return self._rpc_method_handler.stream_unary( + request_iterator, servicer_context + ) + + return self._interceptor.intercept_stream( + request_iterator, + servicer_context, + _StreamServerInfo(self._method, True, False), + handler, + ) + + return adaptation + + @property + def stream_stream(self): + if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): + return self._rpc_method_handler.stream_stream + + def adaptation(request_iterator, servicer_context): + def handler(request_iterator, servicer_context): + return self._rpc_method_handler.stream_stream( + request_iterator, servicer_context + ) + + return self._interceptor.intercept_stream( + request_iterator, + servicer_context, + _StreamServerInfo(self._method, True, True), + handler, + ) + + return adaptation + + +class _InterceptorGenericRpcHandler(grpc.GenericRpcHandler): + def __init__(self, generic_rpc_handler, interceptor): + self.generic_rpc_handler = generic_rpc_handler + self._interceptor = interceptor + + def service(self, handler_call_details): + result = self.generic_rpc_handler.service(handler_call_details) + if result: + result = _InterceptorRpcMethodHandler( + result, handler_call_details.method, self._interceptor + ) + return result + + +class _InterceptorServer(grpc.Server): + def __init__(self, server, interceptor): + self._server = server + self._interceptor = interceptor + + def add_generic_rpc_handlers(self, generic_rpc_handlers): + generic_rpc_handlers = [ + _InterceptorGenericRpcHandler( + generic_rpc_handler, self._interceptor + ) + for generic_rpc_handler in generic_rpc_handlers + ] + return self._server.add_generic_rpc_handlers(generic_rpc_handlers) + + def add_insecure_port(self, *args, **kwargs): + return self._server.add_insecure_port(*args, **kwargs) + + def add_secure_port(self, *args, **kwargs): + return self._server.add_secure_port(*args, **kwargs) + + def start(self, *args, **kwargs): + return self._server.start(*args, **kwargs) + + def stop(self, *args, **kwargs): + return self._server.stop(*args, **kwargs) + + def wait_for_termination(self, *args, **kwargs): + return self._server.wait_for_termination(*args, **kwargs) + + +def intercept_server(server, *interceptors): + result = server + for interceptor in interceptors: + if not isinstance( + interceptor, grpcext.UnaryServerInterceptor + ) and not isinstance(interceptor, grpcext.StreamServerInterceptor): + raise TypeError( + "interceptor must be either a " + "grpcext.UnaryServerInterceptor or a " + "grpcext.StreamServerInterceptor" + ) + result = _InterceptorServer(result, interceptor) + return result diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py new file mode 100644 index 00000000000..780a92b6a1b --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py @@ -0,0 +1,15 @@ +# 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. + +__version__ = "0.12.dev0" diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py new file mode 100644 index 00000000000..b0a6f428417 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py @@ -0,0 +1,13 @@ +# 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. diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py new file mode 100644 index 00000000000..43310b5f651 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py @@ -0,0 +1,57 @@ +# 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. + +from .protobuf.test_server_pb2 import Request + +CLIENT_ID = 1 + + +def simple_method(stub, error=False): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + stub.SimpleMethod(request) + + +def client_streaming_method(stub, error=False): + # create a generator + def request_messages(): + for _ in range(5): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + yield request + + stub.ClientStreamingMethod(request_messages()) + + +def server_streaming_method(stub, error=False): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + response_iterator = stub.ServerStreamingMethod(request) + list(response_iterator) + + +def bidirectional_streaming_method(stub, error=False): + def request_messages(): + for _ in range(5): + request = Request( + client_id=CLIENT_ID, request_data="error" if error else "data" + ) + yield request + + response_iterator = stub.BidirectionalStreamingMethod(request_messages()) + + list(response_iterator) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py new file mode 100644 index 00000000000..a4e1c266b8a --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py @@ -0,0 +1,87 @@ +# 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. + +from concurrent import futures + +import grpc + +from .protobuf import test_server_pb2, test_server_pb2_grpc + +SERVER_ID = 1 + + +class TestServer(test_server_pb2_grpc.GRPCTestServerServicer): + def SimpleMethod(self, request, context): + if request.request_data == "error": + context.set_code(grpc.StatusCode.INVALID_ARGUMENT) + return test_server_pb2.Response() + response = test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + return response + + def ClientStreamingMethod(self, request_iterator, context): + data = list(request_iterator) + if data[0].request_data == "error": + context.set_code(grpc.StatusCode.INVALID_ARGUMENT) + return test_server_pb2.Response() + response = test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + return response + + def ServerStreamingMethod(self, request, context): + if request.request_data == "error": + + context.abort( + code=grpc.StatusCode.INVALID_ARGUMENT, + details="server stream error", + ) + return test_server_pb2.Response() + + # create a generator + def response_messages(): + for _ in range(5): + response = test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + yield response + + return response_messages() + + def BidirectionalStreamingMethod(self, request_iterator, context): + data = list(request_iterator) + if data[0].request_data == "error": + context.abort( + code=grpc.StatusCode.INVALID_ARGUMENT, + details="bidirectional error", + ) + return + + for _ in range(5): + yield test_server_pb2.Response( + server_id=SERVER_ID, response_data="data" + ) + + +def create_test_server(port): + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) + + test_server_pb2_grpc.add_GRPCTestServerServicer_to_server( + TestServer(), server + ) + + server.add_insecure_port("localhost:{}".format(port)) + + return server diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto new file mode 100644 index 00000000000..790a7675de0 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto @@ -0,0 +1,34 @@ +// Copyright 2019 gRPC 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. +syntax = "proto3"; + +message Request { + int64 client_id = 1; + string request_data = 2; +} + +message Response { + int64 server_id = 1; + string response_data = 2; +} + +service GRPCTestServer { + rpc SimpleMethod (Request) returns (Response); + + rpc ClientStreamingMethod (stream Request) returns (Response); + + rpc ServerStreamingMethod (Request) returns (stream Response); + + rpc BidirectionalStreamingMethod (stream Request) returns (stream Response); +} diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py new file mode 100644 index 00000000000..735206f8505 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py @@ -0,0 +1,215 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: test_server.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database + +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +DESCRIPTOR = _descriptor.FileDescriptor( + name="test_server.proto", + package="", + syntax="proto3", + serialized_options=None, + serialized_pb=b'\n\x11test_server.proto"2\n\x07Request\x12\x11\n\tclient_id\x18\x01 \x01(\x03\x12\x14\n\x0crequest_data\x18\x02 \x01(\t"4\n\x08Response\x12\x11\n\tserver_id\x18\x01 \x01(\x03\x12\x15\n\rresponse_data\x18\x02 \x01(\t2\xce\x01\n\x0eGRPCTestServer\x12#\n\x0cSimpleMethod\x12\x08.Request\x1a\t.Response\x12.\n\x15\x43lientStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x12.\n\x15ServerStreamingMethod\x12\x08.Request\x1a\t.Response0\x01\x12\x37\n\x1c\x42idirectionalStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x30\x01\x62\x06proto3', +) + + +_REQUEST = _descriptor.Descriptor( + name="Request", + full_name="Request", + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name="client_id", + full_name="Request.client_id", + index=0, + number=1, + type=3, + cpp_type=2, + label=1, + has_default_value=False, + default_value=0, + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + _descriptor.FieldDescriptor( + name="request_data", + full_name="Request.request_data", + index=1, + number=2, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=b"".decode("utf-8"), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + ], + extensions=[], + nested_types=[], + enum_types=[], + serialized_options=None, + is_extendable=False, + syntax="proto3", + extension_ranges=[], + oneofs=[], + serialized_start=21, + serialized_end=71, +) + + +_RESPONSE = _descriptor.Descriptor( + name="Response", + full_name="Response", + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name="server_id", + full_name="Response.server_id", + index=0, + number=1, + type=3, + cpp_type=2, + label=1, + has_default_value=False, + default_value=0, + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + _descriptor.FieldDescriptor( + name="response_data", + full_name="Response.response_data", + index=1, + number=2, + type=9, + cpp_type=9, + label=1, + has_default_value=False, + default_value=b"".decode("utf-8"), + message_type=None, + enum_type=None, + containing_type=None, + is_extension=False, + extension_scope=None, + serialized_options=None, + file=DESCRIPTOR, + ), + ], + extensions=[], + nested_types=[], + enum_types=[], + serialized_options=None, + is_extendable=False, + syntax="proto3", + extension_ranges=[], + oneofs=[], + serialized_start=73, + serialized_end=125, +) + +DESCRIPTOR.message_types_by_name["Request"] = _REQUEST +DESCRIPTOR.message_types_by_name["Response"] = _RESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Request = _reflection.GeneratedProtocolMessageType( + "Request", + (_message.Message,), + { + "DESCRIPTOR": _REQUEST, + "__module__": "test_server_pb2" + # @@protoc_insertion_point(class_scope:Request) + }, +) +_sym_db.RegisterMessage(Request) + +Response = _reflection.GeneratedProtocolMessageType( + "Response", + (_message.Message,), + { + "DESCRIPTOR": _RESPONSE, + "__module__": "test_server_pb2" + # @@protoc_insertion_point(class_scope:Response) + }, +) +_sym_db.RegisterMessage(Response) + + +_GRPCTESTSERVER = _descriptor.ServiceDescriptor( + name="GRPCTestServer", + full_name="GRPCTestServer", + file=DESCRIPTOR, + index=0, + serialized_options=None, + serialized_start=128, + serialized_end=334, + methods=[ + _descriptor.MethodDescriptor( + name="SimpleMethod", + full_name="GRPCTestServer.SimpleMethod", + index=0, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name="ClientStreamingMethod", + full_name="GRPCTestServer.ClientStreamingMethod", + index=1, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name="ServerStreamingMethod", + full_name="GRPCTestServer.ServerStreamingMethod", + index=2, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name="BidirectionalStreamingMethod", + full_name="GRPCTestServer.BidirectionalStreamingMethod", + index=3, + containing_service=None, + input_type=_REQUEST, + output_type=_RESPONSE, + serialized_options=None, + ), + ], +) +_sym_db.RegisterServiceDescriptor(_GRPCTESTSERVER) + +DESCRIPTOR.services_by_name["GRPCTestServer"] = _GRPCTESTSERVER + +# @@protoc_insertion_point(module_scope) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py new file mode 100644 index 00000000000..d0a6fd5184f --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py @@ -0,0 +1,205 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +from tests.protobuf import test_server_pb2 as test__server__pb2 + + +class GRPCTestServerStub(object): + """Missing associated documentation comment in .proto file""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.SimpleMethod = channel.unary_unary( + "/GRPCTestServer/SimpleMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + self.ClientStreamingMethod = channel.stream_unary( + "/GRPCTestServer/ClientStreamingMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + self.ServerStreamingMethod = channel.unary_stream( + "/GRPCTestServer/ServerStreamingMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + self.BidirectionalStreamingMethod = channel.stream_stream( + "/GRPCTestServer/BidirectionalStreamingMethod", + request_serializer=test__server__pb2.Request.SerializeToString, + response_deserializer=test__server__pb2.Response.FromString, + ) + + +class GRPCTestServerServicer(object): + """Missing associated documentation comment in .proto file""" + + def SimpleMethod(self, request, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + def ClientStreamingMethod(self, request_iterator, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + def ServerStreamingMethod(self, request, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + def BidirectionalStreamingMethod(self, request_iterator, context): + """Missing associated documentation comment in .proto file""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details("Method not implemented!") + raise NotImplementedError("Method not implemented!") + + +def add_GRPCTestServerServicer_to_server(servicer, server): + rpc_method_handlers = { + "SimpleMethod": grpc.unary_unary_rpc_method_handler( + servicer.SimpleMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + "ClientStreamingMethod": grpc.stream_unary_rpc_method_handler( + servicer.ClientStreamingMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + "ServerStreamingMethod": grpc.unary_stream_rpc_method_handler( + servicer.ServerStreamingMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + "BidirectionalStreamingMethod": grpc.stream_stream_rpc_method_handler( + servicer.BidirectionalStreamingMethod, + request_deserializer=test__server__pb2.Request.FromString, + response_serializer=test__server__pb2.Response.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + "GRPCTestServer", rpc_method_handlers + ) + server.add_generic_rpc_handlers((generic_handler,)) + + +# This class is part of an EXPERIMENTAL API. +class GRPCTestServer(object): + """Missing associated documentation comment in .proto file""" + + @staticmethod + def SimpleMethod( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_unary( + request, + target, + "/GRPCTestServer/SimpleMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ClientStreamingMethod( + request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.stream_unary( + request_iterator, + target, + "/GRPCTestServer/ClientStreamingMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ServerStreamingMethod( + request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.unary_stream( + request, + target, + "/GRPCTestServer/ServerStreamingMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def BidirectionalStreamingMethod( + request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None, + ): + return grpc.experimental.stream_stream( + request_iterator, + target, + "/GRPCTestServer/BidirectionalStreamingMethod", + test__server__pb2.Request.SerializeToString, + test__server__pb2.Response.FromString, + options, + channel_credentials, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py new file mode 100644 index 00000000000..458f32e0472 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py @@ -0,0 +1,298 @@ +# 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 grpc + +import opentelemetry.instrumentation.grpc +from opentelemetry import trace +from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient +from opentelemetry.sdk.metrics.export.aggregate import ( + MinMaxSumCountAggregator, + SumAggregator, +) +from opentelemetry.test.test_base import TestBase +from tests.protobuf import test_server_pb2_grpc + +from ._client import ( + bidirectional_streaming_method, + client_streaming_method, + server_streaming_method, + simple_method, +) +from ._server import create_test_server + + +class TestClientProto(TestBase): + def setUp(self): + super().setUp() + GrpcInstrumentorClient().instrument( + exporter=self.memory_metrics_exporter + ) + self.server = create_test_server(25565) + self.server.start() + self.channel = grpc.insecure_channel("localhost:25565") + self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) + + def tearDown(self): + super().tearDown() + GrpcInstrumentorClient().uninstrument() + self.memory_metrics_exporter.clear() + self.server.stop(None) + + def _verify_success_records(self, num_bytes_out, num_bytes_in, method): + # pylint: disable=protected-access,no-member + self.channel._interceptor.controller.tick() + records = self.memory_metrics_exporter.get_exported_metrics() + self.assertEqual(len(records), 3) + + bytes_out = None + bytes_in = None + duration = None + + for record in records: + if record.instrument.name == "grpcio/client/duration": + duration = record + elif record.instrument.name == "grpcio/client/bytes_out": + bytes_out = record + elif record.instrument.name == "grpcio/client/bytes_in": + bytes_in = record + + self.assertIsNotNone(bytes_out) + self.assertEqual(bytes_out.instrument.name, "grpcio/client/bytes_out") + self.assertEqual(bytes_out.labels, (("method", method),)) + + self.assertIsNotNone(bytes_in) + self.assertEqual(bytes_in.instrument.name, "grpcio/client/bytes_in") + self.assertEqual(bytes_in.labels, (("method", method),)) + + self.assertIsNotNone(duration) + self.assertEqual(duration.instrument.name, "grpcio/client/duration") + self.assertEqual( + duration.labels, + ( + ("error", False), + ("method", method), + ("status_code", grpc.StatusCode.OK), + ), + ) + + self.assertEqual(type(bytes_out.aggregator), SumAggregator) + self.assertEqual(type(bytes_in.aggregator), SumAggregator) + self.assertEqual(type(duration.aggregator), MinMaxSumCountAggregator) + + self.assertEqual(bytes_out.aggregator.checkpoint, num_bytes_out) + self.assertEqual(bytes_in.aggregator.checkpoint, num_bytes_in) + + self.assertEqual(duration.aggregator.checkpoint.count, 1) + self.assertGreaterEqual(duration.aggregator.checkpoint.sum, 0) + + def test_unary_unary(self): + simple_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) + + self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") + + def test_unary_stream(self): + server_streaming_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/ServerStreamingMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) + + self._verify_success_records( + 8, 40, "/GRPCTestServer/ServerStreamingMethod" + ) + + def test_stream_unary(self): + client_streaming_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/ClientStreamingMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) + + self._verify_success_records( + 40, 8, "/GRPCTestServer/ClientStreamingMethod" + ) + + def test_stream_stream(self): + bidirectional_streaming_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual( + span.name, "/GRPCTestServer/BidirectionalStreamingMethod" + ) + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) + + self._verify_success_records( + 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" + ) + + def _verify_error_records(self, method): + # pylint: disable=protected-access,no-member + self.channel._interceptor.controller.tick() + records = self.memory_metrics_exporter.get_exported_metrics() + self.assertEqual(len(records), 3) + + bytes_out = None + errors = None + duration = None + + for record in records: + if record.instrument.name == "grpcio/client/duration": + duration = record + elif record.instrument.name == "grpcio/client/bytes_out": + bytes_out = record + elif record.instrument.name == "grpcio/client/errors": + errors = record + + self.assertIsNotNone(bytes_out) + self.assertIsNotNone(errors) + self.assertIsNotNone(duration) + + self.assertEqual(errors.instrument.name, "grpcio/client/errors") + self.assertEqual( + errors.labels, + ( + ("method", method), + ("status_code", grpc.StatusCode.INVALID_ARGUMENT), + ), + ) + self.assertEqual(errors.aggregator.checkpoint, 1) + + self.assertEqual( + duration.labels, + ( + ("error", True), + ("method", method), + ("status_code", grpc.StatusCode.INVALID_ARGUMENT), + ), + ) + + def test_error_simple(self): + with self.assertRaises(grpc.RpcError): + simple_method(self._stub, error=True) + + self._verify_error_records("/GRPCTestServer/SimpleMethod") + + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + def test_error_stream_unary(self): + with self.assertRaises(grpc.RpcError): + client_streaming_method(self._stub, error=True) + + self._verify_error_records("/GRPCTestServer/ClientStreamingMethod") + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + def test_error_unary_stream(self): + with self.assertRaises(grpc.RpcError): + server_streaming_method(self._stub, error=True) + + self._verify_error_records("/GRPCTestServer/ServerStreamingMethod") + + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + def test_error_stream_stream(self): + with self.assertRaises(grpc.RpcError): + bidirectional_streaming_method(self._stub, error=True) + + self._verify_error_records( + "/GRPCTestServer/BidirectionalStreamingMethod" + ) + + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + self.assertEqual( + span.status.canonical_code.value, + grpc.StatusCode.INVALID_ARGUMENT.value[0], + ) + + +class TestClientNoMetrics(TestBase): + def setUp(self): + super().setUp() + GrpcInstrumentorClient().instrument() + self.server = create_test_server(25565) + self.server.start() + self.channel = grpc.insecure_channel("localhost:25565") + self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) + + def tearDown(self): + super().tearDown() + GrpcInstrumentorClient().uninstrument() + self.memory_metrics_exporter.clear() + self.server.stop(None) + + def test_unary_unary(self): + simple_method(self._stub) + spans = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans), 1) + span = spans[0] + + self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") + self.assertIs(span.kind, trace.SpanKind.CLIENT) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py new file mode 100644 index 00000000000..a41da47ae92 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py @@ -0,0 +1,297 @@ +# 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. + +# pylint:disable=unused-argument +# pylint:disable=no-self-use + +import threading +from concurrent import futures + +import grpc + +import opentelemetry.instrumentation.grpc +from opentelemetry import trace +from opentelemetry.instrumentation.grpc import ( + GrpcInstrumentorServer, + server_interceptor, +) +from opentelemetry.instrumentation.grpc.grpcext import intercept_server +from opentelemetry.sdk import trace as trace_sdk +from opentelemetry.test.test_base import TestBase + + +class UnaryUnaryMethodHandler(grpc.RpcMethodHandler): + def __init__(self, handler): + self.request_streaming = False + self.response_streaming = False + self.request_deserializer = None + self.response_serializer = None + self.unary_unary = handler + self.unary_stream = None + self.stream_unary = None + self.stream_stream = None + + +class UnaryUnaryRpcHandler(grpc.GenericRpcHandler): + def __init__(self, handler): + self._unary_unary_handler = handler + + def service(self, handler_call_details): + return UnaryUnaryMethodHandler(self._unary_unary_handler) + + +class TestOpenTelemetryServerInterceptor(TestBase): + def test_instrumentor(self): + def handler(request, context): + return b"" + + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("test")(b"test") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + self.assertEqual(span.name, "test") + self.assertIs(span.kind, trace.SpanKind.SERVER) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) + grpc_server_instrumentor.uninstrument() + + def test_uninstrument(self): + def handler(request, context): + return b"" + + grpc_server_instrumentor = GrpcInstrumentorServer() + grpc_server_instrumentor.instrument() + grpc_server_instrumentor.uninstrument() + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("test")(b"test") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 0) + + def test_create_span(self): + """Check that the interceptor wraps calls with spans server-side.""" + + # Intercept gRPC calls... + interceptor = server_interceptor() + + # No-op RPC handler + def handler(request, context): + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + # FIXME: grpcext interceptor doesn't apply to handlers passed to server + # init, should use intercept_service API instead. + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("")(b"") + finally: + server.stop(None) + + spans_list = self.memory_exporter.get_finished_spans() + self.assertEqual(len(spans_list), 1) + span = spans_list[0] + + self.assertEqual(span.name, "") + self.assertIs(span.kind, trace.SpanKind.SERVER) + + # Check version and name in span's instrumentation info + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.grpc + ) + + def test_span_lifetime(self): + """Check that the span is active for the duration of the call.""" + + interceptor = server_interceptor() + + # To capture the current span at the time the handler is called + active_span_in_handler = None + + def handler(request, context): + nonlocal active_span_in_handler + active_span_in_handler = trace.get_current_span() + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + active_span_before_call = trace.get_current_span() + try: + server.start() + channel.unary_unary("")(b"") + finally: + server.stop(None) + active_span_after_call = trace.get_current_span() + + self.assertEqual(active_span_before_call, trace.INVALID_SPAN) + self.assertEqual(active_span_after_call, trace.INVALID_SPAN) + self.assertIsInstance(active_span_in_handler, trace_sdk.Span) + self.assertIsNone(active_span_in_handler.parent) + + def test_sequential_server_spans(self): + """Check that sequential RPCs get separate server spans.""" + + interceptor = server_interceptor() + + # Capture the currently active span in each thread + active_spans_in_handler = [] + + def handler(request, context): + active_spans_in_handler.append(trace.get_current_span()) + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=1), + options=(("grpc.so_reuseport", 0),), + ) + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + channel.unary_unary("")(b"") + channel.unary_unary("")(b"") + finally: + server.stop(None) + + self.assertEqual(len(active_spans_in_handler), 2) + # pylint:disable=unbalanced-tuple-unpacking + span1, span2 = active_spans_in_handler + # Spans should belong to separate traces, and each should be a root + # span + self.assertNotEqual(span1.context.span_id, span2.context.span_id) + self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) + self.assertIsNone(span1.parent) + self.assertIsNone(span1.parent) + + def test_concurrent_server_spans(self): + """Check that concurrent RPC calls don't interfere with each other. + + This is the same check as test_sequential_server_spans except that the + RPCs are concurrent. Two handlers are invoked at the same time on two + separate threads. Each one should see a different active span and + context. + """ + + interceptor = server_interceptor() + + # Capture the currently active span in each thread + active_spans_in_handler = [] + latch = get_latch(2) + + def handler(request, context): + latch() + active_spans_in_handler.append(trace.get_current_span()) + return b"" + + server = grpc.server( + futures.ThreadPoolExecutor(max_workers=2), + options=(("grpc.so_reuseport", 0),), + ) + server = intercept_server(server, interceptor) + server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) + + port = server.add_insecure_port("[::]:0") + channel = grpc.insecure_channel("localhost:{:d}".format(port)) + + try: + server.start() + # Interleave calls so spans are active on each thread at the same + # time + with futures.ThreadPoolExecutor(max_workers=2) as tpe: + f1 = tpe.submit(channel.unary_unary(""), b"") + f2 = tpe.submit(channel.unary_unary(""), b"") + futures.wait((f1, f2)) + finally: + server.stop(None) + + self.assertEqual(len(active_spans_in_handler), 2) + # pylint:disable=unbalanced-tuple-unpacking + span1, span2 = active_spans_in_handler + # Spans should belong to separate traces, and each should be a root + # span + self.assertNotEqual(span1.context.span_id, span2.context.span_id) + self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) + self.assertIsNone(span1.parent) + self.assertIsNone(span1.parent) + + +def get_latch(num): + """Get a countdown latch function for use in n threads.""" + cv = threading.Condition() + count = 0 + + def countdown_latch(): + """Block until n-1 other threads have called.""" + nonlocal count + cv.acquire() + count += 1 + cv.notify() + cv.release() + cv.acquire() + while count < num: + cv.wait() + cv.release() + + return countdown_latch From c6cf35bfa73f2760ab80d9029593679b8f99b281 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 14:10:46 -0700 Subject: [PATCH 27/35] revert grpc --- .../grpc/hello_world_client.py | 8 +- .../grpc/hello_world_server.py | 8 +- .../grpc/route_guide_client.py | 8 +- .../grpc/route_guide_server.py | 8 +- .../exporter/datadog/exporter.py | 2 +- .../tests/test_datadog_exporter.py | 2 +- ext/opentelemetry-ext-grpc/CHANGELOG.md | 2 +- ext/opentelemetry-ext-grpc/setup.cfg | 4 +- .../CHANGELOG.md | 32 -- .../LICENSE | 201 -------- .../MANIFEST.in | 9 - .../README.rst | 18 - .../setup.cfg | 59 --- .../setup.py | 27 -- .../instrumentation/grpc/__init__.py | 224 --------- .../instrumentation/grpc/_client.py | 275 ----------- .../instrumentation/grpc/_server.py | 209 --------- .../instrumentation/grpc/_utilities.py | 112 ----- .../instrumentation/grpc/grpcext/__init__.py | 216 --------- .../grpc/grpcext/_interceptor.py | 431 ------------------ .../instrumentation/grpc/version.py | 15 - .../tests/__init__.py | 13 - .../tests/_client.py | 57 --- .../tests/_server.py | 87 ---- .../tests/protobuf/test_server.proto | 34 -- .../tests/protobuf/test_server_pb2.py | 215 --------- .../tests/protobuf/test_server_pb2_grpc.py | 205 --------- .../tests/test_client_interceptor.py | 298 ------------ .../tests/test_server_interceptor.py | 297 ------------ .../CHANGELOG.md | 32 -- .../LICENSE | 201 -------- .../MANIFEST.in | 9 - .../README.rst | 18 - .../setup.cfg | 59 --- .../setup.py | 27 -- .../instrumentation/grpc/__init__.py | 224 --------- .../instrumentation/grpc/_client.py | 275 ----------- .../instrumentation/grpc/_server.py | 209 --------- .../instrumentation/grpc/_utilities.py | 112 ----- .../instrumentation/grpc/grpcext/__init__.py | 216 --------- .../grpc/grpcext/_interceptor.py | 431 ------------------ .../instrumentation/grpc/version.py | 15 - .../tests/__init__.py | 13 - .../tests/_client.py | 57 --- .../tests/_server.py | 87 ---- .../tests/protobuf/test_server.proto | 34 -- .../tests/protobuf/test_server_pb2.py | 215 --------- .../tests/protobuf/test_server_pb2_grpc.py | 205 --------- .../tests/test_client_interceptor.py | 298 ------------ .../tests/test_server_interceptor.py | 297 ------------ .../instrumentation/bootstrap.py | 4 +- tox.ini | 6 +- 52 files changed, 26 insertions(+), 6094 deletions(-) delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/README.rst delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/setup.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/LICENSE delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/MANIFEST.in delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/README.rst delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/setup.cfg delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/setup.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_utilities.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/__init__.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/_client.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/_server.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server.proto delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2_grpc.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py delete mode 100644 instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py index 59dd1fa6108..7457c63148f 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_client.py @@ -17,11 +17,11 @@ """The Python implementation of the GRPC helloworld.Greeter client. -Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-instrumentation-grpc/ + pip install -e ext/opentelemetry-ext-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -42,8 +42,8 @@ import grpc from opentelemetry import trace -from opentelemetry.instrumentation.grpc import client_interceptor -from opentelemetry.instrumentation.grpc.grpcext import intercept_channel +from opentelemetry.ext.grpc import client_interceptor +from opentelemetry.ext.grpc.grpcext import intercept_channel from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py index ae4562e5817..858426a4682 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/hello_world_server.py @@ -17,11 +17,11 @@ """The Python implementation of the GRPC helloworld.Greeter server. -Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-instrumentation-grpc/ + pip install -e ext/opentelemetry-ext-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -42,8 +42,8 @@ import grpc from opentelemetry import trace -from opentelemetry.instrumentation.grpc import server_interceptor -from opentelemetry.instrumentation.grpc.grpcext import intercept_server +from opentelemetry.ext.grpc import server_interceptor +from opentelemetry.ext.grpc.grpcext import intercept_server from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py index 110c68d113c..d24875913d2 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_client.py @@ -17,11 +17,11 @@ """The Python implementation of the gRPC route guide client. -Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-instrumentation-grpc/ + pip install -e ext/opentelemetry-ext-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -43,8 +43,8 @@ import grpc from opentelemetry import trace -from opentelemetry.instrumentation.grpc import client_interceptor -from opentelemetry.instrumentation.grpc.grpcext import intercept_channel +from opentelemetry.ext.grpc import client_interceptor +from opentelemetry.ext.grpc.grpcext import intercept_channel from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py index a8b2a95e819..54a68b9f5a9 100755 --- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py +++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/route_guide_server.py @@ -18,11 +18,11 @@ """The Python implementation of the gRPC route guide server. -Note that you need ``opentelemetry-instrumentation-grpc`` and ``protobuf`` to be installed +Note that you need ``opentelemetry-ext-grpc`` and ``protobuf`` to be installed to run these examples. To run this script in the context of the example app, install ``opentelemetry-example-app``:: - pip install -e ext/opentelemetry-instrumentation-grpc/ + pip install -e ext/opentelemetry-ext-grpc/ pip install -e docs/examples/opentelemetry-example-app Then run the server in one shell:: @@ -45,8 +45,8 @@ import grpc from opentelemetry import trace -from opentelemetry.instrumentation.grpc import server_interceptor -from opentelemetry.instrumentation.grpc.grpcext import intercept_server +from opentelemetry.ext.grpc import server_interceptor +from opentelemetry.ext.grpc.grpcext import intercept_server from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import ( ConsoleSpanExporter, diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py index 505c15d4823..785bcccccef 100644 --- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py +++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py @@ -37,7 +37,7 @@ "opentelemetry.ext.dbapi": DatadogSpanTypes.SQL, "opentelemetry.instrumentation.django": DatadogSpanTypes.WEB, "opentelemetry.instrumentation.flask": DatadogSpanTypes.WEB, - "opentelemetry.instrumentation.grpc": DatadogSpanTypes.GRPC, + "opentelemetry.ext.grpc": DatadogSpanTypes.GRPC, "opentelemetry.ext.jinja2": DatadogSpanTypes.TEMPLATE, "opentelemetry.ext.mysql": DatadogSpanTypes.SQL, "opentelemetry.ext.psycopg2": DatadogSpanTypes.SQL, diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py index cbdb1ed74aa..cf3c3c72566 100644 --- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py @@ -294,7 +294,7 @@ def test_span_types(self): "opentelemetry.ext.dbapi", "opentelemetry.instrumentation.django", "opentelemetry.instrumentation.flask", - "opentelemetry.instrumentation.grpc", + "opentelemetry.ext.grpc", "opentelemetry.ext.jinja2", "opentelemetry.ext.mysql", "opentelemetry.ext.psycopg2", diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md index b21af319c44..67cae481c8e 100644 --- a/ext/opentelemetry-ext-grpc/CHANGELOG.md +++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md @@ -2,7 +2,7 @@ ## Unreleased -- Change package name to opentelemetry-instrumentation-grpc +- Change package name to opentelemetry-ext-grpc ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) ## Version 0.11b0 diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg index 93759c445df..a3533bdf590 100644 --- a/ext/opentelemetry-ext-grpc/setup.cfg +++ b/ext/opentelemetry-ext-grpc/setup.cfg @@ -55,5 +55,5 @@ where = src [options.entry_points] opentelemetry_instrumentor = - grpc_client = opentelemetry.instrumentation.grpc:GrpcInstrumentorClient - grpc_server = opentelemetry.instrumentation.grpc:GrpcInstrumentorServer + grpc_client = opentelemetry.ext.grpc:GrpcInstrumentorClient + grpc_server = opentelemetry.ext.grpc:GrpcInstrumentorServer diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md deleted file mode 100644 index b21af319c44..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/CHANGELOG.md +++ /dev/null @@ -1,32 +0,0 @@ -# Changelog - -## Unreleased - -- Change package name to opentelemetry-instrumentation-grpc - ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) - -## Version 0.11b0 - -Released 2020-07-28 - -- Add status code to gRPC client spans - ([896](https://github.com/open-telemetry/opentelemetry-python/pull/896)) -- Add gRPC client and server instrumentors - ([788](https://github.com/open-telemetry/opentelemetry-python/pull/788)) - -- Add metric recording (bytes in/out, errors, latency) to gRPC client - -## 0.8b0 - -Released 2020-05-27 - -- lint: version of grpc causes lint issues - ([#696](https://github.com/open-telemetry/opentelemetry-python/pull/696)) - -## 0.6b0 - -Released 2020-03-30 - -- Add gRPC integration - ([#476](https://github.com/open-telemetry/opentelemetry-python/pull/476)) -- Initial release diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE b/instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE deleted file mode 100644 index 261eeb9e9f8..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in deleted file mode 100644 index aed3e33273b..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/MANIFEST.in +++ /dev/null @@ -1,9 +0,0 @@ -graft src -graft tests -global-exclude *.pyc -global-exclude *.pyo -global-exclude __pycache__/* -include CHANGELOG.md -include MANIFEST.in -include README.rst -include LICENSE diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/README.rst b/instrumentation/opentelemetry-instrumentation-grpc copy/README.rst deleted file mode 100644 index 176bdf1a39b..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/README.rst +++ /dev/null @@ -1,18 +0,0 @@ -OpenTelemetry gRPC Integration -============================== - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-grpc.svg - :target: https://pypi.org/project/opentelemetry-instrumentation-grpc/ - -Client and server interceptors for `gRPC Python`_. - -.. _gRPC Python: https://grpc.github.io/grpc/python/grpc.html - -Installation ------------- - -:: - - pip install opentelemetry-instrumentation-grpc diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg b/instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg deleted file mode 100644 index 0308a229f8f..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/setup.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# 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. - -[metadata] -name = opentelemetry-instrumentation-grpc -description = OpenTelemetry gRPC instrumentation -long_description = file: README.rst -long_description_content_type = text/x-rst -author = OpenTelemetry Authors -author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-grpc -platforms = any -license = Apache-2.0 -classifiers = - Development Status :: 4 - Beta - Intended Audience :: Developers - License :: OSI Approved :: Apache Software License - Programming Language :: Python - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.4 - Programming Language :: Python :: 3.5 - Programming Language :: Python :: 3.6 - Programming Language :: Python :: 3.7 - Programming Language :: Python :: 3.8 - -[options] -python_requires = >=3.4 -package_dir= - =src -packages=find_namespace: -install_requires = - opentelemetry-api == 0.12.dev0 - opentelemetry-sdk == 0.12.dev0 - grpcio ~= 1.27 - -[options.extras_require] -test = - opentelemetry-test == 0.12.dev0 - opentelemetry-sdk == 0.12.dev0 - protobuf == 3.12.2 - -[options.packages.find] -where = src - -[options.entry_points] -opentelemetry_instrumentor = - grpc_client = opentelemetry.instrumentation.grpc:GrpcInstrumentorClient - grpc_server = opentelemetry.instrumentation.grpc:GrpcInstrumentorServer diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/setup.py b/instrumentation/opentelemetry-instrumentation-grpc copy/setup.py deleted file mode 100644 index 87c720aea23..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/setup.py +++ /dev/null @@ -1,27 +0,0 @@ -# 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", "grpc", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py deleted file mode 100644 index 9b6862eba0d..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/__init__.py +++ /dev/null @@ -1,224 +0,0 @@ -# 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. - -# pylint:disable=no-name-in-module -# pylint:disable=relative-beyond-top-level -# pylint:disable=import-error -# pylint:disable=no-self-use -""" -Usage Client ------------- -.. code-block:: python - - import logging - - import grpc - - from opentelemetry import trace - from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient, client_interceptor - from opentelemetry.sdk.trace import TracerProvider - from opentelemetry.sdk.trace.export import ( - ConsoleSpanExporter, - SimpleExportSpanProcessor, - ) - - from opentelemetry import metrics - from opentelemetry.sdk.metrics import MeterProvider - from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter - - try: - from .gen import helloworld_pb2, helloworld_pb2_grpc - except ImportError: - from gen import helloworld_pb2, helloworld_pb2_grpc - - trace.set_tracer_provider(TracerProvider()) - trace.get_tracer_provider().add_span_processor( - SimpleExportSpanProcessor(ConsoleSpanExporter()) - ) - - # Set meter provider to opentelemetry-sdk's MeterProvider - metrics.set_meter_provider(MeterProvider()) - - # Optional - export GRPC specific metrics (latency, bytes in/out, errors) by passing an exporter - instrumentor = GrpcInstrumentorClient(exporter=ConsoleMetricsExporter(), interval=10) - instrumentor.instrument() - - def run(): - with grpc.insecure_channel("localhost:50051") as channel: - - stub = helloworld_pb2_grpc.GreeterStub(channel) - response = stub.SayHello(helloworld_pb2.HelloRequest(name="YOU")) - - print("Greeter client received: " + response.message) - - - if __name__ == "__main__": - logging.basicConfig() - run() - -Usage Server ------------- -.. code-block:: python - - import logging - from concurrent import futures - - import grpc - - from opentelemetry import trace - from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer, server_interceptor - from opentelemetry.instrumentation.grpc.grpcext import intercept_server - from opentelemetry.sdk.trace import TracerProvider - from opentelemetry.sdk.trace.export import ( - ConsoleSpanExporter, - SimpleExportSpanProcessor, - ) - - try: - from .gen import helloworld_pb2, helloworld_pb2_grpc - except ImportError: - from gen import helloworld_pb2, helloworld_pb2_grpc - - trace.set_tracer_provider(TracerProvider()) - trace.get_tracer_provider().add_span_processor( - SimpleExportSpanProcessor(ConsoleSpanExporter()) - ) - grpc_server_instrumentor = GrpcInstrumentorServer() - grpc_server_instrumentor.instrument() - - - class Greeter(helloworld_pb2_grpc.GreeterServicer): - def SayHello(self, request, context): - return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name) - - - def serve(): - - server = grpc.server(futures.ThreadPoolExecutor()) - - helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) - server.add_insecure_port("[::]:50051") - server.start() - server.wait_for_termination() - - - if __name__ == "__main__": - logging.basicConfig() - serve() -""" -from contextlib import contextmanager -from functools import partial - -import grpc -from wrapt import wrap_function_wrapper as _wrap - -from opentelemetry import trace -from opentelemetry.instrumentation.grpc.grpcext import ( - intercept_channel, - intercept_server, -) -from opentelemetry.instrumentation.grpc.version import __version__ -from opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from opentelemetry.instrumentation.utils import unwrap - -# pylint:disable=import-outside-toplevel -# pylint:disable=import-self -# pylint:disable=unused-argument -# isort:skip - - -class GrpcInstrumentorServer(BaseInstrumentor): - def _instrument(self, **kwargs): - _wrap("grpc", "server", self.wrapper_fn) - - def _uninstrument(self, **kwargs): - unwrap(grpc, "server") - - def wrapper_fn(self, original_func, instance, args, kwargs): - server = original_func(*args, **kwargs) - return intercept_server(server, server_interceptor()) - - -class GrpcInstrumentorClient(BaseInstrumentor): - def _instrument(self, **kwargs): - exporter = kwargs.get("exporter", None) - interval = kwargs.get("interval", 30) - if kwargs.get("channel_type") == "secure": - _wrap( - "grpc", - "secure_channel", - partial(self.wrapper_fn, exporter, interval), - ) - - else: - _wrap( - "grpc", - "insecure_channel", - partial(self.wrapper_fn, exporter, interval), - ) - - def _uninstrument(self, **kwargs): - if kwargs.get("channel_type") == "secure": - unwrap(grpc, "secure_channel") - - else: - unwrap(grpc, "insecure_channel") - - def wrapper_fn( - self, exporter, interval, original_func, instance, args, kwargs - ): - channel = original_func(*args, **kwargs) - tracer_provider = kwargs.get("tracer_provider") - return intercept_channel( - channel, - client_interceptor( - tracer_provider=tracer_provider, - exporter=exporter, - interval=interval, - ), - ) - - -def client_interceptor(tracer_provider=None, exporter=None, interval=30): - """Create a gRPC client channel interceptor. - - Args: - tracer: The tracer to use to create client-side spans. - exporter: The exporter that will receive client metrics - interval: Time between every export call - - Returns: - An invocation-side interceptor object. - """ - from . import _client - - tracer = trace.get_tracer(__name__, __version__, tracer_provider) - - return _client.OpenTelemetryClientInterceptor(tracer, exporter, interval) - - -def server_interceptor(tracer_provider=None): - """Create a gRPC server interceptor. - - Args: - tracer: The tracer to use to create server-side spans. - - Returns: - A service-side interceptor object. - """ - from . import _server - - tracer = trace.get_tracer(__name__, __version__, tracer_provider) - - return _server.OpenTelemetryServerInterceptor(tracer) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py deleted file mode 100644 index 028804f599c..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_client.py +++ /dev/null @@ -1,275 +0,0 @@ -# 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. - -# pylint:disable=relative-beyond-top-level -# pylint:disable=arguments-differ -# pylint:disable=no-member -# pylint:disable=signature-differs - -"""Implementation of the invocation-side open-telemetry interceptor.""" - -from collections import OrderedDict -from typing import MutableMapping - -import grpc - -from opentelemetry import metrics, propagators, trace -from opentelemetry.sdk.metrics.export.controller import PushController -from opentelemetry.trace.status import Status, StatusCanonicalCode - -from . import grpcext -from ._utilities import RpcInfo, TimedMetricRecorder - - -class _GuardedSpan: - def __init__(self, span): - self.span = span - self.generated_span = None - self._engaged = True - - def __enter__(self): - self.generated_span = self.span.__enter__() - return self - - def __exit__(self, *args, **kwargs): - if self._engaged: - self.generated_span = None - return self.span.__exit__(*args, **kwargs) - return False - - def release(self): - self._engaged = False - return self.span - - -def _inject_span_context(metadata: MutableMapping[str, str]) -> None: - # pylint:disable=unused-argument - def append_metadata( - carrier: MutableMapping[str, str], key: str, value: str - ): - metadata[key] = value - - # Inject current active span from the context - propagators.inject(append_metadata, metadata) - - -def _make_future_done_callback(span, rpc_info, client_info, metrics_recorder): - def callback(response_future): - with span: - code = response_future.code() - if code != grpc.StatusCode.OK: - rpc_info.error = code - return - response = response_future.result() - rpc_info.response = response - if "ByteSize" in dir(response): - metrics_recorder.record_bytes_in( - response.ByteSize(), client_info.full_method - ) - - return callback - - -class OpenTelemetryClientInterceptor( - grpcext.UnaryClientInterceptor, grpcext.StreamClientInterceptor -): - def __init__(self, tracer, exporter, interval): - self._tracer = tracer - - self._meter = None - if exporter and interval: - self._meter = metrics.get_meter(__name__) - self.controller = PushController( - meter=self._meter, exporter=exporter, interval=interval - ) - self._metrics_recorder = TimedMetricRecorder(self._meter, "client") - - def _start_span(self, method): - return self._tracer.start_as_current_span( - name=method, kind=trace.SpanKind.CLIENT - ) - - # pylint:disable=no-self-use - def _trace_result(self, guarded_span, rpc_info, result, client_info): - # If the RPC is called asynchronously, release the guard and add a - # callback so that the span can be finished once the future is done. - if isinstance(result, grpc.Future): - result.add_done_callback( - _make_future_done_callback( - guarded_span.release(), - rpc_info, - client_info, - self._metrics_recorder, - ) - ) - return result - response = result - # Handle the case when the RPC is initiated via the with_call - # method and the result is a tuple with the first element as the - # response. - # http://www.grpc.io/grpc/python/grpc.html#grpc.UnaryUnaryMultiCallable.with_call - if isinstance(result, tuple): - response = result[0] - rpc_info.response = response - - if "ByteSize" in dir(response): - self._metrics_recorder.record_bytes_in( - response.ByteSize(), client_info.full_method - ) - return result - - def _start_guarded_span(self, *args, **kwargs): - return _GuardedSpan(self._start_span(*args, **kwargs)) - - def _bytes_out_iterator_wrapper(self, iterator, client_info): - for request in iterator: - if "ByteSize" in dir(request): - self._metrics_recorder.record_bytes_out( - request.ByteSize(), client_info.full_method - ) - yield request - - def intercept_unary(self, request, metadata, client_info, invoker): - if not metadata: - mutable_metadata = OrderedDict() - else: - mutable_metadata = OrderedDict(metadata) - - with self._start_guarded_span(client_info.full_method) as guarded_span: - with self._metrics_recorder.record_latency( - client_info.full_method - ): - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - - # If protobuf is used, we can record the bytes in/out. Otherwise, we have no way - # to get the size of the request/response properly, so don't record anything - if "ByteSize" in dir(request): - self._metrics_recorder.record_bytes_out( - request.ByteSize(), client_info.full_method - ) - - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - request=request, - ) - - try: - result = invoker(request, metadata) - except grpc.RpcError as exc: - guarded_span.generated_span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) - ) - raise - - return self._trace_result( - guarded_span, rpc_info, result, client_info - ) - - # For RPCs that stream responses, the result can be a generator. To record - # the span across the generated responses and detect any errors, we wrap - # the result in a new generator that yields the response values. - def _intercept_server_stream( - self, request_or_iterator, metadata, client_info, invoker - ): - if not metadata: - mutable_metadata = OrderedDict() - else: - mutable_metadata = OrderedDict(metadata) - - with self._start_span(client_info.full_method) as span: - with self._metrics_recorder.record_latency( - client_info.full_method - ): - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - ) - - if client_info.is_client_stream: - rpc_info.request = request_or_iterator - request_or_iterator = self._bytes_out_iterator_wrapper( - request_or_iterator, client_info - ) - else: - if "ByteSize" in dir(request_or_iterator): - self._metrics_recorder.record_bytes_out( - request_or_iterator.ByteSize(), - client_info.full_method, - ) - - try: - result = invoker(request_or_iterator, metadata) - - # Rewrap the result stream into a generator, and record the bytes received - for response in result: - if "ByteSize" in dir(response): - self._metrics_recorder.record_bytes_in( - response.ByteSize(), client_info.full_method - ) - yield response - except grpc.RpcError as exc: - span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) - ) - raise - - def intercept_stream( - self, request_or_iterator, metadata, client_info, invoker - ): - if client_info.is_server_stream: - return self._intercept_server_stream( - request_or_iterator, metadata, client_info, invoker - ) - - if not metadata: - mutable_metadata = OrderedDict() - else: - mutable_metadata = OrderedDict(metadata) - - with self._start_guarded_span(client_info.full_method) as guarded_span: - with self._metrics_recorder.record_latency( - client_info.full_method - ): - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - request=request_or_iterator, - ) - - rpc_info.request = request_or_iterator - - request_or_iterator = self._bytes_out_iterator_wrapper( - request_or_iterator, client_info - ) - - try: - result = invoker(request_or_iterator, metadata) - except grpc.RpcError as exc: - guarded_span.generated_span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) - ) - raise - - return self._trace_result( - guarded_span, rpc_info, result, client_info - ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py deleted file mode 100644 index cb0e997d367..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_server.py +++ /dev/null @@ -1,209 +0,0 @@ -# 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. - -# pylint:disable=relative-beyond-top-level -# pylint:disable=arguments-differ -# pylint:disable=no-member -# pylint:disable=signature-differs - -"""Implementation of the service-side open-telemetry interceptor. - -This library borrows heavily from the OpenTracing gRPC integration: -https://github.com/opentracing-contrib/python-grpc -""" - -from contextlib import contextmanager -from typing import List - -import grpc - -from opentelemetry import propagators, trace -from opentelemetry.context import attach, detach - -from . import grpcext -from ._utilities import RpcInfo - - -# pylint:disable=abstract-method -class _OpenTelemetryServicerContext(grpc.ServicerContext): - def __init__(self, servicer_context, active_span): - self._servicer_context = servicer_context - self._active_span = active_span - self.code = grpc.StatusCode.OK - self.details = None - super(_OpenTelemetryServicerContext, self).__init__() - - def is_active(self, *args, **kwargs): - return self._servicer_context.is_active(*args, **kwargs) - - def time_remaining(self, *args, **kwargs): - return self._servicer_context.time_remaining(*args, **kwargs) - - def cancel(self, *args, **kwargs): - return self._servicer_context.cancel(*args, **kwargs) - - def add_callback(self, *args, **kwargs): - return self._servicer_context.add_callback(*args, **kwargs) - - def invocation_metadata(self, *args, **kwargs): - return self._servicer_context.invocation_metadata(*args, **kwargs) - - def peer(self, *args, **kwargs): - return self._servicer_context.peer(*args, **kwargs) - - def peer_identities(self, *args, **kwargs): - return self._servicer_context.peer_identities(*args, **kwargs) - - def peer_identity_key(self, *args, **kwargs): - return self._servicer_context.peer_identity_key(*args, **kwargs) - - def auth_context(self, *args, **kwargs): - return self._servicer_context.auth_context(*args, **kwargs) - - def send_initial_metadata(self, *args, **kwargs): - return self._servicer_context.send_initial_metadata(*args, **kwargs) - - def set_trailing_metadata(self, *args, **kwargs): - return self._servicer_context.set_trailing_metadata(*args, **kwargs) - - def abort(self, *args, **kwargs): - if not hasattr(self._servicer_context, "abort"): - raise RuntimeError( - "abort() is not supported with the installed version of grpcio" - ) - return self._servicer_context.abort(*args, **kwargs) - - def abort_with_status(self, *args, **kwargs): - if not hasattr(self._servicer_context, "abort_with_status"): - raise RuntimeError( - "abort_with_status() is not supported with the installed " - "version of grpcio" - ) - return self._servicer_context.abort_with_status(*args, **kwargs) - - def set_code(self, code): - self.code = code - return self._servicer_context.set_code(code) - - def set_details(self, details): - self.details = details - return self._servicer_context.set_details(details) - - -# On the service-side, errors can be signaled either by exceptions or by -# calling `set_code` on the `servicer_context`. This function checks for the -# latter and updates the span accordingly. -# pylint:disable=unused-argument -def _check_error_code(span, servicer_context, rpc_info): - if servicer_context.code != grpc.StatusCode.OK: - rpc_info.error = servicer_context.code - - -class OpenTelemetryServerInterceptor( - grpcext.UnaryServerInterceptor, grpcext.StreamServerInterceptor -): - def __init__(self, tracer): - self._tracer = tracer - - @contextmanager - # pylint:disable=no-self-use - def _set_remote_context(self, servicer_context): - metadata = servicer_context.invocation_metadata() - if metadata: - md_dict = {md.key: md.value for md in metadata} - - def get_from_grpc_metadata(metadata, key) -> List[str]: - return [md_dict[key]] if key in md_dict else [] - - # Update the context with the traceparent from the RPC metadata. - ctx = propagators.extract(get_from_grpc_metadata, metadata) - token = attach(ctx) - try: - yield - finally: - detach(token) - else: - yield - - def _start_span(self, method): - span = self._tracer.start_as_current_span( - name=method, kind=trace.SpanKind.SERVER - ) - return span - - def intercept_unary(self, request, servicer_context, server_info, handler): - - with self._set_remote_context(servicer_context): - with self._start_span(server_info.full_method) as span: - rpc_info = RpcInfo( - full_method=server_info.full_method, - metadata=servicer_context.invocation_metadata(), - timeout=servicer_context.time_remaining(), - request=request, - ) - servicer_context = _OpenTelemetryServicerContext( - servicer_context, span - ) - response = handler(request, servicer_context) - - _check_error_code(span, servicer_context, rpc_info) - - rpc_info.response = response - - return response - - # For RPCs that stream responses, the result can be a generator. To record - # the span across the generated responses and detect any errors, we wrap - # the result in a new generator that yields the response values. - def _intercept_server_stream( - self, request_or_iterator, servicer_context, server_info, handler - ): - with self._set_remote_context(servicer_context): - with self._start_span(server_info.full_method) as span: - rpc_info = RpcInfo( - full_method=server_info.full_method, - metadata=servicer_context.invocation_metadata(), - timeout=servicer_context.time_remaining(), - ) - if not server_info.is_client_stream: - rpc_info.request = request_or_iterator - servicer_context = _OpenTelemetryServicerContext( - servicer_context, span - ) - result = handler(request_or_iterator, servicer_context) - for response in result: - yield response - _check_error_code(span, servicer_context, rpc_info) - - def intercept_stream( - self, request_or_iterator, servicer_context, server_info, handler - ): - if server_info.is_server_stream: - return self._intercept_server_stream( - request_or_iterator, servicer_context, server_info, handler - ) - with self._set_remote_context(servicer_context): - with self._start_span(server_info.full_method) as span: - rpc_info = RpcInfo( - full_method=server_info.full_method, - metadata=servicer_context.invocation_metadata(), - timeout=servicer_context.time_remaining(), - ) - servicer_context = _OpenTelemetryServicerContext( - servicer_context, span - ) - response = handler(request_or_iterator, servicer_context) - _check_error_code(span, servicer_context, rpc_info) - rpc_info.response = response - return response diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py deleted file mode 100644 index 1dfe31ec995..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/_utilities.py +++ /dev/null @@ -1,112 +0,0 @@ -# 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. - -"""Internal utilities.""" - -from contextlib import contextmanager -from time import time - -import grpc - -from opentelemetry.sdk.metrics import Counter, ValueRecorder - - -class RpcInfo: - def __init__( - self, - full_method=None, - metadata=None, - timeout=None, - request=None, - response=None, - error=None, - ): - self.full_method = full_method - self.metadata = metadata - self.timeout = timeout - self.request = request - self.response = response - self.error = error - - -class TimedMetricRecorder: - def __init__(self, meter, span_kind): - self._meter = meter - service_name = "grpcio" - self._span_kind = span_kind - base_attributes = ["method"] - - if self._meter: - self._duration = self._meter.create_metric( - name="{}/{}/duration".format(service_name, span_kind), - description="Duration of grpc requests to the server", - unit="ms", - value_type=float, - metric_type=ValueRecorder, - label_keys=base_attributes + ["error", "status_code"], - ) - self._error_count = self._meter.create_metric( - name="{}/{}/errors".format(service_name, span_kind), - description="Number of errors that were returned from the server", - unit="1", - value_type=int, - metric_type=Counter, - label_keys=base_attributes + ["status_code"], - ) - self._bytes_in = self._meter.create_metric( - name="{}/{}/bytes_in".format(service_name, span_kind), - description="Number of bytes received from the server", - unit="by", - value_type=int, - metric_type=Counter, - label_keys=base_attributes, - ) - self._bytes_out = self._meter.create_metric( - name="{}/{}/bytes_out".format(service_name, span_kind), - description="Number of bytes sent out through gRPC", - unit="by", - value_type=int, - metric_type=Counter, - label_keys=base_attributes, - ) - - def record_bytes_in(self, bytes_in, method): - if self._meter: - labels = {"method": method} - self._bytes_in.add(bytes_in, labels) - - def record_bytes_out(self, bytes_out, method): - if self._meter: - labels = {"method": method} - self._bytes_out.add(bytes_out, labels) - - @contextmanager - def record_latency(self, method): - start_time = time() - labels = {"method": method, "status_code": grpc.StatusCode.OK} - try: - yield labels - except grpc.RpcError as exc: - if self._meter: - # pylint: disable=no-member - labels["status_code"] = exc.code() - self._error_count.add(1, labels) - labels["error"] = True - raise - finally: - if self._meter: - if "error" not in labels: - labels["error"] = False - elapsed_time = (time() - start_time) * 1000 - self._duration.record(elapsed_time, labels) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py deleted file mode 100644 index fe83467a70a..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py +++ /dev/null @@ -1,216 +0,0 @@ -# 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. - -# pylint:disable=import-outside-toplevel -# pylint:disable=import-self -# pylint:disable=no-name-in-module - -import abc - - -class UnaryClientInfo(abc.ABC): - """Consists of various information about a unary RPC on the - invocation-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - timeout: The length of time in seconds to wait for the computation to - terminate or be cancelled, or None if this method should block until - the computation is terminated or is cancelled no matter how long that - takes. - """ - - -class StreamClientInfo(abc.ABC): - """Consists of various information about a stream RPC on the - invocation-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - is_client_stream: Indicates whether the RPC is client-streaming. - is_server_stream: Indicates whether the RPC is server-streaming. - timeout: The length of time in seconds to wait for the computation to - terminate or be cancelled, or None if this method should block until - the computation is terminated or is cancelled no matter how long that - takes. - """ - - -class UnaryClientInterceptor(abc.ABC): - """Affords intercepting unary-unary RPCs on the invocation-side.""" - - @abc.abstractmethod - def intercept_unary(self, request, metadata, client_info, invoker): - """Intercepts unary-unary RPCs on the invocation-side. - - Args: - request: The request value for the RPC. - metadata: Optional :term:`metadata` to be transmitted to the - service-side of the RPC. - client_info: A UnaryClientInfo containing various information about - the RPC. - invoker: The handler to complete the RPC on the client. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling invoker(request, metadata). - """ - raise NotImplementedError() - - -class StreamClientInterceptor(abc.ABC): - """Affords intercepting stream RPCs on the invocation-side.""" - - @abc.abstractmethod - def intercept_stream( - self, request_or_iterator, metadata, client_info, invoker - ): - """Intercepts stream RPCs on the invocation-side. - - Args: - request_or_iterator: The request value for the RPC if - `client_info.is_client_stream` is `false`; otherwise, an iterator of - request values. - metadata: Optional :term:`metadata` to be transmitted to the service-side - of the RPC. - client_info: A StreamClientInfo containing various information about - the RPC. - invoker: The handler to complete the RPC on the client. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling invoker(metadata). - """ - raise NotImplementedError() - - -def intercept_channel(channel, *interceptors): - """Creates an intercepted channel. - - Args: - channel: A Channel. - interceptors: Zero or more UnaryClientInterceptors or - StreamClientInterceptors - - Returns: - A Channel. - - Raises: - TypeError: If an interceptor derives from neither UnaryClientInterceptor - nor StreamClientInterceptor. - """ - from . import _interceptor - - return _interceptor.intercept_channel(channel, *interceptors) - - -class UnaryServerInfo(abc.ABC): - """Consists of various information about a unary RPC on the service-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - """ - - -class StreamServerInfo(abc.ABC): - """Consists of various information about a stream RPC on the service-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - is_client_stream: Indicates whether the RPC is client-streaming. - is_server_stream: Indicates whether the RPC is server-streaming. - """ - - -class UnaryServerInterceptor(abc.ABC): - """Affords intercepting unary-unary RPCs on the service-side.""" - - @abc.abstractmethod - def intercept_unary(self, request, servicer_context, server_info, handler): - """Intercepts unary-unary RPCs on the service-side. - - Args: - request: The request value for the RPC. - servicer_context: A ServicerContext. - server_info: A UnaryServerInfo containing various information about - the RPC. - handler: The handler to complete the RPC on the server. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling handler(request, servicer_context). - """ - raise NotImplementedError() - - -class StreamServerInterceptor(abc.ABC): - """Affords intercepting stream RPCs on the service-side.""" - - @abc.abstractmethod - def intercept_stream( - self, request_or_iterator, servicer_context, server_info, handler - ): - """Intercepts stream RPCs on the service-side. - - Args: - request_or_iterator: The request value for the RPC if - `server_info.is_client_stream` is `False`; otherwise, an iterator of - request values. - servicer_context: A ServicerContext. - server_info: A StreamServerInfo containing various information about - the RPC. - handler: The handler to complete the RPC on the server. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling handler(servicer_context). - """ - raise NotImplementedError() - - -def intercept_server(server, *interceptors): - """Creates an intercepted server. - - Args: - server: A Server. - interceptors: Zero or more UnaryServerInterceptors or - StreamServerInterceptors - - Returns: - A Server. - - Raises: - TypeError: If an interceptor derives from neither UnaryServerInterceptor - nor StreamServerInterceptor. - """ - from . import _interceptor - - return _interceptor.intercept_server(server, *interceptors) - - -__all__ = ( - "UnaryClientInterceptor", - "StreamClientInfo", - "StreamClientInterceptor", - "UnaryServerInfo", - "StreamServerInfo", - "UnaryServerInterceptor", - "StreamServerInterceptor", - "intercept_channel", - "intercept_server", -) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py deleted file mode 100644 index 74861913b92..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py +++ /dev/null @@ -1,431 +0,0 @@ -# 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. - -# pylint:disable=relative-beyond-top-level -# pylint:disable=arguments-differ -# pylint:disable=no-member -# pylint:disable=signature-differs - -"""Implementation of gRPC Python interceptors.""" - - -import collections - -import grpc - -from .. import grpcext - - -class _UnaryClientInfo( - collections.namedtuple("_UnaryClientInfo", ("full_method", "timeout")) -): - pass - - -class _StreamClientInfo( - collections.namedtuple( - "_StreamClientInfo", - ("full_method", "is_client_stream", "is_server_stream", "timeout"), - ) -): - pass - - -class _InterceptorUnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__(self, request, timeout=None, metadata=None, credentials=None): - def invoker(request, metadata): - return self._base_callable(request, timeout, metadata, credentials) - - client_info = _UnaryClientInfo(self._method, timeout) - return self._interceptor.intercept_unary( - request, metadata, client_info, invoker - ) - - def with_call( - self, request, timeout=None, metadata=None, credentials=None - ): - def invoker(request, metadata): - return self._base_callable.with_call( - request, timeout, metadata, credentials - ) - - client_info = _UnaryClientInfo(self._method, timeout) - return self._interceptor.intercept_unary( - request, metadata, client_info, invoker - ) - - def future(self, request, timeout=None, metadata=None, credentials=None): - def invoker(request, metadata): - return self._base_callable.future( - request, timeout, metadata, credentials - ) - - client_info = _UnaryClientInfo(self._method, timeout) - return self._interceptor.intercept_unary( - request, metadata, client_info, invoker - ) - - -class _InterceptorUnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__(self, request, timeout=None, metadata=None, credentials=None): - def invoker(request, metadata): - return self._base_callable(request, timeout, metadata, credentials) - - client_info = _StreamClientInfo(self._method, False, True, timeout) - return self._interceptor.intercept_stream( - request, metadata, client_info, invoker - ) - - -class _InterceptorStreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, False, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - def with_call( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable.with_call( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, False, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - def future( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable.future( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, False, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - -class _InterceptorStreamStreamMultiCallable(grpc.StreamStreamMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, True, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - -class _InterceptorChannel(grpc.Channel): - def __init__(self, channel, interceptor): - self._channel = channel - self._interceptor = interceptor - - def subscribe(self, *args, **kwargs): - self._channel.subscribe(*args, **kwargs) - - def unsubscribe(self, *args, **kwargs): - self._channel.unsubscribe(*args, **kwargs) - - def unary_unary( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.unary_unary( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.UnaryClientInterceptor): - return _InterceptorUnaryUnaryMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def unary_stream( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.unary_stream( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.StreamClientInterceptor): - return _InterceptorUnaryStreamMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def stream_unary( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.stream_unary( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.StreamClientInterceptor): - return _InterceptorStreamUnaryMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def stream_stream( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.stream_stream( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.StreamClientInterceptor): - return _InterceptorStreamStreamMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def close(self): - if not hasattr(self._channel, "close"): - raise RuntimeError( - "close() is not supported with the installed version of grpcio" - ) - self._channel.close() - - def __enter__(self): - """Enters the runtime context related to the channel object.""" - raise NotImplementedError() - - def __exit__(self, exc_type, exc_val, exc_tb): - """Exits the runtime context related to the channel object.""" - raise NotImplementedError() - - -def intercept_channel(channel, *interceptors): - result = channel - for interceptor in interceptors: - if not isinstance( - interceptor, grpcext.UnaryClientInterceptor - ) and not isinstance(interceptor, grpcext.StreamClientInterceptor): - raise TypeError( - "interceptor must be either a " - "grpcext.UnaryClientInterceptor or a " - "grpcext.StreamClientInterceptor" - ) - result = _InterceptorChannel(result, interceptor) - return result - - -class _UnaryServerInfo( - collections.namedtuple("_UnaryServerInfo", ("full_method",)) -): - pass - - -class _StreamServerInfo( - collections.namedtuple( - "_StreamServerInfo", - ("full_method", "is_client_stream", "is_server_stream"), - ) -): - pass - - -class _InterceptorRpcMethodHandler(grpc.RpcMethodHandler): - def __init__(self, rpc_method_handler, method, interceptor): - self._rpc_method_handler = rpc_method_handler - self._method = method - self._interceptor = interceptor - - @property - def request_streaming(self): - return self._rpc_method_handler.request_streaming - - @property - def response_streaming(self): - return self._rpc_method_handler.response_streaming - - @property - def request_deserializer(self): - return self._rpc_method_handler.request_deserializer - - @property - def response_serializer(self): - return self._rpc_method_handler.response_serializer - - @property - def unary_unary(self): - if not isinstance(self._interceptor, grpcext.UnaryServerInterceptor): - return self._rpc_method_handler.unary_unary - - def adaptation(request, servicer_context): - def handler(request, servicer_context): - return self._rpc_method_handler.unary_unary( - request, servicer_context - ) - - return self._interceptor.intercept_unary( - request, - servicer_context, - _UnaryServerInfo(self._method), - handler, - ) - - return adaptation - - @property - def unary_stream(self): - if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): - return self._rpc_method_handler.unary_stream - - def adaptation(request, servicer_context): - def handler(request, servicer_context): - return self._rpc_method_handler.unary_stream( - request, servicer_context - ) - - return self._interceptor.intercept_stream( - request, - servicer_context, - _StreamServerInfo(self._method, False, True), - handler, - ) - - return adaptation - - @property - def stream_unary(self): - if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): - return self._rpc_method_handler.stream_unary - - def adaptation(request_iterator, servicer_context): - def handler(request_iterator, servicer_context): - return self._rpc_method_handler.stream_unary( - request_iterator, servicer_context - ) - - return self._interceptor.intercept_stream( - request_iterator, - servicer_context, - _StreamServerInfo(self._method, True, False), - handler, - ) - - return adaptation - - @property - def stream_stream(self): - if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): - return self._rpc_method_handler.stream_stream - - def adaptation(request_iterator, servicer_context): - def handler(request_iterator, servicer_context): - return self._rpc_method_handler.stream_stream( - request_iterator, servicer_context - ) - - return self._interceptor.intercept_stream( - request_iterator, - servicer_context, - _StreamServerInfo(self._method, True, True), - handler, - ) - - return adaptation - - -class _InterceptorGenericRpcHandler(grpc.GenericRpcHandler): - def __init__(self, generic_rpc_handler, interceptor): - self.generic_rpc_handler = generic_rpc_handler - self._interceptor = interceptor - - def service(self, handler_call_details): - result = self.generic_rpc_handler.service(handler_call_details) - if result: - result = _InterceptorRpcMethodHandler( - result, handler_call_details.method, self._interceptor - ) - return result - - -class _InterceptorServer(grpc.Server): - def __init__(self, server, interceptor): - self._server = server - self._interceptor = interceptor - - def add_generic_rpc_handlers(self, generic_rpc_handlers): - generic_rpc_handlers = [ - _InterceptorGenericRpcHandler( - generic_rpc_handler, self._interceptor - ) - for generic_rpc_handler in generic_rpc_handlers - ] - return self._server.add_generic_rpc_handlers(generic_rpc_handlers) - - def add_insecure_port(self, *args, **kwargs): - return self._server.add_insecure_port(*args, **kwargs) - - def add_secure_port(self, *args, **kwargs): - return self._server.add_secure_port(*args, **kwargs) - - def start(self, *args, **kwargs): - return self._server.start(*args, **kwargs) - - def stop(self, *args, **kwargs): - return self._server.stop(*args, **kwargs) - - def wait_for_termination(self, *args, **kwargs): - return self._server.wait_for_termination(*args, **kwargs) - - -def intercept_server(server, *interceptors): - result = server - for interceptor in interceptors: - if not isinstance( - interceptor, grpcext.UnaryServerInterceptor - ) and not isinstance(interceptor, grpcext.StreamServerInterceptor): - raise TypeError( - "interceptor must be either a " - "grpcext.UnaryServerInterceptor or a " - "grpcext.StreamServerInterceptor" - ) - result = _InterceptorServer(result, interceptor) - return result diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py b/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py deleted file mode 100644 index 780a92b6a1b..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/src/opentelemetry/instrumentation/grpc/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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. - -__version__ = "0.12.dev0" diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py deleted file mode 100644 index b0a6f428417..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# 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. diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py deleted file mode 100644 index 43310b5f651..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_client.py +++ /dev/null @@ -1,57 +0,0 @@ -# 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. - -from .protobuf.test_server_pb2 import Request - -CLIENT_ID = 1 - - -def simple_method(stub, error=False): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - stub.SimpleMethod(request) - - -def client_streaming_method(stub, error=False): - # create a generator - def request_messages(): - for _ in range(5): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - yield request - - stub.ClientStreamingMethod(request_messages()) - - -def server_streaming_method(stub, error=False): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - response_iterator = stub.ServerStreamingMethod(request) - list(response_iterator) - - -def bidirectional_streaming_method(stub, error=False): - def request_messages(): - for _ in range(5): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - yield request - - response_iterator = stub.BidirectionalStreamingMethod(request_messages()) - - list(response_iterator) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py deleted file mode 100644 index a4e1c266b8a..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/_server.py +++ /dev/null @@ -1,87 +0,0 @@ -# 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. - -from concurrent import futures - -import grpc - -from .protobuf import test_server_pb2, test_server_pb2_grpc - -SERVER_ID = 1 - - -class TestServer(test_server_pb2_grpc.GRPCTestServerServicer): - def SimpleMethod(self, request, context): - if request.request_data == "error": - context.set_code(grpc.StatusCode.INVALID_ARGUMENT) - return test_server_pb2.Response() - response = test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - return response - - def ClientStreamingMethod(self, request_iterator, context): - data = list(request_iterator) - if data[0].request_data == "error": - context.set_code(grpc.StatusCode.INVALID_ARGUMENT) - return test_server_pb2.Response() - response = test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - return response - - def ServerStreamingMethod(self, request, context): - if request.request_data == "error": - - context.abort( - code=grpc.StatusCode.INVALID_ARGUMENT, - details="server stream error", - ) - return test_server_pb2.Response() - - # create a generator - def response_messages(): - for _ in range(5): - response = test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - yield response - - return response_messages() - - def BidirectionalStreamingMethod(self, request_iterator, context): - data = list(request_iterator) - if data[0].request_data == "error": - context.abort( - code=grpc.StatusCode.INVALID_ARGUMENT, - details="bidirectional error", - ) - return - - for _ in range(5): - yield test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - - -def create_test_server(port): - server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) - - test_server_pb2_grpc.add_GRPCTestServerServicer_to_server( - TestServer(), server - ) - - server.add_insecure_port("localhost:{}".format(port)) - - return server diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto deleted file mode 100644 index 790a7675de0..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server.proto +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2019 gRPC 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. -syntax = "proto3"; - -message Request { - int64 client_id = 1; - string request_data = 2; -} - -message Response { - int64 server_id = 1; - string response_data = 2; -} - -service GRPCTestServer { - rpc SimpleMethod (Request) returns (Response); - - rpc ClientStreamingMethod (stream Request) returns (Response); - - rpc ServerStreamingMethod (Request) returns (stream Response); - - rpc BidirectionalStreamingMethod (stream Request) returns (stream Response); -} diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py deleted file mode 100644 index 735206f8505..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2.py +++ /dev/null @@ -1,215 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: test_server.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="test_server.proto", - package="", - syntax="proto3", - serialized_options=None, - serialized_pb=b'\n\x11test_server.proto"2\n\x07Request\x12\x11\n\tclient_id\x18\x01 \x01(\x03\x12\x14\n\x0crequest_data\x18\x02 \x01(\t"4\n\x08Response\x12\x11\n\tserver_id\x18\x01 \x01(\x03\x12\x15\n\rresponse_data\x18\x02 \x01(\t2\xce\x01\n\x0eGRPCTestServer\x12#\n\x0cSimpleMethod\x12\x08.Request\x1a\t.Response\x12.\n\x15\x43lientStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x12.\n\x15ServerStreamingMethod\x12\x08.Request\x1a\t.Response0\x01\x12\x37\n\x1c\x42idirectionalStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x30\x01\x62\x06proto3', -) - - -_REQUEST = _descriptor.Descriptor( - name="Request", - full_name="Request", - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name="client_id", - full_name="Request.client_id", - index=0, - number=1, - type=3, - cpp_type=2, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - _descriptor.FieldDescriptor( - name="request_data", - full_name="Request.request_data", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=21, - serialized_end=71, -) - - -_RESPONSE = _descriptor.Descriptor( - name="Response", - full_name="Response", - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name="server_id", - full_name="Response.server_id", - index=0, - number=1, - type=3, - cpp_type=2, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - _descriptor.FieldDescriptor( - name="response_data", - full_name="Response.response_data", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=73, - serialized_end=125, -) - -DESCRIPTOR.message_types_by_name["Request"] = _REQUEST -DESCRIPTOR.message_types_by_name["Response"] = _RESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Request = _reflection.GeneratedProtocolMessageType( - "Request", - (_message.Message,), - { - "DESCRIPTOR": _REQUEST, - "__module__": "test_server_pb2" - # @@protoc_insertion_point(class_scope:Request) - }, -) -_sym_db.RegisterMessage(Request) - -Response = _reflection.GeneratedProtocolMessageType( - "Response", - (_message.Message,), - { - "DESCRIPTOR": _RESPONSE, - "__module__": "test_server_pb2" - # @@protoc_insertion_point(class_scope:Response) - }, -) -_sym_db.RegisterMessage(Response) - - -_GRPCTESTSERVER = _descriptor.ServiceDescriptor( - name="GRPCTestServer", - full_name="GRPCTestServer", - file=DESCRIPTOR, - index=0, - serialized_options=None, - serialized_start=128, - serialized_end=334, - methods=[ - _descriptor.MethodDescriptor( - name="SimpleMethod", - full_name="GRPCTestServer.SimpleMethod", - index=0, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name="ClientStreamingMethod", - full_name="GRPCTestServer.ClientStreamingMethod", - index=1, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name="ServerStreamingMethod", - full_name="GRPCTestServer.ServerStreamingMethod", - index=2, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name="BidirectionalStreamingMethod", - full_name="GRPCTestServer.BidirectionalStreamingMethod", - index=3, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_GRPCTESTSERVER) - -DESCRIPTOR.services_by_name["GRPCTestServer"] = _GRPCTESTSERVER - -# @@protoc_insertion_point(module_scope) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py deleted file mode 100644 index d0a6fd5184f..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/protobuf/test_server_pb2_grpc.py +++ /dev/null @@ -1,205 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - -from tests.protobuf import test_server_pb2 as test__server__pb2 - - -class GRPCTestServerStub(object): - """Missing associated documentation comment in .proto file""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.SimpleMethod = channel.unary_unary( - "/GRPCTestServer/SimpleMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - self.ClientStreamingMethod = channel.stream_unary( - "/GRPCTestServer/ClientStreamingMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - self.ServerStreamingMethod = channel.unary_stream( - "/GRPCTestServer/ServerStreamingMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - self.BidirectionalStreamingMethod = channel.stream_stream( - "/GRPCTestServer/BidirectionalStreamingMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - - -class GRPCTestServerServicer(object): - """Missing associated documentation comment in .proto file""" - - def SimpleMethod(self, request, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ClientStreamingMethod(self, request_iterator, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ServerStreamingMethod(self, request, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def BidirectionalStreamingMethod(self, request_iterator, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_GRPCTestServerServicer_to_server(servicer, server): - rpc_method_handlers = { - "SimpleMethod": grpc.unary_unary_rpc_method_handler( - servicer.SimpleMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - "ClientStreamingMethod": grpc.stream_unary_rpc_method_handler( - servicer.ClientStreamingMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - "ServerStreamingMethod": grpc.unary_stream_rpc_method_handler( - servicer.ServerStreamingMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - "BidirectionalStreamingMethod": grpc.stream_stream_rpc_method_handler( - servicer.BidirectionalStreamingMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "GRPCTestServer", rpc_method_handlers - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class GRPCTestServer(object): - """Missing associated documentation comment in .proto file""" - - @staticmethod - def SimpleMethod( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/GRPCTestServer/SimpleMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ClientStreamingMethod( - request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.stream_unary( - request_iterator, - target, - "/GRPCTestServer/ClientStreamingMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ServerStreamingMethod( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_stream( - request, - target, - "/GRPCTestServer/ServerStreamingMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def BidirectionalStreamingMethod( - request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.stream_stream( - request_iterator, - target, - "/GRPCTestServer/BidirectionalStreamingMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py deleted file mode 100644 index 458f32e0472..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_client_interceptor.py +++ /dev/null @@ -1,298 +0,0 @@ -# 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 grpc - -import opentelemetry.instrumentation.grpc -from opentelemetry import trace -from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient -from opentelemetry.sdk.metrics.export.aggregate import ( - MinMaxSumCountAggregator, - SumAggregator, -) -from opentelemetry.test.test_base import TestBase -from tests.protobuf import test_server_pb2_grpc - -from ._client import ( - bidirectional_streaming_method, - client_streaming_method, - server_streaming_method, - simple_method, -) -from ._server import create_test_server - - -class TestClientProto(TestBase): - def setUp(self): - super().setUp() - GrpcInstrumentorClient().instrument( - exporter=self.memory_metrics_exporter - ) - self.server = create_test_server(25565) - self.server.start() - self.channel = grpc.insecure_channel("localhost:25565") - self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) - - def tearDown(self): - super().tearDown() - GrpcInstrumentorClient().uninstrument() - self.memory_metrics_exporter.clear() - self.server.stop(None) - - def _verify_success_records(self, num_bytes_out, num_bytes_in, method): - # pylint: disable=protected-access,no-member - self.channel._interceptor.controller.tick() - records = self.memory_metrics_exporter.get_exported_metrics() - self.assertEqual(len(records), 3) - - bytes_out = None - bytes_in = None - duration = None - - for record in records: - if record.instrument.name == "grpcio/client/duration": - duration = record - elif record.instrument.name == "grpcio/client/bytes_out": - bytes_out = record - elif record.instrument.name == "grpcio/client/bytes_in": - bytes_in = record - - self.assertIsNotNone(bytes_out) - self.assertEqual(bytes_out.instrument.name, "grpcio/client/bytes_out") - self.assertEqual(bytes_out.labels, (("method", method),)) - - self.assertIsNotNone(bytes_in) - self.assertEqual(bytes_in.instrument.name, "grpcio/client/bytes_in") - self.assertEqual(bytes_in.labels, (("method", method),)) - - self.assertIsNotNone(duration) - self.assertEqual(duration.instrument.name, "grpcio/client/duration") - self.assertEqual( - duration.labels, - ( - ("error", False), - ("method", method), - ("status_code", grpc.StatusCode.OK), - ), - ) - - self.assertEqual(type(bytes_out.aggregator), SumAggregator) - self.assertEqual(type(bytes_in.aggregator), SumAggregator) - self.assertEqual(type(duration.aggregator), MinMaxSumCountAggregator) - - self.assertEqual(bytes_out.aggregator.checkpoint, num_bytes_out) - self.assertEqual(bytes_in.aggregator.checkpoint, num_bytes_in) - - self.assertEqual(duration.aggregator.checkpoint.count, 1) - self.assertGreaterEqual(duration.aggregator.checkpoint.sum, 0) - - def test_unary_unary(self): - simple_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") - - def test_unary_stream(self): - server_streaming_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/ServerStreamingMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records( - 8, 40, "/GRPCTestServer/ServerStreamingMethod" - ) - - def test_stream_unary(self): - client_streaming_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/ClientStreamingMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records( - 40, 8, "/GRPCTestServer/ClientStreamingMethod" - ) - - def test_stream_stream(self): - bidirectional_streaming_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual( - span.name, "/GRPCTestServer/BidirectionalStreamingMethod" - ) - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records( - 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" - ) - - def _verify_error_records(self, method): - # pylint: disable=protected-access,no-member - self.channel._interceptor.controller.tick() - records = self.memory_metrics_exporter.get_exported_metrics() - self.assertEqual(len(records), 3) - - bytes_out = None - errors = None - duration = None - - for record in records: - if record.instrument.name == "grpcio/client/duration": - duration = record - elif record.instrument.name == "grpcio/client/bytes_out": - bytes_out = record - elif record.instrument.name == "grpcio/client/errors": - errors = record - - self.assertIsNotNone(bytes_out) - self.assertIsNotNone(errors) - self.assertIsNotNone(duration) - - self.assertEqual(errors.instrument.name, "grpcio/client/errors") - self.assertEqual( - errors.labels, - ( - ("method", method), - ("status_code", grpc.StatusCode.INVALID_ARGUMENT), - ), - ) - self.assertEqual(errors.aggregator.checkpoint, 1) - - self.assertEqual( - duration.labels, - ( - ("error", True), - ("method", method), - ("status_code", grpc.StatusCode.INVALID_ARGUMENT), - ), - ) - - def test_error_simple(self): - with self.assertRaises(grpc.RpcError): - simple_method(self._stub, error=True) - - self._verify_error_records("/GRPCTestServer/SimpleMethod") - - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - def test_error_stream_unary(self): - with self.assertRaises(grpc.RpcError): - client_streaming_method(self._stub, error=True) - - self._verify_error_records("/GRPCTestServer/ClientStreamingMethod") - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - def test_error_unary_stream(self): - with self.assertRaises(grpc.RpcError): - server_streaming_method(self._stub, error=True) - - self._verify_error_records("/GRPCTestServer/ServerStreamingMethod") - - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - def test_error_stream_stream(self): - with self.assertRaises(grpc.RpcError): - bidirectional_streaming_method(self._stub, error=True) - - self._verify_error_records( - "/GRPCTestServer/BidirectionalStreamingMethod" - ) - - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - -class TestClientNoMetrics(TestBase): - def setUp(self): - super().setUp() - GrpcInstrumentorClient().instrument() - self.server = create_test_server(25565) - self.server.start() - self.channel = grpc.insecure_channel("localhost:25565") - self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) - - def tearDown(self): - super().tearDown() - GrpcInstrumentorClient().uninstrument() - self.memory_metrics_exporter.clear() - self.server.stop(None) - - def test_unary_unary(self): - simple_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py deleted file mode 100644 index a41da47ae92..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc copy/tests/test_server_interceptor.py +++ /dev/null @@ -1,297 +0,0 @@ -# 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. - -# pylint:disable=unused-argument -# pylint:disable=no-self-use - -import threading -from concurrent import futures - -import grpc - -import opentelemetry.instrumentation.grpc -from opentelemetry import trace -from opentelemetry.instrumentation.grpc import ( - GrpcInstrumentorServer, - server_interceptor, -) -from opentelemetry.instrumentation.grpc.grpcext import intercept_server -from opentelemetry.sdk import trace as trace_sdk -from opentelemetry.test.test_base import TestBase - - -class UnaryUnaryMethodHandler(grpc.RpcMethodHandler): - def __init__(self, handler): - self.request_streaming = False - self.response_streaming = False - self.request_deserializer = None - self.response_serializer = None - self.unary_unary = handler - self.unary_stream = None - self.stream_unary = None - self.stream_stream = None - - -class UnaryUnaryRpcHandler(grpc.GenericRpcHandler): - def __init__(self, handler): - self._unary_unary_handler = handler - - def service(self, handler_call_details): - return UnaryUnaryMethodHandler(self._unary_unary_handler) - - -class TestOpenTelemetryServerInterceptor(TestBase): - def test_instrumentor(self): - def handler(request, context): - return b"" - - grpc_server_instrumentor = GrpcInstrumentorServer() - grpc_server_instrumentor.instrument() - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("test")(b"test") - finally: - server.stop(None) - - spans_list = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans_list), 1) - span = spans_list[0] - self.assertEqual(span.name, "test") - self.assertIs(span.kind, trace.SpanKind.SERVER) - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - grpc_server_instrumentor.uninstrument() - - def test_uninstrument(self): - def handler(request, context): - return b"" - - grpc_server_instrumentor = GrpcInstrumentorServer() - grpc_server_instrumentor.instrument() - grpc_server_instrumentor.uninstrument() - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("test")(b"test") - finally: - server.stop(None) - - spans_list = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans_list), 0) - - def test_create_span(self): - """Check that the interceptor wraps calls with spans server-side.""" - - # Intercept gRPC calls... - interceptor = server_interceptor() - - # No-op RPC handler - def handler(request, context): - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - # FIXME: grpcext interceptor doesn't apply to handlers passed to server - # init, should use intercept_service API instead. - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("")(b"") - finally: - server.stop(None) - - spans_list = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans_list), 1) - span = spans_list[0] - - self.assertEqual(span.name, "") - self.assertIs(span.kind, trace.SpanKind.SERVER) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - def test_span_lifetime(self): - """Check that the span is active for the duration of the call.""" - - interceptor = server_interceptor() - - # To capture the current span at the time the handler is called - active_span_in_handler = None - - def handler(request, context): - nonlocal active_span_in_handler - active_span_in_handler = trace.get_current_span() - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - active_span_before_call = trace.get_current_span() - try: - server.start() - channel.unary_unary("")(b"") - finally: - server.stop(None) - active_span_after_call = trace.get_current_span() - - self.assertEqual(active_span_before_call, trace.INVALID_SPAN) - self.assertEqual(active_span_after_call, trace.INVALID_SPAN) - self.assertIsInstance(active_span_in_handler, trace_sdk.Span) - self.assertIsNone(active_span_in_handler.parent) - - def test_sequential_server_spans(self): - """Check that sequential RPCs get separate server spans.""" - - interceptor = server_interceptor() - - # Capture the currently active span in each thread - active_spans_in_handler = [] - - def handler(request, context): - active_spans_in_handler.append(trace.get_current_span()) - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("")(b"") - channel.unary_unary("")(b"") - finally: - server.stop(None) - - self.assertEqual(len(active_spans_in_handler), 2) - # pylint:disable=unbalanced-tuple-unpacking - span1, span2 = active_spans_in_handler - # Spans should belong to separate traces, and each should be a root - # span - self.assertNotEqual(span1.context.span_id, span2.context.span_id) - self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) - self.assertIsNone(span1.parent) - self.assertIsNone(span1.parent) - - def test_concurrent_server_spans(self): - """Check that concurrent RPC calls don't interfere with each other. - - This is the same check as test_sequential_server_spans except that the - RPCs are concurrent. Two handlers are invoked at the same time on two - separate threads. Each one should see a different active span and - context. - """ - - interceptor = server_interceptor() - - # Capture the currently active span in each thread - active_spans_in_handler = [] - latch = get_latch(2) - - def handler(request, context): - latch() - active_spans_in_handler.append(trace.get_current_span()) - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=2), - options=(("grpc.so_reuseport", 0),), - ) - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - # Interleave calls so spans are active on each thread at the same - # time - with futures.ThreadPoolExecutor(max_workers=2) as tpe: - f1 = tpe.submit(channel.unary_unary(""), b"") - f2 = tpe.submit(channel.unary_unary(""), b"") - futures.wait((f1, f2)) - finally: - server.stop(None) - - self.assertEqual(len(active_spans_in_handler), 2) - # pylint:disable=unbalanced-tuple-unpacking - span1, span2 = active_spans_in_handler - # Spans should belong to separate traces, and each should be a root - # span - self.assertNotEqual(span1.context.span_id, span2.context.span_id) - self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) - self.assertIsNone(span1.parent) - self.assertIsNone(span1.parent) - - -def get_latch(num): - """Get a countdown latch function for use in n threads.""" - cv = threading.Condition() - count = 0 - - def countdown_latch(): - """Block until n-1 other threads have called.""" - nonlocal count - cv.acquire() - count += 1 - cv.notify() - cv.release() - cv.acquire() - while count < num: - cv.wait() - cv.release() - - return countdown_latch diff --git a/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md deleted file mode 100644 index b21af319c44..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md +++ /dev/null @@ -1,32 +0,0 @@ -# Changelog - -## Unreleased - -- Change package name to opentelemetry-instrumentation-grpc - ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) - -## Version 0.11b0 - -Released 2020-07-28 - -- Add status code to gRPC client spans - ([896](https://github.com/open-telemetry/opentelemetry-python/pull/896)) -- Add gRPC client and server instrumentors - ([788](https://github.com/open-telemetry/opentelemetry-python/pull/788)) - -- Add metric recording (bytes in/out, errors, latency) to gRPC client - -## 0.8b0 - -Released 2020-05-27 - -- lint: version of grpc causes lint issues - ([#696](https://github.com/open-telemetry/opentelemetry-python/pull/696)) - -## 0.6b0 - -Released 2020-03-30 - -- Add gRPC integration - ([#476](https://github.com/open-telemetry/opentelemetry-python/pull/476)) -- Initial release diff --git a/instrumentation/opentelemetry-instrumentation-grpc/LICENSE b/instrumentation/opentelemetry-instrumentation-grpc/LICENSE deleted file mode 100644 index 261eeb9e9f8..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. diff --git a/instrumentation/opentelemetry-instrumentation-grpc/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-grpc/MANIFEST.in deleted file mode 100644 index aed3e33273b..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/MANIFEST.in +++ /dev/null @@ -1,9 +0,0 @@ -graft src -graft tests -global-exclude *.pyc -global-exclude *.pyo -global-exclude __pycache__/* -include CHANGELOG.md -include MANIFEST.in -include README.rst -include LICENSE diff --git a/instrumentation/opentelemetry-instrumentation-grpc/README.rst b/instrumentation/opentelemetry-instrumentation-grpc/README.rst deleted file mode 100644 index 176bdf1a39b..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/README.rst +++ /dev/null @@ -1,18 +0,0 @@ -OpenTelemetry gRPC Integration -============================== - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-grpc.svg - :target: https://pypi.org/project/opentelemetry-instrumentation-grpc/ - -Client and server interceptors for `gRPC Python`_. - -.. _gRPC Python: https://grpc.github.io/grpc/python/grpc.html - -Installation ------------- - -:: - - pip install opentelemetry-instrumentation-grpc diff --git a/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg deleted file mode 100644 index 0308a229f8f..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg +++ /dev/null @@ -1,59 +0,0 @@ -# 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. - -[metadata] -name = opentelemetry-instrumentation-grpc -description = OpenTelemetry gRPC instrumentation -long_description = file: README.rst -long_description_content_type = text/x-rst -author = OpenTelemetry Authors -author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-grpc -platforms = any -license = Apache-2.0 -classifiers = - Development Status :: 4 - Beta - Intended Audience :: Developers - License :: OSI Approved :: Apache Software License - Programming Language :: Python - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.4 - Programming Language :: Python :: 3.5 - Programming Language :: Python :: 3.6 - Programming Language :: Python :: 3.7 - Programming Language :: Python :: 3.8 - -[options] -python_requires = >=3.4 -package_dir= - =src -packages=find_namespace: -install_requires = - opentelemetry-api == 0.12.dev0 - opentelemetry-sdk == 0.12.dev0 - grpcio ~= 1.27 - -[options.extras_require] -test = - opentelemetry-test == 0.12.dev0 - opentelemetry-sdk == 0.12.dev0 - protobuf == 3.12.2 - -[options.packages.find] -where = src - -[options.entry_points] -opentelemetry_instrumentor = - grpc_client = opentelemetry.instrumentation.grpc:GrpcInstrumentorClient - grpc_server = opentelemetry.instrumentation.grpc:GrpcInstrumentorServer diff --git a/instrumentation/opentelemetry-instrumentation-grpc/setup.py b/instrumentation/opentelemetry-instrumentation-grpc/setup.py deleted file mode 100644 index 87c720aea23..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/setup.py +++ /dev/null @@ -1,27 +0,0 @@ -# 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", "grpc", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py deleted file mode 100644 index 9b6862eba0d..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py +++ /dev/null @@ -1,224 +0,0 @@ -# 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. - -# pylint:disable=no-name-in-module -# pylint:disable=relative-beyond-top-level -# pylint:disable=import-error -# pylint:disable=no-self-use -""" -Usage Client ------------- -.. code-block:: python - - import logging - - import grpc - - from opentelemetry import trace - from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient, client_interceptor - from opentelemetry.sdk.trace import TracerProvider - from opentelemetry.sdk.trace.export import ( - ConsoleSpanExporter, - SimpleExportSpanProcessor, - ) - - from opentelemetry import metrics - from opentelemetry.sdk.metrics import MeterProvider - from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter - - try: - from .gen import helloworld_pb2, helloworld_pb2_grpc - except ImportError: - from gen import helloworld_pb2, helloworld_pb2_grpc - - trace.set_tracer_provider(TracerProvider()) - trace.get_tracer_provider().add_span_processor( - SimpleExportSpanProcessor(ConsoleSpanExporter()) - ) - - # Set meter provider to opentelemetry-sdk's MeterProvider - metrics.set_meter_provider(MeterProvider()) - - # Optional - export GRPC specific metrics (latency, bytes in/out, errors) by passing an exporter - instrumentor = GrpcInstrumentorClient(exporter=ConsoleMetricsExporter(), interval=10) - instrumentor.instrument() - - def run(): - with grpc.insecure_channel("localhost:50051") as channel: - - stub = helloworld_pb2_grpc.GreeterStub(channel) - response = stub.SayHello(helloworld_pb2.HelloRequest(name="YOU")) - - print("Greeter client received: " + response.message) - - - if __name__ == "__main__": - logging.basicConfig() - run() - -Usage Server ------------- -.. code-block:: python - - import logging - from concurrent import futures - - import grpc - - from opentelemetry import trace - from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer, server_interceptor - from opentelemetry.instrumentation.grpc.grpcext import intercept_server - from opentelemetry.sdk.trace import TracerProvider - from opentelemetry.sdk.trace.export import ( - ConsoleSpanExporter, - SimpleExportSpanProcessor, - ) - - try: - from .gen import helloworld_pb2, helloworld_pb2_grpc - except ImportError: - from gen import helloworld_pb2, helloworld_pb2_grpc - - trace.set_tracer_provider(TracerProvider()) - trace.get_tracer_provider().add_span_processor( - SimpleExportSpanProcessor(ConsoleSpanExporter()) - ) - grpc_server_instrumentor = GrpcInstrumentorServer() - grpc_server_instrumentor.instrument() - - - class Greeter(helloworld_pb2_grpc.GreeterServicer): - def SayHello(self, request, context): - return helloworld_pb2.HelloReply(message="Hello, %s!" % request.name) - - - def serve(): - - server = grpc.server(futures.ThreadPoolExecutor()) - - helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) - server.add_insecure_port("[::]:50051") - server.start() - server.wait_for_termination() - - - if __name__ == "__main__": - logging.basicConfig() - serve() -""" -from contextlib import contextmanager -from functools import partial - -import grpc -from wrapt import wrap_function_wrapper as _wrap - -from opentelemetry import trace -from opentelemetry.instrumentation.grpc.grpcext import ( - intercept_channel, - intercept_server, -) -from opentelemetry.instrumentation.grpc.version import __version__ -from opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from opentelemetry.instrumentation.utils import unwrap - -# pylint:disable=import-outside-toplevel -# pylint:disable=import-self -# pylint:disable=unused-argument -# isort:skip - - -class GrpcInstrumentorServer(BaseInstrumentor): - def _instrument(self, **kwargs): - _wrap("grpc", "server", self.wrapper_fn) - - def _uninstrument(self, **kwargs): - unwrap(grpc, "server") - - def wrapper_fn(self, original_func, instance, args, kwargs): - server = original_func(*args, **kwargs) - return intercept_server(server, server_interceptor()) - - -class GrpcInstrumentorClient(BaseInstrumentor): - def _instrument(self, **kwargs): - exporter = kwargs.get("exporter", None) - interval = kwargs.get("interval", 30) - if kwargs.get("channel_type") == "secure": - _wrap( - "grpc", - "secure_channel", - partial(self.wrapper_fn, exporter, interval), - ) - - else: - _wrap( - "grpc", - "insecure_channel", - partial(self.wrapper_fn, exporter, interval), - ) - - def _uninstrument(self, **kwargs): - if kwargs.get("channel_type") == "secure": - unwrap(grpc, "secure_channel") - - else: - unwrap(grpc, "insecure_channel") - - def wrapper_fn( - self, exporter, interval, original_func, instance, args, kwargs - ): - channel = original_func(*args, **kwargs) - tracer_provider = kwargs.get("tracer_provider") - return intercept_channel( - channel, - client_interceptor( - tracer_provider=tracer_provider, - exporter=exporter, - interval=interval, - ), - ) - - -def client_interceptor(tracer_provider=None, exporter=None, interval=30): - """Create a gRPC client channel interceptor. - - Args: - tracer: The tracer to use to create client-side spans. - exporter: The exporter that will receive client metrics - interval: Time between every export call - - Returns: - An invocation-side interceptor object. - """ - from . import _client - - tracer = trace.get_tracer(__name__, __version__, tracer_provider) - - return _client.OpenTelemetryClientInterceptor(tracer, exporter, interval) - - -def server_interceptor(tracer_provider=None): - """Create a gRPC server interceptor. - - Args: - tracer: The tracer to use to create server-side spans. - - Returns: - A service-side interceptor object. - """ - from . import _server - - tracer = trace.get_tracer(__name__, __version__, tracer_provider) - - return _server.OpenTelemetryServerInterceptor(tracer) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py deleted file mode 100644 index 028804f599c..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_client.py +++ /dev/null @@ -1,275 +0,0 @@ -# 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. - -# pylint:disable=relative-beyond-top-level -# pylint:disable=arguments-differ -# pylint:disable=no-member -# pylint:disable=signature-differs - -"""Implementation of the invocation-side open-telemetry interceptor.""" - -from collections import OrderedDict -from typing import MutableMapping - -import grpc - -from opentelemetry import metrics, propagators, trace -from opentelemetry.sdk.metrics.export.controller import PushController -from opentelemetry.trace.status import Status, StatusCanonicalCode - -from . import grpcext -from ._utilities import RpcInfo, TimedMetricRecorder - - -class _GuardedSpan: - def __init__(self, span): - self.span = span - self.generated_span = None - self._engaged = True - - def __enter__(self): - self.generated_span = self.span.__enter__() - return self - - def __exit__(self, *args, **kwargs): - if self._engaged: - self.generated_span = None - return self.span.__exit__(*args, **kwargs) - return False - - def release(self): - self._engaged = False - return self.span - - -def _inject_span_context(metadata: MutableMapping[str, str]) -> None: - # pylint:disable=unused-argument - def append_metadata( - carrier: MutableMapping[str, str], key: str, value: str - ): - metadata[key] = value - - # Inject current active span from the context - propagators.inject(append_metadata, metadata) - - -def _make_future_done_callback(span, rpc_info, client_info, metrics_recorder): - def callback(response_future): - with span: - code = response_future.code() - if code != grpc.StatusCode.OK: - rpc_info.error = code - return - response = response_future.result() - rpc_info.response = response - if "ByteSize" in dir(response): - metrics_recorder.record_bytes_in( - response.ByteSize(), client_info.full_method - ) - - return callback - - -class OpenTelemetryClientInterceptor( - grpcext.UnaryClientInterceptor, grpcext.StreamClientInterceptor -): - def __init__(self, tracer, exporter, interval): - self._tracer = tracer - - self._meter = None - if exporter and interval: - self._meter = metrics.get_meter(__name__) - self.controller = PushController( - meter=self._meter, exporter=exporter, interval=interval - ) - self._metrics_recorder = TimedMetricRecorder(self._meter, "client") - - def _start_span(self, method): - return self._tracer.start_as_current_span( - name=method, kind=trace.SpanKind.CLIENT - ) - - # pylint:disable=no-self-use - def _trace_result(self, guarded_span, rpc_info, result, client_info): - # If the RPC is called asynchronously, release the guard and add a - # callback so that the span can be finished once the future is done. - if isinstance(result, grpc.Future): - result.add_done_callback( - _make_future_done_callback( - guarded_span.release(), - rpc_info, - client_info, - self._metrics_recorder, - ) - ) - return result - response = result - # Handle the case when the RPC is initiated via the with_call - # method and the result is a tuple with the first element as the - # response. - # http://www.grpc.io/grpc/python/grpc.html#grpc.UnaryUnaryMultiCallable.with_call - if isinstance(result, tuple): - response = result[0] - rpc_info.response = response - - if "ByteSize" in dir(response): - self._metrics_recorder.record_bytes_in( - response.ByteSize(), client_info.full_method - ) - return result - - def _start_guarded_span(self, *args, **kwargs): - return _GuardedSpan(self._start_span(*args, **kwargs)) - - def _bytes_out_iterator_wrapper(self, iterator, client_info): - for request in iterator: - if "ByteSize" in dir(request): - self._metrics_recorder.record_bytes_out( - request.ByteSize(), client_info.full_method - ) - yield request - - def intercept_unary(self, request, metadata, client_info, invoker): - if not metadata: - mutable_metadata = OrderedDict() - else: - mutable_metadata = OrderedDict(metadata) - - with self._start_guarded_span(client_info.full_method) as guarded_span: - with self._metrics_recorder.record_latency( - client_info.full_method - ): - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - - # If protobuf is used, we can record the bytes in/out. Otherwise, we have no way - # to get the size of the request/response properly, so don't record anything - if "ByteSize" in dir(request): - self._metrics_recorder.record_bytes_out( - request.ByteSize(), client_info.full_method - ) - - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - request=request, - ) - - try: - result = invoker(request, metadata) - except grpc.RpcError as exc: - guarded_span.generated_span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) - ) - raise - - return self._trace_result( - guarded_span, rpc_info, result, client_info - ) - - # For RPCs that stream responses, the result can be a generator. To record - # the span across the generated responses and detect any errors, we wrap - # the result in a new generator that yields the response values. - def _intercept_server_stream( - self, request_or_iterator, metadata, client_info, invoker - ): - if not metadata: - mutable_metadata = OrderedDict() - else: - mutable_metadata = OrderedDict(metadata) - - with self._start_span(client_info.full_method) as span: - with self._metrics_recorder.record_latency( - client_info.full_method - ): - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - ) - - if client_info.is_client_stream: - rpc_info.request = request_or_iterator - request_or_iterator = self._bytes_out_iterator_wrapper( - request_or_iterator, client_info - ) - else: - if "ByteSize" in dir(request_or_iterator): - self._metrics_recorder.record_bytes_out( - request_or_iterator.ByteSize(), - client_info.full_method, - ) - - try: - result = invoker(request_or_iterator, metadata) - - # Rewrap the result stream into a generator, and record the bytes received - for response in result: - if "ByteSize" in dir(response): - self._metrics_recorder.record_bytes_in( - response.ByteSize(), client_info.full_method - ) - yield response - except grpc.RpcError as exc: - span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) - ) - raise - - def intercept_stream( - self, request_or_iterator, metadata, client_info, invoker - ): - if client_info.is_server_stream: - return self._intercept_server_stream( - request_or_iterator, metadata, client_info, invoker - ) - - if not metadata: - mutable_metadata = OrderedDict() - else: - mutable_metadata = OrderedDict(metadata) - - with self._start_guarded_span(client_info.full_method) as guarded_span: - with self._metrics_recorder.record_latency( - client_info.full_method - ): - _inject_span_context(mutable_metadata) - metadata = tuple(mutable_metadata.items()) - rpc_info = RpcInfo( - full_method=client_info.full_method, - metadata=metadata, - timeout=client_info.timeout, - request=request_or_iterator, - ) - - rpc_info.request = request_or_iterator - - request_or_iterator = self._bytes_out_iterator_wrapper( - request_or_iterator, client_info - ) - - try: - result = invoker(request_or_iterator, metadata) - except grpc.RpcError as exc: - guarded_span.generated_span.set_status( - Status(StatusCanonicalCode(exc.code().value[0])) - ) - raise - - return self._trace_result( - guarded_span, rpc_info, result, client_info - ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py deleted file mode 100644 index cb0e997d367..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py +++ /dev/null @@ -1,209 +0,0 @@ -# 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. - -# pylint:disable=relative-beyond-top-level -# pylint:disable=arguments-differ -# pylint:disable=no-member -# pylint:disable=signature-differs - -"""Implementation of the service-side open-telemetry interceptor. - -This library borrows heavily from the OpenTracing gRPC integration: -https://github.com/opentracing-contrib/python-grpc -""" - -from contextlib import contextmanager -from typing import List - -import grpc - -from opentelemetry import propagators, trace -from opentelemetry.context import attach, detach - -from . import grpcext -from ._utilities import RpcInfo - - -# pylint:disable=abstract-method -class _OpenTelemetryServicerContext(grpc.ServicerContext): - def __init__(self, servicer_context, active_span): - self._servicer_context = servicer_context - self._active_span = active_span - self.code = grpc.StatusCode.OK - self.details = None - super(_OpenTelemetryServicerContext, self).__init__() - - def is_active(self, *args, **kwargs): - return self._servicer_context.is_active(*args, **kwargs) - - def time_remaining(self, *args, **kwargs): - return self._servicer_context.time_remaining(*args, **kwargs) - - def cancel(self, *args, **kwargs): - return self._servicer_context.cancel(*args, **kwargs) - - def add_callback(self, *args, **kwargs): - return self._servicer_context.add_callback(*args, **kwargs) - - def invocation_metadata(self, *args, **kwargs): - return self._servicer_context.invocation_metadata(*args, **kwargs) - - def peer(self, *args, **kwargs): - return self._servicer_context.peer(*args, **kwargs) - - def peer_identities(self, *args, **kwargs): - return self._servicer_context.peer_identities(*args, **kwargs) - - def peer_identity_key(self, *args, **kwargs): - return self._servicer_context.peer_identity_key(*args, **kwargs) - - def auth_context(self, *args, **kwargs): - return self._servicer_context.auth_context(*args, **kwargs) - - def send_initial_metadata(self, *args, **kwargs): - return self._servicer_context.send_initial_metadata(*args, **kwargs) - - def set_trailing_metadata(self, *args, **kwargs): - return self._servicer_context.set_trailing_metadata(*args, **kwargs) - - def abort(self, *args, **kwargs): - if not hasattr(self._servicer_context, "abort"): - raise RuntimeError( - "abort() is not supported with the installed version of grpcio" - ) - return self._servicer_context.abort(*args, **kwargs) - - def abort_with_status(self, *args, **kwargs): - if not hasattr(self._servicer_context, "abort_with_status"): - raise RuntimeError( - "abort_with_status() is not supported with the installed " - "version of grpcio" - ) - return self._servicer_context.abort_with_status(*args, **kwargs) - - def set_code(self, code): - self.code = code - return self._servicer_context.set_code(code) - - def set_details(self, details): - self.details = details - return self._servicer_context.set_details(details) - - -# On the service-side, errors can be signaled either by exceptions or by -# calling `set_code` on the `servicer_context`. This function checks for the -# latter and updates the span accordingly. -# pylint:disable=unused-argument -def _check_error_code(span, servicer_context, rpc_info): - if servicer_context.code != grpc.StatusCode.OK: - rpc_info.error = servicer_context.code - - -class OpenTelemetryServerInterceptor( - grpcext.UnaryServerInterceptor, grpcext.StreamServerInterceptor -): - def __init__(self, tracer): - self._tracer = tracer - - @contextmanager - # pylint:disable=no-self-use - def _set_remote_context(self, servicer_context): - metadata = servicer_context.invocation_metadata() - if metadata: - md_dict = {md.key: md.value for md in metadata} - - def get_from_grpc_metadata(metadata, key) -> List[str]: - return [md_dict[key]] if key in md_dict else [] - - # Update the context with the traceparent from the RPC metadata. - ctx = propagators.extract(get_from_grpc_metadata, metadata) - token = attach(ctx) - try: - yield - finally: - detach(token) - else: - yield - - def _start_span(self, method): - span = self._tracer.start_as_current_span( - name=method, kind=trace.SpanKind.SERVER - ) - return span - - def intercept_unary(self, request, servicer_context, server_info, handler): - - with self._set_remote_context(servicer_context): - with self._start_span(server_info.full_method) as span: - rpc_info = RpcInfo( - full_method=server_info.full_method, - metadata=servicer_context.invocation_metadata(), - timeout=servicer_context.time_remaining(), - request=request, - ) - servicer_context = _OpenTelemetryServicerContext( - servicer_context, span - ) - response = handler(request, servicer_context) - - _check_error_code(span, servicer_context, rpc_info) - - rpc_info.response = response - - return response - - # For RPCs that stream responses, the result can be a generator. To record - # the span across the generated responses and detect any errors, we wrap - # the result in a new generator that yields the response values. - def _intercept_server_stream( - self, request_or_iterator, servicer_context, server_info, handler - ): - with self._set_remote_context(servicer_context): - with self._start_span(server_info.full_method) as span: - rpc_info = RpcInfo( - full_method=server_info.full_method, - metadata=servicer_context.invocation_metadata(), - timeout=servicer_context.time_remaining(), - ) - if not server_info.is_client_stream: - rpc_info.request = request_or_iterator - servicer_context = _OpenTelemetryServicerContext( - servicer_context, span - ) - result = handler(request_or_iterator, servicer_context) - for response in result: - yield response - _check_error_code(span, servicer_context, rpc_info) - - def intercept_stream( - self, request_or_iterator, servicer_context, server_info, handler - ): - if server_info.is_server_stream: - return self._intercept_server_stream( - request_or_iterator, servicer_context, server_info, handler - ) - with self._set_remote_context(servicer_context): - with self._start_span(server_info.full_method) as span: - rpc_info = RpcInfo( - full_method=server_info.full_method, - metadata=servicer_context.invocation_metadata(), - timeout=servicer_context.time_remaining(), - ) - servicer_context = _OpenTelemetryServicerContext( - servicer_context, span - ) - response = handler(request_or_iterator, servicer_context) - _check_error_code(span, servicer_context, rpc_info) - rpc_info.response = response - return response diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_utilities.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_utilities.py deleted file mode 100644 index 1dfe31ec995..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_utilities.py +++ /dev/null @@ -1,112 +0,0 @@ -# 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. - -"""Internal utilities.""" - -from contextlib import contextmanager -from time import time - -import grpc - -from opentelemetry.sdk.metrics import Counter, ValueRecorder - - -class RpcInfo: - def __init__( - self, - full_method=None, - metadata=None, - timeout=None, - request=None, - response=None, - error=None, - ): - self.full_method = full_method - self.metadata = metadata - self.timeout = timeout - self.request = request - self.response = response - self.error = error - - -class TimedMetricRecorder: - def __init__(self, meter, span_kind): - self._meter = meter - service_name = "grpcio" - self._span_kind = span_kind - base_attributes = ["method"] - - if self._meter: - self._duration = self._meter.create_metric( - name="{}/{}/duration".format(service_name, span_kind), - description="Duration of grpc requests to the server", - unit="ms", - value_type=float, - metric_type=ValueRecorder, - label_keys=base_attributes + ["error", "status_code"], - ) - self._error_count = self._meter.create_metric( - name="{}/{}/errors".format(service_name, span_kind), - description="Number of errors that were returned from the server", - unit="1", - value_type=int, - metric_type=Counter, - label_keys=base_attributes + ["status_code"], - ) - self._bytes_in = self._meter.create_metric( - name="{}/{}/bytes_in".format(service_name, span_kind), - description="Number of bytes received from the server", - unit="by", - value_type=int, - metric_type=Counter, - label_keys=base_attributes, - ) - self._bytes_out = self._meter.create_metric( - name="{}/{}/bytes_out".format(service_name, span_kind), - description="Number of bytes sent out through gRPC", - unit="by", - value_type=int, - metric_type=Counter, - label_keys=base_attributes, - ) - - def record_bytes_in(self, bytes_in, method): - if self._meter: - labels = {"method": method} - self._bytes_in.add(bytes_in, labels) - - def record_bytes_out(self, bytes_out, method): - if self._meter: - labels = {"method": method} - self._bytes_out.add(bytes_out, labels) - - @contextmanager - def record_latency(self, method): - start_time = time() - labels = {"method": method, "status_code": grpc.StatusCode.OK} - try: - yield labels - except grpc.RpcError as exc: - if self._meter: - # pylint: disable=no-member - labels["status_code"] = exc.code() - self._error_count.add(1, labels) - labels["error"] = True - raise - finally: - if self._meter: - if "error" not in labels: - labels["error"] = False - elapsed_time = (time() - start_time) * 1000 - self._duration.record(elapsed_time, labels) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py deleted file mode 100644 index fe83467a70a..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/__init__.py +++ /dev/null @@ -1,216 +0,0 @@ -# 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. - -# pylint:disable=import-outside-toplevel -# pylint:disable=import-self -# pylint:disable=no-name-in-module - -import abc - - -class UnaryClientInfo(abc.ABC): - """Consists of various information about a unary RPC on the - invocation-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - timeout: The length of time in seconds to wait for the computation to - terminate or be cancelled, or None if this method should block until - the computation is terminated or is cancelled no matter how long that - takes. - """ - - -class StreamClientInfo(abc.ABC): - """Consists of various information about a stream RPC on the - invocation-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - is_client_stream: Indicates whether the RPC is client-streaming. - is_server_stream: Indicates whether the RPC is server-streaming. - timeout: The length of time in seconds to wait for the computation to - terminate or be cancelled, or None if this method should block until - the computation is terminated or is cancelled no matter how long that - takes. - """ - - -class UnaryClientInterceptor(abc.ABC): - """Affords intercepting unary-unary RPCs on the invocation-side.""" - - @abc.abstractmethod - def intercept_unary(self, request, metadata, client_info, invoker): - """Intercepts unary-unary RPCs on the invocation-side. - - Args: - request: The request value for the RPC. - metadata: Optional :term:`metadata` to be transmitted to the - service-side of the RPC. - client_info: A UnaryClientInfo containing various information about - the RPC. - invoker: The handler to complete the RPC on the client. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling invoker(request, metadata). - """ - raise NotImplementedError() - - -class StreamClientInterceptor(abc.ABC): - """Affords intercepting stream RPCs on the invocation-side.""" - - @abc.abstractmethod - def intercept_stream( - self, request_or_iterator, metadata, client_info, invoker - ): - """Intercepts stream RPCs on the invocation-side. - - Args: - request_or_iterator: The request value for the RPC if - `client_info.is_client_stream` is `false`; otherwise, an iterator of - request values. - metadata: Optional :term:`metadata` to be transmitted to the service-side - of the RPC. - client_info: A StreamClientInfo containing various information about - the RPC. - invoker: The handler to complete the RPC on the client. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling invoker(metadata). - """ - raise NotImplementedError() - - -def intercept_channel(channel, *interceptors): - """Creates an intercepted channel. - - Args: - channel: A Channel. - interceptors: Zero or more UnaryClientInterceptors or - StreamClientInterceptors - - Returns: - A Channel. - - Raises: - TypeError: If an interceptor derives from neither UnaryClientInterceptor - nor StreamClientInterceptor. - """ - from . import _interceptor - - return _interceptor.intercept_channel(channel, *interceptors) - - -class UnaryServerInfo(abc.ABC): - """Consists of various information about a unary RPC on the service-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - """ - - -class StreamServerInfo(abc.ABC): - """Consists of various information about a stream RPC on the service-side. - - Attributes: - full_method: A string of the full RPC method, i.e., - /package.service/method. - is_client_stream: Indicates whether the RPC is client-streaming. - is_server_stream: Indicates whether the RPC is server-streaming. - """ - - -class UnaryServerInterceptor(abc.ABC): - """Affords intercepting unary-unary RPCs on the service-side.""" - - @abc.abstractmethod - def intercept_unary(self, request, servicer_context, server_info, handler): - """Intercepts unary-unary RPCs on the service-side. - - Args: - request: The request value for the RPC. - servicer_context: A ServicerContext. - server_info: A UnaryServerInfo containing various information about - the RPC. - handler: The handler to complete the RPC on the server. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling handler(request, servicer_context). - """ - raise NotImplementedError() - - -class StreamServerInterceptor(abc.ABC): - """Affords intercepting stream RPCs on the service-side.""" - - @abc.abstractmethod - def intercept_stream( - self, request_or_iterator, servicer_context, server_info, handler - ): - """Intercepts stream RPCs on the service-side. - - Args: - request_or_iterator: The request value for the RPC if - `server_info.is_client_stream` is `False`; otherwise, an iterator of - request values. - servicer_context: A ServicerContext. - server_info: A StreamServerInfo containing various information about - the RPC. - handler: The handler to complete the RPC on the server. It is the - interceptor's responsibility to call it. - - Returns: - The result from calling handler(servicer_context). - """ - raise NotImplementedError() - - -def intercept_server(server, *interceptors): - """Creates an intercepted server. - - Args: - server: A Server. - interceptors: Zero or more UnaryServerInterceptors or - StreamServerInterceptors - - Returns: - A Server. - - Raises: - TypeError: If an interceptor derives from neither UnaryServerInterceptor - nor StreamServerInterceptor. - """ - from . import _interceptor - - return _interceptor.intercept_server(server, *interceptors) - - -__all__ = ( - "UnaryClientInterceptor", - "StreamClientInfo", - "StreamClientInterceptor", - "UnaryServerInfo", - "StreamServerInfo", - "UnaryServerInterceptor", - "StreamServerInterceptor", - "intercept_channel", - "intercept_server", -) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py deleted file mode 100644 index 74861913b92..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/grpcext/_interceptor.py +++ /dev/null @@ -1,431 +0,0 @@ -# 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. - -# pylint:disable=relative-beyond-top-level -# pylint:disable=arguments-differ -# pylint:disable=no-member -# pylint:disable=signature-differs - -"""Implementation of gRPC Python interceptors.""" - - -import collections - -import grpc - -from .. import grpcext - - -class _UnaryClientInfo( - collections.namedtuple("_UnaryClientInfo", ("full_method", "timeout")) -): - pass - - -class _StreamClientInfo( - collections.namedtuple( - "_StreamClientInfo", - ("full_method", "is_client_stream", "is_server_stream", "timeout"), - ) -): - pass - - -class _InterceptorUnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__(self, request, timeout=None, metadata=None, credentials=None): - def invoker(request, metadata): - return self._base_callable(request, timeout, metadata, credentials) - - client_info = _UnaryClientInfo(self._method, timeout) - return self._interceptor.intercept_unary( - request, metadata, client_info, invoker - ) - - def with_call( - self, request, timeout=None, metadata=None, credentials=None - ): - def invoker(request, metadata): - return self._base_callable.with_call( - request, timeout, metadata, credentials - ) - - client_info = _UnaryClientInfo(self._method, timeout) - return self._interceptor.intercept_unary( - request, metadata, client_info, invoker - ) - - def future(self, request, timeout=None, metadata=None, credentials=None): - def invoker(request, metadata): - return self._base_callable.future( - request, timeout, metadata, credentials - ) - - client_info = _UnaryClientInfo(self._method, timeout) - return self._interceptor.intercept_unary( - request, metadata, client_info, invoker - ) - - -class _InterceptorUnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__(self, request, timeout=None, metadata=None, credentials=None): - def invoker(request, metadata): - return self._base_callable(request, timeout, metadata, credentials) - - client_info = _StreamClientInfo(self._method, False, True, timeout) - return self._interceptor.intercept_stream( - request, metadata, client_info, invoker - ) - - -class _InterceptorStreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, False, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - def with_call( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable.with_call( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, False, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - def future( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable.future( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, False, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - -class _InterceptorStreamStreamMultiCallable(grpc.StreamStreamMultiCallable): - def __init__(self, method, base_callable, interceptor): - self._method = method - self._base_callable = base_callable - self._interceptor = interceptor - - def __call__( - self, request_iterator, timeout=None, metadata=None, credentials=None - ): - def invoker(request_iterator, metadata): - return self._base_callable( - request_iterator, timeout, metadata, credentials - ) - - client_info = _StreamClientInfo(self._method, True, True, timeout) - return self._interceptor.intercept_stream( - request_iterator, metadata, client_info, invoker - ) - - -class _InterceptorChannel(grpc.Channel): - def __init__(self, channel, interceptor): - self._channel = channel - self._interceptor = interceptor - - def subscribe(self, *args, **kwargs): - self._channel.subscribe(*args, **kwargs) - - def unsubscribe(self, *args, **kwargs): - self._channel.unsubscribe(*args, **kwargs) - - def unary_unary( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.unary_unary( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.UnaryClientInterceptor): - return _InterceptorUnaryUnaryMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def unary_stream( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.unary_stream( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.StreamClientInterceptor): - return _InterceptorUnaryStreamMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def stream_unary( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.stream_unary( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.StreamClientInterceptor): - return _InterceptorStreamUnaryMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def stream_stream( - self, method, request_serializer=None, response_deserializer=None - ): - base_callable = self._channel.stream_stream( - method, request_serializer, response_deserializer - ) - if isinstance(self._interceptor, grpcext.StreamClientInterceptor): - return _InterceptorStreamStreamMultiCallable( - method, base_callable, self._interceptor - ) - return base_callable - - def close(self): - if not hasattr(self._channel, "close"): - raise RuntimeError( - "close() is not supported with the installed version of grpcio" - ) - self._channel.close() - - def __enter__(self): - """Enters the runtime context related to the channel object.""" - raise NotImplementedError() - - def __exit__(self, exc_type, exc_val, exc_tb): - """Exits the runtime context related to the channel object.""" - raise NotImplementedError() - - -def intercept_channel(channel, *interceptors): - result = channel - for interceptor in interceptors: - if not isinstance( - interceptor, grpcext.UnaryClientInterceptor - ) and not isinstance(interceptor, grpcext.StreamClientInterceptor): - raise TypeError( - "interceptor must be either a " - "grpcext.UnaryClientInterceptor or a " - "grpcext.StreamClientInterceptor" - ) - result = _InterceptorChannel(result, interceptor) - return result - - -class _UnaryServerInfo( - collections.namedtuple("_UnaryServerInfo", ("full_method",)) -): - pass - - -class _StreamServerInfo( - collections.namedtuple( - "_StreamServerInfo", - ("full_method", "is_client_stream", "is_server_stream"), - ) -): - pass - - -class _InterceptorRpcMethodHandler(grpc.RpcMethodHandler): - def __init__(self, rpc_method_handler, method, interceptor): - self._rpc_method_handler = rpc_method_handler - self._method = method - self._interceptor = interceptor - - @property - def request_streaming(self): - return self._rpc_method_handler.request_streaming - - @property - def response_streaming(self): - return self._rpc_method_handler.response_streaming - - @property - def request_deserializer(self): - return self._rpc_method_handler.request_deserializer - - @property - def response_serializer(self): - return self._rpc_method_handler.response_serializer - - @property - def unary_unary(self): - if not isinstance(self._interceptor, grpcext.UnaryServerInterceptor): - return self._rpc_method_handler.unary_unary - - def adaptation(request, servicer_context): - def handler(request, servicer_context): - return self._rpc_method_handler.unary_unary( - request, servicer_context - ) - - return self._interceptor.intercept_unary( - request, - servicer_context, - _UnaryServerInfo(self._method), - handler, - ) - - return adaptation - - @property - def unary_stream(self): - if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): - return self._rpc_method_handler.unary_stream - - def adaptation(request, servicer_context): - def handler(request, servicer_context): - return self._rpc_method_handler.unary_stream( - request, servicer_context - ) - - return self._interceptor.intercept_stream( - request, - servicer_context, - _StreamServerInfo(self._method, False, True), - handler, - ) - - return adaptation - - @property - def stream_unary(self): - if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): - return self._rpc_method_handler.stream_unary - - def adaptation(request_iterator, servicer_context): - def handler(request_iterator, servicer_context): - return self._rpc_method_handler.stream_unary( - request_iterator, servicer_context - ) - - return self._interceptor.intercept_stream( - request_iterator, - servicer_context, - _StreamServerInfo(self._method, True, False), - handler, - ) - - return adaptation - - @property - def stream_stream(self): - if not isinstance(self._interceptor, grpcext.StreamServerInterceptor): - return self._rpc_method_handler.stream_stream - - def adaptation(request_iterator, servicer_context): - def handler(request_iterator, servicer_context): - return self._rpc_method_handler.stream_stream( - request_iterator, servicer_context - ) - - return self._interceptor.intercept_stream( - request_iterator, - servicer_context, - _StreamServerInfo(self._method, True, True), - handler, - ) - - return adaptation - - -class _InterceptorGenericRpcHandler(grpc.GenericRpcHandler): - def __init__(self, generic_rpc_handler, interceptor): - self.generic_rpc_handler = generic_rpc_handler - self._interceptor = interceptor - - def service(self, handler_call_details): - result = self.generic_rpc_handler.service(handler_call_details) - if result: - result = _InterceptorRpcMethodHandler( - result, handler_call_details.method, self._interceptor - ) - return result - - -class _InterceptorServer(grpc.Server): - def __init__(self, server, interceptor): - self._server = server - self._interceptor = interceptor - - def add_generic_rpc_handlers(self, generic_rpc_handlers): - generic_rpc_handlers = [ - _InterceptorGenericRpcHandler( - generic_rpc_handler, self._interceptor - ) - for generic_rpc_handler in generic_rpc_handlers - ] - return self._server.add_generic_rpc_handlers(generic_rpc_handlers) - - def add_insecure_port(self, *args, **kwargs): - return self._server.add_insecure_port(*args, **kwargs) - - def add_secure_port(self, *args, **kwargs): - return self._server.add_secure_port(*args, **kwargs) - - def start(self, *args, **kwargs): - return self._server.start(*args, **kwargs) - - def stop(self, *args, **kwargs): - return self._server.stop(*args, **kwargs) - - def wait_for_termination(self, *args, **kwargs): - return self._server.wait_for_termination(*args, **kwargs) - - -def intercept_server(server, *interceptors): - result = server - for interceptor in interceptors: - if not isinstance( - interceptor, grpcext.UnaryServerInterceptor - ) and not isinstance(interceptor, grpcext.StreamServerInterceptor): - raise TypeError( - "interceptor must be either a " - "grpcext.UnaryServerInterceptor or a " - "grpcext.StreamServerInterceptor" - ) - result = _InterceptorServer(result, interceptor) - return result diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py deleted file mode 100644 index 780a92b6a1b..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py +++ /dev/null @@ -1,15 +0,0 @@ -# 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. - -__version__ = "0.12.dev0" diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/__init__.py deleted file mode 100644 index b0a6f428417..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# 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. diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/_client.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/_client.py deleted file mode 100644 index 43310b5f651..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/_client.py +++ /dev/null @@ -1,57 +0,0 @@ -# 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. - -from .protobuf.test_server_pb2 import Request - -CLIENT_ID = 1 - - -def simple_method(stub, error=False): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - stub.SimpleMethod(request) - - -def client_streaming_method(stub, error=False): - # create a generator - def request_messages(): - for _ in range(5): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - yield request - - stub.ClientStreamingMethod(request_messages()) - - -def server_streaming_method(stub, error=False): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - response_iterator = stub.ServerStreamingMethod(request) - list(response_iterator) - - -def bidirectional_streaming_method(stub, error=False): - def request_messages(): - for _ in range(5): - request = Request( - client_id=CLIENT_ID, request_data="error" if error else "data" - ) - yield request - - response_iterator = stub.BidirectionalStreamingMethod(request_messages()) - - list(response_iterator) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/_server.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/_server.py deleted file mode 100644 index a4e1c266b8a..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/_server.py +++ /dev/null @@ -1,87 +0,0 @@ -# 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. - -from concurrent import futures - -import grpc - -from .protobuf import test_server_pb2, test_server_pb2_grpc - -SERVER_ID = 1 - - -class TestServer(test_server_pb2_grpc.GRPCTestServerServicer): - def SimpleMethod(self, request, context): - if request.request_data == "error": - context.set_code(grpc.StatusCode.INVALID_ARGUMENT) - return test_server_pb2.Response() - response = test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - return response - - def ClientStreamingMethod(self, request_iterator, context): - data = list(request_iterator) - if data[0].request_data == "error": - context.set_code(grpc.StatusCode.INVALID_ARGUMENT) - return test_server_pb2.Response() - response = test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - return response - - def ServerStreamingMethod(self, request, context): - if request.request_data == "error": - - context.abort( - code=grpc.StatusCode.INVALID_ARGUMENT, - details="server stream error", - ) - return test_server_pb2.Response() - - # create a generator - def response_messages(): - for _ in range(5): - response = test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - yield response - - return response_messages() - - def BidirectionalStreamingMethod(self, request_iterator, context): - data = list(request_iterator) - if data[0].request_data == "error": - context.abort( - code=grpc.StatusCode.INVALID_ARGUMENT, - details="bidirectional error", - ) - return - - for _ in range(5): - yield test_server_pb2.Response( - server_id=SERVER_ID, response_data="data" - ) - - -def create_test_server(port): - server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) - - test_server_pb2_grpc.add_GRPCTestServerServicer_to_server( - TestServer(), server - ) - - server.add_insecure_port("localhost:{}".format(port)) - - return server diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server.proto b/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server.proto deleted file mode 100644 index 790a7675de0..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server.proto +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2019 gRPC 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. -syntax = "proto3"; - -message Request { - int64 client_id = 1; - string request_data = 2; -} - -message Response { - int64 server_id = 1; - string response_data = 2; -} - -service GRPCTestServer { - rpc SimpleMethod (Request) returns (Response); - - rpc ClientStreamingMethod (stream Request) returns (Response); - - rpc ServerStreamingMethod (Request) returns (stream Response); - - rpc BidirectionalStreamingMethod (stream Request) returns (stream Response); -} diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2.py deleted file mode 100644 index 735206f8505..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2.py +++ /dev/null @@ -1,215 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: test_server.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database - -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -DESCRIPTOR = _descriptor.FileDescriptor( - name="test_server.proto", - package="", - syntax="proto3", - serialized_options=None, - serialized_pb=b'\n\x11test_server.proto"2\n\x07Request\x12\x11\n\tclient_id\x18\x01 \x01(\x03\x12\x14\n\x0crequest_data\x18\x02 \x01(\t"4\n\x08Response\x12\x11\n\tserver_id\x18\x01 \x01(\x03\x12\x15\n\rresponse_data\x18\x02 \x01(\t2\xce\x01\n\x0eGRPCTestServer\x12#\n\x0cSimpleMethod\x12\x08.Request\x1a\t.Response\x12.\n\x15\x43lientStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x12.\n\x15ServerStreamingMethod\x12\x08.Request\x1a\t.Response0\x01\x12\x37\n\x1c\x42idirectionalStreamingMethod\x12\x08.Request\x1a\t.Response(\x01\x30\x01\x62\x06proto3', -) - - -_REQUEST = _descriptor.Descriptor( - name="Request", - full_name="Request", - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name="client_id", - full_name="Request.client_id", - index=0, - number=1, - type=3, - cpp_type=2, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - _descriptor.FieldDescriptor( - name="request_data", - full_name="Request.request_data", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=21, - serialized_end=71, -) - - -_RESPONSE = _descriptor.Descriptor( - name="Response", - full_name="Response", - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name="server_id", - full_name="Response.server_id", - index=0, - number=1, - type=3, - cpp_type=2, - label=1, - has_default_value=False, - default_value=0, - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - _descriptor.FieldDescriptor( - name="response_data", - full_name="Response.response_data", - index=1, - number=2, - type=9, - cpp_type=9, - label=1, - has_default_value=False, - default_value=b"".decode("utf-8"), - message_type=None, - enum_type=None, - containing_type=None, - is_extension=False, - extension_scope=None, - serialized_options=None, - file=DESCRIPTOR, - ), - ], - extensions=[], - nested_types=[], - enum_types=[], - serialized_options=None, - is_extendable=False, - syntax="proto3", - extension_ranges=[], - oneofs=[], - serialized_start=73, - serialized_end=125, -) - -DESCRIPTOR.message_types_by_name["Request"] = _REQUEST -DESCRIPTOR.message_types_by_name["Response"] = _RESPONSE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Request = _reflection.GeneratedProtocolMessageType( - "Request", - (_message.Message,), - { - "DESCRIPTOR": _REQUEST, - "__module__": "test_server_pb2" - # @@protoc_insertion_point(class_scope:Request) - }, -) -_sym_db.RegisterMessage(Request) - -Response = _reflection.GeneratedProtocolMessageType( - "Response", - (_message.Message,), - { - "DESCRIPTOR": _RESPONSE, - "__module__": "test_server_pb2" - # @@protoc_insertion_point(class_scope:Response) - }, -) -_sym_db.RegisterMessage(Response) - - -_GRPCTESTSERVER = _descriptor.ServiceDescriptor( - name="GRPCTestServer", - full_name="GRPCTestServer", - file=DESCRIPTOR, - index=0, - serialized_options=None, - serialized_start=128, - serialized_end=334, - methods=[ - _descriptor.MethodDescriptor( - name="SimpleMethod", - full_name="GRPCTestServer.SimpleMethod", - index=0, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name="ClientStreamingMethod", - full_name="GRPCTestServer.ClientStreamingMethod", - index=1, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name="ServerStreamingMethod", - full_name="GRPCTestServer.ServerStreamingMethod", - index=2, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - _descriptor.MethodDescriptor( - name="BidirectionalStreamingMethod", - full_name="GRPCTestServer.BidirectionalStreamingMethod", - index=3, - containing_service=None, - input_type=_REQUEST, - output_type=_RESPONSE, - serialized_options=None, - ), - ], -) -_sym_db.RegisterServiceDescriptor(_GRPCTESTSERVER) - -DESCRIPTOR.services_by_name["GRPCTestServer"] = _GRPCTESTSERVER - -# @@protoc_insertion_point(module_scope) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2_grpc.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2_grpc.py deleted file mode 100644 index d0a6fd5184f..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/protobuf/test_server_pb2_grpc.py +++ /dev/null @@ -1,205 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - -from tests.protobuf import test_server_pb2 as test__server__pb2 - - -class GRPCTestServerStub(object): - """Missing associated documentation comment in .proto file""" - - def __init__(self, channel): - """Constructor. - - Args: - channel: A grpc.Channel. - """ - self.SimpleMethod = channel.unary_unary( - "/GRPCTestServer/SimpleMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - self.ClientStreamingMethod = channel.stream_unary( - "/GRPCTestServer/ClientStreamingMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - self.ServerStreamingMethod = channel.unary_stream( - "/GRPCTestServer/ServerStreamingMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - self.BidirectionalStreamingMethod = channel.stream_stream( - "/GRPCTestServer/BidirectionalStreamingMethod", - request_serializer=test__server__pb2.Request.SerializeToString, - response_deserializer=test__server__pb2.Response.FromString, - ) - - -class GRPCTestServerServicer(object): - """Missing associated documentation comment in .proto file""" - - def SimpleMethod(self, request, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ClientStreamingMethod(self, request_iterator, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def ServerStreamingMethod(self, request, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - def BidirectionalStreamingMethod(self, request_iterator, context): - """Missing associated documentation comment in .proto file""" - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details("Method not implemented!") - raise NotImplementedError("Method not implemented!") - - -def add_GRPCTestServerServicer_to_server(servicer, server): - rpc_method_handlers = { - "SimpleMethod": grpc.unary_unary_rpc_method_handler( - servicer.SimpleMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - "ClientStreamingMethod": grpc.stream_unary_rpc_method_handler( - servicer.ClientStreamingMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - "ServerStreamingMethod": grpc.unary_stream_rpc_method_handler( - servicer.ServerStreamingMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - "BidirectionalStreamingMethod": grpc.stream_stream_rpc_method_handler( - servicer.BidirectionalStreamingMethod, - request_deserializer=test__server__pb2.Request.FromString, - response_serializer=test__server__pb2.Response.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - "GRPCTestServer", rpc_method_handlers - ) - server.add_generic_rpc_handlers((generic_handler,)) - - -# This class is part of an EXPERIMENTAL API. -class GRPCTestServer(object): - """Missing associated documentation comment in .proto file""" - - @staticmethod - def SimpleMethod( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_unary( - request, - target, - "/GRPCTestServer/SimpleMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ClientStreamingMethod( - request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.stream_unary( - request_iterator, - target, - "/GRPCTestServer/ClientStreamingMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def ServerStreamingMethod( - request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.unary_stream( - request, - target, - "/GRPCTestServer/ServerStreamingMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) - - @staticmethod - def BidirectionalStreamingMethod( - request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None, - ): - return grpc.experimental.stream_stream( - request_iterator, - target, - "/GRPCTestServer/BidirectionalStreamingMethod", - test__server__pb2.Request.SerializeToString, - test__server__pb2.Response.FromString, - options, - channel_credentials, - call_credentials, - compression, - wait_for_ready, - timeout, - metadata, - ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py deleted file mode 100644 index 458f32e0472..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py +++ /dev/null @@ -1,298 +0,0 @@ -# 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 grpc - -import opentelemetry.instrumentation.grpc -from opentelemetry import trace -from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient -from opentelemetry.sdk.metrics.export.aggregate import ( - MinMaxSumCountAggregator, - SumAggregator, -) -from opentelemetry.test.test_base import TestBase -from tests.protobuf import test_server_pb2_grpc - -from ._client import ( - bidirectional_streaming_method, - client_streaming_method, - server_streaming_method, - simple_method, -) -from ._server import create_test_server - - -class TestClientProto(TestBase): - def setUp(self): - super().setUp() - GrpcInstrumentorClient().instrument( - exporter=self.memory_metrics_exporter - ) - self.server = create_test_server(25565) - self.server.start() - self.channel = grpc.insecure_channel("localhost:25565") - self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) - - def tearDown(self): - super().tearDown() - GrpcInstrumentorClient().uninstrument() - self.memory_metrics_exporter.clear() - self.server.stop(None) - - def _verify_success_records(self, num_bytes_out, num_bytes_in, method): - # pylint: disable=protected-access,no-member - self.channel._interceptor.controller.tick() - records = self.memory_metrics_exporter.get_exported_metrics() - self.assertEqual(len(records), 3) - - bytes_out = None - bytes_in = None - duration = None - - for record in records: - if record.instrument.name == "grpcio/client/duration": - duration = record - elif record.instrument.name == "grpcio/client/bytes_out": - bytes_out = record - elif record.instrument.name == "grpcio/client/bytes_in": - bytes_in = record - - self.assertIsNotNone(bytes_out) - self.assertEqual(bytes_out.instrument.name, "grpcio/client/bytes_out") - self.assertEqual(bytes_out.labels, (("method", method),)) - - self.assertIsNotNone(bytes_in) - self.assertEqual(bytes_in.instrument.name, "grpcio/client/bytes_in") - self.assertEqual(bytes_in.labels, (("method", method),)) - - self.assertIsNotNone(duration) - self.assertEqual(duration.instrument.name, "grpcio/client/duration") - self.assertEqual( - duration.labels, - ( - ("error", False), - ("method", method), - ("status_code", grpc.StatusCode.OK), - ), - ) - - self.assertEqual(type(bytes_out.aggregator), SumAggregator) - self.assertEqual(type(bytes_in.aggregator), SumAggregator) - self.assertEqual(type(duration.aggregator), MinMaxSumCountAggregator) - - self.assertEqual(bytes_out.aggregator.checkpoint, num_bytes_out) - self.assertEqual(bytes_in.aggregator.checkpoint, num_bytes_in) - - self.assertEqual(duration.aggregator.checkpoint.count, 1) - self.assertGreaterEqual(duration.aggregator.checkpoint.sum, 0) - - def test_unary_unary(self): - simple_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") - - def test_unary_stream(self): - server_streaming_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/ServerStreamingMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records( - 8, 40, "/GRPCTestServer/ServerStreamingMethod" - ) - - def test_stream_unary(self): - client_streaming_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/ClientStreamingMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records( - 40, 8, "/GRPCTestServer/ClientStreamingMethod" - ) - - def test_stream_stream(self): - bidirectional_streaming_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual( - span.name, "/GRPCTestServer/BidirectionalStreamingMethod" - ) - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - self._verify_success_records( - 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" - ) - - def _verify_error_records(self, method): - # pylint: disable=protected-access,no-member - self.channel._interceptor.controller.tick() - records = self.memory_metrics_exporter.get_exported_metrics() - self.assertEqual(len(records), 3) - - bytes_out = None - errors = None - duration = None - - for record in records: - if record.instrument.name == "grpcio/client/duration": - duration = record - elif record.instrument.name == "grpcio/client/bytes_out": - bytes_out = record - elif record.instrument.name == "grpcio/client/errors": - errors = record - - self.assertIsNotNone(bytes_out) - self.assertIsNotNone(errors) - self.assertIsNotNone(duration) - - self.assertEqual(errors.instrument.name, "grpcio/client/errors") - self.assertEqual( - errors.labels, - ( - ("method", method), - ("status_code", grpc.StatusCode.INVALID_ARGUMENT), - ), - ) - self.assertEqual(errors.aggregator.checkpoint, 1) - - self.assertEqual( - duration.labels, - ( - ("error", True), - ("method", method), - ("status_code", grpc.StatusCode.INVALID_ARGUMENT), - ), - ) - - def test_error_simple(self): - with self.assertRaises(grpc.RpcError): - simple_method(self._stub, error=True) - - self._verify_error_records("/GRPCTestServer/SimpleMethod") - - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - def test_error_stream_unary(self): - with self.assertRaises(grpc.RpcError): - client_streaming_method(self._stub, error=True) - - self._verify_error_records("/GRPCTestServer/ClientStreamingMethod") - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - def test_error_unary_stream(self): - with self.assertRaises(grpc.RpcError): - server_streaming_method(self._stub, error=True) - - self._verify_error_records("/GRPCTestServer/ServerStreamingMethod") - - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - def test_error_stream_stream(self): - with self.assertRaises(grpc.RpcError): - bidirectional_streaming_method(self._stub, error=True) - - self._verify_error_records( - "/GRPCTestServer/BidirectionalStreamingMethod" - ) - - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual( - span.status.canonical_code.value, - grpc.StatusCode.INVALID_ARGUMENT.value[0], - ) - - -class TestClientNoMetrics(TestBase): - def setUp(self): - super().setUp() - GrpcInstrumentorClient().instrument() - self.server = create_test_server(25565) - self.server.start() - self.channel = grpc.insecure_channel("localhost:25565") - self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel) - - def tearDown(self): - super().tearDown() - GrpcInstrumentorClient().uninstrument() - self.memory_metrics_exporter.clear() - self.server.stop(None) - - def test_unary_unary(self): - simple_method(self._stub) - spans = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans), 1) - span = spans[0] - - self.assertEqual(span.name, "/GRPCTestServer/SimpleMethod") - self.assertIs(span.kind, trace.SpanKind.CLIENT) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) diff --git a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py deleted file mode 100644 index a41da47ae92..00000000000 --- a/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py +++ /dev/null @@ -1,297 +0,0 @@ -# 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. - -# pylint:disable=unused-argument -# pylint:disable=no-self-use - -import threading -from concurrent import futures - -import grpc - -import opentelemetry.instrumentation.grpc -from opentelemetry import trace -from opentelemetry.instrumentation.grpc import ( - GrpcInstrumentorServer, - server_interceptor, -) -from opentelemetry.instrumentation.grpc.grpcext import intercept_server -from opentelemetry.sdk import trace as trace_sdk -from opentelemetry.test.test_base import TestBase - - -class UnaryUnaryMethodHandler(grpc.RpcMethodHandler): - def __init__(self, handler): - self.request_streaming = False - self.response_streaming = False - self.request_deserializer = None - self.response_serializer = None - self.unary_unary = handler - self.unary_stream = None - self.stream_unary = None - self.stream_stream = None - - -class UnaryUnaryRpcHandler(grpc.GenericRpcHandler): - def __init__(self, handler): - self._unary_unary_handler = handler - - def service(self, handler_call_details): - return UnaryUnaryMethodHandler(self._unary_unary_handler) - - -class TestOpenTelemetryServerInterceptor(TestBase): - def test_instrumentor(self): - def handler(request, context): - return b"" - - grpc_server_instrumentor = GrpcInstrumentorServer() - grpc_server_instrumentor.instrument() - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("test")(b"test") - finally: - server.stop(None) - - spans_list = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans_list), 1) - span = spans_list[0] - self.assertEqual(span.name, "test") - self.assertIs(span.kind, trace.SpanKind.SERVER) - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - grpc_server_instrumentor.uninstrument() - - def test_uninstrument(self): - def handler(request, context): - return b"" - - grpc_server_instrumentor = GrpcInstrumentorServer() - grpc_server_instrumentor.instrument() - grpc_server_instrumentor.uninstrument() - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("test")(b"test") - finally: - server.stop(None) - - spans_list = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans_list), 0) - - def test_create_span(self): - """Check that the interceptor wraps calls with spans server-side.""" - - # Intercept gRPC calls... - interceptor = server_interceptor() - - # No-op RPC handler - def handler(request, context): - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - # FIXME: grpcext interceptor doesn't apply to handlers passed to server - # init, should use intercept_service API instead. - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("")(b"") - finally: - server.stop(None) - - spans_list = self.memory_exporter.get_finished_spans() - self.assertEqual(len(spans_list), 1) - span = spans_list[0] - - self.assertEqual(span.name, "") - self.assertIs(span.kind, trace.SpanKind.SERVER) - - # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.instrumentation.grpc - ) - - def test_span_lifetime(self): - """Check that the span is active for the duration of the call.""" - - interceptor = server_interceptor() - - # To capture the current span at the time the handler is called - active_span_in_handler = None - - def handler(request, context): - nonlocal active_span_in_handler - active_span_in_handler = trace.get_current_span() - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - active_span_before_call = trace.get_current_span() - try: - server.start() - channel.unary_unary("")(b"") - finally: - server.stop(None) - active_span_after_call = trace.get_current_span() - - self.assertEqual(active_span_before_call, trace.INVALID_SPAN) - self.assertEqual(active_span_after_call, trace.INVALID_SPAN) - self.assertIsInstance(active_span_in_handler, trace_sdk.Span) - self.assertIsNone(active_span_in_handler.parent) - - def test_sequential_server_spans(self): - """Check that sequential RPCs get separate server spans.""" - - interceptor = server_interceptor() - - # Capture the currently active span in each thread - active_spans_in_handler = [] - - def handler(request, context): - active_spans_in_handler.append(trace.get_current_span()) - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=1), - options=(("grpc.so_reuseport", 0),), - ) - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - channel.unary_unary("")(b"") - channel.unary_unary("")(b"") - finally: - server.stop(None) - - self.assertEqual(len(active_spans_in_handler), 2) - # pylint:disable=unbalanced-tuple-unpacking - span1, span2 = active_spans_in_handler - # Spans should belong to separate traces, and each should be a root - # span - self.assertNotEqual(span1.context.span_id, span2.context.span_id) - self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) - self.assertIsNone(span1.parent) - self.assertIsNone(span1.parent) - - def test_concurrent_server_spans(self): - """Check that concurrent RPC calls don't interfere with each other. - - This is the same check as test_sequential_server_spans except that the - RPCs are concurrent. Two handlers are invoked at the same time on two - separate threads. Each one should see a different active span and - context. - """ - - interceptor = server_interceptor() - - # Capture the currently active span in each thread - active_spans_in_handler = [] - latch = get_latch(2) - - def handler(request, context): - latch() - active_spans_in_handler.append(trace.get_current_span()) - return b"" - - server = grpc.server( - futures.ThreadPoolExecutor(max_workers=2), - options=(("grpc.so_reuseport", 0),), - ) - server = intercept_server(server, interceptor) - server.add_generic_rpc_handlers((UnaryUnaryRpcHandler(handler),)) - - port = server.add_insecure_port("[::]:0") - channel = grpc.insecure_channel("localhost:{:d}".format(port)) - - try: - server.start() - # Interleave calls so spans are active on each thread at the same - # time - with futures.ThreadPoolExecutor(max_workers=2) as tpe: - f1 = tpe.submit(channel.unary_unary(""), b"") - f2 = tpe.submit(channel.unary_unary(""), b"") - futures.wait((f1, f2)) - finally: - server.stop(None) - - self.assertEqual(len(active_spans_in_handler), 2) - # pylint:disable=unbalanced-tuple-unpacking - span1, span2 = active_spans_in_handler - # Spans should belong to separate traces, and each should be a root - # span - self.assertNotEqual(span1.context.span_id, span2.context.span_id) - self.assertNotEqual(span1.context.trace_id, span2.context.trace_id) - self.assertIsNone(span1.parent) - self.assertIsNone(span1.parent) - - -def get_latch(num): - """Get a countdown latch function for use in n threads.""" - cv = threading.Condition() - count = 0 - - def countdown_latch(): - """Block until n-1 other threads have called.""" - nonlocal count - cv.acquire() - count += 1 - cv.notify() - cv.release() - cv.acquire() - while count < num: - cv.wait() - cv.release() - - return countdown_latch diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py index 9fca65b0799..857ceb84fe1 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py @@ -35,7 +35,7 @@ "elasticsearch": "opentelemetry-ext-elasticsearch>=0.11b0", "fastapi": "opentelemetry-instrumentation-fastapi>=0.11b0", "flask": "opentelemetry-instrumentation-flask>=0.8b0", - "grpc": "opentelemetry-instrumentation-grpc>=0.8b0", + "grpc": "opentelemetry-ext-grpc>=0.8b0", "jinja2": "opentelemetry-ext-jinja2>=0.8b0", "mysql": "opentelemetry-ext-mysql>=0.8b0", "psycopg2": "opentelemetry-ext-psycopg2>=0.8b0", @@ -63,7 +63,7 @@ "elasticsearch": ("opentelemetry-ext-elasticsearch",), "fastapi": ("opentelemetry-instrumentation-fastapi",), "flask": ("opentelemetry-instrumentation-flask",), - "grpc": ("opentelemetry-instrumentation-grpc",), + "grpc": ("opentelemetry-ext-grpc",), "jinja2": ("opentelemetry-ext-jinja2",), "mysql": ("opentelemetry-ext-mysql",), "psycopg2": ("opentelemetry-ext-psycopg2",), diff --git a/tox.ini b/tox.ini index 10543cde547..6dab08f703a 100644 --- a/tox.ini +++ b/tox.ini @@ -145,7 +145,7 @@ envlist = py3{4,5,6,7,8}-test-core-opentracing-shim pypy3-test-core-opentracing-shim - ; opentelemetry-instrumentation-grpc + ; opentelemetry-ext-grpc py3{5,6,7,8}-test-instrumentation-grpc ; opentelemetry-ext-sqlalchemy @@ -210,7 +210,7 @@ changedir = test-instrumentation-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests test-instrumentation-fastapi: instrumentation/opentelemetry-instrumentation-fastapi/tests test-instrumentation-flask: instrumentation/opentelemetry-instrumentation-flask/tests - test-instrumentation-grpc: instrumentation/opentelemetry-instrumentation-grpc/tests + test-instrumentation-grpc: ext/opentelemetry-ext-grpc/tests test-instrumentation-jinja2: ext/opentelemetry-ext-jinja2/tests test-instrumentation-mysql: ext/opentelemetry-ext-mysql/tests test-instrumentation-psycopg2: ext/opentelemetry-ext-psycopg2/tests @@ -249,7 +249,7 @@ commands_pre = celery: pip install {toxinidir}/ext/opentelemetry-ext-celery[test] - grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test] + grpc: pip install {toxinidir}/ext/opentelemetry-ext-grpc[test] wsgi,flask,django,pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi asgi,starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi From 9f1f98780660fe809f6c9b7a377d73be7bc8e2cd Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 14:34:53 -0700 Subject: [PATCH 28/35] lint --- .../tests/test_client_interceptor.py | 20 +++++-------------- .../tests/test_server_interceptor.py | 8 ++------ 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py index 6af94808f66..a668f05ca79 100644 --- a/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py +++ b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py @@ -107,9 +107,7 @@ def test_unary_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.ext.grpc - ) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) self._verify_success_records(8, 8, "/GRPCTestServer/SimpleMethod") @@ -123,9 +121,7 @@ def test_unary_stream(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.ext.grpc - ) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) self._verify_success_records( 8, 40, "/GRPCTestServer/ServerStreamingMethod" @@ -141,9 +137,7 @@ def test_stream_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.ext.grpc - ) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) self._verify_success_records( 40, 8, "/GRPCTestServer/ClientStreamingMethod" @@ -161,9 +155,7 @@ def test_stream_stream(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.ext.grpc - ) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) self._verify_success_records( 40, 40, "/GRPCTestServer/BidirectionalStreamingMethod" @@ -293,6 +285,4 @@ def test_unary_unary(self): self.assertIs(span.kind, trace.SpanKind.CLIENT) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.ext.grpc - ) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py index cf2484a4a05..00cfc053eb3 100644 --- a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py +++ b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py @@ -79,9 +79,7 @@ def handler(request, context): span = spans_list[0] self.assertEqual(span.name, "test") self.assertIs(span.kind, trace.SpanKind.SERVER) - self.check_span_instrumentation_info( - span, opentelemetry.ext.grpc - ) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) grpc_server_instrumentor.uninstrument() def test_uninstrument(self): @@ -146,9 +144,7 @@ def handler(request, context): self.assertIs(span.kind, trace.SpanKind.SERVER) # Check version and name in span's instrumentation info - self.check_span_instrumentation_info( - span, opentelemetry.ext.grpc - ) + self.check_span_instrumentation_info(span, opentelemetry.ext.grpc) def test_span_lifetime(self): """Check that the span is active for the duration of the call.""" From 30f6bb458183dff4bf55c1f4741fe7f1804d7202 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 14:53:52 -0700 Subject: [PATCH 29/35] lint --- .../src/opentelemetry/ext/grpc/__init__.py | 7 ++----- .../tests/test_server_interceptor.py | 5 +---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py index e1e3fc6c43c..85e3a4a1dff 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py @@ -124,12 +124,9 @@ def serve(): from wrapt import wrap_function_wrapper as _wrap from opentelemetry import trace -from opentelemetry.ext.grpc.grpcext import ( - intercept_channel, - intercept_server, -) +from opentelemetry.ext.grpc.grpcext import intercept_channel, intercept_server from opentelemetry.ext.grpc.version import __version__ -from opentelemetry.ext.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.ext.utils import unwrap # pylint:disable=import-outside-toplevel diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py index 00cfc053eb3..0ba57a43228 100644 --- a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py +++ b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py @@ -22,10 +22,7 @@ import opentelemetry.ext.grpc from opentelemetry import trace -from opentelemetry.ext.grpc import ( - GrpcInstrumentorServer, - server_interceptor, -) +from opentelemetry.ext.grpc import GrpcInstrumentorServer, server_interceptor from opentelemetry.ext.grpc.grpcext import intercept_server from opentelemetry.sdk import trace as trace_sdk from opentelemetry.test.test_base import TestBase From 65094038c1f7d366e9cba2aa9367ec9474e426bd Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Thu, 30 Jul 2020 15:54:53 -0700 Subject: [PATCH 30/35] utils --- .../src/opentelemetry/ext/grpc/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py index 85e3a4a1dff..1a665662818 100644 --- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py +++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py @@ -127,7 +127,7 @@ def serve(): from opentelemetry.ext.grpc.grpcext import intercept_channel, intercept_server from opentelemetry.ext.grpc.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor -from opentelemetry.ext.utils import unwrap +from opentelemetry.instrumentation.utils import unwrap # pylint:disable=import-outside-toplevel # pylint:disable=import-self From 375720d5ff84876ae6c6d74d4d98bbc39aacf9e3 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 3 Aug 2020 09:45:40 -0700 Subject: [PATCH 31/35] address comments --- ext/opentelemetry-ext-grpc/CHANGELOG.md | 3 --- .../opentelemetry-instrumentation-aiopg/README.rst | 2 +- .../opentelemetry-instrumentation-django/README.rst | 2 +- .../opentelemetry-instrumentation-flask/README.rst | 2 +- .../opentelemetry-instrumentation-pyramid/README.rst | 6 +++--- .../opentelemetry-instrumentation-requests/README.rst | 6 +++--- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md index 67cae481c8e..5f272a80f8a 100644 --- a/ext/opentelemetry-ext-grpc/CHANGELOG.md +++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md @@ -2,9 +2,6 @@ ## Unreleased -- Change package name to opentelemetry-ext-grpc - ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961)) - ## Version 0.11b0 Released 2020-07-28 diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/README.rst b/instrumentation/opentelemetry-instrumentation-aiopg/README.rst index b7443898a4c..f7a66579dfc 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/README.rst +++ b/instrumentation/opentelemetry-instrumentation-aiopg/README.rst @@ -17,5 +17,5 @@ Installation References ---------- -* `OpenTelemetry aiopg instrumentation `_ +* `OpenTelemetry aiopg Instrumentation `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-django/README.rst b/instrumentation/opentelemetry-instrumentation-django/README.rst index cbc586ae10a..5cb570c7e9f 100644 --- a/instrumentation/opentelemetry-instrumentation-django/README.rst +++ b/instrumentation/opentelemetry-instrumentation-django/README.rst @@ -34,5 +34,5 @@ References ---------- * `Django `_ -* `OpenTelemetry Django Tracing `_ +* `OpenTelemetry Instrumentation for Django `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-flask/README.rst b/instrumentation/opentelemetry-instrumentation-flask/README.rst index f349a1d179a..f79d8fd6041 100644 --- a/instrumentation/opentelemetry-instrumentation-flask/README.rst +++ b/instrumentation/opentelemetry-instrumentation-flask/README.rst @@ -34,5 +34,5 @@ will exclude requests such as ``https://site/client/123/info`` and ``https://sit References ---------- -* `OpenTelemetry Flask Tracing `_ +* `OpenTelemetry Flask Instrumentation `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/README.rst b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst index a2176c2412a..931486773ae 100644 --- a/instrumentation/opentelemetry-instrumentation-pyramid/README.rst +++ b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst @@ -1,5 +1,5 @@ -OpenTelemetry Pyramid Integration -================================= +OpenTelemetry Pyramid Instrumentation +===================================== |pypi| @@ -27,6 +27,6 @@ will exclude requests such as ``https://site/client/123/info`` and ``https://sit References ---------- -* `OpenTelemetry Pyramid Integration `_ +* `OpenTelemetry Pyramid Instrumentation `_ * `OpenTelemetry Project `_ diff --git a/instrumentation/opentelemetry-instrumentation-requests/README.rst b/instrumentation/opentelemetry-instrumentation-requests/README.rst index e189426e7ed..d4944d35268 100644 --- a/instrumentation/opentelemetry-instrumentation-requests/README.rst +++ b/instrumentation/opentelemetry-instrumentation-requests/README.rst @@ -1,5 +1,5 @@ -OpenTelemetry requests Integration -================================== +OpenTelemetry Requests Instrumentation +====================================== |pypi| @@ -19,5 +19,5 @@ Installation References ---------- -* `OpenTelemetry requests Integration `_ +* `OpenTelemetry requests Instrumentation `_ * `OpenTelemetry Project `_ From 99980bf2b2498b37aac7587f35a6d89ca38d38d1 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 3 Aug 2020 10:46:44 -0700 Subject: [PATCH 32/35] rename --- docs/ext/asyncpg/asyncpg.rst | 10 --- docs/ext/dbapi/dbapi.rst | 7 -- docs/ext/mysql/mysql.rst | 7 -- docs/ext/psycopg2/psycopg2.rst | 7 -- docs/ext/pymemcache/pymemcache.rst | 7 -- docs/ext/pymongo/pymongo.rst | 7 -- docs/ext/pymysql/pymysql.rst | 7 -- docs/ext/sqlite3/sqlite3.rst | 7 -- docs/instrumentation/asyncpg/asyncpg.rst | 10 +++ docs/instrumentation/dbapi/dbapi.rst | 7 ++ docs/instrumentation/mysql/mysql.rst | 7 ++ docs/instrumentation/psycopg2/psycopg2.rst | 7 ++ .../instrumentation/pymemcache/pymemcache.rst | 7 ++ docs/instrumentation/pymongo/pymongo.rst | 7 ++ docs/instrumentation/pymysql/pymysql.rst | 7 ++ docs/{ext => instrumentation}/redis/redis.rst | 2 +- .../sqlalchemy/sqlalchemy.rst | 2 +- docs/instrumentation/sqlite3/sqlite3.rst | 7 ++ eachdist.ini | 2 +- .../exporter/datadog/exporter.py | 16 ++-- .../tests/test_datadog_exporter.py | 14 ++-- ext/opentelemetry-ext-asyncpg/README.rst | 23 ------ ext/opentelemetry-ext-dbapi/README.rst | 21 ----- .../tests/asyncpg/test_asyncpg_functional.py | 2 +- .../tests/mysql/test_mysql_functional.py | 2 +- .../tests/redis/test_redis_functional.py | 2 +- ext/opentelemetry-ext-mysql/README.rst | 25 ------ ext/opentelemetry-ext-psycopg2/README.rst | 20 ----- ext/opentelemetry-ext-pymemcache/CHANGELOG.md | 9 --- ext/opentelemetry-ext-pymemcache/README.rst | 20 ----- ext/opentelemetry-ext-pymongo/README.rst | 21 ----- ext/opentelemetry-ext-pymongo/setup.py | 26 ------- ext/opentelemetry-ext-pymysql/CHANGELOG.md | 9 --- ext/opentelemetry-ext-pymysql/README.rst | 20 ----- ext/opentelemetry-ext-pymysql/setup.py | 26 ------- ext/opentelemetry-ext-redis/CHANGELOG.md | 9 --- ext/opentelemetry-ext-redis/README.rst | 23 ------ ext/opentelemetry-ext-redis/setup.py | 26 ------- ext/opentelemetry-ext-sqlalchemy/CHANGELOG.md | 9 --- ext/opentelemetry-ext-sqlalchemy/README.rst | 24 ------ ext/opentelemetry-ext-sqlalchemy/setup.py | 26 ------- ext/opentelemetry-ext-sqlite3/CHANGELOG.md | 9 --- ext/opentelemetry-ext-sqlite3/README.rst | 21 ----- ext/opentelemetry-ext-sqlite3/setup.py | 26 ------- .../setup.cfg | 2 +- .../aiopg/aiopg_integration.py | 2 +- .../CHANGELOG.md | 3 + .../README.rst | 23 ++++++ .../setup.cfg | 6 +- .../setup.py | 2 +- .../instrumentation}/asyncpg/__init__.py | 4 +- .../instrumentation}/asyncpg/version.py | 0 .../tests/__init__.py | 0 .../tests/test_asyncpg_wrapper.py | 2 +- .../CHANGELOG.md | 3 + .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 21 +++++ .../setup.cfg | 6 +- .../setup.py | 2 +- .../instrumentation}/dbapi/__init__.py | 4 +- .../instrumentation}/dbapi/version.py | 0 .../tests/__init__.py | 0 .../tests/test_dbapi_integration.py | 4 +- .../CHANGELOG.md | 3 + .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 25 ++++++ .../setup.cfg | 10 +-- .../setup.py | 2 +- .../instrumentation}/mysql/__init__.py | 6 +- .../instrumentation}/mysql/version.py | 0 .../tests/__init__.py | 0 .../tests/test_mysql_integration.py | 6 +- .../CHANGELOG.md | 3 + .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 20 +++++ .../setup.cfg | 10 +-- .../setup.py | 26 +++++++ .../instrumentation}/psycopg2/__init__.py | 0 .../instrumentation}/psycopg2/version.py | 0 .../tests/__init__.py | 0 .../tests/test_psycopg2_integration.py | 0 .../CHANGELOG.md | 12 +++ .../LICENSE | 0 .../MANIFEST.IN | 0 .../README.rst | 20 +++++ .../setup.cfg | 8 +- .../setup.py | 2 +- .../instrumentation}/pymemcache/__init__.py | 0 .../instrumentation}/pymemcache/version.py | 0 .../tests/__init__.py | 0 .../tests/test_pymemcache.py | 0 .../tests/utils.py | 0 .../CHANGELOG.md | 3 + .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 21 +++++ .../setup.cfg | 8 +- .../setup.py | 26 +++++++ .../instrumentation}/pymongo/__init__.py | 0 .../instrumentation}/pymongo/version.py | 0 .../tests/__init__.py | 0 .../tests/test_pymongo.py | 0 .../CHANGELOG.md | 12 +++ .../README.rst | 20 +++++ .../setup.cfg | 10 +-- .../setup.py | 26 +++++++ .../instrumentation}/pymysql/__init__.py | 0 .../instrumentation}/pymysql/version.py | 0 .../tests/__init__.py | 0 .../tests/test_pymysql_integration.py | 0 .../CHANGELOG.md | 12 +++ .../MANIFEST.in | 0 .../README.rst | 23 ++++++ .../setup.cfg | 8 +- .../setup.py | 2 +- .../instrumentation}/redis/__init__.py | 6 +- .../instrumentation}/redis/util.py | 0 .../instrumentation}/redis/version.py | 0 .../tests/__init__.py | 0 .../tests/test_redis.py | 2 +- .../CHANGELOG.md | 12 +++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 24 ++++++ .../setup.cfg | 8 +- .../setup.py | 26 +++++++ .../instrumentation}/sqlalchemy/__init__.py | 0 .../instrumentation}/sqlalchemy/engine.py | 0 .../instrumentation}/sqlalchemy/version.py | 0 .../tests/__init__.py | 0 .../tests/test_sqlalchemy.py | 0 .../CHANGELOG.md | 12 +++ .../LICENSE | 0 .../MANIFEST.in | 0 .../README.rst | 21 +++++ .../setup.cfg | 10 +-- .../setup.py | 26 +++++++ .../instrumentation}/sqlite3/__init__.py | 0 .../instrumentation}/sqlite3/version.py | 0 .../tests/__init__.py | 0 .../tests/test_sqlite3.py | 0 .../instrumentation/bootstrap.py | 40 +++++----- tox.ini | 76 +++++++++---------- 146 files changed, 627 insertions(+), 597 deletions(-) delete mode 100644 docs/ext/asyncpg/asyncpg.rst delete mode 100644 docs/ext/dbapi/dbapi.rst delete mode 100644 docs/ext/mysql/mysql.rst delete mode 100644 docs/ext/psycopg2/psycopg2.rst delete mode 100644 docs/ext/pymemcache/pymemcache.rst delete mode 100644 docs/ext/pymongo/pymongo.rst delete mode 100644 docs/ext/pymysql/pymysql.rst delete mode 100644 docs/ext/sqlite3/sqlite3.rst create mode 100644 docs/instrumentation/asyncpg/asyncpg.rst create mode 100644 docs/instrumentation/dbapi/dbapi.rst create mode 100644 docs/instrumentation/mysql/mysql.rst create mode 100644 docs/instrumentation/psycopg2/psycopg2.rst create mode 100644 docs/instrumentation/pymemcache/pymemcache.rst create mode 100644 docs/instrumentation/pymongo/pymongo.rst create mode 100644 docs/instrumentation/pymysql/pymysql.rst rename docs/{ext => instrumentation}/redis/redis.rst (71%) rename docs/{ext => instrumentation}/sqlalchemy/sqlalchemy.rst (71%) create mode 100644 docs/instrumentation/sqlite3/sqlite3.rst delete mode 100644 ext/opentelemetry-ext-asyncpg/README.rst delete mode 100644 ext/opentelemetry-ext-dbapi/README.rst delete mode 100644 ext/opentelemetry-ext-mysql/README.rst delete mode 100644 ext/opentelemetry-ext-psycopg2/README.rst delete mode 100644 ext/opentelemetry-ext-pymemcache/CHANGELOG.md delete mode 100644 ext/opentelemetry-ext-pymemcache/README.rst delete mode 100644 ext/opentelemetry-ext-pymongo/README.rst delete mode 100644 ext/opentelemetry-ext-pymongo/setup.py delete mode 100644 ext/opentelemetry-ext-pymysql/CHANGELOG.md delete mode 100644 ext/opentelemetry-ext-pymysql/README.rst delete mode 100644 ext/opentelemetry-ext-pymysql/setup.py delete mode 100644 ext/opentelemetry-ext-redis/CHANGELOG.md delete mode 100644 ext/opentelemetry-ext-redis/README.rst delete mode 100644 ext/opentelemetry-ext-redis/setup.py delete mode 100644 ext/opentelemetry-ext-sqlalchemy/CHANGELOG.md delete mode 100644 ext/opentelemetry-ext-sqlalchemy/README.rst delete mode 100644 ext/opentelemetry-ext-sqlalchemy/setup.py delete mode 100644 ext/opentelemetry-ext-sqlite3/CHANGELOG.md delete mode 100644 ext/opentelemetry-ext-sqlite3/README.rst delete mode 100644 ext/opentelemetry-ext-sqlite3/setup.py rename {ext/opentelemetry-ext-asyncpg => instrumentation/opentelemetry-instrumentation-asyncpg}/CHANGELOG.md (69%) create mode 100644 instrumentation/opentelemetry-instrumentation-asyncpg/README.rst rename {ext/opentelemetry-ext-asyncpg => instrumentation/opentelemetry-instrumentation-asyncpg}/setup.cfg (87%) rename {ext/opentelemetry-ext-dbapi => instrumentation/opentelemetry-instrumentation-asyncpg}/setup.py (91%) rename {ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation}/asyncpg/__init__.py (96%) rename {ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation}/asyncpg/version.py (100%) rename {ext/opentelemetry-ext-asyncpg => instrumentation/opentelemetry-instrumentation-asyncpg}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-asyncpg => instrumentation/opentelemetry-instrumentation-asyncpg}/tests/test_asyncpg_wrapper.py (94%) rename {ext/opentelemetry-ext-dbapi => instrumentation/opentelemetry-instrumentation-dbapi}/CHANGELOG.md (63%) rename {ext/opentelemetry-ext-dbapi => instrumentation/opentelemetry-instrumentation-dbapi}/LICENSE (100%) rename {ext/opentelemetry-ext-dbapi => instrumentation/opentelemetry-instrumentation-dbapi}/MANIFEST.in (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-dbapi/README.rst rename {ext/opentelemetry-ext-dbapi => instrumentation/opentelemetry-instrumentation-dbapi}/setup.cfg (90%) rename {ext/opentelemetry-ext-psycopg2 => instrumentation/opentelemetry-instrumentation-dbapi}/setup.py (91%) rename {ext/opentelemetry-ext-dbapi/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation}/dbapi/__init__.py (98%) rename {ext/opentelemetry-ext-dbapi/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation}/dbapi/version.py (100%) rename {ext/opentelemetry-ext-dbapi => instrumentation/opentelemetry-instrumentation-dbapi}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-dbapi => instrumentation/opentelemetry-instrumentation-dbapi}/tests/test_dbapi_integration.py (98%) rename {ext/opentelemetry-ext-mysql => instrumentation/opentelemetry-instrumentation-mysql}/CHANGELOG.md (73%) rename {ext/opentelemetry-ext-mysql => instrumentation/opentelemetry-instrumentation-mysql}/LICENSE (100%) rename {ext/opentelemetry-ext-mysql => instrumentation/opentelemetry-instrumentation-mysql}/MANIFEST.in (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-mysql/README.rst rename {ext/opentelemetry-ext-mysql => instrumentation/opentelemetry-instrumentation-mysql}/setup.cfg (86%) rename {ext/opentelemetry-ext-mysql => instrumentation/opentelemetry-instrumentation-mysql}/setup.py (91%) rename {ext/opentelemetry-ext-mysql/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation}/mysql/__init__.py (94%) rename {ext/opentelemetry-ext-mysql/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation}/mysql/version.py (100%) rename {ext/opentelemetry-ext-mysql => instrumentation/opentelemetry-instrumentation-mysql}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-mysql => instrumentation/opentelemetry-instrumentation-mysql}/tests/test_mysql_integration.py (96%) rename {ext/opentelemetry-ext-psycopg2 => instrumentation/opentelemetry-instrumentation-psycopg2}/CHANGELOG.md (63%) rename {ext/opentelemetry-ext-psycopg2 => instrumentation/opentelemetry-instrumentation-psycopg2}/LICENSE (100%) rename {ext/opentelemetry-ext-psycopg2 => instrumentation/opentelemetry-instrumentation-psycopg2}/MANIFEST.in (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-psycopg2/README.rst rename {ext/opentelemetry-ext-psycopg2 => instrumentation/opentelemetry-instrumentation-psycopg2}/setup.cfg (85%) create mode 100644 instrumentation/opentelemetry-instrumentation-psycopg2/setup.py rename {ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation}/psycopg2/__init__.py (100%) rename {ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation}/psycopg2/version.py (100%) rename {ext/opentelemetry-ext-psycopg2 => instrumentation/opentelemetry-instrumentation-psycopg2}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-psycopg2 => instrumentation/opentelemetry-instrumentation-psycopg2}/tests/test_psycopg2_integration.py (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md rename {ext/opentelemetry-ext-pymemcache => instrumentation/opentelemetry-instrumentation-pymemcache}/LICENSE (100%) rename {ext/opentelemetry-ext-pymemcache => instrumentation/opentelemetry-instrumentation-pymemcache}/MANIFEST.IN (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-pymemcache/README.rst rename {ext/opentelemetry-ext-pymemcache => instrumentation/opentelemetry-instrumentation-pymemcache}/setup.cfg (84%) rename {ext/opentelemetry-ext-pymemcache => instrumentation/opentelemetry-instrumentation-pymemcache}/setup.py (90%) rename {ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation}/pymemcache/__init__.py (100%) rename {ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation}/pymemcache/version.py (100%) rename {ext/opentelemetry-ext-pymemcache => instrumentation/opentelemetry-instrumentation-pymemcache}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-pymemcache => instrumentation/opentelemetry-instrumentation-pymemcache}/tests/test_pymemcache.py (100%) rename {ext/opentelemetry-ext-pymemcache => instrumentation/opentelemetry-instrumentation-pymemcache}/tests/utils.py (100%) rename {ext/opentelemetry-ext-pymongo => instrumentation/opentelemetry-instrumentation-pymongo}/CHANGELOG.md (72%) rename {ext/opentelemetry-ext-pymongo => instrumentation/opentelemetry-instrumentation-pymongo}/LICENSE (100%) rename {ext/opentelemetry-ext-pymongo => instrumentation/opentelemetry-instrumentation-pymongo}/MANIFEST.in (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-pymongo/README.rst rename {ext/opentelemetry-ext-pymongo => instrumentation/opentelemetry-instrumentation-pymongo}/setup.cfg (87%) create mode 100644 instrumentation/opentelemetry-instrumentation-pymongo/setup.py rename {ext/opentelemetry-ext-pymongo/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation}/pymongo/__init__.py (100%) rename {ext/opentelemetry-ext-pymongo/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation}/pymongo/version.py (100%) rename {ext/opentelemetry-ext-pymongo => instrumentation/opentelemetry-instrumentation-pymongo}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-pymongo => instrumentation/opentelemetry-instrumentation-pymongo}/tests/test_pymongo.py (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md create mode 100644 instrumentation/opentelemetry-instrumentation-pymysql/README.rst rename {ext/opentelemetry-ext-pymysql => instrumentation/opentelemetry-instrumentation-pymysql}/setup.cfg (85%) create mode 100644 instrumentation/opentelemetry-instrumentation-pymysql/setup.py rename {ext/opentelemetry-ext-pymysql/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation}/pymysql/__init__.py (100%) rename {ext/opentelemetry-ext-pymysql/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation}/pymysql/version.py (100%) rename {ext/opentelemetry-ext-pymysql => instrumentation/opentelemetry-instrumentation-pymysql}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-pymysql => instrumentation/opentelemetry-instrumentation-pymysql}/tests/test_pymysql_integration.py (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md rename {ext/opentelemetry-ext-redis => instrumentation/opentelemetry-instrumentation-redis}/MANIFEST.in (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-redis/README.rst rename {ext/opentelemetry-ext-redis => instrumentation/opentelemetry-instrumentation-redis}/setup.cfg (88%) rename {ext/opentelemetry-ext-asyncpg => instrumentation/opentelemetry-instrumentation-redis}/setup.py (91%) rename {ext/opentelemetry-ext-redis/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation}/redis/__init__.py (96%) rename {ext/opentelemetry-ext-redis/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation}/redis/util.py (100%) rename {ext/opentelemetry-ext-redis/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation}/redis/version.py (100%) rename {ext/opentelemetry-ext-redis => instrumentation/opentelemetry-instrumentation-redis}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-redis => instrumentation/opentelemetry-instrumentation-redis}/tests/test_redis.py (96%) create mode 100644 instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md rename {ext/opentelemetry-ext-sqlalchemy => instrumentation/opentelemetry-instrumentation-sqlalchemy}/LICENSE (100%) rename {ext/opentelemetry-ext-sqlalchemy => instrumentation/opentelemetry-instrumentation-sqlalchemy}/MANIFEST.in (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-sqlalchemy/README.rst rename {ext/opentelemetry-ext-sqlalchemy => instrumentation/opentelemetry-instrumentation-sqlalchemy}/setup.cfg (87%) create mode 100644 instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py rename {ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation}/sqlalchemy/__init__.py (100%) rename {ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation}/sqlalchemy/engine.py (100%) rename {ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation}/sqlalchemy/version.py (100%) rename {ext/opentelemetry-ext-sqlalchemy => instrumentation/opentelemetry-instrumentation-sqlalchemy}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-sqlalchemy => instrumentation/opentelemetry-instrumentation-sqlalchemy}/tests/test_sqlalchemy.py (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md rename {ext/opentelemetry-ext-sqlite3 => instrumentation/opentelemetry-instrumentation-sqlite3}/LICENSE (100%) rename {ext/opentelemetry-ext-sqlite3 => instrumentation/opentelemetry-instrumentation-sqlite3}/MANIFEST.in (100%) create mode 100644 instrumentation/opentelemetry-instrumentation-sqlite3/README.rst rename {ext/opentelemetry-ext-sqlite3 => instrumentation/opentelemetry-instrumentation-sqlite3}/setup.cfg (85%) create mode 100644 instrumentation/opentelemetry-instrumentation-sqlite3/setup.py rename {ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation}/sqlite3/__init__.py (100%) rename {ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation}/sqlite3/version.py (100%) rename {ext/opentelemetry-ext-sqlite3 => instrumentation/opentelemetry-instrumentation-sqlite3}/tests/__init__.py (100%) rename {ext/opentelemetry-ext-sqlite3 => instrumentation/opentelemetry-instrumentation-sqlite3}/tests/test_sqlite3.py (100%) diff --git a/docs/ext/asyncpg/asyncpg.rst b/docs/ext/asyncpg/asyncpg.rst deleted file mode 100644 index 3a4a9b3c4e9..00000000000 --- a/docs/ext/asyncpg/asyncpg.rst +++ /dev/null @@ -1,10 +0,0 @@ -opentelemetry.ext.asyncpg package -================================= - -Module contents ---------------- - -.. automodule:: opentelemetry.ext.asyncpg - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/ext/dbapi/dbapi.rst b/docs/ext/dbapi/dbapi.rst deleted file mode 100644 index d87d968b4bc..00000000000 --- a/docs/ext/dbapi/dbapi.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry Database API Integration -====================================== - -.. automodule:: opentelemetry.ext.dbapi - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/ext/mysql/mysql.rst b/docs/ext/mysql/mysql.rst deleted file mode 100644 index 4fd47497317..00000000000 --- a/docs/ext/mysql/mysql.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry MySQL Integration -=============================== - -.. automodule:: opentelemetry.ext.mysql - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/ext/psycopg2/psycopg2.rst b/docs/ext/psycopg2/psycopg2.rst deleted file mode 100644 index c9c00375468..00000000000 --- a/docs/ext/psycopg2/psycopg2.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry Psycopg Integration -================================= - -.. automodule:: opentelemetry.ext.psycopg2 - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/ext/pymemcache/pymemcache.rst b/docs/ext/pymemcache/pymemcache.rst deleted file mode 100644 index c64e00cb591..00000000000 --- a/docs/ext/pymemcache/pymemcache.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry pymemcache Integration -==================================== - -.. automodule:: opentelemetry.ext.pymemcache - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/ext/pymongo/pymongo.rst b/docs/ext/pymongo/pymongo.rst deleted file mode 100644 index e75f4f4168f..00000000000 --- a/docs/ext/pymongo/pymongo.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry pymongo Integration -================================= - -.. automodule:: opentelemetry.ext.pymongo - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/ext/pymysql/pymysql.rst b/docs/ext/pymysql/pymysql.rst deleted file mode 100644 index 23dca80c4f2..00000000000 --- a/docs/ext/pymysql/pymysql.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry PyMySQL Integration -================================= - -.. automodule:: opentelemetry.ext.pymysql - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/ext/sqlite3/sqlite3.rst b/docs/ext/sqlite3/sqlite3.rst deleted file mode 100644 index 9537ff58bfe..00000000000 --- a/docs/ext/sqlite3/sqlite3.rst +++ /dev/null @@ -1,7 +0,0 @@ -OpenTelemetry SQLite3 Integration -================================= - -.. automodule:: opentelemetry.ext.sqlite3 - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/instrumentation/asyncpg/asyncpg.rst b/docs/instrumentation/asyncpg/asyncpg.rst new file mode 100644 index 00000000000..745e83f51d0 --- /dev/null +++ b/docs/instrumentation/asyncpg/asyncpg.rst @@ -0,0 +1,10 @@ +Opentelemetry asyncpg Instrumentation +===================================== + +Module contents +--------------- + +.. automodule:: opentelemetry.instrumentation.asyncpg + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/instrumentation/dbapi/dbapi.rst b/docs/instrumentation/dbapi/dbapi.rst new file mode 100644 index 00000000000..a20be630971 --- /dev/null +++ b/docs/instrumentation/dbapi/dbapi.rst @@ -0,0 +1,7 @@ +OpenTelemetry Database API Instrumentation +========================================== + +.. automodule:: opentelemetry.instrumentation.dbapi + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/instrumentation/mysql/mysql.rst b/docs/instrumentation/mysql/mysql.rst new file mode 100644 index 00000000000..3a4a41542aa --- /dev/null +++ b/docs/instrumentation/mysql/mysql.rst @@ -0,0 +1,7 @@ +OpenTelemetry MySQL Instrumentation +=================================== + +.. automodule:: opentelemetry.instrumentation.mysql + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/instrumentation/psycopg2/psycopg2.rst b/docs/instrumentation/psycopg2/psycopg2.rst new file mode 100644 index 00000000000..69be31b2d1a --- /dev/null +++ b/docs/instrumentation/psycopg2/psycopg2.rst @@ -0,0 +1,7 @@ +OpenTelemetry Psycopg Instrumentation +===================================== + +.. automodule:: opentelemetry.instrumentation.psycopg2 + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/instrumentation/pymemcache/pymemcache.rst b/docs/instrumentation/pymemcache/pymemcache.rst new file mode 100644 index 00000000000..2a77b829d97 --- /dev/null +++ b/docs/instrumentation/pymemcache/pymemcache.rst @@ -0,0 +1,7 @@ +OpenTelemetry pymemcache Instrumentation +======================================== + +.. automodule:: opentelemetry.instrumentation.pymemcache + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/instrumentation/pymongo/pymongo.rst b/docs/instrumentation/pymongo/pymongo.rst new file mode 100644 index 00000000000..4eb68be27ba --- /dev/null +++ b/docs/instrumentation/pymongo/pymongo.rst @@ -0,0 +1,7 @@ +OpenTelemetry pymongo Instrumentation +===================================== + +.. automodule:: opentelemetry.instrumentation.pymongo + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/instrumentation/pymysql/pymysql.rst b/docs/instrumentation/pymysql/pymysql.rst new file mode 100644 index 00000000000..26482292fe3 --- /dev/null +++ b/docs/instrumentation/pymysql/pymysql.rst @@ -0,0 +1,7 @@ +OpenTelemetry PyMySQL Instrumentation +===================================== + +.. automodule:: opentelemetry.instrumentation.pymysql + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/ext/redis/redis.rst b/docs/instrumentation/redis/redis.rst similarity index 71% rename from docs/ext/redis/redis.rst rename to docs/instrumentation/redis/redis.rst index 38a72ad52fc..4e21bce24b9 100644 --- a/docs/ext/redis/redis.rst +++ b/docs/instrumentation/redis/redis.rst @@ -1,7 +1,7 @@ OpenTelemetry Redis Instrumentation =================================== -.. automodule:: opentelemetry.ext.redis +.. automodule:: opentelemetry.instrumentation.redis :members: :undoc-members: :show-inheritance: diff --git a/docs/ext/sqlalchemy/sqlalchemy.rst b/docs/instrumentation/sqlalchemy/sqlalchemy.rst similarity index 71% rename from docs/ext/sqlalchemy/sqlalchemy.rst rename to docs/instrumentation/sqlalchemy/sqlalchemy.rst index 5a3afbb3bb3..1a1895ea6be 100644 --- a/docs/ext/sqlalchemy/sqlalchemy.rst +++ b/docs/instrumentation/sqlalchemy/sqlalchemy.rst @@ -1,7 +1,7 @@ OpenTelemetry SQLAlchemy Instrumentation ======================================== -.. automodule:: opentelemetry.ext.sqlalchemy +.. automodule:: opentelemetry.instrumentation.sqlalchemy :members: :undoc-members: :show-inheritance: diff --git a/docs/instrumentation/sqlite3/sqlite3.rst b/docs/instrumentation/sqlite3/sqlite3.rst new file mode 100644 index 00000000000..36b541ccd1c --- /dev/null +++ b/docs/instrumentation/sqlite3/sqlite3.rst @@ -0,0 +1,7 @@ +OpenTelemetry SQLite3 Instrumentation +===================================== + +.. automodule:: opentelemetry.instrumentation.sqlite3 + :members: + :undoc-members: + :show-inheritance: diff --git a/eachdist.ini b/eachdist.ini index 06d940378c2..abf9e620aab 100644 --- a/eachdist.ini +++ b/eachdist.ini @@ -8,7 +8,7 @@ sortfirst= opentelemetry-proto tests/util instrumentation/opentelemetry-instrumentation-wsgi - ext/opentelemetry-ext-dbapi + instrumentation/opentelemetry-instrumentation-dbapi instrumentation/opentelemetry-instrumentation-asgi ext/opentelemetry-ext-botocore instrumentation/* diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py index 785bcccccef..7c94e173f74 100644 --- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py +++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py @@ -34,19 +34,19 @@ _INSTRUMENTATION_SPAN_TYPES = { "opentelemetry.instrumentation.aiohttp-client": DatadogSpanTypes.HTTP, "opentelemetry.instrumentation.asgi": DatadogSpanTypes.WEB, - "opentelemetry.ext.dbapi": DatadogSpanTypes.SQL, + "opentelemetry.instrumentation.dbapi": DatadogSpanTypes.SQL, "opentelemetry.instrumentation.django": DatadogSpanTypes.WEB, "opentelemetry.instrumentation.flask": DatadogSpanTypes.WEB, "opentelemetry.ext.grpc": DatadogSpanTypes.GRPC, "opentelemetry.ext.jinja2": DatadogSpanTypes.TEMPLATE, - "opentelemetry.ext.mysql": DatadogSpanTypes.SQL, - "opentelemetry.ext.psycopg2": DatadogSpanTypes.SQL, - "opentelemetry.ext.pymemcache": DatadogSpanTypes.CACHE, - "opentelemetry.ext.pymongo": DatadogSpanTypes.MONGODB, - "opentelemetry.ext.pymysql": DatadogSpanTypes.SQL, - "opentelemetry.ext.redis": DatadogSpanTypes.REDIS, + "opentelemetry.instrumentation.mysql": DatadogSpanTypes.SQL, + "opentelemetry.instrumentation.psycopg2": DatadogSpanTypes.SQL, + "opentelemetry.instrumentation.pymemcache": DatadogSpanTypes.CACHE, + "opentelemetry.instrumentation.pymongo": DatadogSpanTypes.MONGODB, + "opentelemetry.instrumentation.pymysql": DatadogSpanTypes.SQL, + "opentelemetry.instrumentation.redis": DatadogSpanTypes.REDIS, "opentelemetry.instrumentation.requests": DatadogSpanTypes.HTTP, - "opentelemetry.ext.sqlalchemy": DatadogSpanTypes.SQL, + "opentelemetry.instrumentation.sqlalchemy": DatadogSpanTypes.SQL, "opentelemetry.instrumentation.wsgi": DatadogSpanTypes.WEB, } diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py index cf3c3c72566..4b7d2391bc0 100644 --- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py +++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py @@ -291,18 +291,18 @@ def test_resources(self): def test_span_types(self): test_instrumentations = [ "opentelemetry.instrumentation.aiohttp-client", - "opentelemetry.ext.dbapi", + "opentelemetry.instrumentation.dbapi", "opentelemetry.instrumentation.django", "opentelemetry.instrumentation.flask", "opentelemetry.ext.grpc", "opentelemetry.ext.jinja2", - "opentelemetry.ext.mysql", - "opentelemetry.ext.psycopg2", - "opentelemetry.ext.pymongo", - "opentelemetry.ext.pymysql", - "opentelemetry.ext.redis", + "opentelemetry.instrumentation.mysql", + "opentelemetry.instrumentation.psycopg2", + "opentelemetry.instrumentation.pymongo", + "opentelemetry.instrumentation.pymysql", + "opentelemetry.instrumentation.redis", "opentelemetry.instrumentation.requests", - "opentelemetry.ext.sqlalchemy", + "opentelemetry.instrumentation.sqlalchemy", "opentelemetry.instrumentation.wsgi", ] diff --git a/ext/opentelemetry-ext-asyncpg/README.rst b/ext/opentelemetry-ext-asyncpg/README.rst deleted file mode 100644 index f852bfdbb27..00000000000 --- a/ext/opentelemetry-ext-asyncpg/README.rst +++ /dev/null @@ -1,23 +0,0 @@ -OpenTelemetry asyncpg Integration -================================= - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-asyncpg.svg - :target: https://pypi.org/project/opentelemetry-ext-asyncpg/ - -This library allows tracing PostgreSQL queries made by the -`asyncpg `_ library. - -Installation ------------- - -:: - - pip install opentelemetry-ext-asyncpg - -References ----------- - -* `OpenTelemetry asyncpg Integration `_ -* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-dbapi/README.rst b/ext/opentelemetry-ext-dbapi/README.rst deleted file mode 100644 index 1ff464cb48b..00000000000 --- a/ext/opentelemetry-ext-dbapi/README.rst +++ /dev/null @@ -1,21 +0,0 @@ -OpenTelemetry Database API integration -====================================== - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-dbapi.svg - :target: https://pypi.org/project/opentelemetry-ext-dbapi/ - -Installation ------------- - -:: - - pip install opentelemetry-ext-dbapi - - -References ----------- - -* `OpenTelemetry Database API integration `_ -* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py b/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py index d3060592a64..87382702f2a 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py @@ -3,7 +3,7 @@ import asyncpg -from opentelemetry.ext.asyncpg import AsyncPGInstrumentor +from opentelemetry.instrumentation.asyncpg import AsyncPGInstrumentor from opentelemetry.test.test_base import TestBase from opentelemetry.trace.status import StatusCanonicalCode diff --git a/ext/opentelemetry-ext-docker-tests/tests/mysql/test_mysql_functional.py b/ext/opentelemetry-ext-docker-tests/tests/mysql/test_mysql_functional.py index d1f4c689f94..f2b07293bfc 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/mysql/test_mysql_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/mysql/test_mysql_functional.py @@ -18,7 +18,7 @@ import mysql.connector from opentelemetry import trace as trace_api -from opentelemetry.ext.mysql import MySQLInstrumentor +from opentelemetry.instrumentation.mysql import MySQLInstrumentor from opentelemetry.test.test_base import TestBase MYSQL_USER = os.getenv("MYSQL_USER ", "testuser") diff --git a/ext/opentelemetry-ext-docker-tests/tests/redis/test_redis_functional.py b/ext/opentelemetry-ext-docker-tests/tests/redis/test_redis_functional.py index 45283c442cd..7e6ea2e0446 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/redis/test_redis_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/redis/test_redis_functional.py @@ -15,7 +15,7 @@ import redis from opentelemetry import trace -from opentelemetry.ext.redis import RedisInstrumentor +from opentelemetry.instrumentation.redis import RedisInstrumentor from opentelemetry.test.test_base import TestBase diff --git a/ext/opentelemetry-ext-mysql/README.rst b/ext/opentelemetry-ext-mysql/README.rst deleted file mode 100644 index 0a8577e8675..00000000000 --- a/ext/opentelemetry-ext-mysql/README.rst +++ /dev/null @@ -1,25 +0,0 @@ -OpenTelemetry MySQL Integration -=============================== - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-mysql.svg - :target: https://pypi.org/project/opentelemetry-ext-mysql/ - -Integration with MySQL that supports the mysql-connector library and is -specified to trace_integration using 'MySQL'. - - -Installation ------------- - -:: - - pip install opentelemetry-ext-mysql - - -References ----------- -* `OpenTelemetry MySQL Integration `_ -* `OpenTelemetry Project `_ - diff --git a/ext/opentelemetry-ext-psycopg2/README.rst b/ext/opentelemetry-ext-psycopg2/README.rst deleted file mode 100644 index 18cee0c2b2f..00000000000 --- a/ext/opentelemetry-ext-psycopg2/README.rst +++ /dev/null @@ -1,20 +0,0 @@ -OpenTelemetry Psycopg Integration -================================= - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-psycopg2.svg - :target: https://pypi.org/project/opentelemetry-ext-psycopg2/ - -Installation ------------- - -:: - - pip install opentelemetry-ext-psycopg2 - - -References ----------- -* `OpenTelemetry Psycopg Integration `_ -* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-pymemcache/CHANGELOG.md b/ext/opentelemetry-ext-pymemcache/CHANGELOG.md deleted file mode 100644 index 7425aa5e1ec..00000000000 --- a/ext/opentelemetry-ext-pymemcache/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## Version 0.10b0 - -Released 2020-06-23 - -- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-pymemcache/README.rst b/ext/opentelemetry-ext-pymemcache/README.rst deleted file mode 100644 index 6328ff5f018..00000000000 --- a/ext/opentelemetry-ext-pymemcache/README.rst +++ /dev/null @@ -1,20 +0,0 @@ -OpenTelemetry pymemcache Integration -==================================== - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-pymemcache.svg - :target: https://pypi.org/project/opentelemetry-ext-pymemcache/ - -Installation ------------- - -:: - - pip install opentelemetry-ext-pymemcache - - -References ----------- -* `OpenTelemetry Pymemcache Integration `_ -* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-pymongo/README.rst b/ext/opentelemetry-ext-pymongo/README.rst deleted file mode 100644 index ada56efed94..00000000000 --- a/ext/opentelemetry-ext-pymongo/README.rst +++ /dev/null @@ -1,21 +0,0 @@ -OpenTelemetry pymongo Integration -================================= - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-pymongo.svg - :target: https://pypi.org/project/opentelemetry-ext-pymongo/ - -Installation ------------- - -:: - - pip install opentelemetry-ext-pymongo - - -References ----------- -* `OpenTelemetry pymongo Integration `_ -* `OpenTelemetry Project `_ - diff --git a/ext/opentelemetry-ext-pymongo/setup.py b/ext/opentelemetry-ext-pymongo/setup.py deleted file mode 100644 index 301aded3383..00000000000 --- a/ext/opentelemetry-ext-pymongo/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# 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", "ext", "pymongo", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-pymysql/CHANGELOG.md b/ext/opentelemetry-ext-pymysql/CHANGELOG.md deleted file mode 100644 index 654146fece7..00000000000 --- a/ext/opentelemetry-ext-pymysql/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## 0.7b1 - -Released 2020-05-12 - -- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-pymysql/README.rst b/ext/opentelemetry-ext-pymysql/README.rst deleted file mode 100644 index 455d8fa7bdb..00000000000 --- a/ext/opentelemetry-ext-pymysql/README.rst +++ /dev/null @@ -1,20 +0,0 @@ -OpenTelemetry PyMySQL integration -================================= - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-pymysql.svg - :target: https://pypi.org/project/opentelemetry-ext-pymysql/ - -Installation ------------- - -:: - - pip install opentelemetry-ext-pymysql - - -References ----------- -* `OpenTelemetry PyMySQL Integration `_ -* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-pymysql/setup.py b/ext/opentelemetry-ext-pymysql/setup.py deleted file mode 100644 index a3f057b310b..00000000000 --- a/ext/opentelemetry-ext-pymysql/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# 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", "ext", "pymysql", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-redis/CHANGELOG.md b/ext/opentelemetry-ext-redis/CHANGELOG.md deleted file mode 100644 index 654146fece7..00000000000 --- a/ext/opentelemetry-ext-redis/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## 0.7b1 - -Released 2020-05-12 - -- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-redis/README.rst b/ext/opentelemetry-ext-redis/README.rst deleted file mode 100644 index 49cc95f6b1e..00000000000 --- a/ext/opentelemetry-ext-redis/README.rst +++ /dev/null @@ -1,23 +0,0 @@ -OpenTelemetry Redis Instrumentation -=================================== - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-redis.svg - :target: https://pypi.org/project/opentelemetry-ext-redis/ - -This library allows tracing requests made by the Redis library. - -Installation ------------- - -:: - - pip install opentelemetry-ext-redis - - -References ----------- - -* `OpenTelemetry Redis Instrumentation `_ -* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-redis/setup.py b/ext/opentelemetry-ext-redis/setup.py deleted file mode 100644 index d09847efd81..00000000000 --- a/ext/opentelemetry-ext-redis/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# 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", "ext", "redis", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-sqlalchemy/CHANGELOG.md b/ext/opentelemetry-ext-sqlalchemy/CHANGELOG.md deleted file mode 100644 index 654146fece7..00000000000 --- a/ext/opentelemetry-ext-sqlalchemy/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## 0.7b1 - -Released 2020-05-12 - -- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-sqlalchemy/README.rst b/ext/opentelemetry-ext-sqlalchemy/README.rst deleted file mode 100644 index 2485c96a589..00000000000 --- a/ext/opentelemetry-ext-sqlalchemy/README.rst +++ /dev/null @@ -1,24 +0,0 @@ -OpenTelemetry SQLAlchemy Tracing -================================ - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-sqlalchemy.svg - :target: https://pypi.org/project/opentelemetry-ext-sqlalchemy/ - -This library allows tracing requests made by the SQLAlchemy library. - -Installation ------------- - -:: - - pip install opentelemetry-ext-sqlalchemy - - -References ----------- - -* `SQLAlchemy Project `_ -* `OpenTelemetry SQLAlchemy Tracing `_ -* `OpenTelemetry Project `_ \ No newline at end of file diff --git a/ext/opentelemetry-ext-sqlalchemy/setup.py b/ext/opentelemetry-ext-sqlalchemy/setup.py deleted file mode 100644 index d776a90e828..00000000000 --- a/ext/opentelemetry-ext-sqlalchemy/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# 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", "ext", "sqlalchemy", "version.py", -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-sqlite3/CHANGELOG.md b/ext/opentelemetry-ext-sqlite3/CHANGELOG.md deleted file mode 100644 index c2ac2d3e021..00000000000 --- a/ext/opentelemetry-ext-sqlite3/CHANGELOG.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changelog - -## Unreleased - -## 0.8b0 - -Released 2020-05-27 - -- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-sqlite3/README.rst b/ext/opentelemetry-ext-sqlite3/README.rst deleted file mode 100644 index 3620434b20d..00000000000 --- a/ext/opentelemetry-ext-sqlite3/README.rst +++ /dev/null @@ -1,21 +0,0 @@ -OpenTelemetry SQLite3 Integration -================================= - -|pypi| - -.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-sqlite3.svg - :target: https://pypi.org/project/opentelemetry-ext-sqlite3/ - -Installation ------------- - -:: - - pip install opentelemetry-ext-sqlite3 - - -References ----------- -* `OpenTelemetry SQLite3 Integration `_ -* `OpenTelemetry Project `_ - diff --git a/ext/opentelemetry-ext-sqlite3/setup.py b/ext/opentelemetry-ext-sqlite3/setup.py deleted file mode 100644 index dd89f058db2..00000000000 --- a/ext/opentelemetry-ext-sqlite3/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -# 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", "ext", "sqlite3", "version.py" -) -PACKAGE_INFO = {} -with open(VERSION_FILENAME) as f: - exec(f.read(), PACKAGE_INFO) - -setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg index bd9a06c5248..58c9b38496c 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg @@ -40,7 +40,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 - opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation-dbapi == 0.12.dev0 opentelemetry-instrumentation == 0.12.dev0 aiopg >= 0.13.0 wrapt >= 1.0.0, < 2.0.0 diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py index def4a72c3d1..70bfca03bf7 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py +++ b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py @@ -3,7 +3,7 @@ import wrapt from aiopg.utils import _ContextManager, _PoolAcquireContextManager -from opentelemetry.ext.dbapi import DatabaseApiIntegration, TracedCursor +from opentelemetry.instrumentation.dbapi import DatabaseApiIntegration, TracedCursor from opentelemetry.trace import SpanKind from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md similarity index 69% rename from ext/opentelemetry-ext-asyncpg/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md index 2dc9ad6f044..08464e8cd9f 100644 --- a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-asyncpg + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/README.rst b/instrumentation/opentelemetry-instrumentation-asyncpg/README.rst new file mode 100644 index 00000000000..33c60852cd4 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/README.rst @@ -0,0 +1,23 @@ +OpenTelemetry asyncpg Instrumentation +===================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-asyncpg.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-asyncpg/ + +This library allows tracing PostgreSQL queries made by the +`asyncpg `_ library. + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-asyncpg + +References +---------- + +* `OpenTelemetry asyncpg Instrumentation `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-asyncpg/setup.cfg b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.cfg similarity index 87% rename from ext/opentelemetry-ext-asyncpg/setup.cfg rename to instrumentation/opentelemetry-instrumentation-asyncpg/setup.cfg index bf1670172b4..1cc707df1c0 100644 --- a/ext/opentelemetry-ext-asyncpg/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-asyncpg +name = opentelemetry-instrumentation-asyncpg description = OpenTelemetry instrumentation for AsyncPG long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-asyncpg +url = https://github.com/open-telemetry/opentelemetry-python/instrumentation/opentelemetry-instrumentation-asyncpg platforms = any license = Apache-2.0 classifiers = @@ -52,4 +52,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - asyncpg = opentelemetry.ext.asyncpg:AsyncPGInstrumentor + asyncpg = opentelemetry.instrumentation.asyncpg:AsyncPGInstrumentor diff --git a/ext/opentelemetry-ext-dbapi/setup.py b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.py similarity index 91% rename from ext/opentelemetry-ext-dbapi/setup.py rename to instrumentation/opentelemetry-instrumentation-asyncpg/setup.py index f5c1b3fa814..d7911039fc9 100644 --- a/ext/opentelemetry-ext-dbapi/setup.py +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "dbapi", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "asyncpg", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py similarity index 96% rename from ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py rename to instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py index 4a3a51ac08d..189809809d9 100644 --- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/__init__.py @@ -22,7 +22,7 @@ .. code-block:: python import asyncpg - from opentelemetry.ext.asyncpg import AsyncPGInstrumentor + from opentelemetry.instrumentation.asyncpg import AsyncPGInstrumentor # You can optionally pass a custom TracerProvider to AsyncPGInstrumentor.instrument() AsyncPGInstrumentor().instrument() @@ -39,7 +39,7 @@ from asyncpg import exceptions from opentelemetry import trace -from opentelemetry.ext.asyncpg.version import __version__ +from opentelemetry.instrumentation.asyncpg.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap from opentelemetry.trace import SpanKind diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py similarity index 100% rename from ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py rename to instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py diff --git a/ext/opentelemetry-ext-asyncpg/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-asyncpg/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-asyncpg/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-asyncpg/tests/__init__.py diff --git a/ext/opentelemetry-ext-asyncpg/tests/test_asyncpg_wrapper.py b/instrumentation/opentelemetry-instrumentation-asyncpg/tests/test_asyncpg_wrapper.py similarity index 94% rename from ext/opentelemetry-ext-asyncpg/tests/test_asyncpg_wrapper.py rename to instrumentation/opentelemetry-instrumentation-asyncpg/tests/test_asyncpg_wrapper.py index cd0d8e35f09..33b121ce53a 100644 --- a/ext/opentelemetry-ext-asyncpg/tests/test_asyncpg_wrapper.py +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/tests/test_asyncpg_wrapper.py @@ -1,7 +1,7 @@ import asyncpg from asyncpg import Connection -from opentelemetry.ext.asyncpg import AsyncPGInstrumentor +from opentelemetry.instrumentation.asyncpg import AsyncPGInstrumentor from opentelemetry.test.test_base import TestBase diff --git a/ext/opentelemetry-ext-dbapi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md similarity index 63% rename from ext/opentelemetry-ext-dbapi/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md index 288334d6ba7..c0a38d855f0 100644 --- a/ext/opentelemetry-ext-dbapi/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-dbapi + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.7b1 Released 2020-05-12 diff --git a/ext/opentelemetry-ext-dbapi/LICENSE b/instrumentation/opentelemetry-instrumentation-dbapi/LICENSE similarity index 100% rename from ext/opentelemetry-ext-dbapi/LICENSE rename to instrumentation/opentelemetry-instrumentation-dbapi/LICENSE diff --git a/ext/opentelemetry-ext-dbapi/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-dbapi/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-dbapi/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-dbapi/MANIFEST.in diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/README.rst b/instrumentation/opentelemetry-instrumentation-dbapi/README.rst new file mode 100644 index 00000000000..5137a1c1ff7 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-dbapi/README.rst @@ -0,0 +1,21 @@ +OpenTelemetry Database API instrumentation +========================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-dbapi.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-dbapi/ + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-dbapi + + +References +---------- + +* `OpenTelemetry Database API Instrumentation `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-dbapi/setup.cfg b/instrumentation/opentelemetry-instrumentation-dbapi/setup.cfg similarity index 90% rename from ext/opentelemetry-ext-dbapi/setup.cfg rename to instrumentation/opentelemetry-instrumentation-dbapi/setup.cfg index 34542525dd3..29044f3ba61 100644 --- a/ext/opentelemetry-ext-dbapi/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-dbapi/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-dbapi -description = OpenTelemetry Database API integration +name = opentelemetry-instrumentation-dbapi +description = OpenTelemetry Database API instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-dbapi +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-dbapi platforms = any license = Apache-2.0 classifiers = diff --git a/ext/opentelemetry-ext-psycopg2/setup.py b/instrumentation/opentelemetry-instrumentation-dbapi/setup.py similarity index 91% rename from ext/opentelemetry-ext-psycopg2/setup.py rename to instrumentation/opentelemetry-instrumentation-dbapi/setup.py index df7f7c21288..cfe98f38952 100644 --- a/ext/opentelemetry-ext-psycopg2/setup.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "psycopg2", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "dbapi", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py similarity index 98% rename from ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py rename to instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py index 3838dc1b157..035c823bcfe 100644 --- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/__init__.py @@ -26,7 +26,7 @@ import pyodbc from opentelemetry import trace - from opentelemetry.ext.dbapi import trace_integration + from opentelemetry.instrumentation.dbapi import trace_integration from opentelemetry.trace import TracerProvider trace.set_tracer_provider(TracerProvider()) @@ -47,7 +47,7 @@ import wrapt from opentelemetry import trace as trace_api -from opentelemetry.ext.dbapi.version import __version__ +from opentelemetry.instrumentation.dbapi.version import __version__ from opentelemetry.instrumentation.utils import unwrap from opentelemetry.trace import SpanKind, TracerProvider, get_tracer from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py similarity index 100% rename from ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py rename to instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py diff --git a/ext/opentelemetry-ext-dbapi/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-dbapi/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-dbapi/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-dbapi/tests/__init__.py diff --git a/ext/opentelemetry-ext-dbapi/tests/test_dbapi_integration.py b/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py similarity index 98% rename from ext/opentelemetry-ext-dbapi/tests/test_dbapi_integration.py rename to instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py index a2ba9f7d89d..41cccfedf19 100644 --- a/ext/opentelemetry-ext-dbapi/tests/test_dbapi_integration.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py @@ -120,14 +120,14 @@ def test_callproc(self): span.attributes["db.statement"], "Test stored procedure" ) - @mock.patch("opentelemetry.ext.dbapi") + @mock.patch("opentelemetry.instrumentation.dbapi") def test_wrap_connect(self, mock_dbapi): dbapi.wrap_connect(self.tracer, mock_dbapi, "connect", "-") connection = mock_dbapi.connect() self.assertEqual(mock_dbapi.connect.call_count, 1) self.assertIsInstance(connection.__wrapped__, mock.Mock) - @mock.patch("opentelemetry.ext.dbapi") + @mock.patch("opentelemetry.instrumentation.dbapi") def test_unwrap_connect(self, mock_dbapi): dbapi.wrap_connect(self.tracer, mock_dbapi, "connect", "-") connection = mock_dbapi.connect() diff --git a/ext/opentelemetry-ext-mysql/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md similarity index 73% rename from ext/opentelemetry-ext-mysql/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md index 46b9d327dd3..434a612abc3 100644 --- a/ext/opentelemetry-ext-mysql/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-mysql + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## Version 0.11b0 Released 2020-07-28 diff --git a/ext/opentelemetry-ext-mysql/LICENSE b/instrumentation/opentelemetry-instrumentation-mysql/LICENSE similarity index 100% rename from ext/opentelemetry-ext-mysql/LICENSE rename to instrumentation/opentelemetry-instrumentation-mysql/LICENSE diff --git a/ext/opentelemetry-ext-mysql/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-mysql/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-mysql/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-mysql/MANIFEST.in diff --git a/instrumentation/opentelemetry-instrumentation-mysql/README.rst b/instrumentation/opentelemetry-instrumentation-mysql/README.rst new file mode 100644 index 00000000000..9558f64bd9b --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-mysql/README.rst @@ -0,0 +1,25 @@ +OpenTelemetry MySQL Instrumentation +=================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-mysql.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-mysql/ + +Instrumentation with MySQL that supports the mysql-connector library and is +specified to trace_integration using 'MySQL'. + + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-mysql + + +References +---------- +* `OpenTelemetry MySQL Instrumentation `_ +* `OpenTelemetry Project `_ + diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/instrumentation/opentelemetry-instrumentation-mysql/setup.cfg similarity index 86% rename from ext/opentelemetry-ext-mysql/setup.cfg rename to instrumentation/opentelemetry-instrumentation-mysql/setup.cfg index e114ae1dbea..2242709dab9 100644 --- a/ext/opentelemetry-ext-mysql/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-mysql/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-mysql -description = OpenTelemetry MySQL integration +name = opentelemetry-instrumentation-mysql +description = OpenTelemetry MySQL instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-mysql +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-mysql platforms = any license = Apache-2.0 classifiers = @@ -41,7 +41,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 - opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation-dbapi == 0.12.dev0 opentelemetry-instrumentation == 0.12.dev0 mysql-connector-python ~= 8.0 wrapt >= 1.0.0, < 2.0.0 @@ -55,4 +55,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - mysql = opentelemetry.ext.mysql:MySQLInstrumentor + mysql = opentelemetry.instrumentation.mysql:MySQLInstrumentor diff --git a/ext/opentelemetry-ext-mysql/setup.py b/instrumentation/opentelemetry-instrumentation-mysql/setup.py similarity index 91% rename from ext/opentelemetry-ext-mysql/setup.py rename to instrumentation/opentelemetry-instrumentation-mysql/setup.py index 4ba48fb4040..955f75d71e0 100644 --- a/ext/opentelemetry-ext-mysql/setup.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "mysql", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "mysql", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/__init__.py b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/__init__.py similarity index 94% rename from ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/__init__.py rename to instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/__init__.py index 883a0aa9bb7..36842f8d661 100644 --- a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/__init__.py @@ -26,7 +26,7 @@ import mysql.connector from opentelemetry import trace from opentelemetry.trace import TracerProvider - from opentelemetry.ext.mysql import MySQLInstrumentor + from opentelemetry.instrumentation.mysql import MySQLInstrumentor trace.set_tracer_provider(TracerProvider()) @@ -44,8 +44,8 @@ import mysql.connector -from opentelemetry.ext import dbapi -from opentelemetry.ext.mysql.version import __version__ +from opentelemetry.instrumentation import dbapi +from opentelemetry.instrumentation.mysql.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.trace import get_tracer diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py similarity index 100% rename from ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py rename to instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py diff --git a/ext/opentelemetry-ext-mysql/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-mysql/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-mysql/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-mysql/tests/__init__.py diff --git a/ext/opentelemetry-ext-mysql/tests/test_mysql_integration.py b/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py similarity index 96% rename from ext/opentelemetry-ext-mysql/tests/test_mysql_integration.py rename to instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py index 6a86ef89279..31f5d0a812f 100644 --- a/ext/opentelemetry-ext-mysql/tests/test_mysql_integration.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py @@ -16,8 +16,8 @@ import mysql.connector -import opentelemetry.ext.mysql -from opentelemetry.ext.mysql import MySQLInstrumentor +import opentelemetry.instrumentation.mysql +from opentelemetry.instrumentation.mysql import MySQLInstrumentor from opentelemetry.sdk import resources from opentelemetry.test.test_base import TestBase @@ -43,7 +43,7 @@ def test_instrumentor(self, mock_connect): span = spans_list[0] # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.mysql) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.mysql) # check that no spans are generated after uninstrumen MySQLInstrumentor().uninstrument() diff --git a/ext/opentelemetry-ext-psycopg2/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md similarity index 63% rename from ext/opentelemetry-ext-psycopg2/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md index 2106b425505..c997f239456 100644 --- a/ext/opentelemetry-ext-psycopg2/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-psycopg2 + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.8b0 Released 2020-05-27 diff --git a/ext/opentelemetry-ext-psycopg2/LICENSE b/instrumentation/opentelemetry-instrumentation-psycopg2/LICENSE similarity index 100% rename from ext/opentelemetry-ext-psycopg2/LICENSE rename to instrumentation/opentelemetry-instrumentation-psycopg2/LICENSE diff --git a/ext/opentelemetry-ext-psycopg2/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-psycopg2/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-psycopg2/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-psycopg2/MANIFEST.in diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/README.rst b/instrumentation/opentelemetry-instrumentation-psycopg2/README.rst new file mode 100644 index 00000000000..3ab1025eaef --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/README.rst @@ -0,0 +1,20 @@ +OpenTelemetry Psycopg Instrumentation +===================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-psycopg2.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-psycopg2/ + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-psycopg2 + + +References +---------- +* `OpenTelemetry Psycopg Instrumentation `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.cfg similarity index 85% rename from ext/opentelemetry-ext-psycopg2/setup.cfg rename to instrumentation/opentelemetry-instrumentation-psycopg2/setup.cfg index 73d541cad61..c20693a96c9 100644 --- a/ext/opentelemetry-ext-psycopg2/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-psycopg2 -description = OpenTelemetry psycopg2 integration +name = opentelemetry-instrumentation-psycopg2 +description = OpenTelemetry psycopg2 instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-psycopg2 +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-psycopg2 platforms = any license = Apache-2.0 classifiers = @@ -41,7 +41,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 - opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation-dbapi == 0.12.dev0 opentelemetry-instrumentation == 0.12.dev0 psycopg2-binary >= 2.7.3.1 wrapt >= 1.0.0, < 2.0.0 @@ -55,4 +55,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - psycopg2 = opentelemetry.ext.psycopg2:Psycopg2Instrumentor + psycopg2 = opentelemetry.instrumentation.psycopg2:Psycopg2Instrumentor diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py new file mode 100644 index 00000000000..8f5f2fdb1b3 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py @@ -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", "psycopg2", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/__init__.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py similarity index 100% rename from ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/__init__.py rename to instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py similarity index 100% rename from ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py rename to instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py diff --git a/ext/opentelemetry-ext-psycopg2/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-psycopg2/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-psycopg2/tests/__init__.py diff --git a/ext/opentelemetry-ext-psycopg2/tests/test_psycopg2_integration.py b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py similarity index 100% rename from ext/opentelemetry-ext-psycopg2/tests/test_psycopg2_integration.py rename to instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md new file mode 100644 index 00000000000..c549095d2ee --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-pymemcache + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + +## Version 0.10b0 + +Released 2020-06-23 + +- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-pymemcache/LICENSE b/instrumentation/opentelemetry-instrumentation-pymemcache/LICENSE similarity index 100% rename from ext/opentelemetry-ext-pymemcache/LICENSE rename to instrumentation/opentelemetry-instrumentation-pymemcache/LICENSE diff --git a/ext/opentelemetry-ext-pymemcache/MANIFEST.IN b/instrumentation/opentelemetry-instrumentation-pymemcache/MANIFEST.IN similarity index 100% rename from ext/opentelemetry-ext-pymemcache/MANIFEST.IN rename to instrumentation/opentelemetry-instrumentation-pymemcache/MANIFEST.IN diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/README.rst b/instrumentation/opentelemetry-instrumentation-pymemcache/README.rst new file mode 100644 index 00000000000..f126f4246dc --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/README.rst @@ -0,0 +1,20 @@ +OpenTelemetry pymemcache Instrumentation +======================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-pymemcache.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-pymemcache/ + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-pymemcache + + +References +---------- +* `OpenTelemetry Pymemcache Instrumentation `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.cfg similarity index 84% rename from ext/opentelemetry-ext-pymemcache/setup.cfg rename to instrumentation/opentelemetry-instrumentation-pymemcache/setup.cfg index 798988461c4..aff71c8245c 100644 --- a/ext/opentelemetry-ext-pymemcache/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-pymemcache -description = OpenTelemetry pymemcache integration +name = opentelemetry-instrumentation-pymemcache +description = OpenTelemetry pymemcache instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/ext/opentelemetry-ext-pymemcache +url = https://github.com/open-telemetry/opentelemetry-python/instrumentation/opentelemetry-instrumentation-pymemcache platforms = any license = Apache-2.0 classifiers = @@ -54,4 +54,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - pymemcache = opentelemetry.ext.pymemcache:PymemcacheInstrumentor + pymemcache = opentelemetry.instrumentation.pymemcache:PymemcacheInstrumentor diff --git a/ext/opentelemetry-ext-pymemcache/setup.py b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.py similarity index 90% rename from ext/opentelemetry-ext-pymemcache/setup.py rename to instrumentation/opentelemetry-instrumentation-pymemcache/setup.py index 4b730b4f31e..61183ba67ef 100644 --- a/ext/opentelemetry-ext-pymemcache/setup.py +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.py @@ -18,7 +18,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "pymemcache", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "pymemcache", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/__init__.py b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/__init__.py rename to instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py diff --git a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py similarity index 100% rename from ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py rename to instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py diff --git a/ext/opentelemetry-ext-pymemcache/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-pymemcache/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pymemcache/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-pymemcache/tests/__init__.py diff --git a/ext/opentelemetry-ext-pymemcache/tests/test_pymemcache.py b/instrumentation/opentelemetry-instrumentation-pymemcache/tests/test_pymemcache.py similarity index 100% rename from ext/opentelemetry-ext-pymemcache/tests/test_pymemcache.py rename to instrumentation/opentelemetry-instrumentation-pymemcache/tests/test_pymemcache.py diff --git a/ext/opentelemetry-ext-pymemcache/tests/utils.py b/instrumentation/opentelemetry-instrumentation-pymemcache/tests/utils.py similarity index 100% rename from ext/opentelemetry-ext-pymemcache/tests/utils.py rename to instrumentation/opentelemetry-instrumentation-pymemcache/tests/utils.py diff --git a/ext/opentelemetry-ext-pymongo/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md similarity index 72% rename from ext/opentelemetry-ext-pymongo/CHANGELOG.md rename to instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md index 83a310c143c..59f8e35551c 100644 --- a/ext/opentelemetry-ext-pymongo/CHANGELOG.md +++ b/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md @@ -2,6 +2,9 @@ ## Unreleased +- Change package name to opentelemetry-instrumentation-pymongo + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + ## 0.7b1 Released 2020-05-12 diff --git a/ext/opentelemetry-ext-pymongo/LICENSE b/instrumentation/opentelemetry-instrumentation-pymongo/LICENSE similarity index 100% rename from ext/opentelemetry-ext-pymongo/LICENSE rename to instrumentation/opentelemetry-instrumentation-pymongo/LICENSE diff --git a/ext/opentelemetry-ext-pymongo/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-pymongo/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-pymongo/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-pymongo/MANIFEST.in diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/README.rst b/instrumentation/opentelemetry-instrumentation-pymongo/README.rst new file mode 100644 index 00000000000..7791810e97d --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-pymongo/README.rst @@ -0,0 +1,21 @@ +OpenTelemetry pymongo Instrumentation +===================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-pymongo.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-pymongo/ + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-pymongo + + +References +---------- +* `OpenTelemetry pymongo Instrumentation `_ +* `OpenTelemetry Project `_ + diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/instrumentation/opentelemetry-instrumentation-pymongo/setup.cfg similarity index 87% rename from ext/opentelemetry-ext-pymongo/setup.cfg rename to instrumentation/opentelemetry-instrumentation-pymongo/setup.cfg index 4aae442aa17..a480f05d6f4 100644 --- a/ext/opentelemetry-ext-pymongo/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-pymongo/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-pymongo -description = OpenTelemetry pymongo integration +name = opentelemetry-instrumentation-pymongo +description = OpenTelemetry pymongo instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-pymongo +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-pymongo platforms = any license = Apache-2.0 classifiers = @@ -53,4 +53,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - pymongo = opentelemetry.ext.pymongo:PymongoInstrumentor + pymongo = opentelemetry.instrumentation.pymongo:PymongoInstrumentor diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/setup.py b/instrumentation/opentelemetry-instrumentation-pymongo/setup.py new file mode 100644 index 00000000000..1beced4b094 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-pymongo/setup.py @@ -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", "pymongo", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py rename to instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py similarity index 100% rename from ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py rename to instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py diff --git a/ext/opentelemetry-ext-pymongo/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-pymongo/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pymongo/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-pymongo/tests/__init__.py diff --git a/ext/opentelemetry-ext-pymongo/tests/test_pymongo.py b/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py similarity index 100% rename from ext/opentelemetry-ext-pymongo/tests/test_pymongo.py rename to instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md new file mode 100644 index 00000000000..f9b59fcf7a2 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-pymysql + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + +## 0.7b1 + +Released 2020-05-12 + +- Initial release \ No newline at end of file diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/README.rst b/instrumentation/opentelemetry-instrumentation-pymysql/README.rst new file mode 100644 index 00000000000..0b566d2a94c --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-pymysql/README.rst @@ -0,0 +1,20 @@ +OpenTelemetry PyMySQL Instrumentation +===================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-pymysql.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-pymysql/ + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-pymysql + + +References +---------- +* `OpenTelemetry PyMySQL Instrumentation `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/instrumentation/opentelemetry-instrumentation-pymysql/setup.cfg similarity index 85% rename from ext/opentelemetry-ext-pymysql/setup.cfg rename to instrumentation/opentelemetry-instrumentation-pymysql/setup.cfg index 9d8ccdff6f6..b00276c9d20 100644 --- a/ext/opentelemetry-ext-pymysql/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-pymysql/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-pymysql -description = OpenTelemetry PyMySQL integration +name = opentelemetry-instrumentation-pymysql +description = OpenTelemetry PyMySQL instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-pymysql +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-pymysql platforms = any license = Apache-2.0 classifiers = @@ -41,7 +41,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 - opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation-dbapi == 0.12.dev0 opentelemetry-instrumentation == 0.12.dev0 PyMySQL ~= 0.9.3 @@ -54,4 +54,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - pymysql = opentelemetry.ext.pymysql:PyMySQLInstrumentor + pymysql = opentelemetry.instrumentation.pymysql:PyMySQLInstrumentor diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/setup.py b/instrumentation/opentelemetry-instrumentation-pymysql/setup.py new file mode 100644 index 00000000000..b729aa7da5c --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-pymysql/setup.py @@ -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", "pymysql", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/__init__.py b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/__init__.py rename to instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py similarity index 100% rename from ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py rename to instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py diff --git a/ext/opentelemetry-ext-pymysql/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-pymysql/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-pymysql/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-pymysql/tests/__init__.py diff --git a/ext/opentelemetry-ext-pymysql/tests/test_pymysql_integration.py b/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py similarity index 100% rename from ext/opentelemetry-ext-pymysql/tests/test_pymysql_integration.py rename to instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py diff --git a/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md new file mode 100644 index 00000000000..79c4e6bf923 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-redis + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + +## 0.7b1 + +Released 2020-05-12 + +- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-redis/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-redis/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-redis/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-redis/MANIFEST.in diff --git a/instrumentation/opentelemetry-instrumentation-redis/README.rst b/instrumentation/opentelemetry-instrumentation-redis/README.rst new file mode 100644 index 00000000000..289a0be0c3a --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-redis/README.rst @@ -0,0 +1,23 @@ +OpenTelemetry Redis Instrumentation +=================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-redis.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-redis/ + +This library allows tracing requests made by the Redis library. + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-redis + + +References +---------- + +* `OpenTelemetry Redis Instrumentation `_ +* `OpenTelemetry Project `_ diff --git a/ext/opentelemetry-ext-redis/setup.cfg b/instrumentation/opentelemetry-instrumentation-redis/setup.cfg similarity index 88% rename from ext/opentelemetry-ext-redis/setup.cfg rename to instrumentation/opentelemetry-instrumentation-redis/setup.cfg index 0b245f341a1..27793a5bed6 100644 --- a/ext/opentelemetry-ext-redis/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-redis/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-redis -description = Redis tracing for OpenTelemetry +name = opentelemetry-instrumentation-redis +description = OpenTelemetry Redis instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-redis +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-redis platforms = any license = Apache-2.0 classifiers = @@ -55,4 +55,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - redis = opentelemetry.ext.redis:RedisInstrumentor + redis = opentelemetry.instrumentation.redis:RedisInstrumentor diff --git a/ext/opentelemetry-ext-asyncpg/setup.py b/instrumentation/opentelemetry-instrumentation-redis/setup.py similarity index 91% rename from ext/opentelemetry-ext-asyncpg/setup.py rename to instrumentation/opentelemetry-instrumentation-redis/setup.py index 8172205c1a9..df80a8fd1aa 100644 --- a/ext/opentelemetry-ext-asyncpg/setup.py +++ b/instrumentation/opentelemetry-instrumentation-redis/setup.py @@ -17,7 +17,7 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "ext", "asyncpg", "version.py" + BASE_DIR, "src", "opentelemetry", "instrumentation", "redis", "version.py" ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/__init__.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py similarity index 96% rename from ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/__init__.py rename to instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py index 0b7f6e28eb9..cac309165af 100644 --- a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py @@ -28,7 +28,7 @@ .. code:: python from opentelemetry import trace - from opentelemetry.ext.redis import RedisInstrumentor + from opentelemetry.instrumentation.redis import RedisInstrumentor from opentelemetry.sdk.trace import TracerProvider import redis @@ -49,11 +49,11 @@ from wrapt import ObjectProxy, wrap_function_wrapper from opentelemetry import trace -from opentelemetry.ext.redis.util import ( +from opentelemetry.instrumentation.redis.util import ( _extract_conn_attributes, _format_command_args, ) -from opentelemetry.ext.redis.version import __version__ +from opentelemetry.instrumentation.redis.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/util.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/util.py similarity index 100% rename from ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/util.py rename to instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/util.py diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py similarity index 100% rename from ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py rename to instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py diff --git a/ext/opentelemetry-ext-redis/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-redis/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-redis/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-redis/tests/__init__.py diff --git a/ext/opentelemetry-ext-redis/tests/test_redis.py b/instrumentation/opentelemetry-instrumentation-redis/tests/test_redis.py similarity index 96% rename from ext/opentelemetry-ext-redis/tests/test_redis.py rename to instrumentation/opentelemetry-instrumentation-redis/tests/test_redis.py index b36e96a6278..86b2459c112 100644 --- a/ext/opentelemetry-ext-redis/tests/test_redis.py +++ b/instrumentation/opentelemetry-instrumentation-redis/tests/test_redis.py @@ -15,7 +15,7 @@ import redis -from opentelemetry.ext.redis import RedisInstrumentor +from opentelemetry.instrumentation.redis import RedisInstrumentor from opentelemetry.test.test_base import TestBase diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md new file mode 100644 index 00000000000..3022345ac72 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-sqlalchemy + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + +## 0.7b1 + +Released 2020-05-12 + +- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-sqlalchemy/LICENSE b/instrumentation/opentelemetry-instrumentation-sqlalchemy/LICENSE similarity index 100% rename from ext/opentelemetry-ext-sqlalchemy/LICENSE rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/LICENSE diff --git a/ext/opentelemetry-ext-sqlalchemy/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-sqlalchemy/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-sqlalchemy/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/MANIFEST.in diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/README.rst b/instrumentation/opentelemetry-instrumentation-sqlalchemy/README.rst new file mode 100644 index 00000000000..f29cbe9ffff --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/README.rst @@ -0,0 +1,24 @@ +OpenTelemetry SQLAlchemy Instrumentation +======================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-sqlalchemy.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-sqlalchemy/ + +This library allows tracing requests made by the SQLAlchemy library. + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-sqlalchemy + + +References +---------- + +* `SQLAlchemy Project `_ +* `OpenTelemetry SQLAlchemy Tracing `_ +* `OpenTelemetry Project `_ \ No newline at end of file diff --git a/ext/opentelemetry-ext-sqlalchemy/setup.cfg b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.cfg similarity index 87% rename from ext/opentelemetry-ext-sqlalchemy/setup.cfg rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.cfg index 16416f37ef8..e10a684d653 100644 --- a/ext/opentelemetry-ext-sqlalchemy/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-sqlalchemy -description = SQLAlchemy tracing for OpenTelemetry +name = opentelemetry-instrumentation-sqlalchemy +description = OpenTelemetry SQLAlchemy instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-sqlalchemy +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-sqlalchemy platforms = any license = Apache-2.0 classifiers = @@ -55,4 +55,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - sqlalchemy = opentelemetry.ext.sqlalchemy:SQLAlchemyInstrumentor + sqlalchemy = opentelemetry.instrumentation.sqlalchemy:SQLAlchemyInstrumentor diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py new file mode 100644 index 00000000000..e88727e3f12 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py @@ -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", "sqlalchemy", "version.py", +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py similarity index 100% rename from ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/__init__.py rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py similarity index 100% rename from ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/engine.py rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py similarity index 100% rename from ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py diff --git a/ext/opentelemetry-ext-sqlalchemy/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-sqlalchemy/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/__init__.py diff --git a/ext/opentelemetry-ext-sqlalchemy/tests/test_sqlalchemy.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py similarity index 100% rename from ext/opentelemetry-ext-sqlalchemy/tests/test_sqlalchemy.py rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md new file mode 100644 index 00000000000..7804da90517 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md @@ -0,0 +1,12 @@ +# Changelog + +## Unreleased + +- Change package name to opentelemetry-instrumentation-sqlite3 + ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999)) + +## 0.8b0 + +Released 2020-05-27 + +- Initial release \ No newline at end of file diff --git a/ext/opentelemetry-ext-sqlite3/LICENSE b/instrumentation/opentelemetry-instrumentation-sqlite3/LICENSE similarity index 100% rename from ext/opentelemetry-ext-sqlite3/LICENSE rename to instrumentation/opentelemetry-instrumentation-sqlite3/LICENSE diff --git a/ext/opentelemetry-ext-sqlite3/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-sqlite3/MANIFEST.in similarity index 100% rename from ext/opentelemetry-ext-sqlite3/MANIFEST.in rename to instrumentation/opentelemetry-instrumentation-sqlite3/MANIFEST.in diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/README.rst b/instrumentation/opentelemetry-instrumentation-sqlite3/README.rst new file mode 100644 index 00000000000..0d2aa2dd992 --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/README.rst @@ -0,0 +1,21 @@ +OpenTelemetry SQLite3 Instrumentation +===================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-sqlite3.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-sqlite3/ + +Installation +------------ + +:: + + pip install opentelemetry-instrumentation-sqlite3 + + +References +---------- +* `OpenTelemetry SQLite3 Instrumentation `_ +* `OpenTelemetry Project `_ + diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.cfg similarity index 85% rename from ext/opentelemetry-ext-sqlite3/setup.cfg rename to instrumentation/opentelemetry-instrumentation-sqlite3/setup.cfg index 51f6b2f30d7..841c8d3b17f 100644 --- a/ext/opentelemetry-ext-sqlite3/setup.cfg +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.cfg @@ -13,13 +13,13 @@ # limitations under the License. # [metadata] -name = opentelemetry-ext-sqlite3 -description = OpenTelemetry SQLite3 integration +name = opentelemetry-instrumentation-sqlite3 +description = OpenTelemetry SQLite3 instrumentation long_description = file: README.rst long_description_content_type = text/x-rst author = OpenTelemetry Authors author_email = cncf-opentelemetry-contributors@lists.cncf.io -url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-ext-sqlite3 +url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-sqlite3 platforms = any license = Apache-2.0 classifiers = @@ -41,7 +41,7 @@ package_dir= packages=find_namespace: install_requires = opentelemetry-api == 0.12.dev0 - opentelemetry-ext-dbapi == 0.12.dev0 + opentelemetry-instrumentation-dbapi == 0.12.dev0 opentelemetry-instrumentation == 0.12.dev0 wrapt >= 1.0.0, < 2.0.0 @@ -54,4 +54,4 @@ where = src [options.entry_points] opentelemetry_instrumentor = - sqlite3 = opentelemetry.ext.sqlite3:SQLite3Instrumentor + sqlite3 = opentelemetry.instrumentation.sqlite3:SQLite3Instrumentor diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py new file mode 100644 index 00000000000..46c95dd1f3c --- /dev/null +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py @@ -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", "sqlite3", "version.py" +) +PACKAGE_INFO = {} +with open(VERSION_FILENAME) as f: + exec(f.read(), PACKAGE_INFO) + +setuptools.setup(version=PACKAGE_INFO["__version__"]) diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py similarity index 100% rename from ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/__init__.py rename to instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py similarity index 100% rename from ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py rename to instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py diff --git a/ext/opentelemetry-ext-sqlite3/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlite3/tests/__init__.py similarity index 100% rename from ext/opentelemetry-ext-sqlite3/tests/__init__.py rename to instrumentation/opentelemetry-instrumentation-sqlite3/tests/__init__.py diff --git a/ext/opentelemetry-ext-sqlite3/tests/test_sqlite3.py b/instrumentation/opentelemetry-instrumentation-sqlite3/tests/test_sqlite3.py similarity index 100% rename from ext/opentelemetry-ext-sqlite3/tests/test_sqlite3.py rename to instrumentation/opentelemetry-instrumentation-sqlite3/tests/test_sqlite3.py diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py index 857ceb84fe1..7b512a84ce7 100644 --- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py +++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py @@ -26,27 +26,27 @@ # target library to desired instrumentor path/versioned package name instrumentations = { "asgi": "opentelemetry-instrumentation-asgi>=0.11b0", - "asyncpg": "opentelemetry-ext-asyncpg>=0.11b0", + "asyncpg": "opentelemetry-instrumentation-asyncpg>=0.11b0", "boto": "opentelemetry-ext-boto>=0.11b0", "botocore": "opentelemetry-ext-botocore>=0.11b0", "celery": "opentelemetry-ext-celery>=0.11b0", - "dbapi": "opentelemetry-ext-dbapi>=0.8b0", + "dbapi": "opentelemetry-instrumentation-dbapi>=0.8b0", "django": "opentelemetry-instrumentation-django>=0.8b0", "elasticsearch": "opentelemetry-ext-elasticsearch>=0.11b0", "fastapi": "opentelemetry-instrumentation-fastapi>=0.11b0", "flask": "opentelemetry-instrumentation-flask>=0.8b0", "grpc": "opentelemetry-ext-grpc>=0.8b0", "jinja2": "opentelemetry-ext-jinja2>=0.8b0", - "mysql": "opentelemetry-ext-mysql>=0.8b0", - "psycopg2": "opentelemetry-ext-psycopg2>=0.8b0", - "pymemcache": "opentelemetry-ext-pymemcache>=0.11b0", - "pymongo": "opentelemetry-ext-pymongo>=0.8b0", - "pymysql": "opentelemetry-ext-pymysql>=0.8b0", + "mysql": "opentelemetry-instrumentation-mysql>=0.8b0", + "psycopg2": "opentelemetry-instrumentation-psycopg2>=0.8b0", + "pymemcache": "opentelemetry-instrumentation-pymemcache>=0.11b0", + "pymongo": "opentelemetry-instrumentation-pymongo>=0.8b0", + "pymysql": "opentelemetry-instrumentation-pymysql>=0.8b0", "pyramid": "opentelemetry-instrumentation-pyramid>=0.11b0", - "redis": "opentelemetry-ext-redis>=0.8b0", + "redis": "opentelemetry-instrumentation-redis>=0.8b0", "requests": "opentelemetry-instrumentation-requests>=0.8b0", - "sqlalchemy": "opentelemetry-ext-sqlalchemy>=0.8b0", - "sqlite3": "opentelemetry-ext-sqlite3>=0.11b0", + "sqlalchemy": "opentelemetry-instrumentation-sqlalchemy>=0.8b0", + "sqlite3": "opentelemetry-instrumentation-sqlite3>=0.11b0", "starlette": "opentelemetry-instrumentation-starlette>=0.11b0", "wsgi": "opentelemetry-instrumentation-wsgi>=0.8b0", } @@ -54,27 +54,27 @@ # relevant instrumentors and tracers to uninstall and check for conflicts for target libraries libraries = { "asgi": ("opentelemetry-instrumentation-asgi",), - "asyncpg": ("opentelemetry-ext-asyncpg",), + "asyncpg": ("opentelemetry-instrumentation-asyncpg",), "boto": ("opentelemetry-ext-boto",), "botocore": ("opentelemetry-ext-botocore",), "celery": ("opentelemetry-ext-celery",), - "dbapi": ("opentelemetry-ext-dbapi",), + "dbapi": ("opentelemetry-instrumentation-dbapi",), "django": ("opentelemetry-instrumentation-django",), "elasticsearch": ("opentelemetry-ext-elasticsearch",), "fastapi": ("opentelemetry-instrumentation-fastapi",), "flask": ("opentelemetry-instrumentation-flask",), "grpc": ("opentelemetry-ext-grpc",), "jinja2": ("opentelemetry-ext-jinja2",), - "mysql": ("opentelemetry-ext-mysql",), - "psycopg2": ("opentelemetry-ext-psycopg2",), - "pymemcache": ("opentelemetry-ext-pymemcache",), - "pymongo": ("opentelemetry-ext-pymongo",), - "pymysql": ("opentelemetry-ext-pymysql",), + "mysql": ("opentelemetry-instrumentation-mysql",), + "psycopg2": ("opentelemetry-instrumentation-psycopg2",), + "pymemcache": ("opentelemetry-instrumentation-pymemcache",), + "pymongo": ("opentelemetry-instrumentation-pymongo",), + "pymysql": ("opentelemetry-instrumentation-pymysql",), "pyramid": ("opentelemetry-instrumentation-pyramid",), - "redis": ("opentelemetry-ext-redis",), + "redis": ("opentelemetry-instrumentation-redis",), "requests": ("opentelemetry-instrumentation-requests",), - "sqlalchemy": ("opentelemetry-ext-sqlalchemy",), - "sqlite3": ("opentelemetry-ext-sqlite3",), + "sqlalchemy": ("opentelemetry-instrumentation-sqlalchemy",), + "sqlite3": ("opentelemetry-instrumentation-sqlite3",), "starlette": ("opentelemetry-instrumentation-starlette",), "wsgi": ("opentelemetry-instrumentation-wsgi",), } diff --git a/tox.ini b/tox.ini index 6dab08f703a..78bdff9673e 100644 --- a/tox.ini +++ b/tox.ini @@ -44,7 +44,7 @@ envlist = py3{4,5,6,7,8}-test-instrumentation-django pypy3-test-instrumentation-django - ; opentelemetry-ext-dbapi + ; opentelemetry-instrumentation-dbapi py3{4,5,6,7,8}-test-instrumentation-dbapi pypy3-test-instrumentation-dbapi @@ -85,7 +85,7 @@ envlist = ; opentelemetry-exporter-datadog py3{5,6,7,8}-test-exporter-datadog - ; opentelemetry-ext-mysql + ; opentelemetry-instrumentation-mysql py3{4,5,6,7,8}-test-instrumentation-mysql pypy3-test-instrumentation-mysql @@ -101,19 +101,19 @@ envlist = py3{4,5,6,7,8}-test-exporter-prometheus pypy3-test-exporter-prometheus - ; opentelemetry-ext-psycopg2 + ; opentelemetry-instrumentation-psycopg2 py3{4,5,6,7,8}-test-instrumentation-psycopg2 ; ext-psycopg2 intentionally excluded from pypy3 - ; opentelemetry-ext-pymemcache + ; opentelemetry-instrumentation-pymemcache py3{4,5,6,7,8}-test-instrumentation-pymemcache pypy3-test-instrumentation-pymemcache - ; opentelemetry-ext-pymongo + ; opentelemetry-instrumentation-pymongo py3{4,5,6,7,8}-test-instrumentation-pymongo pypy3-test-instrumentation-pymongo - ; opentelemetry-ext-pymysql + ; opentelemetry-instrumentation-pymysql py3{4,5,6,7,8}-test-instrumentation-pymysql pypy3-test-instrumentation-pymysql @@ -125,11 +125,11 @@ envlist = py3{5,6,7,8}-test-instrumentation-asgi pypy3-test-instrumentation-asgi - ; opentelemetry-ext-asyncpg + ; opentelemetry-instrumentation-asyncpg py3{5,6,7,8}-test-instrumentation-asyncpg ; ext-asyncpg intentionally excluded from pypy3 - ; opentelemetry-ext-sqlite3 + ; opentelemetry-instrumentation-sqlite3 py3{4,5,6,7,8}-test-instrumentation-sqlite3 pypy3-test-instrumentation-sqlite3 @@ -148,11 +148,11 @@ envlist = ; opentelemetry-ext-grpc py3{5,6,7,8}-test-instrumentation-grpc - ; opentelemetry-ext-sqlalchemy + ; opentelemetry-instrumentation-sqlalchemy py3{4,5,6,7,8}-test-instrumentation-sqlalchemy pypy3-test-instrumentation-sqlalchemy - ; opentelemetry-ext-redis + ; opentelemetry-instrumentation-redis py3{4,5,6,7,8}-test-instrumentation-redis pypy3-test-instrumentation-redis @@ -200,11 +200,11 @@ changedir = test-instrumentation-aiohttp-client: instrumentation/opentelemetry-instrumentation-aiohttp-client/tests test-instrumentation-aiopg: instrumentation/opentelemetry-instrumentation-aiopg/tests test-instrumentation-asgi: instrumentation/opentelemetry-instrumentation-asgi/tests - test-instrumentation-asyncpg: ext/opentelemetry-ext-asyncpg/tests + test-instrumentation-asyncpg: instrumentation/opentelemetry-instrumentation-asyncpg/tests test-instrumentation-boto: ext/opentelemetry-ext-boto/tests test-instrumentation-botocore: ext/opentelemetry-ext-botocore/tests test-instrumentation-celery: ext/opentelemetry-ext-celery/tests - test-instrumentation-dbapi: ext/opentelemetry-ext-dbapi/tests + test-instrumentation-dbapi: instrumentation/opentelemetry-instrumentation-dbapi/tests test-instrumentation-django: instrumentation/opentelemetry-instrumentation-django/tests test-instrumentation-example-app: docs/examples/opentelemetry-example-app/tests test-instrumentation-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests @@ -212,16 +212,16 @@ changedir = test-instrumentation-flask: instrumentation/opentelemetry-instrumentation-flask/tests test-instrumentation-grpc: ext/opentelemetry-ext-grpc/tests test-instrumentation-jinja2: ext/opentelemetry-ext-jinja2/tests - test-instrumentation-mysql: ext/opentelemetry-ext-mysql/tests - test-instrumentation-psycopg2: ext/opentelemetry-ext-psycopg2/tests - test-instrumentation-pymemcache: ext/opentelemetry-ext-pymemcache/tests - test-instrumentation-pymongo: ext/opentelemetry-ext-pymongo/tests - test-instrumentation-pymysql: ext/opentelemetry-ext-pymysql/tests + test-instrumentation-mysql: instrumentation/opentelemetry-instrumentation-mysql/tests + test-instrumentation-psycopg2: instrumentation/opentelemetry-instrumentation-psycopg2/tests + test-instrumentation-pymemcache: instrumentation/opentelemetry-instrumentation-pymemcache/tests + test-instrumentation-pymongo: instrumentation/opentelemetry-instrumentation-pymongo/tests + test-instrumentation-pymysql: instrumentation/opentelemetry-instrumentation-pymysql/tests test-instrumentation-pyramid: instrumentation/opentelemetry-instrumentation-pyramid/tests - test-instrumentation-redis: ext/opentelemetry-ext-redis/tests + test-instrumentation-redis: instrumentation/opentelemetry-instrumentation-redis/tests test-instrumentation-requests: instrumentation/opentelemetry-instrumentation-requests/tests - test-instrumentation-sqlalchemy: ext/opentelemetry-ext-sqlalchemy/tests - test-instrumentation-sqlite3: ext/opentelemetry-ext-sqlite3/tests + test-instrumentation-sqlalchemy: instrumentation/opentelemetry-instrumentation-sqlalchemy/tests + test-instrumentation-sqlite3: instrumentation/opentelemetry-instrumentation-sqlite3/tests test-instrumentation-starlette: instrumentation/opentelemetry-instrumentation-starlette/tests test-instrumentation-system-metrics: ext/opentelemetry-ext-system-metrics/tests test-instrumentation-wsgi: instrumentation/opentelemetry-instrumentation-wsgi/tests @@ -254,7 +254,7 @@ commands_pre = wsgi,flask,django,pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi asgi,starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi - asyncpg: pip install {toxinidir}/ext/opentelemetry-ext-asyncpg + asyncpg: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg boto: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test] boto: pip install {toxinidir}/ext/opentelemetry-ext-boto[test] @@ -263,13 +263,13 @@ commands_pre = botocore: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test] - dbapi: pip install {toxinidir}/ext/opentelemetry-ext-dbapi[test] + dbapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi[test] django: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-django[test] fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-fastapi[test] - mysql: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-mysql[test] + mysql: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql[test] opencensus: pip install {toxinidir}/exporter/opentelemetry-exporter-opencensus @@ -278,19 +278,19 @@ commands_pre = prometheus: pip install {toxinidir}/exporter/opentelemetry-exporter-prometheus - pymemcache: pip install {toxinidir}/ext/opentelemetry-ext-pymemcache[test] + pymemcache: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pymemcache[test] - pymongo: pip install {toxinidir}/ext/opentelemetry-ext-pymongo[test] + pymongo: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo[test] - psycopg2: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-psycopg2 {toxinidir}/ext/opentelemetry-ext-psycopg2[test] + psycopg2: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2[test] - pymysql: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-pymysql[test] + pymysql: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql[test] pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-pyramid[test] - sqlite3: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-sqlite3[test] + sqlite3: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlite3[test] - redis: pip install {toxinidir}/ext/opentelemetry-ext-redis[test] + redis: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-redis[test] requests: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-requests[test] @@ -300,7 +300,7 @@ commands_pre = aiohttp-client: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client - aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg[test] + aiopg: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg[test] jaeger: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger @@ -412,16 +412,16 @@ commands_pre = -e {toxinidir}/opentelemetry-sdk \ -e {toxinidir}/opentelemetry-instrumentation \ -e {toxinidir}/tests/util \ - -e {toxinidir}/ext/opentelemetry-ext-asyncpg \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg \ -e {toxinidir}/ext/opentelemetry-ext-celery \ - -e {toxinidir}/ext/opentelemetry-ext-dbapi \ - -e {toxinidir}/ext/opentelemetry-ext-mysql \ - -e {toxinidir}/ext/opentelemetry-ext-psycopg2 \ - -e {toxinidir}/ext/opentelemetry-ext-pymongo \ - -e {toxinidir}/ext/opentelemetry-ext-pymysql \ - -e {toxinidir}/ext/opentelemetry-ext-sqlalchemy \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2 \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymongo \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-pymysql \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy \ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg \ - -e {toxinidir}/ext/opentelemetry-ext-redis \ + -e {toxinidir}/instrumentation/opentelemetry-instrumentation-redis \ -e {toxinidir}/ext/opentelemetry-ext-system-metrics \ -e {toxinidir}/exporter/opentelemetry-exporter-opencensus docker-compose up -d From ffa035708db5d56f4f7c6a5f6f8e1cc3c9bd34e1 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 3 Aug 2020 12:12:49 -0700 Subject: [PATCH 33/35] fix --- .../tests/postgres/test_psycopg_functional.py | 2 +- .../tests/pymongo/test_pymongo_functional.py | 2 +- .../tests/pymysql/test_pymysql_functional.py | 2 +- .../tests/test_dbapi_integration.py | 2 +- .../src/opentelemetry/instrumentation/psycopg2/__init__.py | 6 +++--- .../tests/test_psycopg2_integration.py | 6 +++--- .../opentelemetry/instrumentation/pymemcache/__init__.py | 4 ++-- .../tests/test_pymemcache.py | 2 +- .../src/opentelemetry/instrumentation/pymongo/__init__.py | 4 ++-- .../tests/test_pymongo.py | 2 +- .../src/opentelemetry/instrumentation/pymysql/__init__.py | 6 +++--- .../tests/test_pymysql_integration.py | 6 +++--- .../src/opentelemetry/instrumentation/sqlite3/__init__.py | 6 +++--- .../tests/test_sqlite3.py | 2 +- tox.ini | 2 +- 15 files changed, 27 insertions(+), 27 deletions(-) diff --git a/ext/opentelemetry-ext-docker-tests/tests/postgres/test_psycopg_functional.py b/ext/opentelemetry-ext-docker-tests/tests/postgres/test_psycopg_functional.py index d0bdd685f4a..a8e07ddb27e 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/postgres/test_psycopg_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/postgres/test_psycopg_functional.py @@ -18,7 +18,7 @@ import psycopg2 from opentelemetry import trace as trace_api -from opentelemetry.ext.psycopg2 import Psycopg2Instrumentor +from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor from opentelemetry.test.test_base import TestBase POSTGRES_HOST = os.getenv("POSTGRESQL_HOST ", "localhost") diff --git a/ext/opentelemetry-ext-docker-tests/tests/pymongo/test_pymongo_functional.py b/ext/opentelemetry-ext-docker-tests/tests/pymongo/test_pymongo_functional.py index f85a32d450e..8c52ad06564 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/pymongo/test_pymongo_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/pymongo/test_pymongo_functional.py @@ -17,7 +17,7 @@ from pymongo import MongoClient from opentelemetry import trace as trace_api -from opentelemetry.ext.pymongo import PymongoInstrumentor +from opentelemetry.instrumentation.pymongo import PymongoInstrumentor from opentelemetry.test.test_base import TestBase MONGODB_HOST = os.getenv("MONGODB_HOST ", "localhost") diff --git a/ext/opentelemetry-ext-docker-tests/tests/pymysql/test_pymysql_functional.py b/ext/opentelemetry-ext-docker-tests/tests/pymysql/test_pymysql_functional.py index 5b004fe18ff..1636f85fba5 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/pymysql/test_pymysql_functional.py +++ b/ext/opentelemetry-ext-docker-tests/tests/pymysql/test_pymysql_functional.py @@ -17,7 +17,7 @@ import pymysql as pymy from opentelemetry import trace as trace_api -from opentelemetry.ext.pymysql import PyMySQLInstrumentor +from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor from opentelemetry.test.test_base import TestBase MYSQL_USER = os.getenv("MYSQL_USER ", "testuser") diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py b/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py index 41cccfedf19..29915703339 100644 --- a/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py +++ b/instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py @@ -17,7 +17,7 @@ from unittest import mock from opentelemetry import trace as trace_api -from opentelemetry.ext import dbapi +from opentelemetry.instrumentation import dbapi from opentelemetry.test.test_base import TestBase diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py index ec6c4c82ad5..34568f0deda 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py @@ -26,7 +26,7 @@ import psycopg2 from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider - from opentelemetry.ext.psycopg2 import Psycopg2Instrumentor + from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor trace.set_tracer_provider(TracerProvider()) @@ -44,8 +44,8 @@ import psycopg2 -from opentelemetry.ext import dbapi -from opentelemetry.ext.psycopg2.version import __version__ +from opentelemetry.instrumentation import dbapi +from opentelemetry.instrumentation.psycopg2.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.trace import get_tracer diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py index f854787bd9e..3b70eae83a8 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py @@ -16,8 +16,8 @@ import psycopg2 -import opentelemetry.ext.psycopg2 -from opentelemetry.ext.psycopg2 import Psycopg2Instrumentor +import opentelemetry.instrumentation.psycopg2 +from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor from opentelemetry.sdk import resources from opentelemetry.test.test_base import TestBase @@ -45,7 +45,7 @@ def test_instrumentor(self, mock_connect): span = spans_list[0] # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.psycopg2) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.psycopg2) # check that no spans are generated after uninstrument Psycopg2Instrumentor().uninstrument() diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py index e63bbe6f131..bf306ed5c31 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py @@ -26,7 +26,7 @@ from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider - from opentelemetry.ext.pymemcache import PymemcacheInstrumentor + from opentelemetry.instrumentation.pymemcache import PymemcacheInstrumentor trace.set_tracer_provider(TracerProvider()) PymemcacheInstrumentor().instrument() from pymemcache.client.base import Client @@ -44,7 +44,7 @@ from wrapt import ObjectProxy from wrapt import wrap_function_wrapper as _wrap -from opentelemetry.ext.pymemcache.version import __version__ +from opentelemetry.instrumentation.pymemcache.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap from opentelemetry.trace import SpanKind, get_tracer diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/tests/test_pymemcache.py b/instrumentation/opentelemetry-instrumentation-pymemcache/tests/test_pymemcache.py index aea4ad82f1a..794da9972be 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/tests/test_pymemcache.py +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/tests/test_pymemcache.py @@ -22,7 +22,7 @@ ) from opentelemetry import trace as trace_api -from opentelemetry.ext.pymemcache import PymemcacheInstrumentor +from opentelemetry.instrumentation.pymemcache import PymemcacheInstrumentor from opentelemetry.test.test_base import TestBase from opentelemetry.trace import get_tracer from opentelemetry.trace.status import StatusCanonicalCode diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py index fa8a599539e..d6e05d43329 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py @@ -26,7 +26,7 @@ from pymongo import MongoClient from opentelemetry import trace from opentelemetry.trace import TracerProvider - from opentelemetry.ext.pymongo import PymongoInstrumentor + from opentelemetry.instrumentation.pymongo import PymongoInstrumentor trace.set_tracer_provider(TracerProvider()) @@ -43,7 +43,7 @@ from pymongo import monitoring from opentelemetry import trace -from opentelemetry.ext.pymongo.version import __version__ +from opentelemetry.instrumentation.pymongo.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.trace import SpanKind, get_tracer from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py b/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py index abb4e8ab50a..7caef441ed4 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py @@ -15,7 +15,7 @@ from unittest import mock from opentelemetry import trace as trace_api -from opentelemetry.ext.pymongo import CommandTracer, PymongoInstrumentor +from opentelemetry.instrumentation.pymongo import CommandTracer, PymongoInstrumentor from opentelemetry.test.test_base import TestBase diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py index e44e08e189b..cc5847c90ee 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py @@ -25,7 +25,7 @@ import pymysql from opentelemetry import trace - from opentelemetry.ext.pymysql import PyMySQLInstrumentor + from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor from opentelemetry.sdk.trace import TracerProvider trace.set_tracer_provider(TracerProvider()) @@ -45,8 +45,8 @@ import pymysql -from opentelemetry.ext import dbapi -from opentelemetry.ext.pymysql.version import __version__ +from opentelemetry.instrumentation import dbapi +from opentelemetry.instrumentation.pymysql.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py b/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py index 60c060f1170..2e8c99ec390 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py +++ b/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py @@ -16,8 +16,8 @@ import pymysql -import opentelemetry.ext.pymysql -from opentelemetry.ext.pymysql import PyMySQLInstrumentor +import opentelemetry.instrumentation.pymysql +from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor from opentelemetry.sdk import resources from opentelemetry.test.test_base import TestBase @@ -43,7 +43,7 @@ def test_instrumentor(self, mock_connect): span = spans_list[0] # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.ext.pymysql) + self.check_span_instrumentation_info(span, opentelemetry.instrumentation.pymysql) # check that no spans are generated after uninstrument PyMySQLInstrumentor().uninstrument() diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py index 3cdfd88f758..25ce0ea454c 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py @@ -26,7 +26,7 @@ import sqlite3 from opentelemetry import trace from opentelemetry.trace import TracerProvider - from opentelemetry.ext.sqlite3 import SQLite3Instrumentor + from opentelemetry.instrumentation.sqlite3 import SQLite3Instrumentor trace.set_tracer_provider(TracerProvider()) @@ -44,8 +44,8 @@ import sqlite3 -from opentelemetry.ext import dbapi -from opentelemetry.ext.sqlite3.version import __version__ +from opentelemetry.instrumentation import dbapi +from opentelemetry.instrumentation.sqlite3.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.trace import get_tracer diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/tests/test_sqlite3.py b/instrumentation/opentelemetry-instrumentation-sqlite3/tests/test_sqlite3.py index 7f4793bda3a..a4444e7d937 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/tests/test_sqlite3.py +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/tests/test_sqlite3.py @@ -15,7 +15,7 @@ import sqlite3 from opentelemetry import trace as trace_api -from opentelemetry.ext.sqlite3 import SQLite3Instrumentor +from opentelemetry.instrumentation.sqlite3 import SQLite3Instrumentor from opentelemetry.test.test_base import TestBase diff --git a/tox.ini b/tox.ini index 78bdff9673e..8528b63f600 100644 --- a/tox.ini +++ b/tox.ini @@ -311,7 +311,7 @@ commands_pre = zipkin: pip install {toxinidir}/exporter/opentelemetry-exporter-zipkin - sqlalchemy: pip install {toxinidir}/ext/opentelemetry-ext-sqlalchemy + sqlalchemy: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy system-metrics: pip install {toxinidir}/ext/opentelemetry-ext-system-metrics[test] From f9167dfd77fbdec2bfb5314c6fc8b286f50f6af0 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 3 Aug 2020 12:29:47 -0700 Subject: [PATCH 34/35] black --- .../tests/sqlalchemy_tests/mixins.py | 4 ++-- .../tests/sqlalchemy_tests/test_instrument.py | 2 +- .../tests/sqlalchemy_tests/test_mysql.py | 8 +++++++- .../tests/sqlalchemy_tests/test_postgres.py | 8 +++++++- .../tests/sqlalchemy_tests/test_sqlite.py | 2 +- .../instrumentation/aiopg/aiopg_integration.py | 5 ++++- .../opentelemetry-instrumentation-asyncpg/setup.py | 7 ++++++- .../tests/test_mysql_integration.py | 4 +++- .../opentelemetry-instrumentation-psycopg2/setup.py | 7 ++++++- .../tests/test_psycopg2_integration.py | 4 +++- .../opentelemetry-instrumentation-pymemcache/setup.py | 7 ++++++- .../opentelemetry-instrumentation-pymongo/setup.py | 7 ++++++- .../tests/test_pymongo.py | 5 ++++- .../opentelemetry-instrumentation-pymysql/setup.py | 7 ++++++- .../tests/test_pymysql_integration.py | 4 +++- .../opentelemetry-instrumentation-sqlalchemy/setup.py | 7 ++++++- .../opentelemetry/instrumentation/sqlalchemy/__init__.py | 4 ++-- .../opentelemetry/instrumentation/sqlalchemy/engine.py | 2 +- .../tests/test_sqlalchemy.py | 2 +- .../opentelemetry-instrumentation-sqlite3/setup.py | 7 ++++++- 20 files changed, 81 insertions(+), 22 deletions(-) diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/mixins.py b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/mixins.py index 84c6fd05f9b..a438f58eb91 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/mixins.py +++ b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/mixins.py @@ -19,8 +19,8 @@ from sqlalchemy.orm import sessionmaker from opentelemetry import trace -from opentelemetry.ext.sqlalchemy import SQLAlchemyInstrumentor -from opentelemetry.ext.sqlalchemy.engine import _DB, _ROWS, _STMT +from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor +from opentelemetry.instrumentation.sqlalchemy.engine import _DB, _ROWS, _STMT from opentelemetry.test.test_base import TestBase Base = declarative_base() diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_instrument.py b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_instrument.py index 845bf26cfa5..20c837c03b6 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_instrument.py +++ b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_instrument.py @@ -18,7 +18,7 @@ import sqlalchemy from opentelemetry import trace -from opentelemetry.ext.sqlalchemy import SQLAlchemyInstrumentor +from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor from opentelemetry.test.test_base import TestBase POSTGRES_CONFIG = { diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_mysql.py b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_mysql.py index 3b8adc8c628..44c3501b1d7 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_mysql.py +++ b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_mysql.py @@ -19,7 +19,13 @@ from sqlalchemy.exc import ProgrammingError from opentelemetry import trace -from opentelemetry.ext.sqlalchemy.engine import _DB, _HOST, _PORT, _ROWS, _STMT +from opentelemetry.instrumentation.sqlalchemy.engine import ( + _DB, + _HOST, + _PORT, + _ROWS, + _STMT, +) from .mixins import SQLAlchemyTestMixin diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_postgres.py b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_postgres.py index 125c925209c..615a196f5bb 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_postgres.py +++ b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_postgres.py @@ -20,7 +20,13 @@ from sqlalchemy.exc import ProgrammingError from opentelemetry import trace -from opentelemetry.ext.sqlalchemy.engine import _DB, _HOST, _PORT, _ROWS, _STMT +from opentelemetry.instrumentation.sqlalchemy.engine import ( + _DB, + _HOST, + _PORT, + _ROWS, + _STMT, +) from .mixins import SQLAlchemyTestMixin diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_sqlite.py b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_sqlite.py index 7d8a54368fa..4295fc045c7 100644 --- a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_sqlite.py +++ b/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_sqlite.py @@ -18,7 +18,7 @@ from sqlalchemy.exc import OperationalError from opentelemetry import trace -from opentelemetry.ext.sqlalchemy.engine import _DB, _ROWS, _STMT +from opentelemetry.instrumentation.sqlalchemy.engine import _DB, _ROWS, _STMT from .mixins import SQLAlchemyTestMixin diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py index 70bfca03bf7..b6992120f3c 100644 --- a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py +++ b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py @@ -3,7 +3,10 @@ import wrapt from aiopg.utils import _ContextManager, _PoolAcquireContextManager -from opentelemetry.instrumentation.dbapi import DatabaseApiIntegration, TracedCursor +from opentelemetry.instrumentation.dbapi import ( + DatabaseApiIntegration, + TracedCursor, +) from opentelemetry.trace import SpanKind from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/setup.py b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.py index d7911039fc9..2ad47ac9d98 100644 --- a/instrumentation/opentelemetry-instrumentation-asyncpg/setup.py +++ b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "asyncpg", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "asyncpg", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py b/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py index 31f5d0a812f..6c114d969f0 100644 --- a/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py @@ -43,7 +43,9 @@ def test_instrumentor(self, mock_connect): span = spans_list[0] # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.mysql) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.mysql + ) # check that no spans are generated after uninstrumen MySQLInstrumentor().uninstrument() diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py index 8f5f2fdb1b3..4bd0e16be54 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "psycopg2", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "psycopg2", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py index 3b70eae83a8..629b2f62b65 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py @@ -45,7 +45,9 @@ def test_instrumentor(self, mock_connect): span = spans_list[0] # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.psycopg2) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.psycopg2 + ) # check that no spans are generated after uninstrument Psycopg2Instrumentor().uninstrument() diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/setup.py b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.py index 61183ba67ef..46bf607933b 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/setup.py +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.py @@ -18,7 +18,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "pymemcache", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "pymemcache", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/setup.py b/instrumentation/opentelemetry-instrumentation-pymongo/setup.py index 1beced4b094..7b862ae2aa8 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/setup.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "pymongo", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "pymongo", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py b/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py index 7caef441ed4..57f91e131bd 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py @@ -15,7 +15,10 @@ from unittest import mock from opentelemetry import trace as trace_api -from opentelemetry.instrumentation.pymongo import CommandTracer, PymongoInstrumentor +from opentelemetry.instrumentation.pymongo import ( + CommandTracer, + PymongoInstrumentor, +) from opentelemetry.test.test_base import TestBase diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/setup.py b/instrumentation/opentelemetry-instrumentation-pymysql/setup.py index b729aa7da5c..74cd948fee8 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/setup.py +++ b/instrumentation/opentelemetry-instrumentation-pymysql/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "pymysql", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "pymysql", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py b/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py index 2e8c99ec390..35c9f4d32b6 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py +++ b/instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py @@ -43,7 +43,9 @@ def test_instrumentor(self, mock_connect): span = spans_list[0] # Check version and name in span's instrumentation info - self.check_span_instrumentation_info(span, opentelemetry.instrumentation.pymysql) + self.check_span_instrumentation_info( + span, opentelemetry.instrumentation.pymysql + ) # check that no spans are generated after uninstrument PyMySQLInstrumentor().uninstrument() diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py index e88727e3f12..26d3ef4fc92 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "sqlalchemy", "version.py", + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "sqlalchemy", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py index 05d5e625ef2..6867fe3a8e5 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py @@ -29,7 +29,7 @@ from sqlalchemy import create_engine from opentelemetry import trace - from opentelemetry.ext.sqlalchemy import SQLAlchemyInstrumentor + from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor from opentelemetry.sdk.trace import TracerProvider import sqlalchemy @@ -47,7 +47,7 @@ import wrapt from wrapt import wrap_function_wrapper as _w -from opentelemetry.ext.sqlalchemy.engine import ( +from opentelemetry.instrumentation.sqlalchemy.engine import ( EngineTracer, _get_tracer, _wrap_create_engine, diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py index 890bbc7c8d9..df80c4841c3 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py @@ -15,7 +15,7 @@ from sqlalchemy.event import listen from opentelemetry import trace -from opentelemetry.ext.sqlalchemy.version import __version__ +from opentelemetry.instrumentation.sqlalchemy.version import __version__ from opentelemetry.trace.status import Status, StatusCanonicalCode # Network attribute semantic convention here: diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py index 858cc652eff..06593da94fd 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py @@ -14,7 +14,7 @@ from sqlalchemy import create_engine -from opentelemetry.ext.sqlalchemy import SQLAlchemyInstrumentor +from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor from opentelemetry.test.test_base import TestBase diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py index 46c95dd1f3c..67ce350fab5 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py @@ -17,7 +17,12 @@ BASE_DIR = os.path.dirname(__file__) VERSION_FILENAME = os.path.join( - BASE_DIR, "src", "opentelemetry", "instrumentation", "sqlite3", "version.py" + BASE_DIR, + "src", + "opentelemetry", + "instrumentation", + "sqlite3", + "version.py", ) PACKAGE_INFO = {} with open(VERSION_FILENAME) as f: From a02ae99348ca1981a60d84018f756bb5fcd6b242 Mon Sep 17 00:00:00 2001 From: Leighton Chen Date: Mon, 3 Aug 2020 12:51:24 -0700 Subject: [PATCH 35/35] isort --- .../src/opentelemetry/instrumentation/mysql/__init__.py | 2 +- .../src/opentelemetry/instrumentation/psycopg2/__init__.py | 2 +- .../src/opentelemetry/instrumentation/pymemcache/__init__.py | 2 +- .../src/opentelemetry/instrumentation/pymongo/__init__.py | 2 +- .../src/opentelemetry/instrumentation/pymysql/__init__.py | 2 +- .../src/opentelemetry/instrumentation/redis/__init__.py | 2 +- .../src/opentelemetry/instrumentation/sqlalchemy/__init__.py | 2 +- .../src/opentelemetry/instrumentation/sqlite3/__init__.py | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/__init__.py b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/__init__.py index 36842f8d661..1cbd240cc59 100644 --- a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/__init__.py @@ -45,8 +45,8 @@ import mysql.connector from opentelemetry.instrumentation import dbapi -from opentelemetry.instrumentation.mysql.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.mysql.version import __version__ from opentelemetry.trace import get_tracer diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py index 34568f0deda..7782f6fe632 100644 --- a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py @@ -45,8 +45,8 @@ import psycopg2 from opentelemetry.instrumentation import dbapi -from opentelemetry.instrumentation.psycopg2.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.psycopg2.version import __version__ from opentelemetry.trace import get_tracer diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py index bf306ed5c31..332e92ccdde 100644 --- a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py @@ -44,8 +44,8 @@ from wrapt import ObjectProxy from wrapt import wrap_function_wrapper as _wrap -from opentelemetry.instrumentation.pymemcache.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.pymemcache.version import __version__ from opentelemetry.instrumentation.utils import unwrap from opentelemetry.trace import SpanKind, get_tracer diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py index d6e05d43329..0d5ddc10ee7 100644 --- a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py @@ -43,8 +43,8 @@ from pymongo import monitoring from opentelemetry import trace -from opentelemetry.instrumentation.pymongo.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.pymongo.version import __version__ from opentelemetry.trace import SpanKind, get_tracer from opentelemetry.trace.status import Status, StatusCanonicalCode diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py index cc5847c90ee..5d299505d69 100644 --- a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py @@ -46,8 +46,8 @@ import pymysql from opentelemetry.instrumentation import dbapi -from opentelemetry.instrumentation.pymysql.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.pymysql.version import __version__ class PyMySQLInstrumentor(BaseInstrumentor): diff --git a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py index cac309165af..fef856041e8 100644 --- a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py @@ -49,12 +49,12 @@ from wrapt import ObjectProxy, wrap_function_wrapper from opentelemetry import trace +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.redis.util import ( _extract_conn_attributes, _format_command_args, ) from opentelemetry.instrumentation.redis.version import __version__ -from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap _DEFAULT_SERVICE = "redis" diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py index 6867fe3a8e5..aad6dbfc07c 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py @@ -47,12 +47,12 @@ import wrapt from wrapt import wrap_function_wrapper as _w +from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.sqlalchemy.engine import ( EngineTracer, _get_tracer, _wrap_create_engine, ) -from opentelemetry.instrumentation.instrumentor import BaseInstrumentor from opentelemetry.instrumentation.utils import unwrap diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py index 25ce0ea454c..568e83f0d6a 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py +++ b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py @@ -45,8 +45,8 @@ import sqlite3 from opentelemetry.instrumentation import dbapi -from opentelemetry.instrumentation.sqlite3.version import __version__ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor +from opentelemetry.instrumentation.sqlite3.version import __version__ from opentelemetry.trace import get_tracer