From 1238fc8a171775e95571080fc878233ffd070baa Mon Sep 17 00:00:00 2001
From: HiveTraum
Date: Mon, 22 Jun 2020 20:25:58 +0500
Subject: [PATCH 01/79] OTLP Exporter documentation example misleading (#838)
---
.../src/opentelemetry/ext/otlp/__init__.py | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py
index 55c5dd69efc..1b315c5847a 100644
--- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py
+++ b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py
@@ -30,10 +30,17 @@
from opentelemetry import trace
from opentelemetry.ext.otlp.trace_exporter import OTLPSpanExporter
+ from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchExportSpanProcessor
- trace.set_tracer_provider(TracerProvider())
+ # Resource can be required for some backends, e.g. Jaeger
+ # If resource wouldn't be set - traces wouldn't appears in Jaeger
+ resource = Resource(labels=labels={
+ "service.name": "service"
+ })
+
+ trace.set_tracer_provider(TracerProvider(resource=resource)))
tracer = trace.get_tracer(__name__)
otlp_exporter = OTLPSpanExporter(endpoint="localhost:55678")
From 9e20f749258198ff8044d70094ea15f3f86abc49 Mon Sep 17 00:00:00 2001
From: Aaron Abbott
Date: Mon, 22 Jun 2020 17:47:07 +0000
Subject: [PATCH 02/79] Script to regenerate proto code + pyi stubs (#823)
---
.flake8 | 1 +
.gitattributes | 2 +
dev-requirements.txt | 3 +
opentelemetry-proto/CHANGELOG.md | 3 +
opentelemetry-proto/MANIFEST.in | 2 +-
.../metrics/v1/metrics_service_pb2.pyi | 72 ++++
.../collector/trace/v1/trace_service_pb2.pyi | 72 ++++
.../proto/common/v1/common_pb2.py | 37 +-
.../proto/common/v1/common_pb2.pyi | 127 ++++++
.../proto/metrics/v1/metrics_pb2.py | 177 ++++----
.../proto/metrics/v1/metrics_pb2.pyi | 394 ++++++++++++++++++
.../proto/resource/v1/resource_pb2.py | 6 +-
.../proto/resource/v1/resource_pb2.pyi | 61 +++
.../proto/trace/v1/trace_config_pb2.py | 41 +-
.../proto/trace/v1/trace_config_pb2.pyi | 149 +++++++
.../opentelemetry/proto/trace/v1/trace_pb2.py | 138 +++---
.../proto/trace/v1/trace_pb2.pyi | 303 ++++++++++++++
scripts/proto_codegen.sh | 64 +++
18 files changed, 1417 insertions(+), 235 deletions(-)
create mode 100644 .gitattributes
create mode 100644 opentelemetry-proto/src/opentelemetry/proto/collector/metrics/v1/metrics_service_pb2.pyi
create mode 100644 opentelemetry-proto/src/opentelemetry/proto/collector/trace/v1/trace_service_pb2.pyi
create mode 100644 opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi
create mode 100644 opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.pyi
create mode 100644 opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi
create mode 100644 opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.pyi
create mode 100644 opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi
create mode 100755 scripts/proto_codegen.sh
diff --git a/.flake8 b/.flake8
index 39288e9b1ba..8555d626c6f 100644
--- a/.flake8
+++ b/.flake8
@@ -20,4 +20,5 @@ exclude =
ext/opentelemetry-ext-jaeger/build/*
docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/grpc/gen/
docs/examples/opentelemetry-example-app/build/*
+ opentelemetry-proto/build/*
opentelemetry-proto/src/opentelemetry/proto/
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000000..6279d7a9cb3
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# tells github that proto code is generated
+opentelemetry-proto/src/**/*_pb2*.py* linguist-generated=true
diff --git a/dev-requirements.txt b/dev-requirements.txt
index 3808b02143a..dd4d2e37c97 100644
--- a/dev-requirements.txt
+++ b/dev-requirements.txt
@@ -9,3 +9,6 @@ sphinx-autodoc-typehints~=1.10.2
pytest!=5.2.3
pytest-cov>=2.8
readme-renderer~=24.0
+grpcio-tools==1.29.0
+mypy-protobuf==1.21
+protobuf==3.12.2
diff --git a/opentelemetry-proto/CHANGELOG.md b/opentelemetry-proto/CHANGELOG.md
index 896a782491d..aac3fa1d9f0 100644
--- a/opentelemetry-proto/CHANGELOG.md
+++ b/opentelemetry-proto/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Regenerate proto code and add pyi stubs
+ ([#823](https://github.com/open-telemetry/opentelemetry-python/pull/823))
+
## 0.9b0
Released 2020-06-10
diff --git a/opentelemetry-proto/MANIFEST.in b/opentelemetry-proto/MANIFEST.in
index 5da7b7fa51e..aed3e33273b 100644
--- a/opentelemetry-proto/MANIFEST.in
+++ b/opentelemetry-proto/MANIFEST.in
@@ -1,4 +1,4 @@
-graft gen
+graft src
graft tests
global-exclude *.pyc
global-exclude *.pyo
diff --git a/opentelemetry-proto/src/opentelemetry/proto/collector/metrics/v1/metrics_service_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/collector/metrics/v1/metrics_service_pb2.pyi
new file mode 100644
index 00000000000..7c42c410f43
--- /dev/null
+++ b/opentelemetry-proto/src/opentelemetry/proto/collector/metrics/v1/metrics_service_pb2.pyi
@@ -0,0 +1,72 @@
+# @generated by generate_proto_mypy_stubs.py. Do not edit!
+import sys
+from google.protobuf.descriptor import (
+ Descriptor as google___protobuf___descriptor___Descriptor,
+ FileDescriptor as google___protobuf___descriptor___FileDescriptor,
+)
+
+from google.protobuf.internal.containers import (
+ RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
+)
+
+from google.protobuf.message import (
+ Message as google___protobuf___message___Message,
+)
+
+from opentelemetry.proto.metrics.v1.metrics_pb2 import (
+ ResourceMetrics as opentelemetry___proto___metrics___v1___metrics_pb2___ResourceMetrics,
+)
+
+from typing import (
+ Iterable as typing___Iterable,
+ Optional as typing___Optional,
+ Union as typing___Union,
+)
+
+from typing_extensions import (
+ Literal as typing_extensions___Literal,
+)
+
+
+builtin___bool = bool
+builtin___bytes = bytes
+builtin___float = float
+builtin___int = int
+if sys.version_info < (3,):
+ builtin___buffer = buffer
+ builtin___unicode = unicode
+
+
+DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
+
+class ExportMetricsServiceRequest(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def resource_metrics(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___metrics___v1___metrics_pb2___ResourceMetrics]: ...
+
+ def __init__(self,
+ *,
+ resource_metrics : typing___Optional[typing___Iterable[opentelemetry___proto___metrics___v1___metrics_pb2___ResourceMetrics]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ExportMetricsServiceRequest: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ExportMetricsServiceRequest: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"resource_metrics",b"resource_metrics"]) -> None: ...
+type___ExportMetricsServiceRequest = ExportMetricsServiceRequest
+
+class ExportMetricsServiceResponse(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ def __init__(self,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ExportMetricsServiceResponse: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ExportMetricsServiceResponse: ...
+type___ExportMetricsServiceResponse = ExportMetricsServiceResponse
diff --git a/opentelemetry-proto/src/opentelemetry/proto/collector/trace/v1/trace_service_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/collector/trace/v1/trace_service_pb2.pyi
new file mode 100644
index 00000000000..540a82ebc5d
--- /dev/null
+++ b/opentelemetry-proto/src/opentelemetry/proto/collector/trace/v1/trace_service_pb2.pyi
@@ -0,0 +1,72 @@
+# @generated by generate_proto_mypy_stubs.py. Do not edit!
+import sys
+from google.protobuf.descriptor import (
+ Descriptor as google___protobuf___descriptor___Descriptor,
+ FileDescriptor as google___protobuf___descriptor___FileDescriptor,
+)
+
+from google.protobuf.internal.containers import (
+ RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
+)
+
+from google.protobuf.message import (
+ Message as google___protobuf___message___Message,
+)
+
+from opentelemetry.proto.trace.v1.trace_pb2 import (
+ ResourceSpans as opentelemetry___proto___trace___v1___trace_pb2___ResourceSpans,
+)
+
+from typing import (
+ Iterable as typing___Iterable,
+ Optional as typing___Optional,
+ Union as typing___Union,
+)
+
+from typing_extensions import (
+ Literal as typing_extensions___Literal,
+)
+
+
+builtin___bool = bool
+builtin___bytes = bytes
+builtin___float = float
+builtin___int = int
+if sys.version_info < (3,):
+ builtin___buffer = buffer
+ builtin___unicode = unicode
+
+
+DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
+
+class ExportTraceServiceRequest(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def resource_spans(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___trace___v1___trace_pb2___ResourceSpans]: ...
+
+ def __init__(self,
+ *,
+ resource_spans : typing___Optional[typing___Iterable[opentelemetry___proto___trace___v1___trace_pb2___ResourceSpans]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ExportTraceServiceRequest: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ExportTraceServiceRequest: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"resource_spans",b"resource_spans"]) -> None: ...
+type___ExportTraceServiceRequest = ExportTraceServiceRequest
+
+class ExportTraceServiceResponse(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ def __init__(self,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ExportTraceServiceResponse: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ExportTraceServiceResponse: ...
+type___ExportTraceServiceResponse = ExportTraceServiceResponse
diff --git a/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py
index 62e951269c8..dd08ccf6ad8 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py
@@ -18,7 +18,6 @@
package='opentelemetry.proto.common.v1',
syntax='proto3',
serialized_options=b'\n io.opentelemetry.proto.common.v1B\013CommonProtoP\001Z>github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1',
- create_key=_descriptor._internal_create_key,
serialized_pb=b'\n*opentelemetry/proto/common/v1/common.proto\x12\x1dopentelemetry.proto.common.v1\"\xf5\x01\n\x11\x41ttributeKeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12H\n\x04type\x18\x02 \x01(\x0e\x32:.opentelemetry.proto.common.v1.AttributeKeyValue.ValueType\x12\x14\n\x0cstring_value\x18\x03 \x01(\t\x12\x11\n\tint_value\x18\x04 \x01(\x03\x12\x14\n\x0c\x64ouble_value\x18\x05 \x01(\x01\x12\x12\n\nbool_value\x18\x06 \x01(\x08\"6\n\tValueType\x12\n\n\x06STRING\x10\x00\x12\x07\n\x03INT\x10\x01\x12\n\n\x06\x44OUBLE\x10\x02\x12\x08\n\x04\x42OOL\x10\x03\",\n\x0eStringKeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"7\n\x16InstrumentationLibrary\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\tBq\n io.opentelemetry.proto.common.v1B\x0b\x43ommonProtoP\x01Z>github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1b\x06proto3'
)
@@ -29,28 +28,23 @@
full_name='opentelemetry.proto.common.v1.AttributeKeyValue.ValueType',
filename=None,
file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
values=[
_descriptor.EnumValueDescriptor(
name='STRING', index=0, number=0,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='INT', index=1, number=1,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='DOUBLE', index=2, number=2,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='BOOL', index=3, number=3,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
],
containing_type=None,
serialized_options=None,
@@ -66,7 +60,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.key', index=0,
@@ -74,42 +67,42 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='type', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.type', index=1,
number=2, type=14, cpp_type=8, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='string_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.string_value', index=2,
number=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='int_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.int_value', index=3,
number=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='double_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.double_value', index=4,
number=5, type=1, cpp_type=5, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='bool_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.bool_value', index=5,
number=6, type=8, cpp_type=7, label=1,
has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -134,7 +127,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='key', full_name='opentelemetry.proto.common.v1.StringKeyValue.key', index=0,
@@ -142,14 +134,14 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='value', full_name='opentelemetry.proto.common.v1.StringKeyValue.value', 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -173,7 +165,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='opentelemetry.proto.common.v1.InstrumentationLibrary.name', index=0,
@@ -181,14 +172,14 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='version', full_name='opentelemetry.proto.common.v1.InstrumentationLibrary.version', 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
diff --git a/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi
new file mode 100644
index 00000000000..1061616570b
--- /dev/null
+++ b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi
@@ -0,0 +1,127 @@
+# @generated by generate_proto_mypy_stubs.py. Do not edit!
+import sys
+from google.protobuf.descriptor import (
+ Descriptor as google___protobuf___descriptor___Descriptor,
+ EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
+ FileDescriptor as google___protobuf___descriptor___FileDescriptor,
+)
+
+from google.protobuf.message import (
+ Message as google___protobuf___message___Message,
+)
+
+from typing import (
+ List as typing___List,
+ NewType as typing___NewType,
+ Optional as typing___Optional,
+ Text as typing___Text,
+ Tuple as typing___Tuple,
+ Union as typing___Union,
+ cast as typing___cast,
+)
+
+from typing_extensions import (
+ Literal as typing_extensions___Literal,
+)
+
+
+builtin___bool = bool
+builtin___bytes = bytes
+builtin___float = float
+builtin___int = int
+builtin___str = str
+if sys.version_info < (3,):
+ builtin___buffer = buffer
+ builtin___unicode = unicode
+
+
+DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
+
+class AttributeKeyValue(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ ValueTypeValue = typing___NewType('ValueTypeValue', builtin___int)
+ type___ValueTypeValue = ValueTypeValue
+ class ValueType(object):
+ DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
+ @classmethod
+ def Name(cls, number: builtin___int) -> builtin___str: ...
+ @classmethod
+ def Value(cls, name: builtin___str) -> AttributeKeyValue.ValueTypeValue: ...
+ @classmethod
+ def keys(cls) -> typing___List[builtin___str]: ...
+ @classmethod
+ def values(cls) -> typing___List[AttributeKeyValue.ValueTypeValue]: ...
+ @classmethod
+ def items(cls) -> typing___List[typing___Tuple[builtin___str, AttributeKeyValue.ValueTypeValue]]: ...
+ STRING = typing___cast(AttributeKeyValue.ValueTypeValue, 0)
+ INT = typing___cast(AttributeKeyValue.ValueTypeValue, 1)
+ DOUBLE = typing___cast(AttributeKeyValue.ValueTypeValue, 2)
+ BOOL = typing___cast(AttributeKeyValue.ValueTypeValue, 3)
+ STRING = typing___cast(AttributeKeyValue.ValueTypeValue, 0)
+ INT = typing___cast(AttributeKeyValue.ValueTypeValue, 1)
+ DOUBLE = typing___cast(AttributeKeyValue.ValueTypeValue, 2)
+ BOOL = typing___cast(AttributeKeyValue.ValueTypeValue, 3)
+ type___ValueType = ValueType
+
+ key: typing___Text = ...
+ type: type___AttributeKeyValue.ValueTypeValue = ...
+ string_value: typing___Text = ...
+ int_value: builtin___int = ...
+ double_value: builtin___float = ...
+ bool_value: builtin___bool = ...
+
+ def __init__(self,
+ *,
+ key : typing___Optional[typing___Text] = None,
+ type : typing___Optional[type___AttributeKeyValue.ValueTypeValue] = None,
+ string_value : typing___Optional[typing___Text] = None,
+ int_value : typing___Optional[builtin___int] = None,
+ double_value : typing___Optional[builtin___float] = None,
+ bool_value : typing___Optional[builtin___bool] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> AttributeKeyValue: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> AttributeKeyValue: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"bool_value",b"bool_value",u"double_value",b"double_value",u"int_value",b"int_value",u"key",b"key",u"string_value",b"string_value",u"type",b"type"]) -> None: ...
+type___AttributeKeyValue = AttributeKeyValue
+
+class StringKeyValue(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ key: typing___Text = ...
+ value: typing___Text = ...
+
+ def __init__(self,
+ *,
+ key : typing___Optional[typing___Text] = None,
+ value : typing___Optional[typing___Text] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> StringKeyValue: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> StringKeyValue: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> None: ...
+type___StringKeyValue = StringKeyValue
+
+class InstrumentationLibrary(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ name: typing___Text = ...
+ version: typing___Text = ...
+
+ def __init__(self,
+ *,
+ name : typing___Optional[typing___Text] = None,
+ version : typing___Optional[typing___Text] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> InstrumentationLibrary: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> InstrumentationLibrary: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"name",b"name",u"version",b"version"]) -> None: ...
+type___InstrumentationLibrary = InstrumentationLibrary
diff --git a/opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.py
index 4edaa3609d9..e4b62369a05 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.py
@@ -20,8 +20,7 @@
package='opentelemetry.proto.metrics.v1',
syntax='proto3',
serialized_options=b'\n!io.opentelemetry.proto.metrics.v1B\014MetricsProtoP\001Z?github.com/open-telemetry/opentelemetry-proto/gen/go/metrics/v1',
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n,opentelemetry/proto/metrics/v1/metrics.proto\x12\x1eopentelemetry.proto.metrics.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"\xb6\x01\n\x0fResourceMetrics\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12\x66\n\x1finstrumentation_library_metrics\x18\x02 \x03(\x0b\x32=.opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics\"\xb0\x01\n\x1dInstrumentationLibraryMetrics\x12V\n\x17instrumentation_library\x18\x01 \x01(\x0b\x32\x35.opentelemetry.proto.common.v1.InstrumentationLibrary\x12\x37\n\x07metrics\x18\x02 \x03(\x0b\x32&.opentelemetry.proto.metrics.v1.Metric\"\x8f\x03\n\x06Metric\x12K\n\x11metric_descriptor\x18\x01 \x01(\x0b\x32\x30.opentelemetry.proto.metrics.v1.MetricDescriptor\x12I\n\x11int64_data_points\x18\x02 \x03(\x0b\x32..opentelemetry.proto.metrics.v1.Int64DataPoint\x12K\n\x12\x64ouble_data_points\x18\x03 \x03(\x0b\x32/.opentelemetry.proto.metrics.v1.DoubleDataPoint\x12Q\n\x15histogram_data_points\x18\x04 \x03(\x0b\x32\x32.opentelemetry.proto.metrics.v1.HistogramDataPoint\x12M\n\x13summary_data_points\x18\x05 \x03(\x0b\x32\x30.opentelemetry.proto.metrics.v1.SummaryDataPoint\"\xfe\x02\n\x10MetricDescriptor\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\x43\n\x04type\x18\x04 \x01(\x0e\x32\x35.opentelemetry.proto.metrics.v1.MetricDescriptor.Type\x12Q\n\x0btemporality\x18\x05 \x01(\x0e\x32<.opentelemetry.proto.metrics.v1.MetricDescriptor.Temporality\"K\n\x04Type\x12\x10\n\x0cINVALID_TYPE\x10\x00\x12\t\n\x05INT64\x10\x01\x12\n\n\x06\x44OUBLE\x10\x02\x12\r\n\tHISTOGRAM\x10\x03\x12\x0b\n\x07SUMMARY\x10\x04\"T\n\x0bTemporality\x12\x17\n\x13INVALID_TEMPORALITY\x10\x00\x12\x11\n\rINSTANTANEOUS\x10\x01\x12\t\n\x05\x44\x45LTA\x10\x02\x12\x0e\n\nCUMULATIVE\x10\x03\"\x94\x01\n\x0eInt64DataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05value\x18\x04 \x01(\x03\"\x95\x01\n\x0f\x44oubleDataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05value\x18\x04 \x01(\x01\"\xf1\x03\n\x12HistogramDataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05\x63ount\x18\x04 \x01(\x04\x12\x0b\n\x03sum\x18\x05 \x01(\x01\x12J\n\x07\x62uckets\x18\x06 \x03(\x0b\x32\x39.opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket\x12\x17\n\x0f\x65xplicit_bounds\x18\x07 \x03(\x01\x1a\xe4\x01\n\x06\x42ucket\x12\r\n\x05\x63ount\x18\x01 \x01(\x04\x12T\n\x08\x65xemplar\x18\x02 \x01(\x0b\x32\x42.opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket.Exemplar\x1au\n\x08\x45xemplar\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x16\n\x0etime_unix_nano\x18\x02 \x01(\x06\x12\x42\n\x0b\x61ttachments\x18\x03 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\"\xba\x02\n\x10SummaryDataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05\x63ount\x18\x04 \x01(\x04\x12\x0b\n\x03sum\x18\x05 \x01(\x01\x12]\n\x11percentile_values\x18\x06 \x03(\x0b\x32\x42.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtPercentile\x1a\x36\n\x11ValueAtPercentile\x12\x12\n\npercentile\x18\x01 \x01(\x01\x12\r\n\x05value\x18\x02 \x01(\x01\x42t\n!io.opentelemetry.proto.metrics.v1B\x0cMetricsProtoP\x01Z?github.com/open-telemetry/opentelemetry-proto/gen/go/metrics/v1b\x06proto3'
+ serialized_pb=b'\n,opentelemetry/proto/metrics/v1/metrics.proto\x12\x1eopentelemetry.proto.metrics.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"\xb6\x01\n\x0fResourceMetrics\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12\x66\n\x1finstrumentation_library_metrics\x18\x02 \x03(\x0b\x32=.opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics\"\xb0\x01\n\x1dInstrumentationLibraryMetrics\x12V\n\x17instrumentation_library\x18\x01 \x01(\x0b\x32\x35.opentelemetry.proto.common.v1.InstrumentationLibrary\x12\x37\n\x07metrics\x18\x02 \x03(\x0b\x32&.opentelemetry.proto.metrics.v1.Metric\"\x8f\x03\n\x06Metric\x12K\n\x11metric_descriptor\x18\x01 \x01(\x0b\x32\x30.opentelemetry.proto.metrics.v1.MetricDescriptor\x12I\n\x11int64_data_points\x18\x02 \x03(\x0b\x32..opentelemetry.proto.metrics.v1.Int64DataPoint\x12K\n\x12\x64ouble_data_points\x18\x03 \x03(\x0b\x32/.opentelemetry.proto.metrics.v1.DoubleDataPoint\x12Q\n\x15histogram_data_points\x18\x04 \x03(\x0b\x32\x32.opentelemetry.proto.metrics.v1.HistogramDataPoint\x12M\n\x13summary_data_points\x18\x05 \x03(\x0b\x32\x30.opentelemetry.proto.metrics.v1.SummaryDataPoint\"\xa9\x03\n\x10MetricDescriptor\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0c\n\x04unit\x18\x03 \x01(\t\x12\x43\n\x04type\x18\x04 \x01(\x0e\x32\x35.opentelemetry.proto.metrics.v1.MetricDescriptor.Type\x12Q\n\x0btemporality\x18\x05 \x01(\x0e\x32<.opentelemetry.proto.metrics.v1.MetricDescriptor.Temporality\"v\n\x04Type\x12\x10\n\x0cINVALID_TYPE\x10\x00\x12\t\n\x05INT64\x10\x01\x12\x13\n\x0fMONOTONIC_INT64\x10\x02\x12\n\n\x06\x44OUBLE\x10\x03\x12\x14\n\x10MONOTONIC_DOUBLE\x10\x04\x12\r\n\tHISTOGRAM\x10\x05\x12\x0b\n\x07SUMMARY\x10\x06\"T\n\x0bTemporality\x12\x17\n\x13INVALID_TEMPORALITY\x10\x00\x12\x11\n\rINSTANTANEOUS\x10\x01\x12\t\n\x05\x44\x45LTA\x10\x02\x12\x0e\n\nCUMULATIVE\x10\x03\"\x94\x01\n\x0eInt64DataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05value\x18\x04 \x01(\x03\"\x95\x01\n\x0f\x44oubleDataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05value\x18\x04 \x01(\x01\"\xf1\x03\n\x12HistogramDataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05\x63ount\x18\x04 \x01(\x04\x12\x0b\n\x03sum\x18\x05 \x01(\x01\x12J\n\x07\x62uckets\x18\x06 \x03(\x0b\x32\x39.opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket\x12\x17\n\x0f\x65xplicit_bounds\x18\x07 \x03(\x01\x1a\xe4\x01\n\x06\x42ucket\x12\r\n\x05\x63ount\x18\x01 \x01(\x04\x12T\n\x08\x65xemplar\x18\x02 \x01(\x0b\x32\x42.opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket.Exemplar\x1au\n\x08\x45xemplar\x12\r\n\x05value\x18\x01 \x01(\x01\x12\x16\n\x0etime_unix_nano\x18\x02 \x01(\x06\x12\x42\n\x0b\x61ttachments\x18\x03 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\"\xba\x02\n\x10SummaryDataPoint\x12=\n\x06labels\x18\x01 \x03(\x0b\x32-.opentelemetry.proto.common.v1.StringKeyValue\x12\x1c\n\x14start_time_unix_nano\x18\x02 \x01(\x06\x12\x16\n\x0etime_unix_nano\x18\x03 \x01(\x06\x12\r\n\x05\x63ount\x18\x04 \x01(\x04\x12\x0b\n\x03sum\x18\x05 \x01(\x01\x12]\n\x11percentile_values\x18\x06 \x03(\x0b\x32\x42.opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtPercentile\x1a\x36\n\x11ValueAtPercentile\x12\x12\n\npercentile\x18\x01 \x01(\x01\x12\r\n\x05value\x18\x02 \x01(\x01\x42t\n!io.opentelemetry.proto.metrics.v1B\x0cMetricsProtoP\x01Z?github.com/open-telemetry/opentelemetry-proto/gen/go/metrics/v1b\x06proto3'
,
dependencies=[opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2.DESCRIPTOR,opentelemetry_dot_proto_dot_resource_dot_v1_dot_resource__pb2.DESCRIPTOR,])
@@ -32,38 +31,40 @@
full_name='opentelemetry.proto.metrics.v1.MetricDescriptor.Type',
filename=None,
file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
values=[
_descriptor.EnumValueDescriptor(
name='INVALID_TYPE', index=0, number=0,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='INT64', index=1, number=1,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
- name='DOUBLE', index=2, number=2,
+ name='MONOTONIC_INT64', index=2, number=2,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
- name='HISTOGRAM', index=3, number=3,
+ name='DOUBLE', index=3, number=3,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
- name='SUMMARY', index=4, number=4,
+ name='MONOTONIC_DOUBLE', index=4, number=4,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='HISTOGRAM', index=5, number=5,
+ serialized_options=None,
+ type=None),
+ _descriptor.EnumValueDescriptor(
+ name='SUMMARY', index=6, number=6,
+ serialized_options=None,
+ type=None),
],
containing_type=None,
serialized_options=None,
serialized_start=1160,
- serialized_end=1235,
+ serialized_end=1278,
)
_sym_db.RegisterEnumDescriptor(_METRICDESCRIPTOR_TYPE)
@@ -72,33 +73,28 @@
full_name='opentelemetry.proto.metrics.v1.MetricDescriptor.Temporality',
filename=None,
file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
values=[
_descriptor.EnumValueDescriptor(
name='INVALID_TEMPORALITY', index=0, number=0,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='INSTANTANEOUS', index=1, number=1,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='DELTA', index=2, number=2,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='CUMULATIVE', index=3, number=3,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
],
containing_type=None,
serialized_options=None,
- serialized_start=1237,
- serialized_end=1321,
+ serialized_start=1280,
+ serialized_end=1364,
)
_sym_db.RegisterEnumDescriptor(_METRICDESCRIPTOR_TEMPORALITY)
@@ -109,7 +105,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='resource', full_name='opentelemetry.proto.metrics.v1.ResourceMetrics.resource', index=0,
@@ -117,14 +112,14 @@
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='instrumentation_library_metrics', full_name='opentelemetry.proto.metrics.v1.ResourceMetrics.instrumentation_library_metrics', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -148,7 +143,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='instrumentation_library', full_name='opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics.instrumentation_library', index=0,
@@ -156,14 +150,14 @@
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='metrics', full_name='opentelemetry.proto.metrics.v1.InstrumentationLibraryMetrics.metrics', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -187,7 +181,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='metric_descriptor', full_name='opentelemetry.proto.metrics.v1.Metric.metric_descriptor', index=0,
@@ -195,35 +188,35 @@
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='int64_data_points', full_name='opentelemetry.proto.metrics.v1.Metric.int64_data_points', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='double_data_points', full_name='opentelemetry.proto.metrics.v1.Metric.double_data_points', index=2,
number=3, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='histogram_data_points', full_name='opentelemetry.proto.metrics.v1.Metric.histogram_data_points', index=3,
number=4, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='summary_data_points', full_name='opentelemetry.proto.metrics.v1.Metric.summary_data_points', index=4,
number=5, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -247,7 +240,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='name', full_name='opentelemetry.proto.metrics.v1.MetricDescriptor.name', index=0,
@@ -255,35 +247,35 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='description', full_name='opentelemetry.proto.metrics.v1.MetricDescriptor.description', 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='unit', full_name='opentelemetry.proto.metrics.v1.MetricDescriptor.unit', index=2,
number=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='type', full_name='opentelemetry.proto.metrics.v1.MetricDescriptor.type', index=3,
number=4, type=14, cpp_type=8, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='temporality', full_name='opentelemetry.proto.metrics.v1.MetricDescriptor.temporality', index=4,
number=5, type=14, cpp_type=8, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -299,7 +291,7 @@
oneofs=[
],
serialized_start=939,
- serialized_end=1321,
+ serialized_end=1364,
)
@@ -309,7 +301,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='labels', full_name='opentelemetry.proto.metrics.v1.Int64DataPoint.labels', index=0,
@@ -317,28 +308,28 @@
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='start_time_unix_nano', full_name='opentelemetry.proto.metrics.v1.Int64DataPoint.start_time_unix_nano', index=1,
number=2, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='time_unix_nano', full_name='opentelemetry.proto.metrics.v1.Int64DataPoint.time_unix_nano', index=2,
number=3, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='value', full_name='opentelemetry.proto.metrics.v1.Int64DataPoint.value', index=3,
number=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -351,8 +342,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1324,
- serialized_end=1472,
+ serialized_start=1367,
+ serialized_end=1515,
)
@@ -362,7 +353,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='labels', full_name='opentelemetry.proto.metrics.v1.DoubleDataPoint.labels', index=0,
@@ -370,28 +360,28 @@
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='start_time_unix_nano', full_name='opentelemetry.proto.metrics.v1.DoubleDataPoint.start_time_unix_nano', index=1,
number=2, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='time_unix_nano', full_name='opentelemetry.proto.metrics.v1.DoubleDataPoint.time_unix_nano', index=2,
number=3, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='value', full_name='opentelemetry.proto.metrics.v1.DoubleDataPoint.value', index=3,
number=4, type=1, cpp_type=5, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -404,8 +394,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1475,
- serialized_end=1624,
+ serialized_start=1518,
+ serialized_end=1667,
)
@@ -415,7 +405,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='value', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket.Exemplar.value', index=0,
@@ -423,21 +412,21 @@
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='time_unix_nano', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket.Exemplar.time_unix_nano', index=1,
number=2, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='attachments', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket.Exemplar.attachments', index=2,
number=3, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -450,8 +439,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2007,
- serialized_end=2124,
+ serialized_start=2050,
+ serialized_end=2167,
)
_HISTOGRAMDATAPOINT_BUCKET = _descriptor.Descriptor(
@@ -460,7 +449,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='count', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket.count', index=0,
@@ -468,14 +456,14 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='exemplar', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.Bucket.exemplar', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -488,8 +476,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1896,
- serialized_end=2124,
+ serialized_start=1939,
+ serialized_end=2167,
)
_HISTOGRAMDATAPOINT = _descriptor.Descriptor(
@@ -498,7 +486,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='labels', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.labels', index=0,
@@ -506,49 +493,49 @@
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='start_time_unix_nano', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.start_time_unix_nano', index=1,
number=2, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='time_unix_nano', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.time_unix_nano', index=2,
number=3, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='count', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.count', index=3,
number=4, type=4, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='sum', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.sum', index=4,
number=5, type=1, cpp_type=5, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='buckets', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.buckets', index=5,
number=6, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='explicit_bounds', full_name='opentelemetry.proto.metrics.v1.HistogramDataPoint.explicit_bounds', index=6,
number=7, type=1, cpp_type=5, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -561,8 +548,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1627,
- serialized_end=2124,
+ serialized_start=1670,
+ serialized_end=2167,
)
@@ -572,7 +559,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='percentile', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtPercentile.percentile', index=0,
@@ -580,14 +566,14 @@
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='value', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtPercentile.value', index=1,
number=2, type=1, cpp_type=5, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -600,8 +586,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2387,
- serialized_end=2441,
+ serialized_start=2430,
+ serialized_end=2484,
)
_SUMMARYDATAPOINT = _descriptor.Descriptor(
@@ -610,7 +596,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='labels', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.labels', index=0,
@@ -618,42 +603,42 @@
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='start_time_unix_nano', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.start_time_unix_nano', index=1,
number=2, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='time_unix_nano', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.time_unix_nano', index=2,
number=3, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='count', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.count', index=3,
number=4, type=4, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='sum', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.sum', index=4,
number=5, type=1, cpp_type=5, label=1,
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='percentile_values', full_name='opentelemetry.proto.metrics.v1.SummaryDataPoint.percentile_values', index=5,
number=6, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -666,8 +651,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=2127,
- serialized_end=2441,
+ serialized_start=2170,
+ serialized_end=2484,
)
_RESOURCEMETRICS.fields_by_name['resource'].message_type = opentelemetry_dot_proto_dot_resource_dot_v1_dot_resource__pb2._RESOURCE
diff --git a/opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.pyi
new file mode 100644
index 00000000000..964e23e3a86
--- /dev/null
+++ b/opentelemetry-proto/src/opentelemetry/proto/metrics/v1/metrics_pb2.pyi
@@ -0,0 +1,394 @@
+# @generated by generate_proto_mypy_stubs.py. Do not edit!
+import sys
+from google.protobuf.descriptor import (
+ Descriptor as google___protobuf___descriptor___Descriptor,
+ EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
+ FileDescriptor as google___protobuf___descriptor___FileDescriptor,
+)
+
+from google.protobuf.internal.containers import (
+ RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
+ RepeatedScalarFieldContainer as google___protobuf___internal___containers___RepeatedScalarFieldContainer,
+)
+
+from google.protobuf.message import (
+ Message as google___protobuf___message___Message,
+)
+
+from opentelemetry.proto.common.v1.common_pb2 import (
+ InstrumentationLibrary as opentelemetry___proto___common___v1___common_pb2___InstrumentationLibrary,
+ StringKeyValue as opentelemetry___proto___common___v1___common_pb2___StringKeyValue,
+)
+
+from opentelemetry.proto.resource.v1.resource_pb2 import (
+ Resource as opentelemetry___proto___resource___v1___resource_pb2___Resource,
+)
+
+from typing import (
+ Iterable as typing___Iterable,
+ List as typing___List,
+ NewType as typing___NewType,
+ Optional as typing___Optional,
+ Text as typing___Text,
+ Tuple as typing___Tuple,
+ Union as typing___Union,
+ cast as typing___cast,
+)
+
+from typing_extensions import (
+ Literal as typing_extensions___Literal,
+)
+
+
+builtin___bool = bool
+builtin___bytes = bytes
+builtin___float = float
+builtin___int = int
+builtin___str = str
+if sys.version_info < (3,):
+ builtin___buffer = buffer
+ builtin___unicode = unicode
+
+
+DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
+
+class ResourceMetrics(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def resource(self) -> opentelemetry___proto___resource___v1___resource_pb2___Resource: ...
+
+ @property
+ def instrumentation_library_metrics(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___InstrumentationLibraryMetrics]: ...
+
+ def __init__(self,
+ *,
+ resource : typing___Optional[opentelemetry___proto___resource___v1___resource_pb2___Resource] = None,
+ instrumentation_library_metrics : typing___Optional[typing___Iterable[type___InstrumentationLibraryMetrics]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ResourceMetrics: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ResourceMetrics: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"resource",b"resource"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"instrumentation_library_metrics",b"instrumentation_library_metrics",u"resource",b"resource"]) -> None: ...
+type___ResourceMetrics = ResourceMetrics
+
+class InstrumentationLibraryMetrics(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def instrumentation_library(self) -> opentelemetry___proto___common___v1___common_pb2___InstrumentationLibrary: ...
+
+ @property
+ def metrics(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___Metric]: ...
+
+ def __init__(self,
+ *,
+ instrumentation_library : typing___Optional[opentelemetry___proto___common___v1___common_pb2___InstrumentationLibrary] = None,
+ metrics : typing___Optional[typing___Iterable[type___Metric]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> InstrumentationLibraryMetrics: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> InstrumentationLibraryMetrics: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"instrumentation_library",b"instrumentation_library"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"instrumentation_library",b"instrumentation_library",u"metrics",b"metrics"]) -> None: ...
+type___InstrumentationLibraryMetrics = InstrumentationLibraryMetrics
+
+class Metric(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def metric_descriptor(self) -> type___MetricDescriptor: ...
+
+ @property
+ def int64_data_points(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___Int64DataPoint]: ...
+
+ @property
+ def double_data_points(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___DoubleDataPoint]: ...
+
+ @property
+ def histogram_data_points(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___HistogramDataPoint]: ...
+
+ @property
+ def summary_data_points(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___SummaryDataPoint]: ...
+
+ def __init__(self,
+ *,
+ metric_descriptor : typing___Optional[type___MetricDescriptor] = None,
+ int64_data_points : typing___Optional[typing___Iterable[type___Int64DataPoint]] = None,
+ double_data_points : typing___Optional[typing___Iterable[type___DoubleDataPoint]] = None,
+ histogram_data_points : typing___Optional[typing___Iterable[type___HistogramDataPoint]] = None,
+ summary_data_points : typing___Optional[typing___Iterable[type___SummaryDataPoint]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> Metric: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Metric: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"metric_descriptor",b"metric_descriptor"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"double_data_points",b"double_data_points",u"histogram_data_points",b"histogram_data_points",u"int64_data_points",b"int64_data_points",u"metric_descriptor",b"metric_descriptor",u"summary_data_points",b"summary_data_points"]) -> None: ...
+type___Metric = Metric
+
+class MetricDescriptor(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ TypeValue = typing___NewType('TypeValue', builtin___int)
+ type___TypeValue = TypeValue
+ class Type(object):
+ DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
+ @classmethod
+ def Name(cls, number: builtin___int) -> builtin___str: ...
+ @classmethod
+ def Value(cls, name: builtin___str) -> MetricDescriptor.TypeValue: ...
+ @classmethod
+ def keys(cls) -> typing___List[builtin___str]: ...
+ @classmethod
+ def values(cls) -> typing___List[MetricDescriptor.TypeValue]: ...
+ @classmethod
+ def items(cls) -> typing___List[typing___Tuple[builtin___str, MetricDescriptor.TypeValue]]: ...
+ INVALID_TYPE = typing___cast(MetricDescriptor.TypeValue, 0)
+ INT64 = typing___cast(MetricDescriptor.TypeValue, 1)
+ MONOTONIC_INT64 = typing___cast(MetricDescriptor.TypeValue, 2)
+ DOUBLE = typing___cast(MetricDescriptor.TypeValue, 3)
+ MONOTONIC_DOUBLE = typing___cast(MetricDescriptor.TypeValue, 4)
+ HISTOGRAM = typing___cast(MetricDescriptor.TypeValue, 5)
+ SUMMARY = typing___cast(MetricDescriptor.TypeValue, 6)
+ INVALID_TYPE = typing___cast(MetricDescriptor.TypeValue, 0)
+ INT64 = typing___cast(MetricDescriptor.TypeValue, 1)
+ MONOTONIC_INT64 = typing___cast(MetricDescriptor.TypeValue, 2)
+ DOUBLE = typing___cast(MetricDescriptor.TypeValue, 3)
+ MONOTONIC_DOUBLE = typing___cast(MetricDescriptor.TypeValue, 4)
+ HISTOGRAM = typing___cast(MetricDescriptor.TypeValue, 5)
+ SUMMARY = typing___cast(MetricDescriptor.TypeValue, 6)
+ type___Type = Type
+
+ TemporalityValue = typing___NewType('TemporalityValue', builtin___int)
+ type___TemporalityValue = TemporalityValue
+ class Temporality(object):
+ DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
+ @classmethod
+ def Name(cls, number: builtin___int) -> builtin___str: ...
+ @classmethod
+ def Value(cls, name: builtin___str) -> MetricDescriptor.TemporalityValue: ...
+ @classmethod
+ def keys(cls) -> typing___List[builtin___str]: ...
+ @classmethod
+ def values(cls) -> typing___List[MetricDescriptor.TemporalityValue]: ...
+ @classmethod
+ def items(cls) -> typing___List[typing___Tuple[builtin___str, MetricDescriptor.TemporalityValue]]: ...
+ INVALID_TEMPORALITY = typing___cast(MetricDescriptor.TemporalityValue, 0)
+ INSTANTANEOUS = typing___cast(MetricDescriptor.TemporalityValue, 1)
+ DELTA = typing___cast(MetricDescriptor.TemporalityValue, 2)
+ CUMULATIVE = typing___cast(MetricDescriptor.TemporalityValue, 3)
+ INVALID_TEMPORALITY = typing___cast(MetricDescriptor.TemporalityValue, 0)
+ INSTANTANEOUS = typing___cast(MetricDescriptor.TemporalityValue, 1)
+ DELTA = typing___cast(MetricDescriptor.TemporalityValue, 2)
+ CUMULATIVE = typing___cast(MetricDescriptor.TemporalityValue, 3)
+ type___Temporality = Temporality
+
+ name: typing___Text = ...
+ description: typing___Text = ...
+ unit: typing___Text = ...
+ type: type___MetricDescriptor.TypeValue = ...
+ temporality: type___MetricDescriptor.TemporalityValue = ...
+
+ def __init__(self,
+ *,
+ name : typing___Optional[typing___Text] = None,
+ description : typing___Optional[typing___Text] = None,
+ unit : typing___Optional[typing___Text] = None,
+ type : typing___Optional[type___MetricDescriptor.TypeValue] = None,
+ temporality : typing___Optional[type___MetricDescriptor.TemporalityValue] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> MetricDescriptor: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> MetricDescriptor: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"description",b"description",u"name",b"name",u"temporality",b"temporality",u"type",b"type",u"unit",b"unit"]) -> None: ...
+type___MetricDescriptor = MetricDescriptor
+
+class Int64DataPoint(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ start_time_unix_nano: builtin___int = ...
+ time_unix_nano: builtin___int = ...
+ value: builtin___int = ...
+
+ @property
+ def labels(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]: ...
+
+ def __init__(self,
+ *,
+ labels : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]] = None,
+ start_time_unix_nano : typing___Optional[builtin___int] = None,
+ time_unix_nano : typing___Optional[builtin___int] = None,
+ value : typing___Optional[builtin___int] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> Int64DataPoint: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Int64DataPoint: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"labels",b"labels",u"start_time_unix_nano",b"start_time_unix_nano",u"time_unix_nano",b"time_unix_nano",u"value",b"value"]) -> None: ...
+type___Int64DataPoint = Int64DataPoint
+
+class DoubleDataPoint(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ start_time_unix_nano: builtin___int = ...
+ time_unix_nano: builtin___int = ...
+ value: builtin___float = ...
+
+ @property
+ def labels(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]: ...
+
+ def __init__(self,
+ *,
+ labels : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]] = None,
+ start_time_unix_nano : typing___Optional[builtin___int] = None,
+ time_unix_nano : typing___Optional[builtin___int] = None,
+ value : typing___Optional[builtin___float] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> DoubleDataPoint: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> DoubleDataPoint: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"labels",b"labels",u"start_time_unix_nano",b"start_time_unix_nano",u"time_unix_nano",b"time_unix_nano",u"value",b"value"]) -> None: ...
+type___DoubleDataPoint = DoubleDataPoint
+
+class HistogramDataPoint(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ class Bucket(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ class Exemplar(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ value: builtin___float = ...
+ time_unix_nano: builtin___int = ...
+
+ @property
+ def attachments(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]: ...
+
+ def __init__(self,
+ *,
+ value : typing___Optional[builtin___float] = None,
+ time_unix_nano : typing___Optional[builtin___int] = None,
+ attachments : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> HistogramDataPoint.Bucket.Exemplar: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> HistogramDataPoint.Bucket.Exemplar: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"attachments",b"attachments",u"time_unix_nano",b"time_unix_nano",u"value",b"value"]) -> None: ...
+ type___Exemplar = Exemplar
+
+ count: builtin___int = ...
+
+ @property
+ def exemplar(self) -> type___HistogramDataPoint.Bucket.Exemplar: ...
+
+ def __init__(self,
+ *,
+ count : typing___Optional[builtin___int] = None,
+ exemplar : typing___Optional[type___HistogramDataPoint.Bucket.Exemplar] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> HistogramDataPoint.Bucket: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> HistogramDataPoint.Bucket: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"exemplar",b"exemplar"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"count",b"count",u"exemplar",b"exemplar"]) -> None: ...
+ type___Bucket = Bucket
+
+ start_time_unix_nano: builtin___int = ...
+ time_unix_nano: builtin___int = ...
+ count: builtin___int = ...
+ sum: builtin___float = ...
+ explicit_bounds: google___protobuf___internal___containers___RepeatedScalarFieldContainer[builtin___float] = ...
+
+ @property
+ def labels(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]: ...
+
+ @property
+ def buckets(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___HistogramDataPoint.Bucket]: ...
+
+ def __init__(self,
+ *,
+ labels : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]] = None,
+ start_time_unix_nano : typing___Optional[builtin___int] = None,
+ time_unix_nano : typing___Optional[builtin___int] = None,
+ count : typing___Optional[builtin___int] = None,
+ sum : typing___Optional[builtin___float] = None,
+ buckets : typing___Optional[typing___Iterable[type___HistogramDataPoint.Bucket]] = None,
+ explicit_bounds : typing___Optional[typing___Iterable[builtin___float]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> HistogramDataPoint: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> HistogramDataPoint: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"buckets",b"buckets",u"count",b"count",u"explicit_bounds",b"explicit_bounds",u"labels",b"labels",u"start_time_unix_nano",b"start_time_unix_nano",u"sum",b"sum",u"time_unix_nano",b"time_unix_nano"]) -> None: ...
+type___HistogramDataPoint = HistogramDataPoint
+
+class SummaryDataPoint(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ class ValueAtPercentile(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ percentile: builtin___float = ...
+ value: builtin___float = ...
+
+ def __init__(self,
+ *,
+ percentile : typing___Optional[builtin___float] = None,
+ value : typing___Optional[builtin___float] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> SummaryDataPoint.ValueAtPercentile: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> SummaryDataPoint.ValueAtPercentile: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"percentile",b"percentile",u"value",b"value"]) -> None: ...
+ type___ValueAtPercentile = ValueAtPercentile
+
+ start_time_unix_nano: builtin___int = ...
+ time_unix_nano: builtin___int = ...
+ count: builtin___int = ...
+ sum: builtin___float = ...
+
+ @property
+ def labels(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]: ...
+
+ @property
+ def percentile_values(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___SummaryDataPoint.ValueAtPercentile]: ...
+
+ def __init__(self,
+ *,
+ labels : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___StringKeyValue]] = None,
+ start_time_unix_nano : typing___Optional[builtin___int] = None,
+ time_unix_nano : typing___Optional[builtin___int] = None,
+ count : typing___Optional[builtin___int] = None,
+ sum : typing___Optional[builtin___float] = None,
+ percentile_values : typing___Optional[typing___Iterable[type___SummaryDataPoint.ValueAtPercentile]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> SummaryDataPoint: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> SummaryDataPoint: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"count",b"count",u"labels",b"labels",u"percentile_values",b"percentile_values",u"start_time_unix_nano",b"start_time_unix_nano",u"sum",b"sum",u"time_unix_nano",b"time_unix_nano"]) -> None: ...
+type___SummaryDataPoint = SummaryDataPoint
diff --git a/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py
index 5126a1b76e6..95dcf479ff6 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py
@@ -19,7 +19,6 @@
package='opentelemetry.proto.resource.v1',
syntax='proto3',
serialized_options=b'\n\"io.opentelemetry.proto.resource.v1B\rResourceProtoP\001Z@github.com/open-telemetry/opentelemetry-proto/gen/go/resource/v1',
- create_key=_descriptor._internal_create_key,
serialized_pb=b'\n.opentelemetry/proto/resource/v1/resource.proto\x12\x1fopentelemetry.proto.resource.v1\x1a*opentelemetry/proto/common/v1/common.proto\"r\n\x08Resource\x12\x44\n\nattributes\x18\x01 \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x02 \x01(\rBw\n\"io.opentelemetry.proto.resource.v1B\rResourceProtoP\x01Z@github.com/open-telemetry/opentelemetry-proto/gen/go/resource/v1b\x06proto3'
,
dependencies=[opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2.DESCRIPTOR,])
@@ -33,7 +32,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='attributes', full_name='opentelemetry.proto.resource.v1.Resource.attributes', index=0,
@@ -41,14 +39,14 @@
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='dropped_attributes_count', full_name='opentelemetry.proto.resource.v1.Resource.dropped_attributes_count', index=1,
number=2, type=13, cpp_type=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
diff --git a/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi
new file mode 100644
index 00000000000..2f9f5afca22
--- /dev/null
+++ b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi
@@ -0,0 +1,61 @@
+# @generated by generate_proto_mypy_stubs.py. Do not edit!
+import sys
+from google.protobuf.descriptor import (
+ Descriptor as google___protobuf___descriptor___Descriptor,
+ FileDescriptor as google___protobuf___descriptor___FileDescriptor,
+)
+
+from google.protobuf.internal.containers import (
+ RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
+)
+
+from google.protobuf.message import (
+ Message as google___protobuf___message___Message,
+)
+
+from opentelemetry.proto.common.v1.common_pb2 import (
+ AttributeKeyValue as opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue,
+)
+
+from typing import (
+ Iterable as typing___Iterable,
+ Optional as typing___Optional,
+ Union as typing___Union,
+)
+
+from typing_extensions import (
+ Literal as typing_extensions___Literal,
+)
+
+
+builtin___bool = bool
+builtin___bytes = bytes
+builtin___float = float
+builtin___int = int
+if sys.version_info < (3,):
+ builtin___buffer = buffer
+ builtin___unicode = unicode
+
+
+DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
+
+class Resource(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ dropped_attributes_count: builtin___int = ...
+
+ @property
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+
+ def __init__(self,
+ *,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ dropped_attributes_count : typing___Optional[builtin___int] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> Resource: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Resource: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"attributes",b"attributes",u"dropped_attributes_count",b"dropped_attributes_count"]) -> None: ...
+type___Resource = Resource
diff --git a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.py
index ad1857d37b5..de6ca90f5f1 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.py
@@ -18,7 +18,6 @@
package='opentelemetry.proto.trace.v1',
syntax='proto3',
serialized_options=b'\n\037io.opentelemetry.proto.trace.v1B\020TraceConfigProtoP\001ZGgithub.com/open-telemetry/opentelemetry-proto/gen/go/collector/trace/v1',
- create_key=_descriptor._internal_create_key,
serialized_pb=b'\n/opentelemetry/proto/trace/v1/trace_config.proto\x12\x1copentelemetry.proto.trace.v1\"\xc8\x03\n\x0bTraceConfig\x12I\n\x10\x63onstant_sampler\x18\x01 \x01(\x0b\x32-.opentelemetry.proto.trace.v1.ConstantSamplerH\x00\x12O\n\x13probability_sampler\x18\x02 \x01(\x0b\x32\x30.opentelemetry.proto.trace.v1.ProbabilitySamplerH\x00\x12R\n\x15rate_limiting_sampler\x18\x03 \x01(\x0b\x32\x31.opentelemetry.proto.trace.v1.RateLimitingSamplerH\x00\x12 \n\x18max_number_of_attributes\x18\x04 \x01(\x03\x12\"\n\x1amax_number_of_timed_events\x18\x05 \x01(\x03\x12\x30\n(max_number_of_attributes_per_timed_event\x18\x06 \x01(\x03\x12\x1b\n\x13max_number_of_links\x18\x07 \x01(\x03\x12)\n!max_number_of_attributes_per_link\x18\x08 \x01(\x03\x42\t\n\x07sampler\"\xa9\x01\n\x0f\x43onstantSampler\x12P\n\x08\x64\x65\x63ision\x18\x01 \x01(\x0e\x32>.opentelemetry.proto.trace.v1.ConstantSampler.ConstantDecision\"D\n\x10\x43onstantDecision\x12\x0e\n\nALWAYS_OFF\x10\x00\x12\r\n\tALWAYS_ON\x10\x01\x12\x11\n\rALWAYS_PARENT\x10\x02\"1\n\x12ProbabilitySampler\x12\x1b\n\x13samplingProbability\x18\x01 \x01(\x01\"\"\n\x13RateLimitingSampler\x12\x0b\n\x03qps\x18\x01 \x01(\x03\x42~\n\x1fio.opentelemetry.proto.trace.v1B\x10TraceConfigProtoP\x01ZGgithub.com/open-telemetry/opentelemetry-proto/gen/go/collector/trace/v1b\x06proto3'
)
@@ -29,23 +28,19 @@
full_name='opentelemetry.proto.trace.v1.ConstantSampler.ConstantDecision',
filename=None,
file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
values=[
_descriptor.EnumValueDescriptor(
name='ALWAYS_OFF', index=0, number=0,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='ALWAYS_ON', index=1, number=1,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='ALWAYS_PARENT', index=2, number=2,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
],
containing_type=None,
serialized_options=None,
@@ -61,7 +56,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='constant_sampler', full_name='opentelemetry.proto.trace.v1.TraceConfig.constant_sampler', index=0,
@@ -69,56 +63,56 @@
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='probability_sampler', full_name='opentelemetry.proto.trace.v1.TraceConfig.probability_sampler', index=1,
number=2, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='rate_limiting_sampler', full_name='opentelemetry.proto.trace.v1.TraceConfig.rate_limiting_sampler', index=2,
number=3, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='max_number_of_attributes', full_name='opentelemetry.proto.trace.v1.TraceConfig.max_number_of_attributes', index=3,
number=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='max_number_of_timed_events', full_name='opentelemetry.proto.trace.v1.TraceConfig.max_number_of_timed_events', index=4,
number=5, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='max_number_of_attributes_per_timed_event', full_name='opentelemetry.proto.trace.v1.TraceConfig.max_number_of_attributes_per_timed_event', index=5,
number=6, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='max_number_of_links', full_name='opentelemetry.proto.trace.v1.TraceConfig.max_number_of_links', index=6,
number=7, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='max_number_of_attributes_per_link', full_name='opentelemetry.proto.trace.v1.TraceConfig.max_number_of_attributes_per_link', index=7,
number=8, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -132,9 +126,7 @@
oneofs=[
_descriptor.OneofDescriptor(
name='sampler', full_name='opentelemetry.proto.trace.v1.TraceConfig.sampler',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
+ index=0, containing_type=None, fields=[]),
],
serialized_start=82,
serialized_end=538,
@@ -147,7 +139,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='decision', full_name='opentelemetry.proto.trace.v1.ConstantSampler.decision', index=0,
@@ -155,7 +146,7 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -180,7 +171,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='samplingProbability', full_name='opentelemetry.proto.trace.v1.ProbabilitySampler.samplingProbability', index=0,
@@ -188,7 +178,7 @@
has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -212,7 +202,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='qps', full_name='opentelemetry.proto.trace.v1.RateLimitingSampler.qps', index=0,
@@ -220,7 +209,7 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
diff --git a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.pyi
new file mode 100644
index 00000000000..9cee74883c7
--- /dev/null
+++ b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_config_pb2.pyi
@@ -0,0 +1,149 @@
+# @generated by generate_proto_mypy_stubs.py. Do not edit!
+import sys
+from google.protobuf.descriptor import (
+ Descriptor as google___protobuf___descriptor___Descriptor,
+ EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
+ FileDescriptor as google___protobuf___descriptor___FileDescriptor,
+)
+
+from google.protobuf.message import (
+ Message as google___protobuf___message___Message,
+)
+
+from typing import (
+ List as typing___List,
+ NewType as typing___NewType,
+ Optional as typing___Optional,
+ Tuple as typing___Tuple,
+ Union as typing___Union,
+ cast as typing___cast,
+)
+
+from typing_extensions import (
+ Literal as typing_extensions___Literal,
+)
+
+
+builtin___bool = bool
+builtin___bytes = bytes
+builtin___float = float
+builtin___int = int
+builtin___str = str
+if sys.version_info < (3,):
+ builtin___buffer = buffer
+ builtin___unicode = unicode
+
+
+DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
+
+class TraceConfig(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ max_number_of_attributes: builtin___int = ...
+ max_number_of_timed_events: builtin___int = ...
+ max_number_of_attributes_per_timed_event: builtin___int = ...
+ max_number_of_links: builtin___int = ...
+ max_number_of_attributes_per_link: builtin___int = ...
+
+ @property
+ def constant_sampler(self) -> type___ConstantSampler: ...
+
+ @property
+ def probability_sampler(self) -> type___ProbabilitySampler: ...
+
+ @property
+ def rate_limiting_sampler(self) -> type___RateLimitingSampler: ...
+
+ def __init__(self,
+ *,
+ constant_sampler : typing___Optional[type___ConstantSampler] = None,
+ probability_sampler : typing___Optional[type___ProbabilitySampler] = None,
+ rate_limiting_sampler : typing___Optional[type___RateLimitingSampler] = None,
+ max_number_of_attributes : typing___Optional[builtin___int] = None,
+ max_number_of_timed_events : typing___Optional[builtin___int] = None,
+ max_number_of_attributes_per_timed_event : typing___Optional[builtin___int] = None,
+ max_number_of_links : typing___Optional[builtin___int] = None,
+ max_number_of_attributes_per_link : typing___Optional[builtin___int] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> TraceConfig: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> TraceConfig: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"constant_sampler",b"constant_sampler",u"probability_sampler",b"probability_sampler",u"rate_limiting_sampler",b"rate_limiting_sampler",u"sampler",b"sampler"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"constant_sampler",b"constant_sampler",u"max_number_of_attributes",b"max_number_of_attributes",u"max_number_of_attributes_per_link",b"max_number_of_attributes_per_link",u"max_number_of_attributes_per_timed_event",b"max_number_of_attributes_per_timed_event",u"max_number_of_links",b"max_number_of_links",u"max_number_of_timed_events",b"max_number_of_timed_events",u"probability_sampler",b"probability_sampler",u"rate_limiting_sampler",b"rate_limiting_sampler",u"sampler",b"sampler"]) -> None: ...
+ def WhichOneof(self, oneof_group: typing_extensions___Literal[u"sampler",b"sampler"]) -> typing_extensions___Literal["constant_sampler","probability_sampler","rate_limiting_sampler"]: ...
+type___TraceConfig = TraceConfig
+
+class ConstantSampler(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ ConstantDecisionValue = typing___NewType('ConstantDecisionValue', builtin___int)
+ type___ConstantDecisionValue = ConstantDecisionValue
+ class ConstantDecision(object):
+ DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
+ @classmethod
+ def Name(cls, number: builtin___int) -> builtin___str: ...
+ @classmethod
+ def Value(cls, name: builtin___str) -> ConstantSampler.ConstantDecisionValue: ...
+ @classmethod
+ def keys(cls) -> typing___List[builtin___str]: ...
+ @classmethod
+ def values(cls) -> typing___List[ConstantSampler.ConstantDecisionValue]: ...
+ @classmethod
+ def items(cls) -> typing___List[typing___Tuple[builtin___str, ConstantSampler.ConstantDecisionValue]]: ...
+ ALWAYS_OFF = typing___cast(ConstantSampler.ConstantDecisionValue, 0)
+ ALWAYS_ON = typing___cast(ConstantSampler.ConstantDecisionValue, 1)
+ ALWAYS_PARENT = typing___cast(ConstantSampler.ConstantDecisionValue, 2)
+ ALWAYS_OFF = typing___cast(ConstantSampler.ConstantDecisionValue, 0)
+ ALWAYS_ON = typing___cast(ConstantSampler.ConstantDecisionValue, 1)
+ ALWAYS_PARENT = typing___cast(ConstantSampler.ConstantDecisionValue, 2)
+ type___ConstantDecision = ConstantDecision
+
+ decision: type___ConstantSampler.ConstantDecisionValue = ...
+
+ def __init__(self,
+ *,
+ decision : typing___Optional[type___ConstantSampler.ConstantDecisionValue] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ConstantSampler: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ConstantSampler: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"decision",b"decision"]) -> None: ...
+type___ConstantSampler = ConstantSampler
+
+class ProbabilitySampler(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ samplingProbability: builtin___float = ...
+
+ def __init__(self,
+ *,
+ samplingProbability : typing___Optional[builtin___float] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ProbabilitySampler: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ProbabilitySampler: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"samplingProbability",b"samplingProbability"]) -> None: ...
+type___ProbabilitySampler = ProbabilitySampler
+
+class RateLimitingSampler(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ qps: builtin___int = ...
+
+ def __init__(self,
+ *,
+ qps : typing___Optional[builtin___int] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> RateLimitingSampler: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> RateLimitingSampler: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"qps",b"qps"]) -> None: ...
+type___RateLimitingSampler = RateLimitingSampler
diff --git a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py
index cea946eebe2..0b8bc152486 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py
@@ -20,7 +20,6 @@
package='opentelemetry.proto.trace.v1',
syntax='proto3',
serialized_options=b'\n\037io.opentelemetry.proto.trace.v1B\nTraceProtoP\001Z=github.com/open-telemetry/opentelemetry-proto/gen/go/trace/v1',
- create_key=_descriptor._internal_create_key,
serialized_pb=b'\n(opentelemetry/proto/trace/v1/trace.proto\x12\x1copentelemetry.proto.trace.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"\xae\x01\n\rResourceSpans\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12`\n\x1dinstrumentation_library_spans\x18\x02 \x03(\x0b\x32\x39.opentelemetry.proto.trace.v1.InstrumentationLibrarySpans\"\xa8\x01\n\x1bInstrumentationLibrarySpans\x12V\n\x17instrumentation_library\x18\x01 \x01(\x0b\x32\x35.opentelemetry.proto.common.v1.InstrumentationLibrary\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\"\xce\x07\n\x04Span\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12\x16\n\x0eparent_span_id\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x39\n\x04kind\x18\x06 \x01(\x0e\x32+.opentelemetry.proto.trace.v1.Span.SpanKind\x12\x1c\n\x14start_time_unix_nano\x18\x07 \x01(\x06\x12\x1a\n\x12\x65nd_time_unix_nano\x18\x08 \x01(\x06\x12\x44\n\nattributes\x18\t \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\n \x01(\r\x12\x38\n\x06\x65vents\x18\x0b \x03(\x0b\x32(.opentelemetry.proto.trace.v1.Span.Event\x12\x1c\n\x14\x64ropped_events_count\x18\x0c \x01(\r\x12\x36\n\x05links\x18\r \x03(\x0b\x32\'.opentelemetry.proto.trace.v1.Span.Link\x12\x1b\n\x13\x64ropped_links_count\x18\x0e \x01(\r\x12\x34\n\x06status\x18\x0f \x01(\x0b\x32$.opentelemetry.proto.trace.v1.Status\x1a\x95\x01\n\x05\x45vent\x12\x16\n\x0etime_unix_nano\x18\x01 \x01(\x06\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\nattributes\x18\x03 \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x04 \x01(\r\x1a\xa6\x01\n\x04Link\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12\x44\n\nattributes\x18\x04 \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x05 \x01(\r\"g\n\x08SpanKind\x12\x19\n\x15SPAN_KIND_UNSPECIFIED\x10\x00\x12\x0c\n\x08INTERNAL\x10\x01\x12\n\n\x06SERVER\x10\x02\x12\n\n\x06\x43LIENT\x10\x03\x12\x0c\n\x08PRODUCER\x10\x04\x12\x0c\n\x08\x43ONSUMER\x10\x05\"\x98\x03\n\x06Status\x12=\n\x04\x63ode\x18\x01 \x01(\x0e\x32/.opentelemetry.proto.trace.v1.Status.StatusCode\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xbd\x02\n\nStatusCode\x12\x06\n\x02Ok\x10\x00\x12\r\n\tCancelled\x10\x01\x12\x10\n\x0cUnknownError\x10\x02\x12\x13\n\x0fInvalidArgument\x10\x03\x12\x14\n\x10\x44\x65\x61\x64lineExceeded\x10\x04\x12\x0c\n\x08NotFound\x10\x05\x12\x11\n\rAlreadyExists\x10\x06\x12\x14\n\x10PermissionDenied\x10\x07\x12\x15\n\x11ResourceExhausted\x10\x08\x12\x16\n\x12\x46\x61iledPrecondition\x10\t\x12\x0b\n\x07\x41\x62orted\x10\n\x12\x0e\n\nOutOfRange\x10\x0b\x12\x11\n\rUnimplemented\x10\x0c\x12\x11\n\rInternalError\x10\r\x12\x0f\n\x0bUnavailable\x10\x0e\x12\x0c\n\x08\x44\x61taLoss\x10\x0f\x12\x13\n\x0fUnauthenticated\x10\x10\x42n\n\x1fio.opentelemetry.proto.trace.v1B\nTraceProtoP\x01Z=github.com/open-telemetry/opentelemetry-proto/gen/go/trace/v1b\x06proto3'
,
dependencies=[opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2.DESCRIPTOR,opentelemetry_dot_proto_dot_resource_dot_v1_dot_resource__pb2.DESCRIPTOR,])
@@ -32,38 +31,31 @@
full_name='opentelemetry.proto.trace.v1.Span.SpanKind',
filename=None,
file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
values=[
_descriptor.EnumValueDescriptor(
name='SPAN_KIND_UNSPECIFIED', index=0, number=0,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='INTERNAL', index=1, number=1,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='SERVER', index=2, number=2,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='CLIENT', index=3, number=3,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='PRODUCER', index=4, number=4,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='CONSUMER', index=5, number=5,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
],
containing_type=None,
serialized_options=None,
@@ -77,93 +69,75 @@
full_name='opentelemetry.proto.trace.v1.Status.StatusCode',
filename=None,
file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
values=[
_descriptor.EnumValueDescriptor(
name='Ok', index=0, number=0,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='Cancelled', index=1, number=1,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='UnknownError', index=2, number=2,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='InvalidArgument', index=3, number=3,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='DeadlineExceeded', index=4, number=4,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='NotFound', index=5, number=5,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='AlreadyExists', index=6, number=6,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='PermissionDenied', index=7, number=7,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='ResourceExhausted', index=8, number=8,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='FailedPrecondition', index=9, number=9,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='Aborted', index=10, number=10,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='OutOfRange', index=11, number=11,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='Unimplemented', index=12, number=12,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='InternalError', index=13, number=13,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='Unavailable', index=14, number=14,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='DataLoss', index=15, number=15,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
_descriptor.EnumValueDescriptor(
name='Unauthenticated', index=16, number=16,
serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
+ type=None),
],
containing_type=None,
serialized_options=None,
@@ -179,7 +153,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='resource', full_name='opentelemetry.proto.trace.v1.ResourceSpans.resource', index=0,
@@ -187,14 +160,14 @@
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='instrumentation_library_spans', full_name='opentelemetry.proto.trace.v1.ResourceSpans.instrumentation_library_spans', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -218,7 +191,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='instrumentation_library', full_name='opentelemetry.proto.trace.v1.InstrumentationLibrarySpans.instrumentation_library', index=0,
@@ -226,14 +198,14 @@
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='spans', full_name='opentelemetry.proto.trace.v1.InstrumentationLibrarySpans.spans', index=1,
number=2, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -257,7 +229,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='time_unix_nano', full_name='opentelemetry.proto.trace.v1.Span.Event.time_unix_nano', index=0,
@@ -265,28 +236,28 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='name', full_name='opentelemetry.proto.trace.v1.Span.Event.name', 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='attributes', full_name='opentelemetry.proto.trace.v1.Span.Event.attributes', index=2,
number=3, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='dropped_attributes_count', full_name='opentelemetry.proto.trace.v1.Span.Event.dropped_attributes_count', index=3,
number=4, type=13, cpp_type=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -309,7 +280,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='trace_id', full_name='opentelemetry.proto.trace.v1.Span.Link.trace_id', index=0,
@@ -317,35 +287,35 @@
has_default_value=False, default_value=b"",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='span_id', full_name='opentelemetry.proto.trace.v1.Span.Link.span_id', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=b"",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='trace_state', full_name='opentelemetry.proto.trace.v1.Span.Link.trace_state', index=2,
number=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='attributes', full_name='opentelemetry.proto.trace.v1.Span.Link.attributes', index=3,
number=4, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='dropped_attributes_count', full_name='opentelemetry.proto.trace.v1.Span.Link.dropped_attributes_count', index=4,
number=5, type=13, cpp_type=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -368,7 +338,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='trace_id', full_name='opentelemetry.proto.trace.v1.Span.trace_id', index=0,
@@ -376,105 +345,105 @@
has_default_value=False, default_value=b"",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='span_id', full_name='opentelemetry.proto.trace.v1.Span.span_id', index=1,
number=2, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=b"",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='trace_state', full_name='opentelemetry.proto.trace.v1.Span.trace_state', index=2,
number=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='parent_span_id', full_name='opentelemetry.proto.trace.v1.Span.parent_span_id', index=3,
number=4, type=12, cpp_type=9, label=1,
has_default_value=False, default_value=b"",
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='name', full_name='opentelemetry.proto.trace.v1.Span.name', index=4,
number=5, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='kind', full_name='opentelemetry.proto.trace.v1.Span.kind', index=5,
number=6, type=14, cpp_type=8, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='start_time_unix_nano', full_name='opentelemetry.proto.trace.v1.Span.start_time_unix_nano', index=6,
number=7, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='end_time_unix_nano', full_name='opentelemetry.proto.trace.v1.Span.end_time_unix_nano', index=7,
number=8, type=6, cpp_type=4, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='attributes', full_name='opentelemetry.proto.trace.v1.Span.attributes', index=8,
number=9, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='dropped_attributes_count', full_name='opentelemetry.proto.trace.v1.Span.dropped_attributes_count', index=9,
number=10, type=13, cpp_type=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='events', full_name='opentelemetry.proto.trace.v1.Span.events', index=10,
number=11, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='dropped_events_count', full_name='opentelemetry.proto.trace.v1.Span.dropped_events_count', index=11,
number=12, type=13, cpp_type=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='links', full_name='opentelemetry.proto.trace.v1.Span.links', index=12,
number=13, type=11, cpp_type=10, label=3,
has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='dropped_links_count', full_name='opentelemetry.proto.trace.v1.Span.dropped_links_count', index=13,
number=14, type=13, cpp_type=3, 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='status', full_name='opentelemetry.proto.trace.v1.Span.status', index=14,
number=15, type=11, cpp_type=10, label=1,
has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@@ -499,7 +468,6 @@
filename=None,
file=DESCRIPTOR,
containing_type=None,
- create_key=_descriptor._internal_create_key,
fields=[
_descriptor.FieldDescriptor(
name='code', full_name='opentelemetry.proto.trace.v1.Status.code', index=0,
@@ -507,14 +475,14 @@
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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='message', full_name='opentelemetry.proto.trace.v1.Status.message', 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, create_key=_descriptor._internal_create_key),
+ serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
diff --git a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi
new file mode 100644
index 00000000000..adcc1dade36
--- /dev/null
+++ b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi
@@ -0,0 +1,303 @@
+# @generated by generate_proto_mypy_stubs.py. Do not edit!
+import sys
+from google.protobuf.descriptor import (
+ Descriptor as google___protobuf___descriptor___Descriptor,
+ EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
+ FileDescriptor as google___protobuf___descriptor___FileDescriptor,
+)
+
+from google.protobuf.internal.containers import (
+ RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
+)
+
+from google.protobuf.message import (
+ Message as google___protobuf___message___Message,
+)
+
+from opentelemetry.proto.common.v1.common_pb2 import (
+ AttributeKeyValue as opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue,
+ InstrumentationLibrary as opentelemetry___proto___common___v1___common_pb2___InstrumentationLibrary,
+)
+
+from opentelemetry.proto.resource.v1.resource_pb2 import (
+ Resource as opentelemetry___proto___resource___v1___resource_pb2___Resource,
+)
+
+from typing import (
+ Iterable as typing___Iterable,
+ List as typing___List,
+ NewType as typing___NewType,
+ Optional as typing___Optional,
+ Text as typing___Text,
+ Tuple as typing___Tuple,
+ Union as typing___Union,
+ cast as typing___cast,
+)
+
+from typing_extensions import (
+ Literal as typing_extensions___Literal,
+)
+
+
+builtin___bool = bool
+builtin___bytes = bytes
+builtin___float = float
+builtin___int = int
+builtin___str = str
+if sys.version_info < (3,):
+ builtin___buffer = buffer
+ builtin___unicode = unicode
+
+
+DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
+
+class ResourceSpans(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def resource(self) -> opentelemetry___proto___resource___v1___resource_pb2___Resource: ...
+
+ @property
+ def instrumentation_library_spans(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___InstrumentationLibrarySpans]: ...
+
+ def __init__(self,
+ *,
+ resource : typing___Optional[opentelemetry___proto___resource___v1___resource_pb2___Resource] = None,
+ instrumentation_library_spans : typing___Optional[typing___Iterable[type___InstrumentationLibrarySpans]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> ResourceSpans: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ResourceSpans: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"resource",b"resource"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"instrumentation_library_spans",b"instrumentation_library_spans",u"resource",b"resource"]) -> None: ...
+type___ResourceSpans = ResourceSpans
+
+class InstrumentationLibrarySpans(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def instrumentation_library(self) -> opentelemetry___proto___common___v1___common_pb2___InstrumentationLibrary: ...
+
+ @property
+ def spans(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___Span]: ...
+
+ def __init__(self,
+ *,
+ instrumentation_library : typing___Optional[opentelemetry___proto___common___v1___common_pb2___InstrumentationLibrary] = None,
+ spans : typing___Optional[typing___Iterable[type___Span]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> InstrumentationLibrarySpans: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> InstrumentationLibrarySpans: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"instrumentation_library",b"instrumentation_library"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"instrumentation_library",b"instrumentation_library",u"spans",b"spans"]) -> None: ...
+type___InstrumentationLibrarySpans = InstrumentationLibrarySpans
+
+class Span(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ SpanKindValue = typing___NewType('SpanKindValue', builtin___int)
+ type___SpanKindValue = SpanKindValue
+ class SpanKind(object):
+ DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
+ @classmethod
+ def Name(cls, number: builtin___int) -> builtin___str: ...
+ @classmethod
+ def Value(cls, name: builtin___str) -> Span.SpanKindValue: ...
+ @classmethod
+ def keys(cls) -> typing___List[builtin___str]: ...
+ @classmethod
+ def values(cls) -> typing___List[Span.SpanKindValue]: ...
+ @classmethod
+ def items(cls) -> typing___List[typing___Tuple[builtin___str, Span.SpanKindValue]]: ...
+ SPAN_KIND_UNSPECIFIED = typing___cast(Span.SpanKindValue, 0)
+ INTERNAL = typing___cast(Span.SpanKindValue, 1)
+ SERVER = typing___cast(Span.SpanKindValue, 2)
+ CLIENT = typing___cast(Span.SpanKindValue, 3)
+ PRODUCER = typing___cast(Span.SpanKindValue, 4)
+ CONSUMER = typing___cast(Span.SpanKindValue, 5)
+ SPAN_KIND_UNSPECIFIED = typing___cast(Span.SpanKindValue, 0)
+ INTERNAL = typing___cast(Span.SpanKindValue, 1)
+ SERVER = typing___cast(Span.SpanKindValue, 2)
+ CLIENT = typing___cast(Span.SpanKindValue, 3)
+ PRODUCER = typing___cast(Span.SpanKindValue, 4)
+ CONSUMER = typing___cast(Span.SpanKindValue, 5)
+ type___SpanKind = SpanKind
+
+ class Event(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ time_unix_nano: builtin___int = ...
+ name: typing___Text = ...
+ dropped_attributes_count: builtin___int = ...
+
+ @property
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+
+ def __init__(self,
+ *,
+ time_unix_nano : typing___Optional[builtin___int] = None,
+ name : typing___Optional[typing___Text] = None,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ dropped_attributes_count : typing___Optional[builtin___int] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> Span.Event: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Span.Event: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"attributes",b"attributes",u"dropped_attributes_count",b"dropped_attributes_count",u"name",b"name",u"time_unix_nano",b"time_unix_nano"]) -> None: ...
+ type___Event = Event
+
+ class Link(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ trace_id: builtin___bytes = ...
+ span_id: builtin___bytes = ...
+ trace_state: typing___Text = ...
+ dropped_attributes_count: builtin___int = ...
+
+ @property
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+
+ def __init__(self,
+ *,
+ trace_id : typing___Optional[builtin___bytes] = None,
+ span_id : typing___Optional[builtin___bytes] = None,
+ trace_state : typing___Optional[typing___Text] = None,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ dropped_attributes_count : typing___Optional[builtin___int] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> Span.Link: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Span.Link: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"attributes",b"attributes",u"dropped_attributes_count",b"dropped_attributes_count",u"span_id",b"span_id",u"trace_id",b"trace_id",u"trace_state",b"trace_state"]) -> None: ...
+ type___Link = Link
+
+ trace_id: builtin___bytes = ...
+ span_id: builtin___bytes = ...
+ trace_state: typing___Text = ...
+ parent_span_id: builtin___bytes = ...
+ name: typing___Text = ...
+ kind: type___Span.SpanKindValue = ...
+ start_time_unix_nano: builtin___int = ...
+ end_time_unix_nano: builtin___int = ...
+ dropped_attributes_count: builtin___int = ...
+ dropped_events_count: builtin___int = ...
+ dropped_links_count: builtin___int = ...
+
+ @property
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+
+ @property
+ def events(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___Span.Event]: ...
+
+ @property
+ def links(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___Span.Link]: ...
+
+ @property
+ def status(self) -> type___Status: ...
+
+ def __init__(self,
+ *,
+ trace_id : typing___Optional[builtin___bytes] = None,
+ span_id : typing___Optional[builtin___bytes] = None,
+ trace_state : typing___Optional[typing___Text] = None,
+ parent_span_id : typing___Optional[builtin___bytes] = None,
+ name : typing___Optional[typing___Text] = None,
+ kind : typing___Optional[type___Span.SpanKindValue] = None,
+ start_time_unix_nano : typing___Optional[builtin___int] = None,
+ end_time_unix_nano : typing___Optional[builtin___int] = None,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ dropped_attributes_count : typing___Optional[builtin___int] = None,
+ events : typing___Optional[typing___Iterable[type___Span.Event]] = None,
+ dropped_events_count : typing___Optional[builtin___int] = None,
+ links : typing___Optional[typing___Iterable[type___Span.Link]] = None,
+ dropped_links_count : typing___Optional[builtin___int] = None,
+ status : typing___Optional[type___Status] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> Span: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Span: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"status",b"status"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"attributes",b"attributes",u"dropped_attributes_count",b"dropped_attributes_count",u"dropped_events_count",b"dropped_events_count",u"dropped_links_count",b"dropped_links_count",u"end_time_unix_nano",b"end_time_unix_nano",u"events",b"events",u"kind",b"kind",u"links",b"links",u"name",b"name",u"parent_span_id",b"parent_span_id",u"span_id",b"span_id",u"start_time_unix_nano",b"start_time_unix_nano",u"status",b"status",u"trace_id",b"trace_id",u"trace_state",b"trace_state"]) -> None: ...
+type___Span = Span
+
+class Status(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+ StatusCodeValue = typing___NewType('StatusCodeValue', builtin___int)
+ type___StatusCodeValue = StatusCodeValue
+ class StatusCode(object):
+ DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
+ @classmethod
+ def Name(cls, number: builtin___int) -> builtin___str: ...
+ @classmethod
+ def Value(cls, name: builtin___str) -> Status.StatusCodeValue: ...
+ @classmethod
+ def keys(cls) -> typing___List[builtin___str]: ...
+ @classmethod
+ def values(cls) -> typing___List[Status.StatusCodeValue]: ...
+ @classmethod
+ def items(cls) -> typing___List[typing___Tuple[builtin___str, Status.StatusCodeValue]]: ...
+ Ok = typing___cast(Status.StatusCodeValue, 0)
+ Cancelled = typing___cast(Status.StatusCodeValue, 1)
+ UnknownError = typing___cast(Status.StatusCodeValue, 2)
+ InvalidArgument = typing___cast(Status.StatusCodeValue, 3)
+ DeadlineExceeded = typing___cast(Status.StatusCodeValue, 4)
+ NotFound = typing___cast(Status.StatusCodeValue, 5)
+ AlreadyExists = typing___cast(Status.StatusCodeValue, 6)
+ PermissionDenied = typing___cast(Status.StatusCodeValue, 7)
+ ResourceExhausted = typing___cast(Status.StatusCodeValue, 8)
+ FailedPrecondition = typing___cast(Status.StatusCodeValue, 9)
+ Aborted = typing___cast(Status.StatusCodeValue, 10)
+ OutOfRange = typing___cast(Status.StatusCodeValue, 11)
+ Unimplemented = typing___cast(Status.StatusCodeValue, 12)
+ InternalError = typing___cast(Status.StatusCodeValue, 13)
+ Unavailable = typing___cast(Status.StatusCodeValue, 14)
+ DataLoss = typing___cast(Status.StatusCodeValue, 15)
+ Unauthenticated = typing___cast(Status.StatusCodeValue, 16)
+ Ok = typing___cast(Status.StatusCodeValue, 0)
+ Cancelled = typing___cast(Status.StatusCodeValue, 1)
+ UnknownError = typing___cast(Status.StatusCodeValue, 2)
+ InvalidArgument = typing___cast(Status.StatusCodeValue, 3)
+ DeadlineExceeded = typing___cast(Status.StatusCodeValue, 4)
+ NotFound = typing___cast(Status.StatusCodeValue, 5)
+ AlreadyExists = typing___cast(Status.StatusCodeValue, 6)
+ PermissionDenied = typing___cast(Status.StatusCodeValue, 7)
+ ResourceExhausted = typing___cast(Status.StatusCodeValue, 8)
+ FailedPrecondition = typing___cast(Status.StatusCodeValue, 9)
+ Aborted = typing___cast(Status.StatusCodeValue, 10)
+ OutOfRange = typing___cast(Status.StatusCodeValue, 11)
+ Unimplemented = typing___cast(Status.StatusCodeValue, 12)
+ InternalError = typing___cast(Status.StatusCodeValue, 13)
+ Unavailable = typing___cast(Status.StatusCodeValue, 14)
+ DataLoss = typing___cast(Status.StatusCodeValue, 15)
+ Unauthenticated = typing___cast(Status.StatusCodeValue, 16)
+ type___StatusCode = StatusCode
+
+ code: type___Status.StatusCodeValue = ...
+ message: typing___Text = ...
+
+ def __init__(self,
+ *,
+ code : typing___Optional[type___Status.StatusCodeValue] = None,
+ message : typing___Optional[typing___Text] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> Status: ...
+ else:
+ @classmethod
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> Status: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"code",b"code",u"message",b"message"]) -> None: ...
+type___Status = Status
diff --git a/scripts/proto_codegen.sh b/scripts/proto_codegen.sh
new file mode 100755
index 00000000000..c66371f42e3
--- /dev/null
+++ b/scripts/proto_codegen.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+#
+# Regenerate python code from OTLP protos in
+# https://github.com/open-telemetry/opentelemetry-proto
+#
+# To use, update PROTO_REPO_BRANCH_OR_COMMIT variable below to a commit hash or
+# tag in opentelemtry-proto repo that you want to build off of. Then, just run
+# this script to update the proto files. Commit the changes as well as any
+# fixes needed in the OTLP exporter.
+#
+# Optional envars:
+# PROTO_REPO_DIR - the path to an existing checkout of the opentelemetry-proto repo
+
+# Pinned commit/branch/tag for the current version used in opentelemetry-proto python package.
+PROTO_REPO_BRANCH_OR_COMMIT="b54688569186e0b862bf7462a983ccf2c50c0547"
+
+set -e
+
+if [ -z "$VIRTUAL_ENV" ]; then
+ echo '$VIRTUAL_ENV is not set, you probably forgot to source it. Exiting...'
+ exit 1
+fi
+
+PROTO_REPO_DIR=${PROTO_REPO_DIR:-"/tmp/opentelemetry-proto"}
+# root of opentelemetry-python repo
+repo_root="$(git rev-parse --show-toplevel)"
+
+python -m pip install -r $repo_root/dev-requirements.txt
+
+# Clone the proto repo if it doesn't exist
+if [ ! -d "$PROTO_REPO_DIR" ]; then
+ git clone https://github.com/open-telemetry/opentelemetry-proto.git $PROTO_REPO_DIR
+fi
+
+# Pull in changes and switch to requested branch
+(
+ cd $PROTO_REPO_DIR
+ git fetch --all
+ git checkout $PROTO_REPO_BRANCH_OR_COMMIT
+ # pull if PROTO_REPO_BRANCH_OR_COMMIT is not a detached head
+ git symbolic-ref -q HEAD && git pull --ff-only || true
+)
+
+cd $repo_root/opentelemetry-proto/src
+
+# clean up old generated code
+find opentelemetry/ -regex ".*_pb2.*\.pyi?" -exec rm {} +
+
+# generate proto code for all protos
+all_protos=$(find $PROTO_REPO_DIR/ -iname "*.proto")
+python -m grpc_tools.protoc \
+ -I $PROTO_REPO_DIR \
+ --python_out=. \
+ --mypy_out=. \
+ $all_protos
+
+# generate grpc output only for protos with service definitions
+service_protos=$(grep -REl "service \w+ {" $PROTO_REPO_DIR/opentelemetry/)
+python -m grpc_tools.protoc \
+ -I $PROTO_REPO_DIR \
+ --python_out=. \
+ --mypy_out=. \
+ --grpc_python_out=. \
+ $service_protos
From b2c0d5356538b30ed336b8e2775de5c9556e03c1 Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Mon, 22 Jun 2020 15:48:15 -0400
Subject: [PATCH 03/79] add gco agent span label (#833)
---
.../exporter/cloud_trace/__init__.py | 26 +++++++++++++++----
.../tests/test_cloud_trace_exporter.py | 20 ++++++++++++--
2 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
index 31e20d997e3..f6d1e78b5aa 100644
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
+++ b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
@@ -44,6 +44,7 @@
from typing import Any, Dict, List, Optional, Sequence, Tuple
import google.auth
+import pkg_resources
from google.cloud.trace_v2 import TraceServiceClient
from google.cloud.trace_v2.proto.trace_pb2 import AttributeValue
from google.cloud.trace_v2.proto.trace_pb2 import Span as ProtoSpan
@@ -51,6 +52,9 @@
from google.rpc.status_pb2 import Status
import opentelemetry.trace as trace_api
+from opentelemetry.exporter.cloud_trace.version import (
+ __version__ as cloud_trace_version,
+)
from opentelemetry.sdk.trace import Event
from opentelemetry.sdk.trace.export import Span, SpanExporter, SpanExportResult
from opentelemetry.sdk.util import BoundedDict
@@ -157,7 +161,7 @@ def _translate_to_cloud_trace(
"end_time": end_time,
"parent_span_id": parent_id,
"attributes": _extract_attributes(
- span.attributes, MAX_SPAN_ATTRS
+ span.attributes, MAX_SPAN_ATTRS, add_agent_attr=True
),
"links": _extract_links(span.links),
"status": _extract_status(span.status),
@@ -288,20 +292,32 @@ def _extract_events(events: Sequence[Event]) -> ProtoSpan.TimeEvents:
def _extract_attributes(
- attrs: types.Attributes, num_attrs_limit: int
+ attrs: types.Attributes,
+ num_attrs_limit: int,
+ add_agent_attr: bool = False,
) -> ProtoSpan.Attributes:
"""Convert span.attributes to dict."""
attributes_dict = BoundedDict(num_attrs_limit)
-
+ invalid_value_dropped_count = 0
for key, value in attrs.items():
key = _truncate_str(key, 128)[0]
value = _format_attribute_value(value)
- if value is not None:
+ if value:
attributes_dict[key] = value
+ else:
+ invalid_value_dropped_count += 1
+ if add_agent_attr:
+ attributes_dict["g.co/agent"] = _format_attribute_value(
+ "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
+ pkg_resources.get_distribution("opentelemetry-sdk").version,
+ cloud_trace_version,
+ )
+ )
return ProtoSpan.Attributes(
attribute_map=attributes_dict,
- dropped_attributes_count=len(attrs) - len(attributes_dict),
+ dropped_attributes_count=attributes_dict.dropped
+ + invalid_value_dropped_count,
)
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
index 5ebd5f3b649..bd5a9f073d8 100644
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
+++ b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
@@ -15,6 +15,7 @@
import unittest
from unittest import mock
+import pkg_resources
from google.cloud.trace_v2.proto.trace_pb2 import AttributeValue
from google.cloud.trace_v2.proto.trace_pb2 import Span as ProtoSpan
from google.cloud.trace_v2.proto.trace_pb2 import TruncatableString
@@ -33,7 +34,11 @@
_format_attribute_value,
_truncate_str,
)
-from opentelemetry.sdk.trace import Event, Span
+from opentelemetry.exporter.cloud_trace.version import (
+ __version__ as cloud_trace_version,
+)
+from opentelemetry.sdk.trace import Event
+from opentelemetry.sdk.trace.export import Span
from opentelemetry.trace import Link, SpanContext, SpanKind
from opentelemetry.trace.status import Status as SpanStatus
from opentelemetry.trace.status import StatusCanonicalCode
@@ -108,7 +113,18 @@ def test_export(self):
"display_name": TruncatableString(
value="span_name", truncated_byte_count=0
),
- "attributes": ProtoSpan.Attributes(attribute_map={}),
+ "attributes": ProtoSpan.Attributes(
+ attribute_map={
+ "g.co/agent": _format_attribute_value(
+ "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
+ pkg_resources.get_distribution(
+ "opentelemetry-sdk"
+ ).version,
+ cloud_trace_version,
+ )
+ )
+ }
+ ),
"links": None,
"status": None,
"time_events": None,
From 3c9f99d313f1dc88d8a57c088739ef495257bc94 Mon Sep 17 00:00:00 2001
From: "Tahir H. Butt"
Date: Mon, 22 Jun 2020 22:24:07 -0400
Subject: [PATCH 04/79] feat(wsgi): low cardinality span name and name override
(#837)
---
.../tests/test_programmatic.py | 2 +-
.../tests/test_programmatic.py | 2 +-
.../src/opentelemetry/ext/wsgi/__init__.py | 27 +++++----
.../tests/test_wsgi_middleware.py | 56 +++++++++++++------
4 files changed, 56 insertions(+), 31 deletions(-)
diff --git a/ext/opentelemetry-ext-flask/tests/test_programmatic.py b/ext/opentelemetry-ext-flask/tests/test_programmatic.py
index 95f82373e3d..30fa9c4eb24 100644
--- a/ext/opentelemetry-ext-flask/tests/test_programmatic.py
+++ b/ext/opentelemetry-ext-flask/tests/test_programmatic.py
@@ -118,7 +118,7 @@ def test_404(self):
resp.close()
span_list = self.memory_exporter.get_finished_spans()
self.assertEqual(len(span_list), 1)
- self.assertEqual(span_list[0].name, "/bye")
+ self.assertEqual(span_list[0].name, "HTTP POST")
self.assertEqual(span_list[0].kind, trace.SpanKind.SERVER)
self.assertEqual(span_list[0].attributes, expected_attrs)
diff --git a/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py b/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py
index b1ecbb38bb7..e8937e8f5e6 100644
--- a/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py
+++ b/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py
@@ -101,7 +101,7 @@ def test_404(self):
resp.close()
span_list = self.memory_exporter.get_finished_spans()
self.assertEqual(len(span_list), 1)
- self.assertEqual(span_list[0].name, "/bye")
+ self.assertEqual(span_list[0].name, "HTTP POST")
self.assertEqual(span_list[0].kind, trace.SpanKind.SERVER)
self.assertEqual(span_list[0].attributes, expected_attrs)
diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py
index c5b0216869c..9968a0c1c83 100644
--- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py
+++ b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py
@@ -93,12 +93,15 @@ def collect_request_attributes(environ):
result = {
"component": "http",
- "http.method": environ["REQUEST_METHOD"],
- "http.server_name": environ["SERVER_NAME"],
- "http.scheme": environ["wsgi.url_scheme"],
- "host.port": int(environ["SERVER_PORT"]),
+ "http.method": environ.get("REQUEST_METHOD"),
+ "http.server_name": environ.get("SERVER_NAME"),
+ "http.scheme": environ.get("wsgi.url_scheme"),
}
+ host_port = environ.get("SERVER_PORT")
+ if host_port is not None:
+ result.update({"host.port": int(host_port)})
+
setifnotnone(result, "http.host", environ.get("HTTP_HOST"))
target = environ.get("RAW_URI")
if target is None: # Note: `"" or None is None`
@@ -149,12 +152,8 @@ def add_response_attributes(
def get_default_span_name(environ):
- """Calculates a (generic) span name for an incoming HTTP request based on the PEP3333 conforming WSGI environ."""
-
- # TODO: Update once
- # https://github.com/open-telemetry/opentelemetry-specification/issues/270
- # is resolved
- return environ.get("PATH_INFO", "/")
+ """Default implementation for name_callback, returns HTTP {METHOD_NAME}."""
+ return "HTTP {}".format(environ.get("REQUEST_METHOD", "")).strip()
class OpenTelemetryMiddleware:
@@ -165,11 +164,15 @@ class OpenTelemetryMiddleware:
Args:
wsgi: The WSGI application callable to forward requests to.
+ name_callback: Callback which calculates a generic span name for an
+ incoming HTTP request based on the PEP3333 WSGI environ.
+ Optional: Defaults to get_default_span_name.
"""
- def __init__(self, wsgi):
+ def __init__(self, wsgi, name_callback=get_default_span_name):
self.wsgi = wsgi
self.tracer = trace.get_tracer(__name__, __version__)
+ self.name_callback = name_callback
@staticmethod
def _create_start_response(span, start_response):
@@ -191,7 +194,7 @@ def __call__(self, environ, start_response):
token = context.attach(
propagators.extract(get_header_from_environ, environ)
)
- span_name = get_default_span_name(environ)
+ span_name = self.name_callback(environ)
span = self.tracer.start_span(
span_name,
diff --git a/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py b/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py
index e56410b6121..0d018b68414 100644
--- a/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py
+++ b/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py
@@ -74,7 +74,9 @@ def error_wsgi(environ, start_response):
class TestWsgiApplication(WsgiTestBase):
- def validate_response(self, response, error=None):
+ def validate_response(
+ self, response, error=None, span_name="HTTP GET", http_method="GET"
+ ):
while True:
try:
value = next(response)
@@ -95,23 +97,22 @@ def validate_response(self, response, error=None):
span_list = self.memory_exporter.get_finished_spans()
self.assertEqual(len(span_list), 1)
- self.assertEqual(span_list[0].name, "/")
+ self.assertEqual(span_list[0].name, span_name)
self.assertEqual(span_list[0].kind, trace_api.SpanKind.SERVER)
- self.assertEqual(
- span_list[0].attributes,
- {
- "component": "http",
- "http.method": "GET",
- "http.server_name": "127.0.0.1",
- "http.scheme": "http",
- "host.port": 80,
- "http.host": "127.0.0.1",
- "http.flavor": "1.0",
- "http.url": "http://127.0.0.1/",
- "http.status_text": "OK",
- "http.status_code": 200,
- },
- )
+ expected_attributes = {
+ "component": "http",
+ "http.server_name": "127.0.0.1",
+ "http.scheme": "http",
+ "host.port": 80,
+ "http.host": "127.0.0.1",
+ "http.flavor": "1.0",
+ "http.url": "http://127.0.0.1/",
+ "http.status_text": "OK",
+ "http.status_code": 200,
+ }
+ if http_method is not None:
+ expected_attributes["http.method"] = http_method
+ self.assertEqual(span_list[0].attributes, expected_attributes)
def test_basic_wsgi_call(self):
app = otel_wsgi.OpenTelemetryMiddleware(simple_wsgi)
@@ -147,6 +148,27 @@ def test_wsgi_exc_info(self):
response = app(self.environ, self.start_response)
self.validate_response(response, error=ValueError)
+ def test_override_span_name(self):
+ """Test that span_names can be overwritten by our callback function."""
+ span_name = "Dymaxion"
+
+ def get_predefined_span_name(scope):
+ # pylint: disable=unused-argument
+ return span_name
+
+ app = otel_wsgi.OpenTelemetryMiddleware(
+ simple_wsgi, name_callback=get_predefined_span_name
+ )
+ response = app(self.environ, self.start_response)
+ self.validate_response(response, span_name=span_name)
+
+ def test_default_span_name_missing_request_method(self):
+ """Test that default span_names with missing request method."""
+ self.environ.pop("REQUEST_METHOD")
+ app = otel_wsgi.OpenTelemetryMiddleware(simple_wsgi)
+ response = app(self.environ, self.start_response)
+ self.validate_response(response, span_name="HTTP", http_method=None)
+
class TestWsgiAttributes(unittest.TestCase):
def setUp(self):
From d35e6268ada565ee4dba851e65a65986824cc856 Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Tue, 23 Jun 2020 01:00:49 -0400
Subject: [PATCH 05/79] Add unique identifier to Cloud Monitoring exporter
(#841)
---
docs/examples/cloud_monitoring/README.rst | 13 +++++
.../exporter/cloud_monitoring/__init__.py | 39 ++++++++++++--
.../tests/test_cloud_monitoring.py | 53 +++++++++++++++++++
3 files changed, 102 insertions(+), 3 deletions(-)
diff --git a/docs/examples/cloud_monitoring/README.rst b/docs/examples/cloud_monitoring/README.rst
index 8b2ccedceef..818446dc157 100644
--- a/docs/examples/cloud_monitoring/README.rst
+++ b/docs/examples/cloud_monitoring/README.rst
@@ -33,3 +33,16 @@ 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/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
index 072301a274c..8e71e5b2501 100644
--- a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
+++ b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
@@ -1,4 +1,5 @@
import logging
+import random
from typing import Optional, Sequence
import google.auth
@@ -17,14 +18,30 @@
logger = logging.getLogger(__name__)
MAX_BATCH_WRITE = 200
WRITE_INTERVAL = 10
+UNIQUE_IDENTIFIER_KEY = "opentelemetry_id"
# pylint is unable to resolve members of protobuf objects
# pylint: disable=no-member
class CloudMonitoringMetricsExporter(MetricsExporter):
- """ Implementation of Metrics Exporter to Google Cloud Monitoring"""
-
- def __init__(self, project_id=None, client=None):
+ """ Implementation of Metrics Exporter to Google Cloud Monitoring
+
+ You can manually pass in project_id and client, or else the
+ Exporter will take that information from Application Default
+ Credentials.
+
+ Args:
+ project_id: project id of your Google Cloud project.
+ client: Client to upload metrics to Google Cloud Monitoring.
+ add_unique_identifier: Add an identifier to each exporter metric. This
+ must be used when there exist two (or more) exporters that may
+ export to the same metric name within WRITE_INTERVAL seconds of
+ each other.
+ """
+
+ def __init__(
+ self, project_id=None, client=None, add_unique_identifier=False
+ ):
self.client = client or MetricServiceClient()
if not project_id:
_, self.project_id = google.auth.default()
@@ -33,6 +50,11 @@ def __init__(self, project_id=None, client=None):
self.project_name = self.client.project_path(self.project_id)
self._metric_descriptors = {}
self._last_updated = {}
+ self.unique_identifier = None
+ if add_unique_identifier:
+ self.unique_identifier = "{:08x}".format(
+ random.randint(0, 16 ** 8)
+ )
def _add_resource_info(self, series: TimeSeries) -> None:
"""Add Google resource specific information (e.g. instance id, region).
@@ -97,6 +119,12 @@ def _get_metric_descriptor(
logger.warning(
"Label value %s is not a string, bool or integer", value
)
+
+ if self.unique_identifier:
+ descriptor["labels"].append(
+ LabelDescriptor(key=UNIQUE_IDENTIFIER_KEY, value_type="STRING")
+ )
+
if isinstance(record.aggregator, SumAggregator):
descriptor["metric_kind"] = MetricDescriptor.MetricKind.GAUGE
else:
@@ -141,6 +169,11 @@ def export(
for key, value in record.labels:
series.metric.labels[key] = str(value)
+ if self.unique_identifier:
+ series.metric.labels[
+ UNIQUE_IDENTIFIER_KEY
+ ] = self.unique_identifier
+
point = series.points.add()
if instrument.value_type == int:
point.value.int64_value = record.aggregator.checkpoint
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py b/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
index ccc90d2c2f6..1b36661699c 100644
--- a/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
+++ b/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
@@ -21,6 +21,7 @@
from opentelemetry.exporter.cloud_monitoring import (
MAX_BATCH_WRITE,
+ UNIQUE_IDENTIFIER_KEY,
WRITE_INTERVAL,
CloudMonitoringMetricsExporter,
)
@@ -289,3 +290,55 @@ def test_export(self):
mock.call(self.project_name, [series3]),
]
)
+
+ def test_unique_identifier(self):
+ client = mock.Mock()
+ exporter1 = CloudMonitoringMetricsExporter(
+ project_id=self.project_id,
+ client=client,
+ add_unique_identifier=True,
+ )
+ exporter2 = CloudMonitoringMetricsExporter(
+ project_id=self.project_id,
+ client=client,
+ add_unique_identifier=True,
+ )
+ exporter1.project_name = self.project_name
+ exporter2.project_name = self.project_name
+
+ client.create_metric_descriptor.return_value = MetricDescriptor(
+ **{
+ "name": None,
+ "type": "custom.googleapis.com/OpenTelemetry/name",
+ "display_name": "name",
+ "description": "description",
+ "labels": [
+ LabelDescriptor(
+ key=UNIQUE_IDENTIFIER_KEY, value_type="STRING"
+ ),
+ ],
+ "metric_kind": "GAUGE",
+ "value_type": "DOUBLE",
+ }
+ )
+
+ sum_agg_one = SumAggregator()
+ sum_agg_one.update(1)
+ metric_record = MetricRecord(MockMetric(), (), sum_agg_one,)
+ exporter1.export([metric_record])
+ exporter2.export([metric_record])
+
+ (
+ first_call,
+ second_call,
+ ) = client.create_metric_descriptor.call_args_list
+ self.assertEqual(first_call[0][1].labels[0].key, UNIQUE_IDENTIFIER_KEY)
+ self.assertEqual(
+ second_call[0][1].labels[0].key, UNIQUE_IDENTIFIER_KEY
+ )
+
+ first_call, second_call = client.create_time_series.call_args_list
+ self.assertNotEqual(
+ first_call[0][1][0].metric.labels[UNIQUE_IDENTIFIER_KEY],
+ second_call[0][1][0].metric.labels[UNIQUE_IDENTIFIER_KEY],
+ )
From 8be986cd6c94368ed769149022a7862f0ca47f35 Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Tue, 23 Jun 2020 17:06:11 -0400
Subject: [PATCH 06/79] add changelog for cloud exporters (#849)
---
.../CHANGELOG.md | 14 ++++++++++++++
.../CHANGELOG.md | 18 ++++++++++++++++++
2 files changed, 32 insertions(+)
create mode 100644 ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
create mode 100644 ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
new file mode 100644
index 00000000000..7968d01ce40
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
@@ -0,0 +1,14 @@
+# Changelog
+
+## Unreleased
+
+- Add ability for exporter to add unique identifier
+ ([#841](https://github.com/open-telemetry/opentelemetry-python/pull/841))
+- Added tests to tox coverage files
+ ([#804](https://github.com/open-telemetry/opentelemetry-python/pull/804))
+
+## 0.9b0
+
+Released 2020-06-10
+
+- Initial release
diff --git a/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
new file mode 100644
index 00000000000..71f4379b35c
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
@@ -0,0 +1,18 @@
+# Changelog
+
+## Unreleased
+
+- Add g.co/agent label for Google internal metrics tracking
+ ([#833](https://github.com/open-telemetry/opentelemetry-python/pull/833))
+- Adding trouble-shooting tips
+ ([#827](https://github.com/open-telemetry/opentelemetry-python/pull/827))
+- Added Cloud Trace context propagation
+ ([#819](https://github.com/open-telemetry/opentelemetry-python/pull/819))
+- Added tests to tox coverage files
+ ([#804](https://github.com/open-telemetry/opentelemetry-python/pull/804))
+
+## 0.9b0
+
+Released 2020-06-10
+
+- Initial release
From f8e947c66fc7ab69d8969a2e9564040b0bea4ae4 Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Wed, 24 Jun 2020 21:25:17 -0700
Subject: [PATCH 07/79] chore: v0.10b0 master update + dev version bump (#850)
---
docs/examples/opentelemetry-example-app/setup.cfg | 8 ++++----
.../src/opentelemetry_example_app/version.py | 2 +-
ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md | 6 +++++-
.../opentelemetry/exporter/cloud_monitoring/version.py | 2 +-
ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md | 4 ++++
.../src/opentelemetry/exporter/cloud_trace/version.py | 2 +-
ext/opentelemetry-ext-aiohttp-client/setup.cfg | 4 ++--
.../src/opentelemetry/ext/aiohttp_client/version.py | 2 +-
ext/opentelemetry-ext-asgi/setup.cfg | 4 ++--
.../src/opentelemetry/ext/asgi/version.py | 2 +-
ext/opentelemetry-ext-asyncpg/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-asyncpg/setup.cfg | 6 +++---
.../src/opentelemetry/ext/asyncpg/version.py | 2 +-
ext/opentelemetry-ext-boto/setup.cfg | 6 +++---
.../src/opentelemetry/ext/boto/version.py | 2 +-
ext/opentelemetry-ext-botocore/setup.cfg | 6 +++---
.../src/opentelemetry/ext/botocore/version.py | 2 +-
ext/opentelemetry-ext-celery/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-celery/setup.cfg | 6 +++---
.../src/opentelemetry/ext/celery/version.py | 2 +-
.../src/opentelemetry/ext/datadog/version.py | 2 +-
ext/opentelemetry-ext-dbapi/setup.cfg | 6 +++---
.../src/opentelemetry/ext/dbapi/version.py | 2 +-
ext/opentelemetry-ext-django/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/django/version.py | 2 +-
ext/opentelemetry-ext-elasticsearch/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-elasticsearch/setup.cfg | 6 +++---
.../src/opentelemetry/ext/elasticsearch/version.py | 2 +-
ext/opentelemetry-ext-flask/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/flask/version.py | 2 +-
ext/opentelemetry-ext-grpc/setup.cfg | 6 +++---
.../src/opentelemetry/ext/grpc/version.py | 2 +-
ext/opentelemetry-ext-jaeger/setup.cfg | 4 ++--
.../src/opentelemetry/ext/jaeger/version.py | 2 +-
ext/opentelemetry-ext-jinja2/setup.cfg | 6 +++---
.../src/opentelemetry/ext/jinja2/version.py | 2 +-
ext/opentelemetry-ext-mysql/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/mysql/version.py | 2 +-
ext/opentelemetry-ext-opencensusexporter/setup.cfg | 4 ++--
.../src/opentelemetry/ext/opencensusexporter/version.py | 2 +-
ext/opentelemetry-ext-opentracing-shim/setup.cfg | 4 ++--
.../src/opentelemetry/ext/opentracing_shim/version.py | 2 +-
ext/opentelemetry-ext-otlp/setup.cfg | 6 +++---
.../src/opentelemetry/ext/otlp/version.py | 2 +-
ext/opentelemetry-ext-prometheus/setup.cfg | 4 ++--
.../src/opentelemetry/ext/prometheus/version.py | 2 +-
ext/opentelemetry-ext-psycopg2/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/psycopg2/version.py | 2 +-
ext/opentelemetry-ext-pymemcache/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-pymemcache/setup.cfg | 6 +++---
.../src/opentelemetry/ext/pymemcache/version.py | 2 +-
ext/opentelemetry-ext-pymongo/setup.cfg | 6 +++---
.../src/opentelemetry/ext/pymongo/version.py | 2 +-
ext/opentelemetry-ext-pymysql/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/pymysql/version.py | 2 +-
ext/opentelemetry-ext-pyramid/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/pyramid/version.py | 2 +-
ext/opentelemetry-ext-redis/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/redis/version.py | 2 +-
ext/opentelemetry-ext-requests/setup.cfg | 6 +++---
.../src/opentelemetry/ext/requests/version.py | 2 +-
ext/opentelemetry-ext-sqlalchemy/setup.cfg | 6 +++---
.../src/opentelemetry/ext/sqlalchemy/version.py | 2 +-
ext/opentelemetry-ext-sqlite3/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/sqlite3/version.py | 2 +-
ext/opentelemetry-ext-system-metrics/setup.cfg | 4 ++--
.../src/opentelemetry/ext/system_metrics/version.py | 2 +-
ext/opentelemetry-ext-wsgi/setup.cfg | 6 +++---
.../src/opentelemetry/ext/wsgi/version.py | 2 +-
ext/opentelemetry-ext-zipkin/setup.cfg | 4 ++--
.../src/opentelemetry/ext/zipkin/version.py | 2 +-
ext/opentelemetry-instrumentation-starlette/CHANGELOG.md | 4 ++++
ext/opentelemetry-instrumentation-starlette/setup.cfg | 6 +++---
.../opentelemetry/instrumentation/starlette/version.py | 2 +-
opentelemetry-api/src/opentelemetry/version.py | 2 +-
opentelemetry-instrumentation/setup.cfg | 2 +-
.../src/opentelemetry/instrumentation/version.py | 2 +-
opentelemetry-proto/CHANGELOG.md | 4 ++++
opentelemetry-proto/src/opentelemetry/proto/version.py | 2 +-
opentelemetry-sdk/CHANGELOG.md | 4 ++++
opentelemetry-sdk/setup.cfg | 2 +-
opentelemetry-sdk/src/opentelemetry/sdk/version.py | 2 +-
tests/util/src/opentelemetry/test/version.py | 2 +-
83 files changed, 176 insertions(+), 140 deletions(-)
diff --git a/docs/examples/opentelemetry-example-app/setup.cfg b/docs/examples/opentelemetry-example-app/setup.cfg
index 88aa507518f..185229dc920 100644
--- a/docs/examples/opentelemetry-example-app/setup.cfg
+++ b/docs/examples/opentelemetry-example-app/setup.cfg
@@ -43,10 +43,10 @@ zip_safe = False
include_package_data = True
install_requires =
typing; python_version<'3.5'
- opentelemetry-api == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
- opentelemetry-ext-requests == 0.10.dev0
- opentelemetry-ext-flask == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
+ opentelemetry-ext-requests == 0.11.dev0
+ opentelemetry-ext-flask == 0.11.dev0
flask
requests
protobuf~=3.11
diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
+++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
index 7968d01ce40..d51e8aa7490 100644
--- a/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
+++ b/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
@@ -2,7 +2,11 @@
## Unreleased
-- Add ability for exporter to add unique identifier
+## Version 0.10b0
+
+Released 2020-06-23
+
+- Add ability for exporter to add unique identifier
([#841](https://github.com/open-telemetry/opentelemetry-python/pull/841))
- Added tests to tox coverage files
([#804](https://github.com/open-telemetry/opentelemetry-python/pull/804))
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py
index 3096170ce8a..8d3a82b3e54 100644
--- a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py
+++ b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
index 71f4379b35c..5ff312743fc 100644
--- a/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
+++ b/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Add g.co/agent label for Google internal metrics tracking
([#833](https://github.com/open-telemetry/opentelemetry-python/pull/833))
- Adding trouble-shooting tips
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py
index 3096170ce8a..8d3a82b3e54 100644
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py
+++ b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/ext/opentelemetry-ext-aiohttp-client/setup.cfg
index 431e92273ee..157b6918033 100644
--- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg
+++ b/ext/opentelemetry-ext-aiohttp-client/setup.cfg
@@ -39,8 +39,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api >= 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api >= 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
aiohttp ~= 3.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
index 63ed5cd81ae..5924968fb21 100644
--- a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
+++ b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-asgi/setup.cfg b/ext/opentelemetry-ext-asgi/setup.cfg
index ab0e3e7f47c..75b4c12f833 100644
--- a/ext/opentelemetry-ext-asgi/setup.cfg
+++ b/ext/opentelemetry-ext-asgi/setup.cfg
@@ -39,8 +39,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
asgiref ~= 3.0
[options.extras_require]
diff --git a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
+++ b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
index f4390b09ab1..e81079bfb8c 100644
--- a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
+++ b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
@@ -2,4 +2,8 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Initial Release ([#814](https://github.com/open-telemetry/opentelemetry-python/pull/814))
diff --git a/ext/opentelemetry-ext-asyncpg/setup.cfg b/ext/opentelemetry-ext-asyncpg/setup.cfg
index df00ed7db4c..786e69f6ee9 100644
--- a/ext/opentelemetry-ext-asyncpg/setup.cfg
+++ b/ext/opentelemetry-ext-asyncpg/setup.cfg
@@ -39,13 +39,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
asyncpg >= 0.12.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
+++ b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/ext/opentelemetry-ext-boto/setup.cfg
index 53e26fcf141..64a9932756c 100644
--- a/ext/opentelemetry-ext-boto/setup.cfg
+++ b/ext/opentelemetry-ext-boto/setup.cfg
@@ -41,14 +41,14 @@ package_dir=
packages=find_namespace:
install_requires =
boto ~= 2.0
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
[options.extras_require]
test =
boto~=2.0
moto~=1.0
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
+++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-botocore/setup.cfg b/ext/opentelemetry-ext-botocore/setup.cfg
index 59cb7f22716..9e0aabfd23b 100644
--- a/ext/opentelemetry-ext-botocore/setup.cfg
+++ b/ext/opentelemetry-ext-botocore/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
botocore ~= 1.0
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
[options.extras_require]
test =
moto ~= 1.0
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
+++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-celery/CHANGELOG.md b/ext/opentelemetry-ext-celery/CHANGELOG.md
index dd6bf18c9d3..54990c1955c 100644
--- a/ext/opentelemetry-ext-celery/CHANGELOG.md
+++ b/ext/opentelemetry-ext-celery/CHANGELOG.md
@@ -2,4 +2,8 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Add instrumentation for Celery ([#780](https://github.com/open-telemetry/opentelemetry-python/pull/780))
diff --git a/ext/opentelemetry-ext-celery/setup.cfg b/ext/opentelemetry-ext-celery/setup.cfg
index ecb42b7fb74..67609b2c2c9 100644
--- a/ext/opentelemetry-ext-celery/setup.cfg
+++ b/ext/opentelemetry-ext-celery/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
celery ~= 4.0
[options.extras_require]
test =
pytest
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
+++ b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
+++ b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-dbapi/setup.cfg b/ext/opentelemetry-ext-dbapi/setup.cfg
index 4ea5913e174..bf7af968f71 100644
--- a/ext/opentelemetry-ext-dbapi/setup.cfg
+++ b/ext/opentelemetry-ext-dbapi/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
+++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-django/setup.cfg b/ext/opentelemetry-ext-django/setup.cfg
index 8ed134ff197..e9cea61cede 100644
--- a/ext/opentelemetry-ext-django/setup.cfg
+++ b/ext/opentelemetry-ext-django/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
django >= 1.10
- opentelemetry-ext-wsgi == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
- opentelemetry-api == 0.10.dev0
+ opentelemetry-ext-wsgi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11.dev0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
+++ b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md b/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
index 33144da9132..7425aa5e1ec 100644
--- a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
+++ b/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
@@ -2,4 +2,8 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Initial release
\ No newline at end of file
diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/ext/opentelemetry-ext-elasticsearch/setup.cfg
index 07be1c622e4..40f3b392b4d 100644
--- a/ext/opentelemetry-ext-elasticsearch/setup.cfg
+++ b/ext/opentelemetry-ext-elasticsearch/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
wrapt >= 1.0.0, < 2.0.0
elasticsearch >= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
elasticsearch-dsl >= 2.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
+++ b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-flask/setup.cfg b/ext/opentelemetry-ext-flask/setup.cfg
index 4c2602a7b2e..663b2169a59 100644
--- a/ext/opentelemetry-ext-flask/setup.cfg
+++ b/ext/opentelemetry-ext-flask/setup.cfg
@@ -41,14 +41,14 @@ package_dir=
packages=find_namespace:
install_requires =
flask ~= 1.0
- opentelemetry-ext-wsgi == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
- opentelemetry-api == 0.10.dev0
+ opentelemetry-ext-wsgi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11.dev0
[options.extras_require]
test =
flask~=1.0
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
+++ b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg
index 41042ce1b89..012b3541d21 100644
--- a/ext/opentelemetry-ext-grpc/setup.cfg
+++ b/ext/opentelemetry-ext-grpc/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
grpcio ~= 1.27
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-jaeger/setup.cfg b/ext/opentelemetry-ext-jaeger/setup.cfg
index e213e4558e2..c19107eedd4 100644
--- a/ext/opentelemetry-ext-jaeger/setup.cfg
+++ b/ext/opentelemetry-ext-jaeger/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
thrift >= 0.10.0
- opentelemetry-api == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
index d21fcb81681..60f2f9e9d22 100644
--- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
+++ b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/ext/opentelemetry-ext-jinja2/setup.cfg
index 41d6ff2fb8e..54a7515150f 100644
--- a/ext/opentelemetry-ext-jinja2/setup.cfg
+++ b/ext/opentelemetry-ext-jinja2/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
jinja2~=2.7
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
+++ b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg
index a00193b2f28..941c425343d 100644
--- a/ext/opentelemetry-ext-mysql/setup.cfg
+++ b/ext/opentelemetry-ext-mysql/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-ext-dbapi == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-dbapi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
mysql-connector-python ~= 8.0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
+++ b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.cfg b/ext/opentelemetry-ext-opencensusexporter/setup.cfg
index c85f3b3d003..ea963dce187 100644
--- a/ext/opentelemetry-ext-opencensusexporter/setup.cfg
+++ b/ext/opentelemetry-ext-opencensusexporter/setup.cfg
@@ -42,8 +42,8 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
opencensus-proto >= 0.1.0, < 1.0.0
- opentelemetry-api == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
protobuf >= 3.8.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
+++ b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-opentracing-shim/setup.cfg b/ext/opentelemetry-ext-opentracing-shim/setup.cfg
index 7f6b093ea03..abc052a5aaa 100644
--- a/ext/opentelemetry-ext-opentracing-shim/setup.cfg
+++ b/ext/opentelemetry-ext-opentracing-shim/setup.cfg
@@ -42,11 +42,11 @@ packages=find_namespace:
install_requires =
Deprecated >= 1.2.6
opentracing ~= 2.0
- opentelemetry-api == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
opentracing ~= 2.2.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
+++ b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-otlp/setup.cfg b/ext/opentelemetry-ext-otlp/setup.cfg
index 57fecc6fed0..65908e0a3c0 100644
--- a/ext/opentelemetry-ext-otlp/setup.cfg
+++ b/ext/opentelemetry-ext-otlp/setup.cfg
@@ -41,9 +41,9 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
googleapis-common-protos ~= 1.52.0
- opentelemetry-api == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
- opentelemetry-proto == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
+ opentelemetry-proto == 0.11.dev0
backoff ~= 1.10.0
[options.extras_require]
diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
+++ b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-prometheus/setup.cfg b/ext/opentelemetry-ext-prometheus/setup.cfg
index 3e5d5cd957f..5dae17f5cbc 100644
--- a/ext/opentelemetry-ext-prometheus/setup.cfg
+++ b/ext/opentelemetry-ext-prometheus/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
prometheus_client >= 0.5.0, < 1.0.0
- opentelemetry-api == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
+++ b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/ext/opentelemetry-ext-psycopg2/setup.cfg
index 252ff290d8f..bb0fd9a57c4 100644
--- a/ext/opentelemetry-ext-psycopg2/setup.cfg
+++ b/ext/opentelemetry-ext-psycopg2/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-ext-dbapi == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-dbapi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
psycopg2-binary >= 2.7.3.1
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
+++ b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-pymemcache/CHANGELOG.md b/ext/opentelemetry-ext-pymemcache/CHANGELOG.md
index 33144da9132..7425aa5e1ec 100644
--- a/ext/opentelemetry-ext-pymemcache/CHANGELOG.md
+++ b/ext/opentelemetry-ext-pymemcache/CHANGELOG.md
@@ -2,4 +2,8 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Initial release
\ No newline at end of file
diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/ext/opentelemetry-ext-pymemcache/setup.cfg
index 631d47579b1..c2252274b1f 100644
--- a/ext/opentelemetry-ext-pymemcache/setup.cfg
+++ b/ext/opentelemetry-ext-pymemcache/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
pymemcache ~= 1.3
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
+++ b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/ext/opentelemetry-ext-pymongo/setup.cfg
index 6cb5c8cc087..5e08d987763 100644
--- a/ext/opentelemetry-ext-pymongo/setup.cfg
+++ b/ext/opentelemetry-ext-pymongo/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
pymongo ~= 3.1
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
+++ b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/ext/opentelemetry-ext-pymysql/setup.cfg
index 031a6562b35..db28ef9581e 100644
--- a/ext/opentelemetry-ext-pymysql/setup.cfg
+++ b/ext/opentelemetry-ext-pymysql/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-ext-dbapi == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-dbapi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
PyMySQL ~= 0.9.3
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
+++ b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/ext/opentelemetry-ext-pyramid/setup.cfg
index 521f7c85ee4..bcdf850e87c 100644
--- a/ext/opentelemetry-ext-pyramid/setup.cfg
+++ b/ext/opentelemetry-ext-pyramid/setup.cfg
@@ -41,15 +41,15 @@ package_dir=
packages=find_namespace:
install_requires =
pyramid >= 1.7
- opentelemetry-instrumentation == 0.10.dev0
- opentelemetry-api == 0.10.dev0
- opentelemetry-ext-wsgi == 0.10.dev0
+ opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-wsgi == 0.11.dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
werkzeug == 0.16.1
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
+++ b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-redis/setup.cfg b/ext/opentelemetry-ext-redis/setup.cfg
index f6fbbafaaa2..26159c6568b 100644
--- a/ext/opentelemetry-ext-redis/setup.cfg
+++ b/ext/opentelemetry-ext-redis/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
redis >= 2.6
wrapt >= 1.12.1
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
+++ b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/ext/opentelemetry-ext-requests/setup.cfg
index 7bb84b42ba0..714a1b3231a 100644
--- a/ext/opentelemetry-ext-requests/setup.cfg
+++ b/ext/opentelemetry-ext-requests/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
requests ~= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
httpretty ~= 1.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
+++ b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-sqlalchemy/setup.cfg b/ext/opentelemetry-ext-sqlalchemy/setup.cfg
index c964b1327b0..76178b82456 100644
--- a/ext/opentelemetry-ext-sqlalchemy/setup.cfg
+++ b/ext/opentelemetry-ext-sqlalchemy/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
wrapt >= 1.11.2
sqlalchemy
[options.extras_require]
test =
- opentelemetry-sdk == 0.10.dev0
+ opentelemetry-sdk == 0.11.dev0
pytest
[options.packages.find]
diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
+++ b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/ext/opentelemetry-ext-sqlite3/setup.cfg
index a1128ca88fb..95f60988eab 100644
--- a/ext/opentelemetry-ext-sqlite3/setup.cfg
+++ b/ext/opentelemetry-ext-sqlite3/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-ext-dbapi == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-dbapi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
+++ b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-system-metrics/setup.cfg b/ext/opentelemetry-ext-system-metrics/setup.cfg
index 063e7e91b21..4006290514e 100644
--- a/ext/opentelemetry-ext-system-metrics/setup.cfg
+++ b/ext/opentelemetry-ext-system-metrics/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
psutil ~= 5.7.0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
+++ b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-wsgi/setup.cfg b/ext/opentelemetry-ext-wsgi/setup.cfg
index 48b0697d11f..e7f30870537 100644
--- a/ext/opentelemetry-ext-wsgi/setup.cfg
+++ b/ext/opentelemetry-ext-wsgi/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-instrumentation == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
+++ b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-ext-zipkin/setup.cfg b/ext/opentelemetry-ext-zipkin/setup.cfg
index 89d40aaeaa2..164f0d84c23 100644
--- a/ext/opentelemetry-ext-zipkin/setup.cfg
+++ b/ext/opentelemetry-ext-zipkin/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
requests ~= 2.7
- opentelemetry-api == 0.10.dev0
- opentelemetry-sdk == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
+++ b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/ext/opentelemetry-instrumentation-starlette/CHANGELOG.md b/ext/opentelemetry-instrumentation-starlette/CHANGELOG.md
index f7132ca8306..1991025f6cb 100644
--- a/ext/opentelemetry-instrumentation-starlette/CHANGELOG.md
+++ b/ext/opentelemetry-instrumentation-starlette/CHANGELOG.md
@@ -2,4 +2,8 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Initial release ([#777](https://github.com/open-telemetry/opentelemetry-python/pull/777))
\ No newline at end of file
diff --git a/ext/opentelemetry-instrumentation-starlette/setup.cfg b/ext/opentelemetry-instrumentation-starlette/setup.cfg
index 7659c9fadb6..cea0cc11881 100644
--- a/ext/opentelemetry-instrumentation-starlette/setup.cfg
+++ b/ext/opentelemetry-instrumentation-starlette/setup.cfg
@@ -38,8 +38,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.10.dev0
- opentelemetry-ext-asgi == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-asgi == 0.11.dev0
[options.entry_points]
opentelemetry_instrumentor =
@@ -47,7 +47,7 @@ opentelemetry_instrumentor =
[options.extras_require]
test =
- opentelemetry-test == 0.10.dev0
+ opentelemetry-test == 0.11.dev0
starlette ~= 0.13.0
requests ~= 2.23.0 # needed for testclient
diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
+++ b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/opentelemetry-api/src/opentelemetry/version.py b/opentelemetry-api/src/opentelemetry/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/opentelemetry-api/src/opentelemetry/version.py
+++ b/opentelemetry-api/src/opentelemetry/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/opentelemetry-instrumentation/setup.cfg b/opentelemetry-instrumentation/setup.cfg
index 46f956f3171..a51705177b5 100644
--- a/opentelemetry-instrumentation/setup.cfg
+++ b/opentelemetry-instrumentation/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
wrapt >= 1.0.0, < 2.0.0
[options.packages.find]
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/opentelemetry-proto/CHANGELOG.md b/opentelemetry-proto/CHANGELOG.md
index aac3fa1d9f0..3bc89fca99e 100644
--- a/opentelemetry-proto/CHANGELOG.md
+++ b/opentelemetry-proto/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Regenerate proto code and add pyi stubs
([#823](https://github.com/open-telemetry/opentelemetry-python/pull/823))
diff --git a/opentelemetry-proto/src/opentelemetry/proto/version.py b/opentelemetry-proto/src/opentelemetry/proto/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/version.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index 7c077dbf5ec..c7d791ccc4c 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.10b0
+
+Released 2020-06-23
+
- Rename CounterAggregator -> SumAggregator
([#816](https://github.com/open-telemetry/opentelemetry-python/pull/816))
diff --git a/opentelemetry-sdk/setup.cfg b/opentelemetry-sdk/setup.cfg
index 68c9984dc93..b4e7ed6a9d9 100644
--- a/opentelemetry-sdk/setup.cfg
+++ b/opentelemetry-sdk/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.10.dev0
+ opentelemetry-api == 0.11.dev0
[options.packages.find]
where = src
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/version.py b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
index 6d4fefa599e..858e73960ff 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/version.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
diff --git a/tests/util/src/opentelemetry/test/version.py b/tests/util/src/opentelemetry/test/version.py
index 804c927ded6..c41ce2492a1 100644
--- a/tests/util/src/opentelemetry/test/version.py
+++ b/tests/util/src/opentelemetry/test/version.py
@@ -1 +1 @@
-__version__ = "0.10.dev0"
+__version__ = "0.11.dev0"
From 3c366b2a65b41be9c90c34d13cc9a26cb76310ab Mon Sep 17 00:00:00 2001
From: "Tahir H. Butt"
Date: Fri, 26 Jun 2020 12:01:57 -0400
Subject: [PATCH 08/79] fix(celery): increase async timeout for tests (#857)
---
.../tests/celery/test_celery_functional.py | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py b/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
index 570a12b7588..abba19fc392 100644
--- a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
+++ b/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
@@ -27,6 +27,9 @@
from opentelemetry.sdk.trace import TracerProvider, export
from opentelemetry.trace.status import StatusCanonicalCode
+# set a high timeout for async executions due to issues in CI
+ASYNC_GET_TIMEOUT = 120
+
class MyException(Exception):
pass
@@ -38,7 +41,7 @@ def fn_task():
return 42
result = fn_task.apply_async()
- assert result.get() == 42
+ assert result.get(timeout=ASYNC_GET_TIMEOUT) == 42
spans = memory_exporter.get_finished_spans()
assert len(spans) == 2
@@ -144,7 +147,7 @@ def fn_task_parameters(user, force_logout=False):
result = fn_task_parameters.apply_async(
args=["user"], kwargs={"force_logout": True}
)
- assert result.get(timeout=10) == ["user", True]
+ assert result.get(timeout=ASYNC_GET_TIMEOUT) == ["user", True]
spans = memory_exporter.get_finished_spans()
assert len(spans) == 2
@@ -181,7 +184,7 @@ def fn_task():
results = [fn_task.delay() for _ in range(100)]
for result in results:
- assert result.get(timeout=1) == 42
+ assert result.get(timeout=ASYNC_GET_TIMEOUT) == 42
spans = memory_exporter.get_finished_spans()
@@ -194,7 +197,7 @@ def fn_task_parameters(user, force_logout=False):
return (user, force_logout)
result = fn_task_parameters.delay("user", force_logout=True)
- assert result.get(timeout=10) == ["user", True]
+ assert result.get(timeout=ASYNC_GET_TIMEOUT) == ["user", True]
spans = memory_exporter.get_finished_spans()
assert len(spans) == 2
@@ -448,7 +451,7 @@ def run(self, *args, **kwargs):
# avoid call loop
return
CelerySubClass.apply_async(args=[], kwargs={"stop": True}).get(
- timeout=10
+ timeout=ASYNC_GET_TIMEOUT
)
class CelerySubClass(CelerySuperClass):
From fb37885caeeff332dbd11ab8bd852d1920b1e8fc Mon Sep 17 00:00:00 2001
From: Mario Jonke
Date: Mon, 29 Jun 2020 17:28:56 +0200
Subject: [PATCH 09/79] ext/datadog: Fix API/SDK dependencies in datadog
exporter (#859)
---
ext/opentelemetry-ext-datadog/setup.cfg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/ext/opentelemetry-ext-datadog/setup.cfg
index 2d663de89bf..905dcda2eeb 100644
--- a/ext/opentelemetry-ext-datadog/setup.cfg
+++ b/ext/opentelemetry-ext-datadog/setup.cfg
@@ -40,8 +40,8 @@ package_dir=
packages=find_namespace:
install_requires =
ddtrace>=0.34.0
- opentelemetry-api==0.10.dev0
- opentelemetry-sdk==0.10.dev0
+ opentelemetry-api==0.11.dev0
+ opentelemetry-sdk==0.11.dev0
[options.packages.find]
where = src
From 0c102a1bf04a59ddba929252b6017e9fd2c91d71 Mon Sep 17 00:00:00 2001
From: Mario Jonke
Date: Tue, 30 Jun 2020 18:18:36 +0200
Subject: [PATCH 10/79] mysql: Fix auto instrumentation entry point (#858)
entry point for the mysql instrumentation pointed to pymysql instrumentation which caused loading of the instrumentation to fail since it does not exist.
Co-authored-by: alrex
Co-authored-by: Yusuke Tsutsumi
---
ext/opentelemetry-ext-mysql/CHANGELOG.md | 3 +++
ext/opentelemetry-ext-mysql/setup.cfg | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/ext/opentelemetry-ext-mysql/CHANGELOG.md b/ext/opentelemetry-ext-mysql/CHANGELOG.md
index 8c1b06faa6a..a4ab4809397 100644
--- a/ext/opentelemetry-ext-mysql/CHANGELOG.md
+++ b/ext/opentelemetry-ext-mysql/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- bugfix: Fix auto-instrumentation entry point for mysql
+ ([#858](https://github.com/open-telemetry/opentelemetry-python/pull/858))
+
## 0.7b1
Released 2020-05-12
diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg
index 941c425343d..ceb985e8b41 100644
--- a/ext/opentelemetry-ext-mysql/setup.cfg
+++ b/ext/opentelemetry-ext-mysql/setup.cfg
@@ -55,4 +55,4 @@ where = src
[options.entry_points]
opentelemetry_instrumentor =
- mysql = opentelemetry.ext.pymysql:MySQLInstrumentor
+ mysql = opentelemetry.ext.mysql:MySQLInstrumentor
From d20ae9b92c63856020ddcfb907e898b0158de544 Mon Sep 17 00:00:00 2001
From: alrex
Date: Tue, 30 Jun 2020 09:36:03 -0700
Subject: [PATCH 11/79] chore: use token for test package upload
---
.github/workflows/publish.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 13ee1e24c47..66ae00849be 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -25,8 +25,8 @@ jobs:
# might have already been updated, this would be bad.
- name: Publish to TestPyPI
env:
- TWINE_USERNAME: ${{ secrets.test_pypi_username }}
- TWINE_PASSWORD: ${{ secrets.test_pypi_password }}
+ TWINE_USERNAME: '__token__'
+ TWINE_PASSWORD: ${{ secrets.test_pypi_token }}
run: |
twine upload --repository testpypi --skip-existing --verbose dist/*
- name: Publish to PyPI
From b56fe2acc67a29d2c4e51523d92d748635045782 Mon Sep 17 00:00:00 2001
From: bitspradp
Date: Tue, 30 Jun 2020 19:31:22 +0100
Subject: [PATCH 12/79] Added a warning log when the existing TracerProvider
and MeterProvider are overridden (#856)
---
opentelemetry-api/CHANGELOG.md | 2 ++
.../src/opentelemetry/metrics/__init__.py | 4 ++++
.../src/opentelemetry/trace/__init__.py | 4 ++++
.../tests/metrics/test_globals.py | 23 +++++++++++++++++++
opentelemetry-api/tests/trace/test_globals.py | 17 ++++++++++++++
5 files changed, 50 insertions(+)
create mode 100644 opentelemetry-api/tests/metrics/test_globals.py
diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md
index 10c08c8574a..9a2647da26f 100644
--- a/opentelemetry-api/CHANGELOG.md
+++ b/opentelemetry-api/CHANGELOG.md
@@ -16,6 +16,8 @@ Released 2020-06-10
([#764](https://github.com/open-telemetry/opentelemetry-python/pull/764))
- Add SumObserver and UpDownSumObserver in metrics
([#789](https://github.com/open-telemetry/opentelemetry-python/pull/789))
+- Log a warning when replacing the global Tracer/Meter provider
+ ([#856](https://github.com/open-telemetry/opentelemetry-python/pull/856))
## 0.8b0
diff --git a/opentelemetry-api/src/opentelemetry/metrics/__init__.py b/opentelemetry-api/src/opentelemetry/metrics/__init__.py
index aa2988bce40..90f2f03f56b 100644
--- a/opentelemetry-api/src/opentelemetry/metrics/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/metrics/__init__.py
@@ -460,6 +460,10 @@ def get_meter(
def set_meter_provider(meter_provider: MeterProvider) -> None:
"""Sets the current global :class:`~.MeterProvider` object."""
global _METER_PROVIDER # pylint: disable=global-statement
+
+ if _METER_PROVIDER is not None:
+ logger.warning("Overriding current MeterProvider")
+
_METER_PROVIDER = meter_provider
diff --git a/opentelemetry-api/src/opentelemetry/trace/__init__.py b/opentelemetry-api/src/opentelemetry/trace/__init__.py
index fa0bc376e7f..196cf3390cd 100644
--- a/opentelemetry-api/src/opentelemetry/trace/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/trace/__init__.py
@@ -463,6 +463,10 @@ def get_tracer(
def set_tracer_provider(tracer_provider: TracerProvider) -> None:
"""Sets the current global :class:`~.TracerProvider` object."""
global _TRACER_PROVIDER # pylint: disable=global-statement
+
+ if _TRACER_PROVIDER is not None:
+ logger.warning("Overriding current TracerProvider")
+
_TRACER_PROVIDER = tracer_provider
diff --git a/opentelemetry-api/tests/metrics/test_globals.py b/opentelemetry-api/tests/metrics/test_globals.py
new file mode 100644
index 00000000000..9b9cfb94d90
--- /dev/null
+++ b/opentelemetry-api/tests/metrics/test_globals.py
@@ -0,0 +1,23 @@
+# type:ignore
+import unittest
+from logging import WARNING
+
+from opentelemetry import metrics
+from opentelemetry.sdk.metrics import MeterProvider
+
+
+class TestGlobals(unittest.TestCase):
+ def test_meter_provider_override_warning(self):
+ """metrics.set_meter_provider should throw a warning when overridden"""
+ metrics.set_meter_provider(MeterProvider())
+ with self.assertLogs(level=WARNING) as test:
+ metrics.set_meter_provider(MeterProvider())
+ self.assertEqual(
+ test.output,
+ [
+ (
+ "WARNING:opentelemetry.metrics:Overriding current "
+ "MeterProvider"
+ )
+ ],
+ )
diff --git a/opentelemetry-api/tests/trace/test_globals.py b/opentelemetry-api/tests/trace/test_globals.py
index 2f0f88fb280..5042dd2b726 100644
--- a/opentelemetry-api/tests/trace/test_globals.py
+++ b/opentelemetry-api/tests/trace/test_globals.py
@@ -1,7 +1,9 @@
import unittest
+from logging import WARNING
from unittest.mock import patch
from opentelemetry import context, trace
+from opentelemetry.sdk.trace import TracerProvider # type:ignore
class TestGlobals(unittest.TestCase):
@@ -20,6 +22,21 @@ def test_get_tracer(self):
trace.get_tracer("foo", "var", mock_provider)
mock_provider.get_tracer.assert_called_with("foo", "var")
+ def test_tracer_provider_override_warning(self):
+ """trace.set_tracer_provider should throw a warning when overridden"""
+ trace.set_tracer_provider(TracerProvider())
+ with self.assertLogs(level=WARNING) as test:
+ trace.set_tracer_provider(TracerProvider())
+ self.assertEqual(
+ test.output,
+ [
+ (
+ "WARNING:opentelemetry.trace:Overriding current "
+ "TracerProvider"
+ )
+ ],
+ )
+
class TestTracer(unittest.TestCase):
def setUp(self):
From 170c2c70903df669ce0978b9a56c81e7c75472c6 Mon Sep 17 00:00:00 2001
From: bitspradp
Date: Tue, 30 Jun 2020 21:13:58 +0100
Subject: [PATCH 13/79] ext/boto ext/botocore:Converted resource to hold
Resource attribute than a string (#866)
---
ext/opentelemetry-ext-boto/CHANGELOG.md | 4 ++
.../src/opentelemetry/ext/boto/__init__.py | 10 +++-
.../tests/test_boto_instrumentation.py | 49 +++++++++++++----
ext/opentelemetry-ext-botocore/CHANGELOG.md | 3 ++
.../opentelemetry/ext/botocore/__init__.py | 10 +++-
.../tests/test_botocore_instrumentation.py | 52 +++++++++++++++----
6 files changed, 106 insertions(+), 22 deletions(-)
diff --git a/ext/opentelemetry-ext-boto/CHANGELOG.md b/ext/opentelemetry-ext-boto/CHANGELOG.md
index 896a782491d..612b73b39a1 100644
--- a/ext/opentelemetry-ext-boto/CHANGELOG.md
+++ b/ext/opentelemetry-ext-boto/CHANGELOG.md
@@ -2,8 +2,12 @@
## Unreleased
+- ext/boto and ext/botocore: fails to export spans via jaeger
+([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866))
+
## 0.9b0
Released 2020-06-10
- Initial release
+
diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
index 97d4922658e..637200b078b 100644
--- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
+++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
@@ -52,6 +52,7 @@
from opentelemetry.ext.boto.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.sdk.trace import Resource
from opentelemetry.trace import SpanKind, get_tracer
logger = logging.getLogger(__name__)
@@ -123,9 +124,14 @@ def _common_request( # pylint: disable=too-many-locals
) as span:
if args:
http_method = args[0]
- span.resource = "%s.%s" % (endpoint_name, http_method.lower())
+ span.resource = Resource(
+ labels={
+ "endpoint": endpoint_name,
+ "http_method": http_method.lower(),
+ }
+ )
else:
- span.resource = endpoint_name
+ span.resource = Resource(labels={"endpoint": endpoint_name})
add_span_arg_tags(
span, endpoint_name, args, args_name, traced_args,
diff --git a/ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py b/ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py
index a629b108705..7cfbf018c6b 100644
--- a/ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py
+++ b/ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py
@@ -27,6 +27,7 @@
)
from opentelemetry.ext.boto import BotoInstrumentor
+from opentelemetry.sdk.resources import Resource
from opentelemetry.test.test_base import TestBase
@@ -69,7 +70,12 @@ def test_ec2_client(self):
span = spans[1]
self.assertEqual(span.attributes["aws.operation"], "RunInstances")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "ec2.runinstances")
+ self.assertEqual(
+ span.resource,
+ Resource(
+ labels={"endpoint": "ec2", "http_method": "runinstances"}
+ ),
+ )
self.assertEqual(span.attributes["http.method"], "POST")
self.assertEqual(span.attributes["aws.region"], "us-west-2")
self.assertEqual(span.name, "ec2.command")
@@ -123,7 +129,10 @@ def test_s3_client(self):
self.assertEqual(len(spans), 3)
span = spans[2]
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "s3.head")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "s3", "http_method": "head"}),
+ )
self.assertEqual(span.attributes["http.method"], "HEAD")
self.assertEqual(span.attributes["aws.operation"], "head_bucket")
self.assertEqual(span.name, "s3.command")
@@ -135,7 +144,10 @@ def test_s3_client(self):
spans = self.memory_exporter.get_finished_spans()
assert spans
span = spans[2]
- self.assertEqual(span.resource, "s3.head")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "s3", "http_method": "head"}),
+ )
@mock_s3_deprecated
def test_s3_put(self):
@@ -152,15 +164,24 @@ def test_s3_put(self):
self.assertEqual(len(spans), 3)
self.assertEqual(spans[0].attributes["aws.operation"], "create_bucket")
assert_span_http_status_code(spans[0], 200)
- self.assertEqual(spans[0].resource, "s3.put")
+ self.assertEqual(
+ spans[0].resource,
+ Resource(labels={"endpoint": "s3", "http_method": "put"}),
+ )
# get bucket
self.assertEqual(spans[1].attributes["aws.operation"], "head_bucket")
- self.assertEqual(spans[1].resource, "s3.head")
+ self.assertEqual(
+ spans[1].resource,
+ Resource(labels={"endpoint": "s3", "http_method": "head"}),
+ )
# put object
self.assertEqual(
spans[2].attributes["aws.operation"], "_send_file_internal"
)
- self.assertEqual(spans[2].resource, "s3.put")
+ self.assertEqual(
+ spans[2].resource,
+ Resource(labels={"endpoint": "s3", "http_method": "put"}),
+ )
@mock_lambda_deprecated
def test_unpatch(self):
@@ -200,7 +221,10 @@ def test_lambda_client(self):
self.assertEqual(len(spans), 2)
span = spans[0]
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "lambda.get")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "lambda", "http_method": "get"}),
+ )
self.assertEqual(span.attributes["http.method"], "GET")
self.assertEqual(span.attributes["aws.region"], "us-east-2")
self.assertEqual(span.attributes["aws.operation"], "list_functions")
@@ -214,7 +238,12 @@ def test_sts_client(self):
spans = self.memory_exporter.get_finished_spans()
assert spans
span = spans[0]
- self.assertEqual(span.resource, "sts.getfederationtoken")
+ self.assertEqual(
+ span.resource,
+ Resource(
+ labels={"endpoint": "sts", "http_method": "getfederationtoken"}
+ ),
+ )
self.assertEqual(span.attributes["aws.region"], "us-west-2")
self.assertEqual(
span.attributes["aws.operation"], "GetFederationToken"
@@ -238,5 +267,7 @@ def test_elasticache_client(self):
spans = self.memory_exporter.get_finished_spans()
assert spans
span = spans[0]
- self.assertEqual(span.resource, "elasticache")
+ self.assertEqual(
+ span.resource, Resource(labels={"endpoint": "elasticcache"})
+ )
self.assertEqual(span.attributes["aws.region"], "us-west-2")
diff --git a/ext/opentelemetry-ext-botocore/CHANGELOG.md b/ext/opentelemetry-ext-botocore/CHANGELOG.md
index 896a782491d..ccdc954a6b7 100644
--- a/ext/opentelemetry-ext-botocore/CHANGELOG.md
+++ b/ext/opentelemetry-ext-botocore/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- ext/boto and ext/botocore: fails to export spans via jaeger
+([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866))
+
## 0.9b0
Released 2020-06-10
diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
index 97615d974fe..f9da154d970 100644
--- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
+++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
@@ -58,6 +58,7 @@
from opentelemetry.ext.botocore.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.sdk.trace import Resource
from opentelemetry.trace import SpanKind, get_tracer
logger = logging.getLogger(__name__)
@@ -98,10 +99,15 @@ def _patched_api_call(self, original_func, instance, args, kwargs):
operation = None
if args:
operation = args[0]
- span.resource = "%s.%s" % (endpoint_name, operation.lower())
+ span.resource = Resource(
+ labels={
+ "endpoint": endpoint_name,
+ "operation": operation.lower(),
+ }
+ )
else:
- span.resource = endpoint_name
+ span.resource = Resource(labels={"endpoint": endpoint_name})
add_span_arg_tags(
span,
diff --git a/ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py b/ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py
index 64d0c3d7b7c..e0b687ad8b6 100644
--- a/ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py
+++ b/ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py
@@ -10,6 +10,7 @@
)
from opentelemetry.ext.botocore import BotocoreInstrumentor
+from opentelemetry.sdk.resources import Resource
from opentelemetry.test.test_base import TestBase
@@ -49,7 +50,12 @@ def test_traced_client(self):
self.assertEqual(span.attributes["aws.region"], "us-west-2")
self.assertEqual(span.attributes["aws.operation"], "DescribeInstances")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "ec2.describeinstances")
+ self.assertEqual(
+ span.resource,
+ Resource(
+ labels={"endpoint": "ec2", "operation": "describeinstances"}
+ ),
+ )
self.assertEqual(span.name, "ec2.command")
@mock_ec2
@@ -73,7 +79,10 @@ def test_s3_client(self):
self.assertEqual(len(spans), 2)
self.assertEqual(span.attributes["aws.operation"], "ListBuckets")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "s3.listbuckets")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "s3", "operation": "listbuckets"}),
+ )
# testing for span error
self.memory_exporter.get_finished_spans()
@@ -82,7 +91,10 @@ def test_s3_client(self):
spans = self.memory_exporter.get_finished_spans()
assert spans
span = spans[2]
- self.assertEqual(span.resource, "s3.listobjects")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "s3", "operation": "listobjects"}),
+ )
@mock_s3
def test_s3_put(self):
@@ -97,9 +109,15 @@ def test_s3_put(self):
self.assertEqual(len(spans), 2)
self.assertEqual(span.attributes["aws.operation"], "CreateBucket")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "s3.createbucket")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "s3", "operation": "createbucket"}),
+ )
self.assertEqual(spans[1].attributes["aws.operation"], "PutObject")
- self.assertEqual(spans[1].resource, "s3.putobject")
+ self.assertEqual(
+ spans[1].resource,
+ Resource(labels={"endpoint": "s3", "operation": "putobject"}),
+ )
self.assertEqual(spans[1].attributes["params.Key"], str(params["Key"]))
self.assertEqual(
spans[1].attributes["params.Bucket"], str(params["Bucket"])
@@ -119,7 +137,10 @@ def test_sqs_client(self):
self.assertEqual(span.attributes["aws.region"], "us-east-1")
self.assertEqual(span.attributes["aws.operation"], "ListQueues")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "sqs.listqueues")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "sqs", "operation": "listqueues"}),
+ )
@mock_kinesis
def test_kinesis_client(self):
@@ -136,7 +157,12 @@ def test_kinesis_client(self):
self.assertEqual(span.attributes["aws.region"], "us-east-1")
self.assertEqual(span.attributes["aws.operation"], "ListStreams")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "kinesis.liststreams")
+ self.assertEqual(
+ span.resource,
+ Resource(
+ labels={"endpoint": "kinesis", "operation": "liststreams"}
+ ),
+ )
@mock_kinesis
def test_unpatch(self):
@@ -176,7 +202,12 @@ def test_lambda_client(self):
self.assertEqual(span.attributes["aws.region"], "us-east-1")
self.assertEqual(span.attributes["aws.operation"], "ListFunctions")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "lambda.listfunctions")
+ self.assertEqual(
+ span.resource,
+ Resource(
+ labels={"endpoint": "lambda", "operation": "listfunctions"}
+ ),
+ )
@mock_kms
def test_kms_client(self):
@@ -191,7 +222,10 @@ def test_kms_client(self):
self.assertEqual(span.attributes["aws.region"], "us-east-1")
self.assertEqual(span.attributes["aws.operation"], "ListKeys")
assert_span_http_status_code(span, 200)
- self.assertEqual(span.resource, "kms.listkeys")
+ self.assertEqual(
+ span.resource,
+ Resource(labels={"endpoint": "kms", "operation": "listkeys"}),
+ )
# checking for protection on sts against security leak
self.assertTrue("params" not in span.attributes.keys())
From 7a46b2df1eb507d615c3e2c9baada1794fd04cb8 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Wed, 1 Jul 2020 11:03:19 -0600
Subject: [PATCH 14/79] Make it possible to set new values in Configuration
(#863)
---
.../src/opentelemetry/configuration/__init__.py | 11 +++++------
.../tests/configuration/test_configuration.py | 11 +++++++----
2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/opentelemetry-api/src/opentelemetry/configuration/__init__.py b/opentelemetry-api/src/opentelemetry/configuration/__init__.py
index 0bd2bce8d64..36c0950c0b0 100644
--- a/opentelemetry-api/src/opentelemetry/configuration/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/configuration/__init__.py
@@ -142,19 +142,18 @@ def __new__(cls) -> "Configuration":
def __getattr__(self, name: str) -> Optional[ConfigValue]:
return self._config_map.get(name)
- def __setattr__(self, key: str, val: ConfigValue) -> None:
- if key == "_config_map":
- super().__setattr__(key, val)
+ def __setattr__(self, name: str, value: ConfigValue) -> None:
+ if name not in self._config_map.keys():
+ self._config_map[name] = value
else:
- raise AttributeError(key)
+ raise AttributeError(name)
def get(self, name: str, default: _T) -> _T:
"""Use this typed method for dynamic access instead of `getattr`
:rtype: str or bool or int or float or None
"""
- val = self._config_map.get(name, default)
- return val
+ return self._config_map.get(name, default)
@classmethod
def _reset(cls) -> None:
diff --git a/opentelemetry-api/tests/configuration/test_configuration.py b/opentelemetry-api/tests/configuration/test_configuration.py
index 32b62e619d5..316847a0044 100644
--- a/opentelemetry-api/tests/configuration/test_configuration.py
+++ b/opentelemetry-api/tests/configuration/test_configuration.py
@@ -39,7 +39,7 @@ def test_singleton(self) -> None:
"OPENTELEMETRY_PTHON_TRACEX_PROVIDER": "tracex_provider",
},
)
- def test_environment_variables(self):
+ def test_environment_variables(self) -> None:
self.assertEqual(
Configuration().METER_PROVIDER, "meter_provider"
) # pylint: disable=no-member
@@ -58,13 +58,16 @@ def test_environment_variables(self):
"os.environ", # type: ignore
{"OPENTELEMETRY_PYTHON_TRACER_PROVIDER": "tracer_provider"},
)
- def test_property(self):
+ def test_property(self) -> None:
with self.assertRaises(AttributeError):
Configuration().TRACER_PROVIDER = "new_tracer_provider"
- def test_slots(self) -> None:
+ def test_set_once(self) -> None:
+
+ Configuration().XYZ = "xyz"
+
with self.assertRaises(AttributeError):
- Configuration().XYZ = "xyz" # pylint: disable=assigning-non-slot
+ Configuration().XYZ = "abc" # pylint: disable=assigning-non-slot
def test_getattr(self) -> None:
# literal access
From 6ea3f232a6d815cb9e4e2d2d69a2aa1e8a76c9dc Mon Sep 17 00:00:00 2001
From: Yusuke Tsutsumi
Date: Thu, 2 Jul 2020 09:26:13 -0700
Subject: [PATCH 15/79] instrument: moving auto-instrumentation to a submodule
(#873)
---
.../{auto_instrumentation.py => auto_instrumentation/__init__.py} | 0
.../instrumentation/{ => auto_instrumentation}/sitecustomize.py | 0
2 files changed, 0 insertions(+), 0 deletions(-)
rename opentelemetry-instrumentation/src/opentelemetry/instrumentation/{auto_instrumentation.py => auto_instrumentation/__init__.py} (100%)
rename opentelemetry-instrumentation/src/opentelemetry/instrumentation/{ => auto_instrumentation}/sitecustomize.py (100%)
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/__init__.py
similarity index 100%
rename from opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation.py
rename to opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/__init__.py
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/sitecustomize.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py
similarity index 100%
rename from opentelemetry-instrumentation/src/opentelemetry/instrumentation/sitecustomize.py
rename to opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py
From 2a9c3ac6e3e0bfa8038e07c60e19cab0975a5636 Mon Sep 17 00:00:00 2001
From: Yusuke Tsutsumi
Date: Thu, 2 Jul 2020 09:45:56 -0700
Subject: [PATCH 16/79] chore: Making eachdist release catch more deps (#867)
In the last release, eachdist missed updating dependencies
on ext-datadog, which has a slightly different, but valid,
way of specifying the version (omitting some spaces).
Making the eachdist regex more lenient to catch other valid
version specifications.
Also modifying the ext-datadog dependency specification to
match the format of all the others.
Co-authored-by: Leighton Chen
---
ext/opentelemetry-ext-datadog/setup.cfg | 4 ++--
scripts/eachdist.py | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/ext/opentelemetry-ext-datadog/setup.cfg
index 905dcda2eeb..d97bcdaa69f 100644
--- a/ext/opentelemetry-ext-datadog/setup.cfg
+++ b/ext/opentelemetry-ext-datadog/setup.cfg
@@ -40,8 +40,8 @@ package_dir=
packages=find_namespace:
install_requires =
ddtrace>=0.34.0
- opentelemetry-api==0.11.dev0
- opentelemetry-sdk==0.11.dev0
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-sdk == 0.11.dev0
[options.packages.find]
where = src
diff --git a/scripts/eachdist.py b/scripts/eachdist.py
index 57560b9b84a..724061690de 100755
--- a/scripts/eachdist.py
+++ b/scripts/eachdist.py
@@ -589,8 +589,8 @@ def update_dependencies(targets, version):
targets,
version,
"setup.cfg",
- r"(opentelemetry-.*)= (.*)",
- r"\1= " + version,
+ r"(opentelemetry-.*)==(.*)",
+ r"\1== " + version,
)
From 112bade11f1c1eca473e274947b5806afba58dcf Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Fri, 3 Jul 2020 12:42:56 -0400
Subject: [PATCH 17/79] Strip letters (#877)
---
.../exporter/cloud_trace/__init__.py | 10 ++++++++--
.../tests/test_cloud_trace_exporter.py | 18 ++++++++++++++----
2 files changed, 22 insertions(+), 6 deletions(-)
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
index f6d1e78b5aa..647ad210402 100644
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
+++ b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
@@ -291,6 +291,10 @@ def _extract_events(events: Sequence[Event]) -> ProtoSpan.TimeEvents:
)
+def _strip_characters(ot_version):
+ return "".join(filter(lambda x: x.isdigit() or x == ".", ot_version))
+
+
def _extract_attributes(
attrs: types.Attributes,
num_attrs_limit: int,
@@ -310,8 +314,10 @@ def _extract_attributes(
if add_agent_attr:
attributes_dict["g.co/agent"] = _format_attribute_value(
"opentelemetry-python {}; google-cloud-trace-exporter {}".format(
- pkg_resources.get_distribution("opentelemetry-sdk").version,
- cloud_trace_version,
+ _strip_characters(
+ pkg_resources.get_distribution("opentelemetry-sdk").version
+ ),
+ _strip_characters(cloud_trace_version),
)
)
return ProtoSpan.Attributes(
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
index bd5a9f073d8..3b89b55046e 100644
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
+++ b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
@@ -32,6 +32,7 @@
_extract_links,
_extract_status,
_format_attribute_value,
+ _strip_characters,
_truncate_str,
)
from opentelemetry.exporter.cloud_trace.version import (
@@ -117,10 +118,12 @@ def test_export(self):
attribute_map={
"g.co/agent": _format_attribute_value(
"opentelemetry-python {}; google-cloud-trace-exporter {}".format(
- pkg_resources.get_distribution(
- "opentelemetry-sdk"
- ).version,
- cloud_trace_version,
+ _strip_characters(
+ pkg_resources.get_distribution(
+ "opentelemetry-sdk"
+ ).version
+ ),
+ _strip_characters(cloud_trace_version),
)
)
}
@@ -415,3 +418,10 @@ def test_truncate(self):
),
MAX_EVENT_ATTRS,
)
+
+ def test_strip_characters(self):
+ self.assertEqual("0.10.0", _strip_characters("0.10.0b"))
+ self.assertEqual("1.20.5", _strip_characters("1.20.5"))
+ self.assertEqual("3.1.0", _strip_characters("3.1.0beta"))
+ self.assertEqual("4.2.0", _strip_characters("4b.2rc.0a"))
+ self.assertEqual("6.20.15", _strip_characters("b6.20.15"))
From ca8c0970f88b083b57c85322c997595d0ffc3702 Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Sun, 5 Jul 2020 02:40:40 -0400
Subject: [PATCH 18/79] Resources prototype (#853)
---
docs/examples/basic_tracer/README.rst | 37 +++++++
docs/examples/basic_tracer/basic_trace.py | 14 +++
docs/examples/basic_tracer/resources.py | 19 ++++
.../CHANGELOG.md | 3 +
.../exporter/cloud_monitoring/__init__.py | 42 +++++++-
.../tests/test_cloud_monitoring.py | 102 +++++++++++++++++-
.../CHANGELOG.md | 3 +
.../setup.cfg | 1 +
.../exporter/cloud_trace/__init__.py | 36 ++++++-
.../opentelemetry/tools/resource_detector.py | 47 ++++++++
.../tests/test_cloud_trace_exporter.py | 81 +++++++++++++-
.../tests/test_gcp_resource_detector.py | 83 ++++++++++++++
opentelemetry-sdk/CHANGELOG.md | 3 +
.../opentelemetry/sdk/resources/__init__.py | 63 +++++++++++
.../src/opentelemetry/sdk/trace/__init__.py | 1 +
.../tests/resources/test_resources.py | 93 ++++++++++++++++
opentelemetry-sdk/tests/trace/test_trace.py | 5 +-
17 files changed, 617 insertions(+), 16 deletions(-)
create mode 100644 docs/examples/basic_tracer/README.rst
create mode 100644 docs/examples/basic_tracer/basic_trace.py
create mode 100644 docs/examples/basic_tracer/resources.py
create mode 100644 ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py
create mode 100644 ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
diff --git a/docs/examples/basic_tracer/README.rst b/docs/examples/basic_tracer/README.rst
new file mode 100644
index 00000000000..57d431a3877
--- /dev/null
+++ b/docs/examples/basic_tracer/README.rst
@@ -0,0 +1,37 @@
+Basic Trace
+===========
+
+These examples show how to use OpenTelemetry to create and export Spans.
+
+There are two different examples:
+
+* basic_trace: Shows how to configure a SpanProcessor and Exporter, and how to create a tracer and span.
+
+* resources: Shows how to add resource information to a Provider. Note that this must be run on a Google Compute Engine instance.
+
+The source files of these examples are available :scm_web:`here `.
+
+Installation
+------------
+
+.. code-block:: sh
+
+ pip install opentelemetry-api
+ pip install opentelemetry-sdk
+
+Run the Example
+---------------
+
+.. code-block:: sh
+
+ python .py
+
+The output will be shown in the console.
+
+Useful links
+------------
+
+- OpenTelemetry_
+- :doc:`../../api/trace`
+
+.. _OpenTelemetry: https://github.com/open-telemetry/opentelemetry-python/
diff --git a/docs/examples/basic_tracer/basic_trace.py b/docs/examples/basic_tracer/basic_trace.py
new file mode 100644
index 00000000000..f7df424da3b
--- /dev/null
+++ b/docs/examples/basic_tracer/basic_trace.py
@@ -0,0 +1,14 @@
+from opentelemetry import trace
+from opentelemetry.sdk.trace import TracerProvider
+from opentelemetry.sdk.trace.export import (
+ ConsoleSpanExporter,
+ SimpleExportSpanProcessor,
+)
+
+trace.set_tracer_provider(TracerProvider())
+trace.get_tracer_provider().add_span_processor(
+ SimpleExportSpanProcessor(ConsoleSpanExporter())
+)
+tracer = trace.get_tracer(__name__)
+with tracer.start_as_current_span("foo"):
+ print("Hello world!")
diff --git a/docs/examples/basic_tracer/resources.py b/docs/examples/basic_tracer/resources.py
new file mode 100644
index 00000000000..f37e73531d6
--- /dev/null
+++ b/docs/examples/basic_tracer/resources.py
@@ -0,0 +1,19 @@
+from opentelemetry import trace
+from opentelemetry.sdk.resources import get_aggregated_resources
+from opentelemetry.sdk.trace import TracerProvider
+from opentelemetry.sdk.trace.export import (
+ ConsoleSpanExporter,
+ SimpleExportSpanProcessor,
+)
+from opentelemetry.tools.resource_detector import GoogleCloudResourceDetector
+
+resources = get_aggregated_resources([GoogleCloudResourceDetector()])
+
+trace.set_tracer_provider(TracerProvider(resource=resources))
+
+trace.get_tracer_provider().add_span_processor(
+ SimpleExportSpanProcessor(ConsoleSpanExporter())
+)
+tracer = trace.get_tracer(__name__)
+with tracer.start_as_current_span("foo"):
+ print("Hello world!")
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
index d51e8aa7490..e5f01ee5b02 100644
--- a/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
+++ b/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Add support for resources
+ ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
+
## Version 0.10b0
Released 2020-06-23
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
index 8e71e5b2501..2c6e3abdb09 100644
--- a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
+++ b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
@@ -5,6 +5,7 @@
import google.auth
from google.api.label_pb2 import LabelDescriptor
from google.api.metric_pb2 import MetricDescriptor
+from google.api.monitored_resource_pb2 import MonitoredResource
from google.cloud.monitoring_v3 import MetricServiceClient
from google.cloud.monitoring_v3.proto.metric_pb2 import TimeSeries
@@ -14,12 +15,21 @@
MetricsExportResult,
)
from opentelemetry.sdk.metrics.export.aggregate import SumAggregator
+from opentelemetry.sdk.resources import Resource
logger = logging.getLogger(__name__)
MAX_BATCH_WRITE = 200
WRITE_INTERVAL = 10
UNIQUE_IDENTIFIER_KEY = "opentelemetry_id"
+OT_RESOURCE_LABEL_TO_GCP = {
+ "gce_instance": {
+ "cloud.account.id": "project_id",
+ "host.id": "instance_id",
+ "cloud.zone": "zone",
+ }
+}
+
# pylint is unable to resolve members of protobuf objects
# pylint: disable=no-member
@@ -56,13 +66,33 @@ def __init__(
random.randint(0, 16 ** 8)
)
- def _add_resource_info(self, series: TimeSeries) -> None:
+ @staticmethod
+ def _get_monitored_resource(
+ resource: Resource,
+ ) -> Optional[MonitoredResource]:
"""Add Google resource specific information (e.g. instance id, region).
+ See
+ https://cloud.google.com/monitoring/custom-metrics/creating-metrics#custom-metric-resources
+ for supported types
Args:
series: ProtoBuf TimeSeries
"""
- # TODO: Leverage this better
+
+ if resource.labels.get("cloud.provider") != "gcp":
+ return None
+ resource_type = resource.labels["gcp.resource_type"]
+ if resource_type not in OT_RESOURCE_LABEL_TO_GCP:
+ return None
+ return MonitoredResource(
+ type=resource_type,
+ labels={
+ gcp_label: str(resource.labels[ot_label])
+ for ot_label, gcp_label in OT_RESOURCE_LABEL_TO_GCP[
+ resource_type
+ ].items()
+ },
+ )
def _batch_write(self, series: TimeSeries) -> None:
""" Cloud Monitoring allows writing up to 200 time series at once
@@ -162,9 +192,11 @@ def export(
metric_descriptor = self._get_metric_descriptor(record)
if not metric_descriptor:
continue
-
- series = TimeSeries()
- self._add_resource_info(series)
+ series = TimeSeries(
+ resource=self._get_monitored_resource(
+ record.instrument.meter.resource
+ )
+ )
series.metric.type = metric_descriptor.type
for key, value in record.labels:
series.metric.labels[key] = str(value)
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py b/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
index 1b36661699c..bc695f6d1f6 100644
--- a/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
+++ b/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
@@ -17,6 +17,7 @@
from google.api.label_pb2 import LabelDescriptor
from google.api.metric_pb2 import MetricDescriptor
+from google.api.monitored_resource_pb2 import MonitoredResource
from google.cloud.monitoring_v3.proto.metric_pb2 import TimeSeries
from opentelemetry.exporter.cloud_monitoring import (
@@ -27,17 +28,30 @@
)
from opentelemetry.sdk.metrics.export import MetricRecord
from opentelemetry.sdk.metrics.export.aggregate import SumAggregator
+from opentelemetry.sdk.resources import Resource
class UnsupportedAggregator:
pass
+class MockMeter:
+ def __init__(self, resource=Resource.create_empty()):
+ self.resource = resource
+
+
class MockMetric:
- def __init__(self, name="name", description="description", value_type=int):
+ def __init__(
+ self,
+ name="name",
+ description="description",
+ value_type=int,
+ meter=None,
+ ):
self.name = name
self.description = description
self.value_type = value_type
+ self.meter = meter or MockMeter()
# pylint: disable=protected-access
@@ -205,24 +219,41 @@ def test_export(self):
}
)
+ resource = Resource(
+ labels={
+ "cloud.account.id": 123,
+ "host.id": "host",
+ "cloud.zone": "US",
+ "cloud.provider": "gcp",
+ "extra_info": "extra",
+ "gcp.resource_type": "gce_instance",
+ "not_gcp_resource": "value",
+ }
+ )
+
sum_agg_one = SumAggregator()
sum_agg_one.checkpoint = 1
sum_agg_one.last_update_timestamp = (WRITE_INTERVAL + 1) * 1e9
exporter.export(
[
MetricRecord(
- MockMetric(),
+ MockMetric(meter=MockMeter(resource=resource)),
(("label1", "value1"), ("label2", 1),),
sum_agg_one,
),
MetricRecord(
- MockMetric(),
+ MockMetric(meter=MockMeter(resource=resource)),
(("label1", "value2"), ("label2", 2),),
sum_agg_one,
),
]
)
- series1 = TimeSeries()
+ expected_resource = MonitoredResource(
+ type="gce_instance",
+ labels={"project_id": "123", "instance_id": "host", "zone": "US"},
+ )
+
+ series1 = TimeSeries(resource=expected_resource)
series1.metric.type = "custom.googleapis.com/OpenTelemetry/name"
series1.metric.labels["label1"] = "value1"
series1.metric.labels["label2"] = "1"
@@ -231,7 +262,7 @@ def test_export(self):
point.interval.end_time.seconds = WRITE_INTERVAL + 1
point.interval.end_time.nanos = 0
- series2 = TimeSeries()
+ series2 = TimeSeries(resource=expected_resource)
series2.metric.type = "custom.googleapis.com/OpenTelemetry/name"
series2.metric.labels["label1"] = "value2"
series2.metric.labels["label2"] = "2"
@@ -342,3 +373,64 @@ def test_unique_identifier(self):
first_call[0][1][0].metric.labels[UNIQUE_IDENTIFIER_KEY],
second_call[0][1][0].metric.labels[UNIQUE_IDENTIFIER_KEY],
)
+
+ def test_extract_resources(self):
+ exporter = CloudMonitoringMetricsExporter(project_id=self.project_id)
+
+ self.assertIsNone(
+ exporter._get_monitored_resource(Resource.create_empty())
+ )
+ resource = Resource(
+ labels={
+ "cloud.account.id": 123,
+ "host.id": "host",
+ "cloud.zone": "US",
+ "cloud.provider": "gcp",
+ "extra_info": "extra",
+ "gcp.resource_type": "gce_instance",
+ "not_gcp_resource": "value",
+ }
+ )
+ expected_extract = MonitoredResource(
+ type="gce_instance",
+ labels={"project_id": "123", "instance_id": "host", "zone": "US"},
+ )
+ self.assertEqual(
+ exporter._get_monitored_resource(resource), expected_extract
+ )
+
+ resource = Resource(
+ labels={
+ "cloud.account.id": "123",
+ "host.id": "host",
+ "extra_info": "extra",
+ "not_gcp_resource": "value",
+ "gcp.resource_type": "gce_instance",
+ "cloud.provider": "gcp",
+ }
+ )
+ # Should throw when passed a malformed GCP resource dict
+ self.assertRaises(KeyError, exporter._get_monitored_resource, resource)
+
+ resource = Resource(
+ labels={
+ "cloud.account.id": "123",
+ "host.id": "host",
+ "extra_info": "extra",
+ "not_gcp_resource": "value",
+ "gcp.resource_type": "unsupported_gcp_resource",
+ "cloud.provider": "gcp",
+ }
+ )
+ self.assertIsNone(exporter._get_monitored_resource(resource))
+
+ resource = Resource(
+ labels={
+ "cloud.account.id": "123",
+ "host.id": "host",
+ "extra_info": "extra",
+ "not_gcp_resource": "value",
+ "cloud.provider": "aws",
+ }
+ )
+ self.assertIsNone(exporter._get_monitored_resource(resource))
diff --git a/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
index 5ff312743fc..22eac3e4bf9 100644
--- a/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
+++ b/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Add support for resources and resource detector
+ ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
+
## Version 0.10b0
Released 2020-06-23
diff --git a/ext/opentelemetry-exporter-cloud-trace/setup.cfg b/ext/opentelemetry-exporter-cloud-trace/setup.cfg
index 41ffc4116ad..4437f40fdd3 100644
--- a/ext/opentelemetry-exporter-cloud-trace/setup.cfg
+++ b/ext/opentelemetry-exporter-cloud-trace/setup.cfg
@@ -39,6 +39,7 @@ package_dir=
=src
packages=find_namespace:
install_requires =
+ requests
opentelemetry-api
opentelemetry-sdk
google-cloud-trace
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
index 647ad210402..ea36d227275 100644
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
+++ b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
@@ -55,6 +55,7 @@
from opentelemetry.exporter.cloud_trace.version import (
__version__ as cloud_trace_version,
)
+from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import Event
from opentelemetry.sdk.trace.export import Span, SpanExporter, SpanExportResult
from opentelemetry.sdk.util import BoundedDict
@@ -106,7 +107,6 @@ def export(self, spans: Sequence[Span]) -> SpanExportResult:
# pylint: disable=broad-except
except Exception as ex:
logger.error("Error when creating span %s", span, exc_info=ex)
-
try:
self.client.batch_write_spans(
"projects/{}".format(self.project_id), cloud_trace_spans,
@@ -150,6 +150,11 @@ def _translate_to_cloud_trace(
MAX_SPAN_ATTRS,
)
+ # Span does not support a MonitoredResource object. We put the
+ # information into labels instead.
+ resources_and_attrs = _extract_resources(span.resource)
+ resources_and_attrs.update(span.attributes)
+
cloud_trace_spans.append(
{
"name": span_name,
@@ -161,7 +166,9 @@ def _translate_to_cloud_trace(
"end_time": end_time,
"parent_span_id": parent_id,
"attributes": _extract_attributes(
- span.attributes, MAX_SPAN_ATTRS, add_agent_attr=True
+ resources_and_attrs,
+ MAX_SPAN_ATTRS,
+ add_agent_attr=True,
),
"links": _extract_links(span.links),
"status": _extract_status(span.status),
@@ -295,6 +302,31 @@ def _strip_characters(ot_version):
return "".join(filter(lambda x: x.isdigit() or x == ".", ot_version))
+OT_RESOURCE_LABEL_TO_GCP = {
+ "gce_instance": {
+ "cloud.account.id": "project_id",
+ "host.id": "instance_id",
+ "cloud.zone": "zone",
+ }
+}
+
+
+def _extract_resources(resource: Resource) -> Dict[str, str]:
+ if resource.labels.get("cloud.provider") != "gcp":
+ return {}
+ resource_type = resource.labels["gcp.resource_type"]
+ if resource_type not in OT_RESOURCE_LABEL_TO_GCP:
+ return {}
+ return {
+ "g.co/r/{}/{}".format(resource_type, gcp_resource_key,): str(
+ resource.labels[ot_resource_key]
+ )
+ for ot_resource_key, gcp_resource_key in OT_RESOURCE_LABEL_TO_GCP[
+ resource_type
+ ].items()
+ }
+
+
def _extract_attributes(
attrs: types.Attributes,
num_attrs_limit: int,
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py
new file mode 100644
index 00000000000..5dbf7627f81
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py
@@ -0,0 +1,47 @@
+import requests
+
+from opentelemetry.context import attach, detach, set_value
+from opentelemetry.sdk.resources import Resource, ResourceDetector
+
+_GCP_METADATA_URL = (
+ "http://metadata.google.internal/computeMetadata/v1/?recursive=true"
+)
+_GCP_METADATA_URL_HEADER = {"Metadata-Flavor": "Google"}
+
+
+def get_gce_resources():
+ """ Resource finder for common GCE attributes
+
+ See: https://cloud.google.com/compute/docs/storing-retrieving-metadata
+ """
+ token = attach(set_value("suppress_instrumentation", True))
+ all_metadata = requests.get(
+ _GCP_METADATA_URL, headers=_GCP_METADATA_URL_HEADER
+ ).json()
+ detach(token)
+ gce_resources = {
+ "host.id": all_metadata["instance"]["id"],
+ "cloud.account.id": all_metadata["project"]["projectId"],
+ "cloud.zone": all_metadata["instance"]["zone"].split("/")[-1],
+ "cloud.provider": "gcp",
+ "gcp.resource_type": "gce_instance",
+ }
+ return gce_resources
+
+
+_RESOURCE_FINDERS = [get_gce_resources]
+
+
+class GoogleCloudResourceDetector(ResourceDetector):
+ def __init__(self, raise_on_error=False):
+ super().__init__(raise_on_error)
+ self.cached = False
+ self.gcp_resources = {}
+
+ def detect(self) -> "Resource":
+ if not self.cached:
+ self.cached = True
+ for resource_finder in _RESOURCE_FINDERS:
+ found_resources = resource_finder()
+ self.gcp_resources.update(found_resources)
+ return Resource(self.gcp_resources)
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
index 3b89b55046e..c5444241b69 100644
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
+++ b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
@@ -1,4 +1,4 @@
-# Copyright OpenTelemetry Authors
+# 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.
@@ -30,6 +30,7 @@
_extract_attributes,
_extract_events,
_extract_links,
+ _extract_resources,
_extract_status,
_format_attribute_value,
_strip_characters,
@@ -38,6 +39,7 @@
from opentelemetry.exporter.cloud_trace.version import (
__version__ as cloud_trace_version,
)
+from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import Event
from opentelemetry.sdk.trace.export import Span
from opentelemetry.trace import Link, SpanContext, SpanKind
@@ -92,6 +94,15 @@ def test_constructor_explicit(self):
def test_export(self):
trace_id = "6e0c63257de34c92bf9efcd03927272e"
span_id = "95bb5edabd45950f"
+ resource_info = Resource(
+ {
+ "cloud.account.id": 123,
+ "host.id": "host",
+ "cloud.zone": "US",
+ "cloud.provider": "gcp",
+ "gcp.resource_type": "gce_instance",
+ }
+ )
span_datas = [
Span(
name="span_name",
@@ -102,6 +113,8 @@ def test_export(self):
),
parent=None,
kind=SpanKind.INTERNAL,
+ resource=resource_info,
+ attributes={"attr_key": "attr_value"},
)
]
@@ -116,6 +129,13 @@ def test_export(self):
),
"attributes": ProtoSpan.Attributes(
attribute_map={
+ "g.co/r/gce_instance/zone": _format_attribute_value("US"),
+ "g.co/r/gce_instance/instance_id": _format_attribute_value(
+ "host"
+ ),
+ "g.co/r/gce_instance/project_id": _format_attribute_value(
+ "123"
+ ),
"g.co/agent": _format_attribute_value(
"opentelemetry-python {}; google-cloud-trace-exporter {}".format(
_strip_characters(
@@ -125,7 +145,8 @@ def test_export(self):
),
_strip_characters(cloud_trace_version),
)
- )
+ ),
+ "attr_key": _format_attribute_value("attr_value"),
}
),
"links": None,
@@ -284,6 +305,62 @@ def test_extract_links(self):
),
)
+ def test_extract_resources(self):
+ self.assertEqual(_extract_resources(Resource.create_empty()), {})
+ resource = Resource(
+ labels={
+ "cloud.account.id": 123,
+ "host.id": "host",
+ "cloud.zone": "US",
+ "cloud.provider": "gcp",
+ "extra_info": "extra",
+ "gcp.resource_type": "gce_instance",
+ "not_gcp_resource": "value",
+ }
+ )
+ expected_extract = {
+ "g.co/r/gce_instance/project_id": "123",
+ "g.co/r/gce_instance/instance_id": "host",
+ "g.co/r/gce_instance/zone": "US",
+ }
+ self.assertEqual(_extract_resources(resource), expected_extract)
+
+ resource = Resource(
+ labels={
+ "cloud.account.id": "123",
+ "host.id": "host",
+ "extra_info": "extra",
+ "not_gcp_resource": "value",
+ "gcp.resource_type": "gce_instance",
+ "cloud.provider": "gcp",
+ }
+ )
+ # Should throw when passed a malformed GCP resource dict
+ self.assertRaises(KeyError, _extract_resources, resource)
+
+ resource = Resource(
+ labels={
+ "cloud.account.id": "123",
+ "host.id": "host",
+ "extra_info": "extra",
+ "not_gcp_resource": "value",
+ "gcp.resource_type": "unsupported_gcp_resource",
+ "cloud.provider": "gcp",
+ }
+ )
+ self.assertEqual(_extract_resources(resource), {})
+
+ resource = Resource(
+ labels={
+ "cloud.account.id": "123",
+ "host.id": "host",
+ "extra_info": "extra",
+ "not_gcp_resource": "value",
+ "cloud.provider": "aws",
+ }
+ )
+ self.assertEqual(_extract_resources(resource), {})
+
# pylint:disable=too-many-locals
def test_truncate(self):
"""Cloud Trace API imposes limits on the length of many things,
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
new file mode 100644
index 00000000000..df821213308
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
@@ -0,0 +1,83 @@
+# 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 unittest
+from unittest import mock
+
+from opentelemetry.sdk.resources import Resource
+from opentelemetry.tools.resource_detector import (
+ _GCP_METADATA_URL,
+ GoogleCloudResourceDetector,
+ get_gce_resources,
+)
+
+RESOURCES_JSON_STRING = {
+ "instance": {"id": "instance_id", "zone": "projects/123/zones/zone"},
+ "project": {"projectId": "project_id"},
+}
+
+
+class TestGCEResourceFinder(unittest.TestCase):
+ @mock.patch("opentelemetry.tools.resource_detector.requests.get")
+ def test_finding_gce_resources(self, getter):
+ getter.return_value.json.return_value = RESOURCES_JSON_STRING
+ found_resources = get_gce_resources()
+ self.assertEqual(getter.call_args_list[0][0][0], _GCP_METADATA_URL)
+ self.assertEqual(
+ found_resources,
+ {
+ "host.id": "instance_id",
+ "cloud.provider": "gcp",
+ "cloud.account.id": "project_id",
+ "cloud.zone": "zone",
+ "gcp.resource_type": "gce_instance",
+ },
+ )
+
+
+class TestGoogleCloudResourceDetector(unittest.TestCase):
+ @mock.patch("opentelemetry.tools.resource_detector.requests.get")
+ def test_finding_resources(self, getter):
+ resource_finder = GoogleCloudResourceDetector()
+ getter.return_value.json.return_value = RESOURCES_JSON_STRING
+ found_resources = resource_finder.detect()
+ self.assertEqual(getter.call_args_list[0][0][0], _GCP_METADATA_URL)
+ self.assertEqual(
+ found_resources,
+ Resource(
+ labels={
+ "host.id": "instance_id",
+ "cloud.provider": "gcp",
+ "cloud.account.id": "project_id",
+ "cloud.zone": "zone",
+ "gcp.resource_type": "gce_instance",
+ }
+ ),
+ )
+ self.assertEqual(getter.call_count, 1)
+
+ found_resources = resource_finder.detect()
+ self.assertEqual(getter.call_count, 1)
+ self.assertEqual(
+ found_resources,
+ Resource(
+ labels={
+ "host.id": "instance_id",
+ "cloud.provider": "gcp",
+ "cloud.account.id": "project_id",
+ "cloud.zone": "zone",
+ "gcp.resource_type": "gce_instance",
+ }
+ ),
+ )
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index c7d791ccc4c..46ad8b8e29c 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Add support for resources and resource detector
+ ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
+
## Version 0.10b0
Released 2020-06-23
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py
index 91c491f09f6..a8e9ac65be1 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py
@@ -12,11 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import abc
+import concurrent.futures
+import logging
+import os
import typing
from json import dumps
LabelValue = typing.Union[str, bool, int, float]
Labels = typing.Dict[str, LabelValue]
+logger = logging.getLogger(__name__)
class Resource:
@@ -55,3 +60,61 @@ def __hash__(self):
_EMPTY_RESOURCE = Resource({})
+
+
+class ResourceDetector(abc.ABC):
+ def __init__(self, raise_on_error=False):
+ self.raise_on_error = raise_on_error
+
+ @abc.abstractmethod
+ def detect(self) -> "Resource":
+ raise NotImplementedError()
+
+
+class OTELResourceDetector(ResourceDetector):
+ # pylint: disable=no-self-use
+ def detect(self) -> "Resource":
+ env_resources_items = os.environ.get("OTEL_RESOURCE")
+ env_resource_map = {}
+ if env_resources_items:
+ env_resource_map = {
+ key.strip(): value.strip()
+ for key, value in (
+ item.split("=") for item in env_resources_items.split(",")
+ )
+ }
+ return Resource(env_resource_map)
+
+
+def get_aggregated_resources(
+ detectors: typing.List["ResourceDetector"],
+ initial_resource: typing.Optional[Resource] = None,
+ timeout=5,
+) -> "Resource":
+ """ Retrieves resources from detectors in the order that they were passed
+
+ :param detectors: List of resources in order of priority
+ :param initial_resource: Static resource. This has highest priority
+ :param timeout: Number of seconds to wait for each detector to return
+ :return:
+ """
+ final_resource = initial_resource or _EMPTY_RESOURCE
+ detectors = [OTELResourceDetector()] + detectors
+
+ with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
+ futures = [executor.submit(detector.detect) for detector in detectors]
+ for detector_ind, future in enumerate(futures):
+ detector = detectors[detector_ind]
+ try:
+ detected_resources = future.result(timeout=timeout)
+ # pylint: disable=broad-except
+ except Exception as ex:
+ if detector.raise_on_error:
+ raise ex
+ logger.warning(
+ "Exception %s in detector %s, ignoring", ex, detector
+ )
+ detected_resources = _EMPTY_RESOURCE
+ finally:
+ final_resource = final_resource.merge(detected_resources)
+ return final_resource
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
index db377c09243..1118b424888 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
@@ -520,6 +520,7 @@ def to_json(self, indent=4):
f_span["attributes"] = self._format_attributes(self.attributes)
f_span["events"] = self._format_events(self.events)
f_span["links"] = self._format_links(self.links)
+ f_span["resource"] = self.resource.labels
return json.dumps(f_span, indent=indent)
diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py
index 959e23f0def..698b4fdda3f 100644
--- a/opentelemetry-sdk/tests/resources/test_resources.py
+++ b/opentelemetry-sdk/tests/resources/test_resources.py
@@ -14,7 +14,9 @@
# pylint: disable=protected-access
+import os
import unittest
+from unittest import mock
from opentelemetry.sdk import resources
@@ -83,3 +85,94 @@ def test_immutability(self):
labels["cost"] = 999.91
self.assertEqual(resource.labels, labels_copy)
+
+ def test_otel_resource_detector(self):
+ detector = resources.OTELResourceDetector()
+ self.assertEqual(detector.detect(), resources.Resource.create_empty())
+ os.environ["OTEL_RESOURCE"] = "k=v"
+ self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
+ os.environ["OTEL_RESOURCE"] = " k = v "
+ self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
+ os.environ["OTEL_RESOURCE"] = "k=v,k2=v2"
+ self.assertEqual(
+ detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
+ )
+ os.environ["OTEL_RESOURCE"] = " k = v , k2 = v2 "
+ self.assertEqual(
+ detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
+ )
+
+ def test_aggregated_resources(self):
+ aggregated_resources = resources.get_aggregated_resources([])
+ self.assertEqual(
+ aggregated_resources, resources.Resource.create_empty()
+ )
+
+ static_resource = resources.Resource({"static_key": "static_value"})
+
+ self.assertEqual(
+ resources.get_aggregated_resources(
+ [], initial_resource=static_resource
+ ),
+ static_resource,
+ )
+
+ resource_detector = mock.Mock(spec=resources.ResourceDetector)
+ resource_detector.detect.return_value = resources.Resource(
+ {"static_key": "overwrite_existing_value", "key": "value"}
+ )
+ self.assertEqual(
+ resources.get_aggregated_resources(
+ [resource_detector], initial_resource=static_resource
+ ),
+ resources.Resource({"static_key": "static_value", "key": "value"}),
+ )
+
+ resource_detector1 = mock.Mock(spec=resources.ResourceDetector)
+ resource_detector1.detect.return_value = resources.Resource(
+ {"key1": "value1"}
+ )
+ resource_detector2 = mock.Mock(spec=resources.ResourceDetector)
+ resource_detector2.detect.return_value = resources.Resource(
+ {"key2": "value2", "key3": "value3"}
+ )
+ resource_detector3 = mock.Mock(spec=resources.ResourceDetector)
+ resource_detector3.detect.return_value = resources.Resource(
+ {
+ "key2": "overwrite_existing_value",
+ "key3": "overwrite_existing_value",
+ "key4": "value4",
+ }
+ )
+ self.assertEqual(
+ resources.get_aggregated_resources(
+ [resource_detector1, resource_detector2, resource_detector3]
+ ),
+ resources.Resource(
+ {
+ "key1": "value1",
+ "key2": "value2",
+ "key3": "value3",
+ "key4": "value4",
+ }
+ ),
+ )
+
+ resource_detector = mock.Mock(spec=resources.ResourceDetector)
+ resource_detector.detect.side_effect = Exception()
+ resource_detector.raise_on_error = False
+ self.assertEqual(
+ resources.get_aggregated_resources(
+ [resource_detector, resource_detector1]
+ ),
+ resources.Resource({"key1": "value1"}),
+ )
+
+ resource_detector = mock.Mock(spec=resources.ResourceDetector)
+ resource_detector.detect.side_effect = Exception()
+ resource_detector.raise_on_error = True
+ self.assertRaises(
+ Exception,
+ resources.get_aggregated_resources,
+ [resource_detector, resource_detector1],
+ )
diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py
index d68d5ca420a..5203ae0afc1 100644
--- a/opentelemetry-sdk/tests/trace/test_trace.py
+++ b/opentelemetry-sdk/tests/trace/test_trace.py
@@ -954,10 +954,11 @@ def test_to_json(self):
"end_time": null,
"attributes": {},
"events": [],
- "links": []
+ "links": [],
+ "resource": {}
}""",
)
self.assertEqual(
span.to_json(indent=None),
- '{"name": "span-name", "context": {"trace_id": "0x000000000000000000000000deadbeef", "span_id": "0x00000000deadbef0", "trace_state": "{}"}, "kind": "SpanKind.INTERNAL", "parent_id": null, "start_time": null, "end_time": null, "attributes": {}, "events": [], "links": []}',
+ '{"name": "span-name", "context": {"trace_id": "0x000000000000000000000000deadbeef", "span_id": "0x00000000deadbef0", "trace_state": "{}"}, "kind": "SpanKind.INTERNAL", "parent_id": null, "start_time": null, "end_time": null, "attributes": {}, "events": [], "links": [], "resource": {}}',
)
From a8a0ed40df851b8e6477d188c393b89c84f15e42 Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Sun, 5 Jul 2020 22:06:58 -0400
Subject: [PATCH 19/79] add license and manifest (#880)
---
.../LICENSE | 201 ++++++++++++++++++
.../MANIFEST.in | 9 +
.../LICENSE | 201 ++++++++++++++++++
.../MANIFEST.in | 9 +
4 files changed, 420 insertions(+)
create mode 100644 ext/opentelemetry-exporter-cloud-monitoring/LICENSE
create mode 100644 ext/opentelemetry-exporter-cloud-monitoring/MANIFEST.in
create mode 100644 ext/opentelemetry-exporter-cloud-trace/LICENSE
create mode 100644 ext/opentelemetry-exporter-cloud-trace/MANIFEST.in
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/LICENSE b/ext/opentelemetry-exporter-cloud-monitoring/LICENSE
new file mode 100644
index 00000000000..261eeb9e9f8
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-monitoring/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-exporter-cloud-monitoring/MANIFEST.in b/ext/opentelemetry-exporter-cloud-monitoring/MANIFEST.in
new file mode 100644
index 00000000000..aed3e33273b
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-monitoring/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-exporter-cloud-trace/LICENSE b/ext/opentelemetry-exporter-cloud-trace/LICENSE
new file mode 100644
index 00000000000..261eeb9e9f8
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-trace/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-exporter-cloud-trace/MANIFEST.in b/ext/opentelemetry-exporter-cloud-trace/MANIFEST.in
new file mode 100644
index 00000000000..aed3e33273b
--- /dev/null
+++ b/ext/opentelemetry-exporter-cloud-trace/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
From c0a5be5f1cd90ad8b19482a6cdbdeed8c583b210 Mon Sep 17 00:00:00 2001
From: Abhilash Gnan
Date: Tue, 7 Jul 2020 17:34:15 +0200
Subject: [PATCH 20/79] ext/wsgi: Set span status on wsgi errors (#864)
---
ext/opentelemetry-ext-wsgi/CHANGELOG.md | 3 +++
.../src/opentelemetry/ext/wsgi/__init__.py | 5 ++---
.../tests/test_wsgi_middleware.py | 15 +++++++++++++++
3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/ext/opentelemetry-ext-wsgi/CHANGELOG.md b/ext/opentelemetry-ext-wsgi/CHANGELOG.md
index a82a5de7c8c..da9df382f46 100644
--- a/ext/opentelemetry-ext-wsgi/CHANGELOG.md
+++ b/ext/opentelemetry-ext-wsgi/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Set span status on wsgi errors
+ ([#864](https://github.com/open-telemetry/opentelemetry-python/pull/864))
+
## 0.4a0
Released 2020-02-21
diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py
index 9968a0c1c83..709de24edf2 100644
--- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py
+++ b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py
@@ -11,7 +11,6 @@
# 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.
-
"""
This library provides a WSGI middleware that can be used on any WSGI framework
(such as Django / Flask) to track requests timing through OpenTelemetry.
@@ -211,8 +210,8 @@ def __call__(self, environ, start_response):
return _end_span_after_iterating(
iterable, span, self.tracer, token
)
- except: # noqa
- # TODO Set span status (cf. https://github.com/open-telemetry/opentelemetry-python/issues/292)
+ except Exception as ex:
+ span.set_status(Status(StatusCanonicalCode.INTERNAL, str(ex)))
span.end()
context.detach(token)
raise
diff --git a/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py b/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py
index 0d018b68414..2a2d518513f 100644
--- a/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py
+++ b/ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py
@@ -21,6 +21,7 @@
import opentelemetry.ext.wsgi as otel_wsgi
from opentelemetry import trace as trace_api
from opentelemetry.test.wsgitestutil import WsgiTestBase
+from opentelemetry.trace.status import StatusCanonicalCode
class Response:
@@ -73,6 +74,11 @@ def error_wsgi(environ, start_response):
return [b"*"]
+def error_wsgi_unhandled(environ, start_response):
+ assert isinstance(environ, dict)
+ raise ValueError
+
+
class TestWsgiApplication(WsgiTestBase):
def validate_response(
self, response, error=None, span_name="HTTP GET", http_method="GET"
@@ -148,6 +154,15 @@ def test_wsgi_exc_info(self):
response = app(self.environ, self.start_response)
self.validate_response(response, error=ValueError)
+ def test_wsgi_internal_error(self):
+ app = otel_wsgi.OpenTelemetryMiddleware(error_wsgi_unhandled)
+ self.assertRaises(ValueError, app, self.environ, self.start_response)
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 1)
+ self.assertEqual(
+ span_list[0].status.canonical_code, StatusCanonicalCode.INTERNAL,
+ )
+
def test_override_span_name(self):
"""Test that span_names can be overwritten by our callback function."""
span_name = "Dymaxion"
From d0e125ae52e713d18a90873ed3f42703f8d2317e Mon Sep 17 00:00:00 2001
From: Connor Adams
Date: Tue, 7 Jul 2020 15:23:32 -0400
Subject: [PATCH 21/79] Change exclude lists to just exclude_urls, add tests
for flask and django (#872)
---
ext/opentelemetry-ext-django/CHANGELOG.md | 2 +
ext/opentelemetry-ext-django/README.rst | 12 ++--
.../opentelemetry/ext/django/middleware.py | 31 +++-------
.../tests/test_middleware.py | 31 +++++++++-
ext/opentelemetry-ext-django/tests/views.py | 6 +-
ext/opentelemetry-ext-flask/CHANGELOG.md | 2 +
ext/opentelemetry-ext-flask/README.rst | 11 ++--
.../src/opentelemetry/ext/flask/__init__.py | 30 +++------
.../tests/test_programmatic.py | 24 ++++++++
ext/opentelemetry-ext-pyramid/CHANGELOG.md | 2 +
ext/opentelemetry-ext-pyramid/README.rst | 11 ++++
.../opentelemetry/ext/pyramid/callbacks.py | 24 +++-----
.../tests/test_programmatic.py | 9 +--
.../src/opentelemetry/util/__init__.py | 31 +++-------
.../tests/util/test_exclude_list.py | 61 +++++++++++++++++++
15 files changed, 188 insertions(+), 99 deletions(-)
create mode 100644 opentelemetry-api/tests/util/test_exclude_list.py
diff --git a/ext/opentelemetry-ext-django/CHANGELOG.md b/ext/opentelemetry-ext-django/CHANGELOG.md
index 9c578d962f1..abbf90451b6 100644
--- a/ext/opentelemetry-ext-django/CHANGELOG.md
+++ b/ext/opentelemetry-ext-django/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
+
## 0.8b0
Released 2020-05-27
diff --git a/ext/opentelemetry-ext-django/README.rst b/ext/opentelemetry-ext-django/README.rst
index 834bd63249e..1759cb6602a 100644
--- a/ext/opentelemetry-ext-django/README.rst
+++ b/ext/opentelemetry-ext-django/README.rst
@@ -20,11 +20,15 @@ Configuration
Exclude lists
*************
-Excludes certain hosts and paths from being tracked. Pass in comma delimited string into environment variables.
-Host refers to the entire url and path refers to the part of the url after the domain. Host matches the exact string that is given, where as path matches if the url starts with the given excluded path.
+To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
-Excluded hosts: OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_HOSTS
-Excluded paths: OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_PATHS
+For example,
+
+::
+
+ export OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_URLS="client/.*/info,healthcheck"
+
+will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``.
References
----------
diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py
index 0ce03b97cb7..c0cb2447564 100644
--- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py
+++ b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py
@@ -24,7 +24,7 @@
)
from opentelemetry.propagators import extract
from opentelemetry.trace import SpanKind, get_tracer
-from opentelemetry.util import disable_trace
+from opentelemetry.util import ExcludeList
try:
from django.utils.deprecation import MiddlewareMixin
@@ -44,12 +44,11 @@ class _DjangoMiddleware(MiddlewareMixin):
_environ_token = "opentelemetry-instrumentor-django.token"
_environ_span_key = "opentelemetry-instrumentor-django.span_key"
- _excluded_hosts = Configuration().DJANGO_EXCLUDED_HOSTS or []
- _excluded_paths = Configuration().DJANGO_EXCLUDED_PATHS or []
- if _excluded_hosts:
- _excluded_hosts = str.split(_excluded_hosts, ",")
- if _excluded_paths:
- _excluded_paths = str.split(_excluded_paths, ",")
+ _excluded_urls = Configuration().DJANGO_EXCLUDED_URLS or []
+ if _excluded_urls:
+ _excluded_urls = ExcludeList(str.split(_excluded_urls, ","))
+ else:
+ _excluded_urls = ExcludeList(_excluded_urls)
def process_view(
self, request, view_func, view_args, view_kwargs
@@ -62,11 +61,7 @@ def process_view(
# key.lower().replace('_', '-').replace("http-", "", 1): value
# for key, value in request.META.items()
# }
- if disable_trace(
- request.build_absolute_uri("?"),
- self._excluded_hosts,
- self._excluded_paths,
- ):
+ if self._excluded_urls.url_disabled(request.build_absolute_uri("?")):
return
environ = request.META
@@ -97,11 +92,7 @@ def process_exception(self, request, exception):
# Django can call this method and process_response later. In order
# to avoid __exit__ and detach from being called twice then, the
# respective keys are being removed here.
- if disable_trace(
- request.build_absolute_uri("?"),
- self._excluded_hosts,
- self._excluded_paths,
- ):
+ if self._excluded_urls.url_disabled(request.build_absolute_uri("?")):
return
if self._environ_activation_key in request.META.keys():
@@ -116,11 +107,7 @@ def process_exception(self, request, exception):
request.META.pop(self._environ_token, None)
def process_response(self, request, response):
- if disable_trace(
- request.build_absolute_uri("?"),
- self._excluded_hosts,
- self._excluded_paths,
- ):
+ if self._excluded_urls.url_disabled(request.build_absolute_uri("?")):
return response
if (
diff --git a/ext/opentelemetry-ext-django/tests/test_middleware.py b/ext/opentelemetry-ext-django/tests/test_middleware.py
index e0ac92de521..e5c3e10d03b 100644
--- a/ext/opentelemetry-ext-django/tests/test_middleware.py
+++ b/ext/opentelemetry-ext-django/tests/test_middleware.py
@@ -13,6 +13,7 @@
# limitations under the License.
from sys import modules
+from unittest.mock import patch
from django.conf import settings
from django.conf.urls import url
@@ -24,15 +25,17 @@
from opentelemetry.test.wsgitestutil import WsgiTestBase
from opentelemetry.trace import SpanKind
from opentelemetry.trace.status import StatusCanonicalCode
+from opentelemetry.util import ExcludeList
# pylint: disable=import-error
-from .views import error, excluded, excluded2, traced
+from .views import error, excluded, excluded_noarg, excluded_noarg2, traced
urlpatterns = [
url(r"^traced/", traced),
url(r"^error/", error),
- url(r"^excluded/", excluded),
- url(r"^excluded2/", excluded2),
+ url(r"^excluded_arg/", excluded),
+ url(r"^excluded_noarg/", excluded_noarg),
+ url(r"^excluded_noarg2/", excluded_noarg2),
]
_django_instrumentor = DjangoInstrumentor()
@@ -111,3 +114,25 @@ def test_error(self):
span.attributes["http.url"], "http://testserver/error/"
)
self.assertEqual(span.attributes["http.scheme"], "http")
+
+ @patch(
+ "opentelemetry.ext.django.middleware._DjangoMiddleware._excluded_urls",
+ ExcludeList(["http://testserver/excluded_arg/123", "excluded_noarg"]),
+ )
+ def test_exclude_lists(self):
+ client = Client()
+ client.get("/excluded_arg/123")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 0)
+
+ client.get("/excluded_arg/125")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 1)
+
+ client.get("/excluded_noarg/")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 1)
+
+ client.get("/excluded_noarg2/")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 1)
diff --git a/ext/opentelemetry-ext-django/tests/views.py b/ext/opentelemetry-ext-django/tests/views.py
index 9035f0ea03c..b5a29304042 100644
--- a/ext/opentelemetry-ext-django/tests/views.py
+++ b/ext/opentelemetry-ext-django/tests/views.py
@@ -13,5 +13,9 @@ def excluded(request): # pylint: disable=unused-argument
return HttpResponse()
-def excluded2(request): # pylint: disable=unused-argument
+def excluded_noarg(request): # pylint: disable=unused-argument
+ return HttpResponse()
+
+
+def excluded_noarg2(request): # pylint: disable=unused-argument
return HttpResponse()
diff --git a/ext/opentelemetry-ext-flask/CHANGELOG.md b/ext/opentelemetry-ext-flask/CHANGELOG.md
index d5b1635919d..1db23d4e805 100644
--- a/ext/opentelemetry-ext-flask/CHANGELOG.md
+++ b/ext/opentelemetry-ext-flask/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
+
## 0.7b1
Released 2020-05-12
diff --git a/ext/opentelemetry-ext-flask/README.rst b/ext/opentelemetry-ext-flask/README.rst
index 0a4c8940770..395053972ef 100644
--- a/ext/opentelemetry-ext-flask/README.rst
+++ b/ext/opentelemetry-ext-flask/README.rst
@@ -21,12 +21,15 @@ Configuration
Exclude lists
*************
-Excludes certain hosts and paths from being tracked. Pass in comma delimited string into environment variables.
-Host refers to the entire url and path refers to the part of the url after the domain. Host matches the exact string that is given, where as path matches if the url starts with the given excluded path.
+To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
-Excluded hosts: OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_HOSTS
-Excluded paths: OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_PATHS
+For example,
+::
+
+ export OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_URLS="client/.*/info,healthcheck"
+
+will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``.
References
----------
diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/__init__.py b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/__init__.py
index 20d6501a938..464958a7e99 100644
--- a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/__init__.py
+++ b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/__init__.py
@@ -55,7 +55,7 @@ def hello():
from opentelemetry import configuration, context, propagators, trace
from opentelemetry.ext.flask.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-from opentelemetry.util import disable_trace, time_ns
+from opentelemetry.util import ExcludeList, time_ns
_logger = getLogger(__name__)
@@ -65,22 +65,14 @@ def hello():
_ENVIRON_TOKEN = "opentelemetry-flask.token"
-def get_excluded_hosts():
- hosts = configuration.Configuration().FLASK_EXCLUDED_HOSTS or []
- if hosts:
- hosts = str.split(hosts, ",")
- return hosts
+def get_excluded_urls():
+ urls = configuration.Configuration().FLASK_EXCLUDED_URLS or []
+ if urls:
+ urls = str.split(urls, ",")
+ return ExcludeList(urls)
-def get_excluded_paths():
- paths = configuration.Configuration().FLASK_EXCLUDED_PATHS or []
- if paths:
- paths = str.split(paths, ",")
- return paths
-
-
-_excluded_hosts = get_excluded_hosts()
-_excluded_paths = get_excluded_paths()
+_excluded_urls = get_excluded_urls()
def _rewrapped_app(wsgi_app):
@@ -92,9 +84,7 @@ def _wrapped_app(environ, start_response):
environ[_ENVIRON_STARTTIME_KEY] = time_ns()
def _start_response(status, response_headers, *args, **kwargs):
- if not disable_trace(
- flask.request.url, _excluded_hosts, _excluded_paths
- ):
+ if not _excluded_urls.url_disabled(flask.request.url):
span = flask.request.environ.get(_ENVIRON_SPAN_KEY)
if span:
@@ -116,7 +106,7 @@ def _start_response(status, response_headers, *args, **kwargs):
def _before_request():
- if disable_trace(flask.request.url, _excluded_hosts, _excluded_paths):
+ if _excluded_urls.url_disabled(flask.request.url):
return
environ = flask.request.environ
@@ -148,7 +138,7 @@ def _before_request():
def _teardown_request(exc):
- if disable_trace(flask.request.url, _excluded_hosts, _excluded_paths):
+ if _excluded_urls.url_disabled(flask.request.url):
return
activation = flask.request.environ.get(_ENVIRON_ACTIVATION_KEY)
diff --git a/ext/opentelemetry-ext-flask/tests/test_programmatic.py b/ext/opentelemetry-ext-flask/tests/test_programmatic.py
index 30fa9c4eb24..3a15979cb47 100644
--- a/ext/opentelemetry-ext-flask/tests/test_programmatic.py
+++ b/ext/opentelemetry-ext-flask/tests/test_programmatic.py
@@ -12,12 +12,15 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+from unittest.mock import patch
+
from flask import Flask, request
from opentelemetry import trace
from opentelemetry.ext.flask import FlaskInstrumentor
from opentelemetry.test.test_base import TestBase
from opentelemetry.test.wsgitestutil import WsgiTestBase
+from opentelemetry.util import ExcludeList
# pylint: disable=import-error
from .base_test import InstrumentationTest
@@ -139,3 +142,24 @@ def test_internal_error(self):
self.assertEqual(span_list[0].name, "_hello_endpoint")
self.assertEqual(span_list[0].kind, trace.SpanKind.SERVER)
self.assertEqual(span_list[0].attributes, expected_attrs)
+
+ @patch(
+ "opentelemetry.ext.flask._excluded_urls",
+ ExcludeList(["http://localhost/excluded_arg/123", "excluded_noarg"]),
+ )
+ def test_exclude_lists(self):
+ self.client.get("/excluded_arg/123")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 0)
+
+ self.client.get("/excluded_arg/125")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 1)
+
+ self.client.get("/excluded_noarg")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 1)
+
+ self.client.get("/excluded_noarg2")
+ span_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(span_list), 1)
diff --git a/ext/opentelemetry-ext-pyramid/CHANGELOG.md b/ext/opentelemetry-ext-pyramid/CHANGELOG.md
index efb1a08bbcd..586f8bb5ce5 100644
--- a/ext/opentelemetry-ext-pyramid/CHANGELOG.md
+++ b/ext/opentelemetry-ext-pyramid/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
+
## 0.9b0
Released 2020-06-10
diff --git a/ext/opentelemetry-ext-pyramid/README.rst b/ext/opentelemetry-ext-pyramid/README.rst
index c7890ad0955..319d6bff4ce 100644
--- a/ext/opentelemetry-ext-pyramid/README.rst
+++ b/ext/opentelemetry-ext-pyramid/README.rst
@@ -13,6 +13,17 @@ Installation
pip install opentelemetry-ext-pyramid
+Exclude lists
+*************
+To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_PYRAMID_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
+
+For example,
+
+::
+
+ export OPENTELEMETRY_PYTHON_PYRAMID_EXCLUDED_URLS="client/.*/info,healthcheck"
+
+will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``.
References
----------
diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py
index e19e447beee..4d3b81fdabf 100644
--- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py
+++ b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py
@@ -8,7 +8,7 @@
import opentelemetry.ext.wsgi as otel_wsgi
from opentelemetry import configuration, context, propagators, trace
from opentelemetry.ext.pyramid.version import __version__
-from opentelemetry.util import disable_trace, time_ns
+from opentelemetry.util import ExcludeList, time_ns
TWEEN_NAME = "opentelemetry.ext.pyramid.trace_tween_factory"
SETTING_TRACE_ENABLED = "opentelemetry-pyramid.trace_enabled"
@@ -22,22 +22,14 @@
_logger = getLogger(__name__)
-def get_excluded_hosts():
- hosts = configuration.Configuration().PYRAMID_EXCLUDED_HOSTS or []
- if hosts:
- hosts = str.split(hosts, ",")
- return hosts
+def get_excluded_urls():
+ urls = configuration.Configuration().PYRAMID_EXCLUDED_URLS or []
+ if urls:
+ urls = str.split(urls, ",")
+ return ExcludeList(urls)
-def get_excluded_paths():
- paths = configuration.Configuration().PYRAMID_EXCLUDED_PATHS or []
- if paths:
- paths = str.split(paths, ",")
- return paths
-
-
-_excluded_hosts = get_excluded_hosts()
-_excluded_paths = get_excluded_paths()
+_excluded_urls = get_excluded_urls()
def includeme(config):
@@ -119,7 +111,7 @@ def disabled_tween(request):
# make a request tracing function
def trace_tween(request):
- if disable_trace(request.url, _excluded_hosts, _excluded_paths):
+ if _excluded_urls.url_disabled(request.url):
request.environ[_ENVIRON_ENABLED_KEY] = False
# short-circuit when we don't want to trace anything
return handler(request)
diff --git a/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py b/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py
index e8937e8f5e6..d086fc37eb9 100644
--- a/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py
+++ b/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py
@@ -20,6 +20,7 @@
from opentelemetry.ext.pyramid import PyramidInstrumentor
from opentelemetry.test.test_base import TestBase
from opentelemetry.test.wsgitestutil import WsgiTestBase
+from opentelemetry.util import ExcludeList
# pylint: disable=import-error
from .pyramid_base_test import InstrumentationTest
@@ -169,12 +170,8 @@ def test_warnings(self, mock_logger):
self.assertEqual(mock_logger.warning.called, True)
@patch(
- "opentelemetry.ext.pyramid.callbacks._excluded_hosts",
- ["http://localhost/excluded_arg/123"],
- )
- @patch(
- "opentelemetry.ext.pyramid.callbacks._excluded_paths",
- ["excluded_noarg"],
+ "opentelemetry.ext.pyramid.callbacks._excluded_urls",
+ ExcludeList(["http://localhost/excluded_arg/123", "excluded_noarg"]),
)
def test_exclude_lists(self):
self.client.get("/excluded_arg/123")
diff --git a/opentelemetry-api/src/opentelemetry/util/__init__.py b/opentelemetry-api/src/opentelemetry/util/__init__.py
index ed1268fcb62..1e4097cb9e0 100644
--- a/opentelemetry-api/src/opentelemetry/util/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/util/__init__.py
@@ -67,28 +67,13 @@ def _load_trace_provider(provider: str) -> "TracerProvider":
return cast("TracerProvider", _load_provider(provider))
-# Pattern for matching up until the first '/' after the 'https://' part.
-_URL_PATTERN = r"(https?|ftp)://.*?/"
+class ExcludeList:
+ """Class to exclude certain paths (given as a list of regexes) from tracing requests"""
+ def __init__(self, excluded_urls: Sequence[str]):
+ self._non_empty = len(excluded_urls) > 0
+ if self._non_empty:
+ self._regex = re.compile("|".join(excluded_urls))
-def disable_tracing_path(url: str, excluded_paths: Sequence[str]) -> bool:
- if excluded_paths:
- # Match only the part after the first '/' that is not in _URL_PATTERN
- regex = "{}({})".format(_URL_PATTERN, "|".join(excluded_paths))
- if re.match(regex, url):
- return True
- return False
-
-
-def disable_tracing_hostname(
- url: str, excluded_hostnames: Sequence[str]
-) -> bool:
- return url in excluded_hostnames
-
-
-def disable_trace(
- url: str, excluded_hosts: Sequence[str], excluded_paths: Sequence[str]
-) -> bool:
- return disable_tracing_hostname(
- url, excluded_hosts
- ) or disable_tracing_path(url, excluded_paths)
+ def url_disabled(self, url: str) -> bool:
+ return bool(self._non_empty and re.search(self._regex, url))
diff --git a/opentelemetry-api/tests/util/test_exclude_list.py b/opentelemetry-api/tests/util/test_exclude_list.py
new file mode 100644
index 00000000000..da51478de3e
--- /dev/null
+++ b/opentelemetry-api/tests/util/test_exclude_list.py
@@ -0,0 +1,61 @@
+# 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 unittest
+from unittest import mock
+
+from opentelemetry.util import ExcludeList
+
+
+class TestExcludeList(unittest.TestCase):
+ def test_basic(self):
+ regexes = ExcludeList(["path/123", "http://site.com/other_path"])
+ self.assertTrue(regexes.url_disabled("http://site.com/path/123"))
+ self.assertTrue(regexes.url_disabled("http://site.com/path/123/abc"))
+ self.assertTrue(
+ regexes.url_disabled("https://site.com/path/123?arg=other")
+ )
+
+ self.assertFalse(regexes.url_disabled("https://site.com/path/abc/123"))
+ self.assertFalse(regexes.url_disabled("https://site.com/path"))
+
+ self.assertTrue(regexes.url_disabled("http://site.com/other_path"))
+ self.assertTrue(regexes.url_disabled("http://site.com/other_path?abc"))
+
+ self.assertFalse(regexes.url_disabled("https://site.com/other_path"))
+ self.assertFalse(
+ regexes.url_disabled("https://site.com/abc/other_path")
+ )
+
+ def test_regex(self):
+ regexes = ExcludeList(
+ [r"^https?://site\.com/path/123$", r"^http://.*\?arg=foo"]
+ )
+
+ self.assertTrue(regexes.url_disabled("http://site.com/path/123"))
+ self.assertTrue(regexes.url_disabled("https://site.com/path/123"))
+
+ self.assertFalse(regexes.url_disabled("http://site.com/path/123/abc"))
+ self.assertFalse(regexes.url_disabled("http://site,com/path/123"))
+
+ self.assertTrue(
+ regexes.url_disabled("http://site.com/path/123?arg=foo")
+ )
+ self.assertTrue(
+ regexes.url_disabled("http://site.com/path/123?arg=foo,arg2=foo2")
+ )
+
+ self.assertFalse(
+ regexes.url_disabled("https://site.com/path/123?arg=foo")
+ )
From 34698ff82dd0003c78893fbf78e3ec6e9022b68a Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Tue, 7 Jul 2020 16:50:40 -0600
Subject: [PATCH 22/79] chore: Remove unused pytest marks (#884)
---
.../tests/asyncpg/test_asyncpg_functional.py | 9 ---------
1 file changed, 9 deletions(-)
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 408e50feb89..c5f55574381 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
@@ -2,7 +2,6 @@
import os
import asyncpg
-import pytest
from opentelemetry.ext.asyncpg import AsyncPGInstrumentor
from opentelemetry.test.test_base import TestBase
@@ -42,7 +41,6 @@ def setUpClass(cls):
def tearDownClass(cls):
AsyncPGInstrumentor().uninstrument()
- @pytest.mark.asyncpg
def test_instrumented_execute_method_without_arguments(self, *_, **__):
_await(self._connection.execute("SELECT 42;"))
spans = self.memory_exporter.get_finished_spans()
@@ -60,7 +58,6 @@ def test_instrumented_execute_method_without_arguments(self, *_, **__):
},
)
- @pytest.mark.asyncpg
def test_instrumented_execute_method_with_arguments(self, *_, **__):
_await(self._connection.execute("SELECT $1;", "1"))
spans = self.memory_exporter.get_finished_spans()
@@ -79,7 +76,6 @@ def test_instrumented_execute_method_with_arguments(self, *_, **__):
},
)
- @pytest.mark.asyncpg
def test_instrumented_fetch_method_without_arguments(self, *_, **__):
_await(self._connection.fetch("SELECT 42;"))
spans = self.memory_exporter.get_finished_spans()
@@ -94,7 +90,6 @@ def test_instrumented_fetch_method_without_arguments(self, *_, **__):
},
)
- @pytest.mark.asyncpg
def test_instrumented_fetch_method_with_arguments(self, *_, **__):
_await(self._connection.fetch("SELECT $1;", "1"))
spans = self.memory_exporter.get_finished_spans()
@@ -110,7 +105,6 @@ def test_instrumented_fetch_method_with_arguments(self, *_, **__):
},
)
- @pytest.mark.asyncpg
def test_instrumented_executemany_method_with_arguments(self, *_, **__):
_await(self._connection.executemany("SELECT $1;", [["1"], ["2"]]))
spans = self.memory_exporter.get_finished_spans()
@@ -126,7 +120,6 @@ def test_instrumented_executemany_method_with_arguments(self, *_, **__):
spans[0].attributes,
)
- @pytest.mark.asyncpg
def test_instrumented_execute_interface_error_method(self, *_, **__):
with self.assertRaises(asyncpg.InterfaceError):
_await(self._connection.execute("SELECT 42;", 1, 2, 3))
@@ -143,7 +136,6 @@ def test_instrumented_execute_interface_error_method(self, *_, **__):
},
)
- @pytest.mark.asyncpg
def test_instrumented_transaction_method(self, *_, **__):
async def _transaction_execute():
async with self._connection.transaction():
@@ -190,7 +182,6 @@ async def _transaction_execute():
StatusCanonicalCode.OK, spans[2].status.canonical_code
)
- @pytest.mark.asyncpg
def test_instrumented_failed_transaction_method(self, *_, **__):
async def _transaction_execute():
async with self._connection.transaction():
From 09df35c949948471e07de62cec31436aa0cb2c85 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Wed, 8 Jul 2020 00:06:08 -0600
Subject: [PATCH 23/79] Update instrumentors to use span processors (#852)
Fixes #832. By having tracer creation occur on demand, late tracer provider configuration will be honored.
This resolves issues with instrumentation occurring before tracer providers are set by the application developer, which would result in the no-op tracer used for the lifetime of the instrumentation.
Co-authored-by: alrex
Co-authored-by: Leighton Chen
Co-authored-by: Yusuke Tsutsumi
---
.../src/opentelemetry/ext/dbapi/__init__.py | 41 ++++++++++++++-----
.../src/opentelemetry/ext/mysql/__init__.py | 10 ++---
.../opentelemetry/ext/psycopg2/__init__.py | 11 ++---
.../src/opentelemetry/ext/pymysql/__init__.py | 13 +++---
.../opentelemetry/ext/requests/__init__.py | 13 +++---
.../src/opentelemetry/ext/sqlite3/__init__.py | 9 ++--
.../src/opentelemetry/util/__init__.py | 2 +-
7 files changed, 55 insertions(+), 44 deletions(-)
diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py
index 6b81bedf03d..b34e41b2b4b 100644
--- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py
+++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py
@@ -48,7 +48,7 @@
from opentelemetry.ext.dbapi.version import __version__
from opentelemetry.instrumentation.utils import unwrap
-from opentelemetry.trace import SpanKind, Tracer, TracerProvider, get_tracer
+from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
from opentelemetry.trace.status import Status, StatusCanonicalCode
logger = logging.getLogger(__name__)
@@ -76,24 +76,27 @@ def trace_integration(
tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to
use. If ommited the current configured one is used.
"""
- tracer = get_tracer(__name__, __version__, tracer_provider)
wrap_connect(
- tracer,
+ __name__,
connect_module,
connect_method_name,
database_component,
database_type,
connection_attributes,
+ version=__version__,
+ tracer_provider=tracer_provider,
)
def wrap_connect(
- tracer: Tracer,
+ name: str,
connect_module: typing.Callable[..., typing.Any],
connect_method_name: str,
database_component: str,
database_type: str = "",
connection_attributes: typing.Dict = None,
+ version: str = "",
+ tracer_provider: typing.Optional[TracerProvider] = None,
):
"""Integrate with DB API library.
https://www.python.org/dev/peps/pep-0249/
@@ -117,10 +120,12 @@ def wrap_connect_(
kwargs: typing.Dict[typing.Any, typing.Any],
):
db_integration = DatabaseApiIntegration(
- tracer,
+ name,
database_component,
database_type=database_type,
connection_attributes=connection_attributes,
+ version=version,
+ tracer_provider=tracer_provider,
)
return db_integration.wrapped_connection(wrapped, args, kwargs)
@@ -146,11 +151,13 @@ def unwrap_connect(
def instrument_connection(
- tracer,
+ name: str,
connection,
database_component: str,
database_type: str = "",
connection_attributes: typing.Dict = None,
+ version: str = "",
+ tracer_provider: typing.Optional[TracerProvider] = None,
):
"""Enable instrumentation in a database connection.
@@ -167,10 +174,12 @@ def instrument_connection(
An instrumented connection.
"""
db_integration = DatabaseApiIntegration(
- tracer,
+ name,
database_component,
database_type,
connection_attributes=connection_attributes,
+ version=version,
+ tracer_provider=tracer_provider,
)
db_integration.get_connection_attributes(connection)
return get_traced_connection_proxy(connection, db_integration)
@@ -195,10 +204,12 @@ def uninstrument_connection(connection):
class DatabaseApiIntegration:
def __init__(
self,
- tracer: Tracer,
+ name: str,
database_component: str,
database_type: str = "sql",
connection_attributes=None,
+ version: str = "",
+ tracer_provider: typing.Optional[TracerProvider] = None,
):
self.connection_attributes = connection_attributes
if self.connection_attributes is None:
@@ -208,7 +219,9 @@ def __init__(
"host": "host",
"user": "user",
}
- self.tracer = tracer
+ self._name = name
+ self._version = version
+ self._tracer_provider = tracer_provider
self.database_component = database_component
self.database_type = database_type
self.connection_props = {}
@@ -216,6 +229,13 @@ def __init__(
self.name = ""
self.database = ""
+ def get_tracer(self):
+ return get_tracer(
+ self._name,
+ instrumenting_library_version=self._version,
+ tracer_provider=self._tracer_provider,
+ )
+
def wrapped_connection(
self,
connect_method: typing.Callable[..., typing.Any],
@@ -288,7 +308,7 @@ def traced_execution(
):
statement = args[0] if args else ""
- with self._db_api_integration.tracer.start_as_current_span(
+ with self._db_api_integration.get_tracer().start_as_current_span(
self._db_api_integration.name, kind=SpanKind.CLIENT
) as span:
span.set_attribute(
@@ -322,6 +342,7 @@ def traced_execution(
def get_traced_cursor_proxy(cursor, db_api_integration, *args, **kwargs):
_traced_cursor = TracedCursor(db_api_integration)
+
# pylint: disable=abstract-method
class TracedCursorProxy(wrapt.ObjectProxy):
diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/__init__.py b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/__init__.py
index daf90c4bbf8..883a0aa9bb7 100644
--- a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/__init__.py
+++ b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/__init__.py
@@ -42,14 +42,12 @@
---
"""
-import typing
-
import mysql.connector
from opentelemetry.ext import dbapi
from opentelemetry.ext.mysql.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-from opentelemetry.trace import TracerProvider, get_tracer
+from opentelemetry.trace import get_tracer
class MySQLInstrumentor(BaseInstrumentor):
@@ -69,15 +67,15 @@ def _instrument(self, **kwargs):
"""
tracer_provider = kwargs.get("tracer_provider")
- tracer = get_tracer(__name__, __version__, tracer_provider)
-
dbapi.wrap_connect(
- tracer,
+ __name__,
mysql.connector,
"connect",
self._DATABASE_COMPONENT,
self._DATABASE_TYPE,
self._CONNECTION_ATTRIBUTES,
+ version=__version__,
+ tracer_provider=tracer_provider,
)
def _uninstrument(self, **kwargs):
diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/__init__.py b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/__init__.py
index 871356ab2cc..ec6c4c82ad5 100644
--- a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/__init__.py
+++ b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/__init__.py
@@ -42,15 +42,12 @@
---
"""
-import typing
-
import psycopg2
-import wrapt
from opentelemetry.ext import dbapi
from opentelemetry.ext.psycopg2.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-from opentelemetry.trace import TracerProvider, get_tracer
+from opentelemetry.trace import get_tracer
class Psycopg2Instrumentor(BaseInstrumentor):
@@ -71,15 +68,15 @@ def _instrument(self, **kwargs):
tracer_provider = kwargs.get("tracer_provider")
- tracer = get_tracer(__name__, __version__, tracer_provider)
-
dbapi.wrap_connect(
- tracer,
+ __name__,
psycopg2,
"connect",
self._DATABASE_COMPONENT,
self._DATABASE_TYPE,
self._CONNECTION_ATTRIBUTES,
+ version=__version__,
+ tracer_provider=tracer_provider,
)
def _uninstrument(self, **kwargs):
diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/__init__.py b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/__init__.py
index b4d75543c60..e44e08e189b 100644
--- a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/__init__.py
+++ b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/__init__.py
@@ -43,14 +43,11 @@
---
"""
-import typing
-
import pymysql
from opentelemetry.ext import dbapi
from opentelemetry.ext.pymysql.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-from opentelemetry.trace import TracerProvider, get_tracer
class PyMySQLInstrumentor(BaseInstrumentor):
@@ -70,15 +67,15 @@ def _instrument(self, **kwargs):
"""
tracer_provider = kwargs.get("tracer_provider")
- tracer = get_tracer(__name__, __version__, tracer_provider)
-
dbapi.wrap_connect(
- tracer,
+ __name__,
pymysql,
"connect",
self._DATABASE_COMPONENT,
self._DATABASE_TYPE,
self._CONNECTION_ATTRIBUTES,
+ version=__version__,
+ tracer_provider=tracer_provider,
)
def _uninstrument(self, **kwargs):
@@ -95,14 +92,14 @@ def instrument_connection(self, connection):
Returns:
An instrumented connection.
"""
- tracer = get_tracer(__name__, __version__)
return dbapi.instrument_connection(
- tracer,
+ __name__,
connection,
self._DATABASE_COMPONENT,
self._DATABASE_TYPE,
self._CONNECTION_ATTRIBUTES,
+ version=__version__,
)
def uninstrument_connection(self, connection):
diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py
index 0437c1bf547..a4db0591c8b 100644
--- a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py
+++ b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py
@@ -24,7 +24,8 @@
import requests
import opentelemetry.ext.requests
- # You can optionally pass a custom TracerProvider to RequestInstrumentor.instrument()
+ # You can optionally pass a custom TracerProvider to
+ RequestInstrumentor.instrument()
opentelemetry.ext.requests.RequestsInstrumentor().instrument()
response = requests.get(url="https://www.example.org/")
@@ -49,7 +50,7 @@
from requests.exceptions import InvalidSchema, InvalidURL, MissingSchema
from requests.sessions import Session
-from opentelemetry import context, propagators, trace
+from opentelemetry import context, propagators
from opentelemetry.ext.requests.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.instrumentation.utils import http_status_to_canonical_code
@@ -72,8 +73,6 @@ def _instrument(tracer_provider=None, span_callback=None):
wrapped = Session.request
- tracer = trace.get_tracer(__name__, __version__, tracer_provider)
-
@functools.wraps(wrapped)
def instrumented_request(self, method, url, *args, **kwargs):
if context.get_value("suppress_instrumentation"):
@@ -89,9 +88,9 @@ def instrumented_request(self, method, url, *args, **kwargs):
exception = None
- with tracer.start_as_current_span(
- span_name, kind=SpanKind.CLIENT
- ) as span:
+ with get_tracer(
+ __name__, __version__, tracer_provider
+ ).start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
span.set_attribute("component", "http")
span.set_attribute("http.method", method.upper())
span.set_attribute("http.url", url)
diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/__init__.py b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/__init__.py
index 174fbba1160..3cdfd88f758 100644
--- a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/__init__.py
+++ b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/__init__.py
@@ -43,12 +43,11 @@
"""
import sqlite3
-import typing
from opentelemetry.ext import dbapi
from opentelemetry.ext.sqlite3.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
-from opentelemetry.trace import TracerProvider, get_tracer
+from opentelemetry.trace import get_tracer
class SQLite3Instrumentor(BaseInstrumentor):
@@ -64,15 +63,15 @@ def _instrument(self, **kwargs):
"""
tracer_provider = kwargs.get("tracer_provider")
- tracer = get_tracer(__name__, __version__, tracer_provider)
-
dbapi.wrap_connect(
- tracer,
+ __name__,
sqlite3,
"connect",
self._DATABASE_COMPONENT,
self._DATABASE_TYPE,
self._CONNECTION_ATTRIBUTES,
+ version=__version__,
+ tracer_provider=tracer_provider,
)
def _uninstrument(self, **kwargs):
diff --git a/opentelemetry-api/src/opentelemetry/util/__init__.py b/opentelemetry-api/src/opentelemetry/util/__init__.py
index 1e4097cb9e0..5d98ba96bf6 100644
--- a/opentelemetry-api/src/opentelemetry/util/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/util/__init__.py
@@ -48,7 +48,7 @@ def _load_provider(provider: str) -> Provider:
name=cast(
str,
Configuration().get(
- provider, "default_{}".format(provider),
+ provider.upper(), "default_{}".format(provider),
),
),
)
From 8cbd9d4db04f0cd0b5a32c8c8c80299b4a44f9bd Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Fri, 10 Jul 2020 12:13:40 -0400
Subject: [PATCH 24/79] Update resources tests (#893)
---
.../tests/test_cloud_trace_exporter.py | 14 ++--
.../tests/test_gcp_resource_detector.py | 1 +
.../tests/resources/test_resources.py | 78 ++++++++++++-------
3 files changed, 61 insertions(+), 32 deletions(-)
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
index c5444241b69..7400207ff46 100644
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
+++ b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
@@ -305,8 +305,10 @@ def test_extract_links(self):
),
)
- def test_extract_resources(self):
+ def test_extract_empty_resources(self):
self.assertEqual(_extract_resources(Resource.create_empty()), {})
+
+ def test_extract_well_formed_resources(self):
resource = Resource(
labels={
"cloud.account.id": 123,
@@ -325,12 +327,11 @@ def test_extract_resources(self):
}
self.assertEqual(_extract_resources(resource), expected_extract)
+ def test_extract_malformed_resources(self):
+ # This resource doesn't have all the fields required for a gce_instance
+ # Specifically its missing "host.id", "cloud.zone", "cloud.account.id"
resource = Resource(
labels={
- "cloud.account.id": "123",
- "host.id": "host",
- "extra_info": "extra",
- "not_gcp_resource": "value",
"gcp.resource_type": "gce_instance",
"cloud.provider": "gcp",
}
@@ -338,6 +339,7 @@ def test_extract_resources(self):
# Should throw when passed a malformed GCP resource dict
self.assertRaises(KeyError, _extract_resources, resource)
+ def test_extract_unsupported_gcp_resources(self):
resource = Resource(
labels={
"cloud.account.id": "123",
@@ -350,6 +352,8 @@ def test_extract_resources(self):
)
self.assertEqual(_extract_resources(resource), {})
+ def test_extract_unsupported_provider_resources(self):
+ # Resources with currently unsupported providers will be ignored
resource = Resource(
labels={
"cloud.account.id": "123",
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
index df821213308..de618acd610 100644
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
+++ b/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
@@ -67,6 +67,7 @@ def test_finding_resources(self, getter):
)
self.assertEqual(getter.call_count, 1)
+ # Found resources should be cached and not require another network call
found_resources = resource_finder.detect()
self.assertEqual(getter.call_count, 1)
self.assertEqual(
diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py
index 698b4fdda3f..3aafad1cf33 100644
--- a/opentelemetry-sdk/tests/resources/test_resources.py
+++ b/opentelemetry-sdk/tests/resources/test_resources.py
@@ -86,28 +86,13 @@ def test_immutability(self):
labels["cost"] = 999.91
self.assertEqual(resource.labels, labels_copy)
- def test_otel_resource_detector(self):
- detector = resources.OTELResourceDetector()
- self.assertEqual(detector.detect(), resources.Resource.create_empty())
- os.environ["OTEL_RESOURCE"] = "k=v"
- self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
- os.environ["OTEL_RESOURCE"] = " k = v "
- self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
- os.environ["OTEL_RESOURCE"] = "k=v,k2=v2"
- self.assertEqual(
- detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
- )
- os.environ["OTEL_RESOURCE"] = " k = v , k2 = v2 "
- self.assertEqual(
- detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
- )
-
- def test_aggregated_resources(self):
+ def test_aggregated_resources_no_detectors(self):
aggregated_resources = resources.get_aggregated_resources([])
self.assertEqual(
aggregated_resources, resources.Resource.create_empty()
)
+ def test_aggregated_resources_with_static_resource(self):
static_resource = resources.Resource({"static_key": "static_value"})
self.assertEqual(
@@ -117,9 +102,10 @@ def test_aggregated_resources(self):
static_resource,
)
+ # Static resource values should never be overwritten
resource_detector = mock.Mock(spec=resources.ResourceDetector)
resource_detector.detect.return_value = resources.Resource(
- {"static_key": "overwrite_existing_value", "key": "value"}
+ {"static_key": "try_to_overwrite_existing_value", "key": "value"}
)
self.assertEqual(
resources.get_aggregated_resources(
@@ -128,6 +114,7 @@ def test_aggregated_resources(self):
resources.Resource({"static_key": "static_value", "key": "value"}),
)
+ def test_aggregated_resources_multiple_detectors(self):
resource_detector1 = mock.Mock(spec=resources.ResourceDetector)
resource_detector1.detect.return_value = resources.Resource(
{"key1": "value1"}
@@ -139,11 +126,13 @@ def test_aggregated_resources(self):
resource_detector3 = mock.Mock(spec=resources.ResourceDetector)
resource_detector3.detect.return_value = resources.Resource(
{
- "key2": "overwrite_existing_value",
- "key3": "overwrite_existing_value",
+ "key2": "try_to_overwrite_existing_value",
+ "key3": "try_to_overwrite_existing_value",
"key4": "value4",
}
)
+
+ # New values should not overwrite existing values
self.assertEqual(
resources.get_aggregated_resources(
[resource_detector1, resource_detector2, resource_detector3]
@@ -158,21 +147,56 @@ def test_aggregated_resources(self):
),
)
+ def test_resource_detector_ignore_error(self):
resource_detector = mock.Mock(spec=resources.ResourceDetector)
resource_detector.detect.side_effect = Exception()
resource_detector.raise_on_error = False
self.assertEqual(
- resources.get_aggregated_resources(
- [resource_detector, resource_detector1]
- ),
- resources.Resource({"key1": "value1"}),
+ resources.get_aggregated_resources([resource_detector]),
+ resources.Resource.create_empty(),
)
+ def test_resource_detector_raise_error(self):
resource_detector = mock.Mock(spec=resources.ResourceDetector)
resource_detector.detect.side_effect = Exception()
resource_detector.raise_on_error = True
self.assertRaises(
- Exception,
- resources.get_aggregated_resources,
- [resource_detector, resource_detector1],
+ Exception, resources.get_aggregated_resources, [resource_detector],
+ )
+
+
+class TestOTELResourceDetector(unittest.TestCase):
+ def setUp(self) -> None:
+ os.environ["OTEL_RESOURCE"] = ""
+
+ def tearDown(self) -> None:
+ os.environ.pop("OTEL_RESOURCE")
+
+ def test_empty(self):
+ detector = resources.OTELResourceDetector()
+ os.environ["OTEL_RESOURCE"] = ""
+ self.assertEqual(detector.detect(), resources.Resource.create_empty())
+
+ def test_one(self):
+ detector = resources.OTELResourceDetector()
+ os.environ["OTEL_RESOURCE"] = "k=v"
+ self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
+
+ def test_one_with_whitespace(self):
+ detector = resources.OTELResourceDetector()
+ os.environ["OTEL_RESOURCE"] = " k = v "
+ self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
+
+ def test_multiple(self):
+ detector = resources.OTELResourceDetector()
+ os.environ["OTEL_RESOURCE"] = "k=v,k2=v2"
+ self.assertEqual(
+ detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
+ )
+
+ def test_multiple_with_whitespace(self):
+ detector = resources.OTELResourceDetector()
+ os.environ["OTEL_RESOURCE"] = " k = v , k2 = v2 "
+ self.assertEqual(
+ detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
)
From 61edbfaefd039546f8c86455b5867bdb60af399a Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Fri, 10 Jul 2020 11:24:24 -0700
Subject: [PATCH 25/79] Return INVALID_SPAN on get_current_span instead of None
(#891)
---
.../cloud_trace/cloud_trace_propagator.py | 2 --
.../src/opentelemetry/ext/datadog/propagator.py | 3 +++
.../tests/test_server_interceptor.py | 4 ++--
.../ext/opentracing_shim/__init__.py | 2 +-
opentelemetry-api/CHANGELOG.md | 3 +++
.../opentelemetry/trace/propagation/__init__.py | 8 +++-----
.../propagation/tracecontexthttptextformat.py | 2 --
opentelemetry-api/tests/trace/test_globals.py | 4 ++--
opentelemetry-api/tests/trace/test_tracer.py | 6 ++++++
.../sdk/trace/propagation/b3_format.py | 2 +-
opentelemetry-sdk/tests/trace/test_trace.py | 16 ++++++++--------
11 files changed, 29 insertions(+), 23 deletions(-)
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py
index 124863e39e8..3f00c66d690 100644
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py
+++ b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py
@@ -77,8 +77,6 @@ def inject(
context: typing.Optional[Context] = None,
) -> None:
span = trace.get_current_span(context)
- if span is None:
- return
span_context = span.get_context()
if span_context == trace.INVALID_SPAN_CONTEXT:
return
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py
index 6ff192f4257..5935557de8d 100644
--- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py
+++ b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py
@@ -86,6 +86,9 @@ def inject(
context: typing.Optional[Context] = None,
) -> None:
span = get_current_span(context)
+ span_context = span.get_context()
+ if span_context == trace.INVALID_SPAN_CONTEXT:
+ return
sampled = (trace.TraceFlags.SAMPLED & span.context.trace_flags) != 0
set_in_carrier(
carrier, self.TRACE_ID_KEY, format_trace_id(span.context.trace_id),
diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
index 67ff0053bf3..ebe2a8c160a 100644
--- a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
+++ b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
@@ -118,8 +118,8 @@ def handler(request, context):
server.stop(None)
active_span_after_call = trace.get_current_span()
- self.assertIsNone(active_span_before_call)
- self.assertIsNone(active_span_after_call)
+ 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)
diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
index 81f25013ff0..0b948216ff3 100644
--- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
+++ b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
@@ -470,7 +470,7 @@ def active(self):
"""
span = trace_api.get_current_span()
- if span is None:
+ if span.get_context() == trace_api.INVALID_SPAN_CONTEXT:
return None
span_context = SpanContextShim(span.get_context())
diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md
index 9a2647da26f..413946b85b9 100644
--- a/opentelemetry-api/CHANGELOG.md
+++ b/opentelemetry-api/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Return INVALID_SPAN if no TracerProvider set for get_current_span
+ ([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751))
+
## 0.9b0
Released 2020-06-10
diff --git a/opentelemetry-api/src/opentelemetry/trace/propagation/__init__.py b/opentelemetry-api/src/opentelemetry/trace/propagation/__init__.py
index 45a07c920db..51146adeb31 100644
--- a/opentelemetry-api/src/opentelemetry/trace/propagation/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/trace/propagation/__init__.py
@@ -34,7 +34,7 @@ def set_span_in_context(
return ctx
-def get_current_span(context: Optional[Context] = None) -> Optional[Span]:
+def get_current_span(context: Optional[Context] = None) -> Span:
"""Retrieve the current span.
Args:
@@ -42,11 +42,9 @@ def get_current_span(context: Optional[Context] = None) -> Optional[Span]:
default current context is used instead.
Returns:
- The Span set in the context if it exists. None otherwise.
+ The Span set in the context if it exists. INVALID_SPAN otherwise.
"""
span = get_value(SPAN_KEY, context=context)
- if span is None:
- return None
- if not isinstance(span, Span):
+ if span is None or not isinstance(span, Span):
return INVALID_SPAN
return span
diff --git a/opentelemetry-api/src/opentelemetry/trace/propagation/tracecontexthttptextformat.py b/opentelemetry-api/src/opentelemetry/trace/propagation/tracecontexthttptextformat.py
index fa2fae87035..1cfd0704e23 100644
--- a/opentelemetry-api/src/opentelemetry/trace/propagation/tracecontexthttptextformat.py
+++ b/opentelemetry-api/src/opentelemetry/trace/propagation/tracecontexthttptextformat.py
@@ -120,8 +120,6 @@ def inject(
See `opentelemetry.trace.propagation.httptextformat.HTTPTextFormat.inject`
"""
span = trace.get_current_span(context)
- if span is None:
- return
span_context = span.get_context()
if span_context == trace.INVALID_SPAN_CONTEXT:
return
diff --git a/opentelemetry-api/tests/trace/test_globals.py b/opentelemetry-api/tests/trace/test_globals.py
index 5042dd2b726..4e105eb1f3c 100644
--- a/opentelemetry-api/tests/trace/test_globals.py
+++ b/opentelemetry-api/tests/trace/test_globals.py
@@ -46,7 +46,7 @@ def test_get_current_span(self):
"""DefaultTracer's start_span will also
be retrievable via get_current_span
"""
- self.assertIs(trace.get_current_span(), None)
+ self.assertEqual(trace.get_current_span(), trace.INVALID_SPAN)
span = trace.DefaultSpan(trace.INVALID_SPAN_CONTEXT)
ctx = trace.set_span_in_context(span)
token = context.attach(ctx)
@@ -54,4 +54,4 @@ def test_get_current_span(self):
self.assertIs(trace.get_current_span(), span)
finally:
context.detach(token)
- self.assertIs(trace.get_current_span(), None)
+ self.assertEqual(trace.get_current_span(), trace.INVALID_SPAN)
diff --git a/opentelemetry-api/tests/trace/test_tracer.py b/opentelemetry-api/tests/trace/test_tracer.py
index 1eb15062305..73909fd8ddb 100644
--- a/opentelemetry-api/tests/trace/test_tracer.py
+++ b/opentelemetry-api/tests/trace/test_tracer.py
@@ -33,3 +33,9 @@ def test_use_span(self):
span = trace.DefaultSpan(trace.INVALID_SPAN_CONTEXT)
with self.tracer.use_span(span):
pass
+
+ def test_get_current_span(self):
+ with self.tracer.start_as_current_span("test") as span:
+ trace.get_current_span().set_attribute("test", "test")
+ self.assertEqual(span, trace.INVALID_SPAN)
+ self.assertFalse(hasattr("span", "attributes"))
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py
index 3a9722bc36c..c1f71d4d87e 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py
@@ -123,7 +123,7 @@ def inject(
) -> None:
span = trace.get_current_span(context=context)
- if span is None:
+ if span.get_context() == trace.INVALID_SPAN_CONTEXT:
return
sampled = (trace.TraceFlags.SAMPLED & span.context.trace_flags) != 0
diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py
index 5203ae0afc1..a43db73a3da 100644
--- a/opentelemetry-sdk/tests/trace/test_trace.py
+++ b/opentelemetry-sdk/tests/trace/test_trace.py
@@ -225,7 +225,7 @@ def test_span_processor_for_source(self):
def test_start_span_implicit(self):
tracer = new_tracer()
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
root = tracer.start_span("root")
self.assertIsNotNone(root.start_time)
@@ -264,7 +264,7 @@ def test_start_span_implicit(self):
self.assertIsNotNone(child.end_time)
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
self.assertIsNotNone(root.end_time)
def test_start_span_explicit(self):
@@ -277,7 +277,7 @@ def test_start_span_explicit(self):
trace_flags=trace_api.TraceFlags(trace_api.TraceFlags.SAMPLED),
)
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
root = tracer.start_span("root")
self.assertIsNotNone(root.start_time)
@@ -320,7 +320,7 @@ def test_start_span_explicit(self):
def test_start_as_current_span_implicit(self):
tracer = new_tracer()
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
with tracer.start_as_current_span("root") as root:
self.assertIs(trace_api.get_current_span(), root)
@@ -334,7 +334,7 @@ def test_start_as_current_span_implicit(self):
self.assertIs(trace_api.get_current_span(), root)
self.assertIsNotNone(child.end_time)
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
self.assertIsNotNone(root.end_time)
def test_start_as_current_span_explicit(self):
@@ -346,7 +346,7 @@ def test_start_as_current_span_explicit(self):
is_remote=False,
)
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
# Test with the implicit root span
with tracer.start_as_current_span("root") as root:
@@ -552,7 +552,7 @@ def test_sampling_attributes(self):
self.assertEqual(root.attributes["attr-in-both"], "decision-attr")
def test_events(self):
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
with self.tracer.start_as_current_span("root") as root:
# only event name
@@ -608,7 +608,7 @@ def event_formatter():
self.assertEqual(root.events[4].timestamp, now)
def test_invalid_event_attributes(self):
- self.assertIsNone(trace_api.get_current_span())
+ self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
with self.tracer.start_as_current_span("root") as root:
root.add_event("event0", {"attr1": True, "attr2": ["hi", False]})
From e0f1410a6844f5883146679f5bd64cd5ee8d67d8 Mon Sep 17 00:00:00 2001
From: alrex
Date: Sun, 12 Jul 2020 21:01:11 -0700
Subject: [PATCH 26/79] disabling tests that have failed inconsistently (#900)
---
.../tests/celery/test_celery_functional.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py b/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
index abba19fc392..03fadb09ae0 100644
--- a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
+++ b/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
@@ -35,6 +35,7 @@ class MyException(Exception):
pass
+@pytest.mark.skip(reason="inconsistent test results")
def test_instrumentation_info(celery_app, memory_exporter):
@celery_app.task
def fn_task():
@@ -139,6 +140,7 @@ def fn_task(self):
assert span.attributes.get("celery.state") == "SUCCESS"
+@pytest.mark.skip(reason="inconsistent test results")
def test_fn_task_apply_async(celery_app, memory_exporter):
@celery_app.task
def fn_task_parameters(user, force_logout=False):
@@ -191,6 +193,7 @@ def fn_task():
assert len(spans) == 200
+@pytest.mark.skip(reason="inconsistent test results")
def test_fn_task_delay(celery_app, memory_exporter):
@celery_app.task
def fn_task_parameters(user, force_logout=False):
@@ -430,6 +433,7 @@ def add(x, y):
assert span.attributes.get("messaging.message_id") == result.task_id
+@pytest.mark.skip(reason="inconsistent test results")
def test_apply_async_previous_style_tasks(
celery_app, celery_worker, memory_exporter
):
From b085f376e0b0bd1c76e8ff4e3f09e995927f7311 Mon Sep 17 00:00:00 2001
From: Jonah Rosenblum
Date: Mon, 13 Jul 2020 05:00:34 +0000
Subject: [PATCH 27/79] fix typo in BatchExportSpanProcessor value error (#897)
Co-authored-by: Leighton Chen
Co-authored-by: Yusuke Tsutsumi
---
.../src/opentelemetry/sdk/trace/export/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py
index f06f5d29145..9fe55ed7fd4 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py
@@ -120,7 +120,7 @@ def __init__(
if max_export_batch_size > max_queue_size:
raise ValueError(
- "max_export_batch_size must be less than and equal to max_queue_size."
+ "max_export_batch_size must be less than or equal to max_queue_size."
)
self.span_exporter = span_exporter
From e31c4bbf4e155e735b4fce273953406957602d91 Mon Sep 17 00:00:00 2001
From: bitspradp
Date: Mon, 13 Jul 2020 06:50:13 +0100
Subject: [PATCH 28/79] ext/jaeger: Fixing the serialization of a tuple element
by coercing it into a string (#865)
Could not serialize attribute aws.region to tag when exporting via jaeger
Serialize tuple type values by coercing them into a string, since Jaeger does not
support tuple types.
---
ext/opentelemetry-ext-jaeger/CHANGELOG.md | 4 ++++
.../src/opentelemetry/ext/jaeger/__init__.py | 2 ++
ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py | 6 ++++++
3 files changed, 12 insertions(+)
diff --git a/ext/opentelemetry-ext-jaeger/CHANGELOG.md b/ext/opentelemetry-ext-jaeger/CHANGELOG.md
index 9ed679ee1c1..dada0101e0d 100644
--- a/ext/opentelemetry-ext-jaeger/CHANGELOG.md
+++ b/ext/opentelemetry-ext-jaeger/CHANGELOG.md
@@ -8,6 +8,10 @@ Released 2020-05-27
- Transform resource to tags when exporting
([#645](https://github.com/open-telemetry/opentelemetry-python/pull/645))
+- ext/boto: Could not serialize attribute aws.region to tag when exporting via jaeger
+ Serialize tuple type values by coercing them into a string, since Jaeger does not
+ support tuple types.
+ ([#865](https://github.com/open-telemetry/opentelemetry-python/pull/865))
## 0.6b0
diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py
index 18ec0dc7bf5..f12031d510b 100644
--- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py
+++ b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py
@@ -314,6 +314,8 @@ def _convert_attribute_to_tag(key, attr):
return jaeger.Tag(key=key, vLong=attr, vType=jaeger.TagType.LONG)
if isinstance(attr, float):
return jaeger.Tag(key=key, vDouble=attr, vType=jaeger.TagType.DOUBLE)
+ if isinstance(attr, tuple):
+ return jaeger.Tag(key=key, vStr=str(attr), vType=jaeger.TagType.STRING)
logger.warning("Could not serialize attribute %s:%r to tag", key, attr)
return None
diff --git a/ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py b/ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py
index 904ca9bff14..7bca8e83178 100644
--- a/ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py
+++ b/ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py
@@ -200,6 +200,7 @@ def test_translate_to_jaeger(self):
otel_spans[0].set_attribute("key_bool", False)
otel_spans[0].set_attribute("key_string", "hello_world")
otel_spans[0].set_attribute("key_float", 111.22)
+ otel_spans[0].set_attribute("key_tuple", ("tuple_element",))
otel_spans[0].resource = Resource(
labels={"key_resource": "some_resource"}
)
@@ -241,6 +242,11 @@ def test_translate_to_jaeger(self):
vType=jaeger.TagType.DOUBLE,
vDouble=111.22,
),
+ jaeger.Tag(
+ key="key_tuple",
+ vType=jaeger.TagType.STRING,
+ vStr="('tuple_element',)",
+ ),
jaeger.Tag(
key="key_resource",
vType=jaeger.TagType.STRING,
From 7c987d4f55fd277026a32cd0f6757895e2628f59 Mon Sep 17 00:00:00 2001
From: Yusuke Tsutsumi
Date: Mon, 13 Jul 2020 15:57:09 +0000
Subject: [PATCH 29/79] step down toumorokoshi to approver (#901)
As discussed in the SIG, toumorokoshi is stepping down
as a maintainer.
Co-authored-by: alrex
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 6f1be8fbce3..47e81893995 100644
--- a/README.md
+++ b/README.md
@@ -110,6 +110,7 @@ Approvers ([@open-telemetry/python-approvers](https://github.com/orgs/open-telem
- [Hector Hernandez](https://github.com/hectorhdzg), Microsoft
- [Mauricio Vásquez](https://github.com/mauriciovasquezbernal), Kinvolk
- [Reiley Yang](https://github.com/reyang), Microsoft
+- [Yusuke Tsutsumi](https://github.com/toumorokoshi), Google
*Find more about the approver role in [community repository](https://github.com/open-telemetry/community/blob/master/community-membership.md#approver).*
@@ -117,7 +118,6 @@ Maintainers ([@open-telemetry/python-maintainers](https://github.com/orgs/open-t
- [Alex Boten](https://github.com/codeboten), Lightstep
- [Leighton Chen](https://github.com/lzchen), Microsoft
-- [Yusuke Tsutsumi](https://github.com/toumorokoshi), Zillow Group
*Find more about the maintainer role in [community repository](https://github.com/open-telemetry/community/blob/master/community-membership.md#maintainer).*
From 675334b930a44e2da80a257033aa0af15f8b8785 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Mon, 13 Jul 2020 11:15:53 -0600
Subject: [PATCH 30/79] Update to OpenTelemetry Proto 0.4.0 (#889)
---
ext/opentelemetry-ext-otlp/CHANGELOG.md | 2 +
.../ext/otlp/trace_exporter/__init__.py | 38 +--
.../tests/test_otlp_trace_exporter.py | 46 ++--
.../proto/common/v1/common_pb2.py | 241 +++++++++++++-----
.../proto/common/v1/common_pb2.pyi | 119 ++++++---
.../proto/resource/v1/resource_pb2.py | 6 +-
.../proto/resource/v1/resource_pb2.pyi | 6 +-
.../opentelemetry/proto/trace/v1/trace_pb2.py | 30 +--
.../proto/trace/v1/trace_pb2.pyi | 14 +-
scripts/proto_codegen.sh | 2 +-
10 files changed, 341 insertions(+), 163 deletions(-)
diff --git a/ext/opentelemetry-ext-otlp/CHANGELOG.md b/ext/opentelemetry-ext-otlp/CHANGELOG.md
index 896a782491d..fbfff4496e0 100644
--- a/ext/opentelemetry-ext-otlp/CHANGELOG.md
+++ b/ext/opentelemetry-ext-otlp/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+- Update span exporter to use OpenTelemetry Proto v0.4.0 ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/889))
+
## 0.9b0
Released 2020-06-10
diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py
index a25f785366c..47a862908e3 100644
--- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py
+++ b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/trace_exporter/__init__.py
@@ -15,8 +15,9 @@
"""OTLP Span Exporter"""
import logging
+from collections.abc import Mapping, Sequence
from time import sleep
-from typing import Sequence
+from typing import Sequence as TypingSequence
from backoff import expo
from google.rpc.error_details_pb2 import RetryInfo
@@ -34,7 +35,7 @@
from opentelemetry.proto.collector.trace.v1.trace_service_pb2_grpc import (
TraceServiceStub,
)
-from opentelemetry.proto.common.v1.common_pb2 import AttributeKeyValue
+from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue
from opentelemetry.proto.resource.v1.resource_pb2 import Resource
from opentelemetry.proto.trace.v1.trace_pb2 import (
InstrumentationLibrarySpans,
@@ -49,26 +50,31 @@
def _translate_key_values(key, value):
- key_value = {"key": key}
if isinstance(value, bool):
- key_value["bool_value"] = value
+ any_value = AnyValue(bool_value=value)
elif isinstance(value, str):
- key_value["string_value"] = value
+ any_value = AnyValue(string_value=value)
elif isinstance(value, int):
- key_value["int_value"] = value
+ any_value = AnyValue(int_value=value)
elif isinstance(value, float):
- key_value["double_value"] = value
+ any_value = AnyValue(double_value=value)
+
+ elif isinstance(value, Sequence):
+ any_value = AnyValue(array_value=value)
+
+ elif isinstance(value, Mapping):
+ any_value = AnyValue(kvlist_value=value)
else:
raise Exception(
"Invalid type {} of value {}".format(type(value), value)
)
- return key_value
+ return KeyValue(key=key, value=any_value)
# pylint: disable=no-member
@@ -144,7 +150,7 @@ def _translate_attributes(self, sdk_span):
try:
self._collector_span_kwargs["attributes"].append(
- AttributeKeyValue(**_translate_key_values(key, value))
+ _translate_key_values(key, value)
)
except Exception as error: # pylint: disable=broad-except
logger.exception(error)
@@ -163,9 +169,7 @@ def _translate_events(self, sdk_span):
for key, value in sdk_span_event.attributes.items():
try:
collector_span_event.attributes.append(
- AttributeKeyValue(
- **_translate_key_values(key, value)
- )
+ _translate_key_values(key, value)
)
# pylint: disable=broad-except
except Exception as error:
@@ -191,9 +195,7 @@ def _translate_links(self, sdk_span):
for key, value in sdk_span_link.attributes.items():
try:
collector_span_link.attributes.append(
- AttributeKeyValue(
- **_translate_key_values(key, value)
- )
+ _translate_key_values(key, value)
)
# pylint: disable=broad-except
except Exception as error:
@@ -211,7 +213,7 @@ def _translate_status(self, sdk_span):
)
def _translate_spans(
- self, sdk_spans: Sequence[SDKSpan],
+ self, sdk_spans: TypingSequence[SDKSpan],
) -> ExportTraceServiceRequest:
sdk_resource_instrumentation_library_spans = {}
@@ -260,7 +262,7 @@ def _translate_spans(
try:
collector_resource.attributes.append(
- AttributeKeyValue(**_translate_key_values(key, value))
+ _translate_key_values(key, value)
)
except Exception as error: # pylint: disable=broad-except
logger.exception(error)
@@ -276,7 +278,7 @@ def _translate_spans(
return ExportTraceServiceRequest(resource_spans=resource_spans)
- def export(self, spans: Sequence[SDKSpan]) -> SpanExportResult:
+ def export(self, spans: TypingSequence[SDKSpan]) -> SpanExportResult:
# expo returns a generator that yields delay values which grow
# exponentially. Once delay is greater than max_value, the yielded
# value will remain constant.
diff --git a/ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py b/ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py
index db42f8ff6da..3e7affb2213 100644
--- a/ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py
+++ b/ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py
@@ -30,7 +30,7 @@
TraceServiceServicer,
add_TraceServiceServicer_to_server,
)
-from opentelemetry.proto.common.v1.common_pb2 import AttributeKeyValue
+from opentelemetry.proto.common.v1.common_pb2 import AnyValue, KeyValue
from opentelemetry.proto.resource.v1.resource_pb2 import (
Resource as CollectorResource,
)
@@ -185,8 +185,10 @@ def test_translate_spans(self):
ResourceSpans(
resource=CollectorResource(
attributes=[
- AttributeKeyValue(key="a", int_value=1),
- AttributeKeyValue(key="b", bool_value=False),
+ KeyValue(key="a", value=AnyValue(int_value=1)),
+ KeyValue(
+ key="b", value=AnyValue(bool_value=False)
+ ),
]
),
instrumentation_library_spans=[
@@ -211,11 +213,13 @@ def test_translate_spans(self):
),
kind=CollectorSpan.SpanKind.INTERNAL,
attributes=[
- AttributeKeyValue(
- key="a", int_value=1
+ KeyValue(
+ key="a",
+ value=AnyValue(int_value=1),
),
- AttributeKeyValue(
- key="b", bool_value=True
+ KeyValue(
+ key="b",
+ value=AnyValue(bool_value=True),
),
],
events=[
@@ -223,11 +227,17 @@ def test_translate_spans(self):
name="a",
time_unix_nano=1591240820506462784,
attributes=[
- AttributeKeyValue(
- key="a", int_value=1
+ KeyValue(
+ key="a",
+ value=AnyValue(
+ int_value=1
+ ),
),
- AttributeKeyValue(
- key="b", int_value=False
+ KeyValue(
+ key="b",
+ value=AnyValue(
+ bool_value=False
+ ),
),
],
)
@@ -240,11 +250,17 @@ def test_translate_spans(self):
),
span_id=int.to_bytes(2, 8, "big"),
attributes=[
- AttributeKeyValue(
- key="a", int_value=1
+ KeyValue(
+ key="a",
+ value=AnyValue(
+ int_value=1
+ ),
),
- AttributeKeyValue(
- key="b", bool_value=False
+ KeyValue(
+ key="b",
+ value=AnyValue(
+ bool_value=False
+ ),
),
],
)
diff --git a/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py
index dd08ccf6ad8..21501a30c01 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.py
@@ -18,88 +18,58 @@
package='opentelemetry.proto.common.v1',
syntax='proto3',
serialized_options=b'\n io.opentelemetry.proto.common.v1B\013CommonProtoP\001Z>github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1',
- serialized_pb=b'\n*opentelemetry/proto/common/v1/common.proto\x12\x1dopentelemetry.proto.common.v1\"\xf5\x01\n\x11\x41ttributeKeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12H\n\x04type\x18\x02 \x01(\x0e\x32:.opentelemetry.proto.common.v1.AttributeKeyValue.ValueType\x12\x14\n\x0cstring_value\x18\x03 \x01(\t\x12\x11\n\tint_value\x18\x04 \x01(\x03\x12\x14\n\x0c\x64ouble_value\x18\x05 \x01(\x01\x12\x12\n\nbool_value\x18\x06 \x01(\x08\"6\n\tValueType\x12\n\n\x06STRING\x10\x00\x12\x07\n\x03INT\x10\x01\x12\n\n\x06\x44OUBLE\x10\x02\x12\x08\n\x04\x42OOL\x10\x03\",\n\x0eStringKeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"7\n\x16InstrumentationLibrary\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\tBq\n io.opentelemetry.proto.common.v1B\x0b\x43ommonProtoP\x01Z>github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1b\x06proto3'
+ serialized_pb=b'\n*opentelemetry/proto/common/v1/common.proto\x12\x1dopentelemetry.proto.common.v1\"\xf5\x01\n\x08\x41nyValue\x12\x16\n\x0cstring_value\x18\x01 \x01(\tH\x00\x12\x14\n\nbool_value\x18\x02 \x01(\x08H\x00\x12\x13\n\tint_value\x18\x03 \x01(\x03H\x00\x12\x16\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00\x12@\n\x0b\x61rray_value\x18\x05 \x01(\x0b\x32).opentelemetry.proto.common.v1.ArrayValueH\x00\x12\x43\n\x0ckvlist_value\x18\x06 \x01(\x0b\x32+.opentelemetry.proto.common.v1.KeyValueListH\x00\x42\x07\n\x05value\"E\n\nArrayValue\x12\x37\n\x06values\x18\x01 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.AnyValue\"G\n\x0cKeyValueList\x12\x37\n\x06values\x18\x01 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\"O\n\x08KeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x36\n\x05value\x18\x02 \x01(\x0b\x32\'.opentelemetry.proto.common.v1.AnyValue\",\n\x0eStringKeyValue\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"7\n\x16InstrumentationLibrary\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\tBq\n io.opentelemetry.proto.common.v1B\x0b\x43ommonProtoP\x01Z>github.com/open-telemetry/opentelemetry-proto/gen/go/common/v1b\x06proto3'
)
-_ATTRIBUTEKEYVALUE_VALUETYPE = _descriptor.EnumDescriptor(
- name='ValueType',
- full_name='opentelemetry.proto.common.v1.AttributeKeyValue.ValueType',
- filename=None,
- file=DESCRIPTOR,
- values=[
- _descriptor.EnumValueDescriptor(
- name='STRING', index=0, number=0,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='INT', index=1, number=1,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='DOUBLE', index=2, number=2,
- serialized_options=None,
- type=None),
- _descriptor.EnumValueDescriptor(
- name='BOOL', index=3, number=3,
- serialized_options=None,
- type=None),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=269,
- serialized_end=323,
-)
-_sym_db.RegisterEnumDescriptor(_ATTRIBUTEKEYVALUE_VALUETYPE)
-
-_ATTRIBUTEKEYVALUE = _descriptor.Descriptor(
- name='AttributeKeyValue',
- full_name='opentelemetry.proto.common.v1.AttributeKeyValue',
+_ANYVALUE = _descriptor.Descriptor(
+ name='AnyValue',
+ full_name='opentelemetry.proto.common.v1.AnyValue',
filename=None,
file=DESCRIPTOR,
containing_type=None,
fields=[
_descriptor.FieldDescriptor(
- name='key', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.key', index=0,
+ name='string_value', full_name='opentelemetry.proto.common.v1.AnyValue.string_value', index=0,
number=1, 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),
_descriptor.FieldDescriptor(
- name='type', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.type', index=1,
- number=2, type=14, cpp_type=8, label=1,
- has_default_value=False, default_value=0,
+ name='bool_value', full_name='opentelemetry.proto.common.v1.AnyValue.bool_value', index=1,
+ number=2, type=8, cpp_type=7, label=1,
+ has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='string_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.string_value', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
+ name='int_value', full_name='opentelemetry.proto.common.v1.AnyValue.int_value', index=2,
+ number=3, 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='int_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.int_value', index=3,
- number=4, type=3, cpp_type=2, label=1,
- has_default_value=False, default_value=0,
+ name='double_value', full_name='opentelemetry.proto.common.v1.AnyValue.double_value', index=3,
+ number=4, type=1, cpp_type=5, label=1,
+ has_default_value=False, default_value=float(0),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='double_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.double_value', index=4,
- number=5, type=1, cpp_type=5, label=1,
- has_default_value=False, default_value=float(0),
+ name='array_value', full_name='opentelemetry.proto.common.v1.AnyValue.array_value', index=4,
+ number=5, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='bool_value', full_name='opentelemetry.proto.common.v1.AttributeKeyValue.bool_value', index=5,
- number=6, type=8, cpp_type=7, label=1,
- has_default_value=False, default_value=False,
+ name='kvlist_value', full_name='opentelemetry.proto.common.v1.AnyValue.kvlist_value', index=5,
+ number=6, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
@@ -108,19 +78,121 @@
],
nested_types=[],
enum_types=[
- _ATTRIBUTEKEYVALUE_VALUETYPE,
],
serialized_options=None,
is_extendable=False,
syntax='proto3',
extension_ranges=[],
oneofs=[
+ _descriptor.OneofDescriptor(
+ name='value', full_name='opentelemetry.proto.common.v1.AnyValue.value',
+ index=0, containing_type=None, fields=[]),
],
serialized_start=78,
serialized_end=323,
)
+_ARRAYVALUE = _descriptor.Descriptor(
+ name='ArrayValue',
+ full_name='opentelemetry.proto.common.v1.ArrayValue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='values', full_name='opentelemetry.proto.common.v1.ArrayValue.values', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ 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=325,
+ serialized_end=394,
+)
+
+
+_KEYVALUELIST = _descriptor.Descriptor(
+ name='KeyValueList',
+ full_name='opentelemetry.proto.common.v1.KeyValueList',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='values', full_name='opentelemetry.proto.common.v1.KeyValueList.values', index=0,
+ number=1, type=11, cpp_type=10, label=3,
+ has_default_value=False, default_value=[],
+ 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=396,
+ serialized_end=467,
+)
+
+
+_KEYVALUE = _descriptor.Descriptor(
+ name='KeyValue',
+ full_name='opentelemetry.proto.common.v1.KeyValue',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='key', full_name='opentelemetry.proto.common.v1.KeyValue.key', index=0,
+ number=1, 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),
+ _descriptor.FieldDescriptor(
+ name='value', full_name='opentelemetry.proto.common.v1.KeyValue.value', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ 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=469,
+ serialized_end=548,
+)
+
+
_STRINGKEYVALUE = _descriptor.Descriptor(
name='StringKeyValue',
full_name='opentelemetry.proto.common.v1.StringKeyValue',
@@ -154,8 +226,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=325,
- serialized_end=369,
+ serialized_start=550,
+ serialized_end=594,
)
@@ -192,23 +264,68 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=371,
- serialized_end=426,
+ serialized_start=596,
+ serialized_end=651,
)
-_ATTRIBUTEKEYVALUE.fields_by_name['type'].enum_type = _ATTRIBUTEKEYVALUE_VALUETYPE
-_ATTRIBUTEKEYVALUE_VALUETYPE.containing_type = _ATTRIBUTEKEYVALUE
-DESCRIPTOR.message_types_by_name['AttributeKeyValue'] = _ATTRIBUTEKEYVALUE
+_ANYVALUE.fields_by_name['array_value'].message_type = _ARRAYVALUE
+_ANYVALUE.fields_by_name['kvlist_value'].message_type = _KEYVALUELIST
+_ANYVALUE.oneofs_by_name['value'].fields.append(
+ _ANYVALUE.fields_by_name['string_value'])
+_ANYVALUE.fields_by_name['string_value'].containing_oneof = _ANYVALUE.oneofs_by_name['value']
+_ANYVALUE.oneofs_by_name['value'].fields.append(
+ _ANYVALUE.fields_by_name['bool_value'])
+_ANYVALUE.fields_by_name['bool_value'].containing_oneof = _ANYVALUE.oneofs_by_name['value']
+_ANYVALUE.oneofs_by_name['value'].fields.append(
+ _ANYVALUE.fields_by_name['int_value'])
+_ANYVALUE.fields_by_name['int_value'].containing_oneof = _ANYVALUE.oneofs_by_name['value']
+_ANYVALUE.oneofs_by_name['value'].fields.append(
+ _ANYVALUE.fields_by_name['double_value'])
+_ANYVALUE.fields_by_name['double_value'].containing_oneof = _ANYVALUE.oneofs_by_name['value']
+_ANYVALUE.oneofs_by_name['value'].fields.append(
+ _ANYVALUE.fields_by_name['array_value'])
+_ANYVALUE.fields_by_name['array_value'].containing_oneof = _ANYVALUE.oneofs_by_name['value']
+_ANYVALUE.oneofs_by_name['value'].fields.append(
+ _ANYVALUE.fields_by_name['kvlist_value'])
+_ANYVALUE.fields_by_name['kvlist_value'].containing_oneof = _ANYVALUE.oneofs_by_name['value']
+_ARRAYVALUE.fields_by_name['values'].message_type = _ANYVALUE
+_KEYVALUELIST.fields_by_name['values'].message_type = _KEYVALUE
+_KEYVALUE.fields_by_name['value'].message_type = _ANYVALUE
+DESCRIPTOR.message_types_by_name['AnyValue'] = _ANYVALUE
+DESCRIPTOR.message_types_by_name['ArrayValue'] = _ARRAYVALUE
+DESCRIPTOR.message_types_by_name['KeyValueList'] = _KEYVALUELIST
+DESCRIPTOR.message_types_by_name['KeyValue'] = _KEYVALUE
DESCRIPTOR.message_types_by_name['StringKeyValue'] = _STRINGKEYVALUE
DESCRIPTOR.message_types_by_name['InstrumentationLibrary'] = _INSTRUMENTATIONLIBRARY
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-AttributeKeyValue = _reflection.GeneratedProtocolMessageType('AttributeKeyValue', (_message.Message,), {
- 'DESCRIPTOR' : _ATTRIBUTEKEYVALUE,
+AnyValue = _reflection.GeneratedProtocolMessageType('AnyValue', (_message.Message,), {
+ 'DESCRIPTOR' : _ANYVALUE,
+ '__module__' : 'opentelemetry.proto.common.v1.common_pb2'
+ # @@protoc_insertion_point(class_scope:opentelemetry.proto.common.v1.AnyValue)
+ })
+_sym_db.RegisterMessage(AnyValue)
+
+ArrayValue = _reflection.GeneratedProtocolMessageType('ArrayValue', (_message.Message,), {
+ 'DESCRIPTOR' : _ARRAYVALUE,
+ '__module__' : 'opentelemetry.proto.common.v1.common_pb2'
+ # @@protoc_insertion_point(class_scope:opentelemetry.proto.common.v1.ArrayValue)
+ })
+_sym_db.RegisterMessage(ArrayValue)
+
+KeyValueList = _reflection.GeneratedProtocolMessageType('KeyValueList', (_message.Message,), {
+ 'DESCRIPTOR' : _KEYVALUELIST,
+ '__module__' : 'opentelemetry.proto.common.v1.common_pb2'
+ # @@protoc_insertion_point(class_scope:opentelemetry.proto.common.v1.KeyValueList)
+ })
+_sym_db.RegisterMessage(KeyValueList)
+
+KeyValue = _reflection.GeneratedProtocolMessageType('KeyValue', (_message.Message,), {
+ 'DESCRIPTOR' : _KEYVALUE,
'__module__' : 'opentelemetry.proto.common.v1.common_pb2'
- # @@protoc_insertion_point(class_scope:opentelemetry.proto.common.v1.AttributeKeyValue)
+ # @@protoc_insertion_point(class_scope:opentelemetry.proto.common.v1.KeyValue)
})
-_sym_db.RegisterMessage(AttributeKeyValue)
+_sym_db.RegisterMessage(KeyValue)
StringKeyValue = _reflection.GeneratedProtocolMessageType('StringKeyValue', (_message.Message,), {
'DESCRIPTOR' : _STRINGKEYVALUE,
diff --git a/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi
index 1061616570b..12d629436d2 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi
+++ b/opentelemetry-proto/src/opentelemetry/proto/common/v1/common_pb2.pyi
@@ -2,22 +2,22 @@
import sys
from google.protobuf.descriptor import (
Descriptor as google___protobuf___descriptor___Descriptor,
- EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
FileDescriptor as google___protobuf___descriptor___FileDescriptor,
)
+from google.protobuf.internal.containers import (
+ RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
+)
+
from google.protobuf.message import (
Message as google___protobuf___message___Message,
)
from typing import (
- List as typing___List,
- NewType as typing___NewType,
+ Iterable as typing___Iterable,
Optional as typing___Optional,
Text as typing___Text,
- Tuple as typing___Tuple,
Union as typing___Union,
- cast as typing___cast,
)
from typing_extensions import (
@@ -29,7 +29,6 @@ builtin___bool = bool
builtin___bytes = bytes
builtin___float = float
builtin___int = int
-builtin___str = str
if sys.version_info < (3,):
builtin___buffer = buffer
builtin___unicode = unicode
@@ -37,56 +36,98 @@ if sys.version_info < (3,):
DESCRIPTOR: google___protobuf___descriptor___FileDescriptor = ...
-class AttributeKeyValue(google___protobuf___message___Message):
+class AnyValue(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
- ValueTypeValue = typing___NewType('ValueTypeValue', builtin___int)
- type___ValueTypeValue = ValueTypeValue
- class ValueType(object):
- DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
+ string_value: typing___Text = ...
+ bool_value: builtin___bool = ...
+ int_value: builtin___int = ...
+ double_value: builtin___float = ...
+
+ @property
+ def array_value(self) -> type___ArrayValue: ...
+
+ @property
+ def kvlist_value(self) -> type___KeyValueList: ...
+
+ def __init__(self,
+ *,
+ string_value : typing___Optional[typing___Text] = None,
+ bool_value : typing___Optional[builtin___bool] = None,
+ int_value : typing___Optional[builtin___int] = None,
+ double_value : typing___Optional[builtin___float] = None,
+ array_value : typing___Optional[type___ArrayValue] = None,
+ kvlist_value : typing___Optional[type___KeyValueList] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
+ @classmethod
+ def FromString(cls, s: builtin___bytes) -> AnyValue: ...
+ else:
@classmethod
- def Name(cls, number: builtin___int) -> builtin___str: ...
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> AnyValue: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"array_value",b"array_value",u"bool_value",b"bool_value",u"double_value",b"double_value",u"int_value",b"int_value",u"kvlist_value",b"kvlist_value",u"string_value",b"string_value",u"value",b"value"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"array_value",b"array_value",u"bool_value",b"bool_value",u"double_value",b"double_value",u"int_value",b"int_value",u"kvlist_value",b"kvlist_value",u"string_value",b"string_value",u"value",b"value"]) -> None: ...
+ def WhichOneof(self, oneof_group: typing_extensions___Literal[u"value",b"value"]) -> typing_extensions___Literal["string_value","bool_value","int_value","double_value","array_value","kvlist_value"]: ...
+type___AnyValue = AnyValue
+
+class ArrayValue(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def values(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___AnyValue]: ...
+
+ def __init__(self,
+ *,
+ values : typing___Optional[typing___Iterable[type___AnyValue]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
@classmethod
- def Value(cls, name: builtin___str) -> AttributeKeyValue.ValueTypeValue: ...
+ def FromString(cls, s: builtin___bytes) -> ArrayValue: ...
+ else:
@classmethod
- def keys(cls) -> typing___List[builtin___str]: ...
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> ArrayValue: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"values",b"values"]) -> None: ...
+type___ArrayValue = ArrayValue
+
+class KeyValueList(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
+
+ @property
+ def values(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___KeyValue]: ...
+
+ def __init__(self,
+ *,
+ values : typing___Optional[typing___Iterable[type___KeyValue]] = None,
+ ) -> None: ...
+ if sys.version_info >= (3,):
@classmethod
- def values(cls) -> typing___List[AttributeKeyValue.ValueTypeValue]: ...
+ def FromString(cls, s: builtin___bytes) -> KeyValueList: ...
+ else:
@classmethod
- def items(cls) -> typing___List[typing___Tuple[builtin___str, AttributeKeyValue.ValueTypeValue]]: ...
- STRING = typing___cast(AttributeKeyValue.ValueTypeValue, 0)
- INT = typing___cast(AttributeKeyValue.ValueTypeValue, 1)
- DOUBLE = typing___cast(AttributeKeyValue.ValueTypeValue, 2)
- BOOL = typing___cast(AttributeKeyValue.ValueTypeValue, 3)
- STRING = typing___cast(AttributeKeyValue.ValueTypeValue, 0)
- INT = typing___cast(AttributeKeyValue.ValueTypeValue, 1)
- DOUBLE = typing___cast(AttributeKeyValue.ValueTypeValue, 2)
- BOOL = typing___cast(AttributeKeyValue.ValueTypeValue, 3)
- type___ValueType = ValueType
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> KeyValueList: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"values",b"values"]) -> None: ...
+type___KeyValueList = KeyValueList
+class KeyValue(google___protobuf___message___Message):
+ DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
key: typing___Text = ...
- type: type___AttributeKeyValue.ValueTypeValue = ...
- string_value: typing___Text = ...
- int_value: builtin___int = ...
- double_value: builtin___float = ...
- bool_value: builtin___bool = ...
+
+ @property
+ def value(self) -> type___AnyValue: ...
def __init__(self,
*,
key : typing___Optional[typing___Text] = None,
- type : typing___Optional[type___AttributeKeyValue.ValueTypeValue] = None,
- string_value : typing___Optional[typing___Text] = None,
- int_value : typing___Optional[builtin___int] = None,
- double_value : typing___Optional[builtin___float] = None,
- bool_value : typing___Optional[builtin___bool] = None,
+ value : typing___Optional[type___AnyValue] = None,
) -> None: ...
if sys.version_info >= (3,):
@classmethod
- def FromString(cls, s: builtin___bytes) -> AttributeKeyValue: ...
+ def FromString(cls, s: builtin___bytes) -> KeyValue: ...
else:
@classmethod
- def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> AttributeKeyValue: ...
- def ClearField(self, field_name: typing_extensions___Literal[u"bool_value",b"bool_value",u"double_value",b"double_value",u"int_value",b"int_value",u"key",b"key",u"string_value",b"string_value",u"type",b"type"]) -> None: ...
-type___AttributeKeyValue = AttributeKeyValue
+ def FromString(cls, s: typing___Union[builtin___bytes, builtin___buffer, builtin___unicode]) -> KeyValue: ...
+ def HasField(self, field_name: typing_extensions___Literal[u"value",b"value"]) -> builtin___bool: ...
+ def ClearField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> None: ...
+type___KeyValue = KeyValue
class StringKeyValue(google___protobuf___message___Message):
DESCRIPTOR: google___protobuf___descriptor___Descriptor = ...
diff --git a/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py
index 95dcf479ff6..cf7af9fbb86 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.py
@@ -19,7 +19,7 @@
package='opentelemetry.proto.resource.v1',
syntax='proto3',
serialized_options=b'\n\"io.opentelemetry.proto.resource.v1B\rResourceProtoP\001Z@github.com/open-telemetry/opentelemetry-proto/gen/go/resource/v1',
- serialized_pb=b'\n.opentelemetry/proto/resource/v1/resource.proto\x12\x1fopentelemetry.proto.resource.v1\x1a*opentelemetry/proto/common/v1/common.proto\"r\n\x08Resource\x12\x44\n\nattributes\x18\x01 \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x02 \x01(\rBw\n\"io.opentelemetry.proto.resource.v1B\rResourceProtoP\x01Z@github.com/open-telemetry/opentelemetry-proto/gen/go/resource/v1b\x06proto3'
+ serialized_pb=b'\n.opentelemetry/proto/resource/v1/resource.proto\x12\x1fopentelemetry.proto.resource.v1\x1a*opentelemetry/proto/common/v1/common.proto\"i\n\x08Resource\x12;\n\nattributes\x18\x01 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x02 \x01(\rBw\n\"io.opentelemetry.proto.resource.v1B\rResourceProtoP\x01Z@github.com/open-telemetry/opentelemetry-proto/gen/go/resource/v1b\x06proto3'
,
dependencies=[opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2.DESCRIPTOR,])
@@ -60,10 +60,10 @@
oneofs=[
],
serialized_start=127,
- serialized_end=241,
+ serialized_end=232,
)
-_RESOURCE.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._ATTRIBUTEKEYVALUE
+_RESOURCE.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._KEYVALUE
DESCRIPTOR.message_types_by_name['Resource'] = _RESOURCE
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
diff --git a/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi
index 2f9f5afca22..0d65464986d 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi
+++ b/opentelemetry-proto/src/opentelemetry/proto/resource/v1/resource_pb2.pyi
@@ -14,7 +14,7 @@ from google.protobuf.message import (
)
from opentelemetry.proto.common.v1.common_pb2 import (
- AttributeKeyValue as opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue,
+ KeyValue as opentelemetry___proto___common___v1___common_pb2___KeyValue,
)
from typing import (
@@ -44,11 +44,11 @@ class Resource(google___protobuf___message___Message):
dropped_attributes_count: builtin___int = ...
@property
- def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___KeyValue]: ...
def __init__(self,
*,
- attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___KeyValue]] = None,
dropped_attributes_count : typing___Optional[builtin___int] = None,
) -> None: ...
if sys.version_info >= (3,):
diff --git a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py
index 0b8bc152486..636c4411442 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.py
@@ -20,7 +20,7 @@
package='opentelemetry.proto.trace.v1',
syntax='proto3',
serialized_options=b'\n\037io.opentelemetry.proto.trace.v1B\nTraceProtoP\001Z=github.com/open-telemetry/opentelemetry-proto/gen/go/trace/v1',
- serialized_pb=b'\n(opentelemetry/proto/trace/v1/trace.proto\x12\x1copentelemetry.proto.trace.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"\xae\x01\n\rResourceSpans\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12`\n\x1dinstrumentation_library_spans\x18\x02 \x03(\x0b\x32\x39.opentelemetry.proto.trace.v1.InstrumentationLibrarySpans\"\xa8\x01\n\x1bInstrumentationLibrarySpans\x12V\n\x17instrumentation_library\x18\x01 \x01(\x0b\x32\x35.opentelemetry.proto.common.v1.InstrumentationLibrary\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\"\xce\x07\n\x04Span\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12\x16\n\x0eparent_span_id\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x39\n\x04kind\x18\x06 \x01(\x0e\x32+.opentelemetry.proto.trace.v1.Span.SpanKind\x12\x1c\n\x14start_time_unix_nano\x18\x07 \x01(\x06\x12\x1a\n\x12\x65nd_time_unix_nano\x18\x08 \x01(\x06\x12\x44\n\nattributes\x18\t \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\n \x01(\r\x12\x38\n\x06\x65vents\x18\x0b \x03(\x0b\x32(.opentelemetry.proto.trace.v1.Span.Event\x12\x1c\n\x14\x64ropped_events_count\x18\x0c \x01(\r\x12\x36\n\x05links\x18\r \x03(\x0b\x32\'.opentelemetry.proto.trace.v1.Span.Link\x12\x1b\n\x13\x64ropped_links_count\x18\x0e \x01(\r\x12\x34\n\x06status\x18\x0f \x01(\x0b\x32$.opentelemetry.proto.trace.v1.Status\x1a\x95\x01\n\x05\x45vent\x12\x16\n\x0etime_unix_nano\x18\x01 \x01(\x06\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x44\n\nattributes\x18\x03 \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x04 \x01(\r\x1a\xa6\x01\n\x04Link\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12\x44\n\nattributes\x18\x04 \x03(\x0b\x32\x30.opentelemetry.proto.common.v1.AttributeKeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x05 \x01(\r\"g\n\x08SpanKind\x12\x19\n\x15SPAN_KIND_UNSPECIFIED\x10\x00\x12\x0c\n\x08INTERNAL\x10\x01\x12\n\n\x06SERVER\x10\x02\x12\n\n\x06\x43LIENT\x10\x03\x12\x0c\n\x08PRODUCER\x10\x04\x12\x0c\n\x08\x43ONSUMER\x10\x05\"\x98\x03\n\x06Status\x12=\n\x04\x63ode\x18\x01 \x01(\x0e\x32/.opentelemetry.proto.trace.v1.Status.StatusCode\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xbd\x02\n\nStatusCode\x12\x06\n\x02Ok\x10\x00\x12\r\n\tCancelled\x10\x01\x12\x10\n\x0cUnknownError\x10\x02\x12\x13\n\x0fInvalidArgument\x10\x03\x12\x14\n\x10\x44\x65\x61\x64lineExceeded\x10\x04\x12\x0c\n\x08NotFound\x10\x05\x12\x11\n\rAlreadyExists\x10\x06\x12\x14\n\x10PermissionDenied\x10\x07\x12\x15\n\x11ResourceExhausted\x10\x08\x12\x16\n\x12\x46\x61iledPrecondition\x10\t\x12\x0b\n\x07\x41\x62orted\x10\n\x12\x0e\n\nOutOfRange\x10\x0b\x12\x11\n\rUnimplemented\x10\x0c\x12\x11\n\rInternalError\x10\r\x12\x0f\n\x0bUnavailable\x10\x0e\x12\x0c\n\x08\x44\x61taLoss\x10\x0f\x12\x13\n\x0fUnauthenticated\x10\x10\x42n\n\x1fio.opentelemetry.proto.trace.v1B\nTraceProtoP\x01Z=github.com/open-telemetry/opentelemetry-proto/gen/go/trace/v1b\x06proto3'
+ serialized_pb=b'\n(opentelemetry/proto/trace/v1/trace.proto\x12\x1copentelemetry.proto.trace.v1\x1a*opentelemetry/proto/common/v1/common.proto\x1a.opentelemetry/proto/resource/v1/resource.proto\"\xae\x01\n\rResourceSpans\x12;\n\x08resource\x18\x01 \x01(\x0b\x32).opentelemetry.proto.resource.v1.Resource\x12`\n\x1dinstrumentation_library_spans\x18\x02 \x03(\x0b\x32\x39.opentelemetry.proto.trace.v1.InstrumentationLibrarySpans\"\xa8\x01\n\x1bInstrumentationLibrarySpans\x12V\n\x17instrumentation_library\x18\x01 \x01(\x0b\x32\x35.opentelemetry.proto.common.v1.InstrumentationLibrary\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\"\xb3\x07\n\x04Span\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12\x16\n\x0eparent_span_id\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x39\n\x04kind\x18\x06 \x01(\x0e\x32+.opentelemetry.proto.trace.v1.Span.SpanKind\x12\x1c\n\x14start_time_unix_nano\x18\x07 \x01(\x06\x12\x1a\n\x12\x65nd_time_unix_nano\x18\x08 \x01(\x06\x12;\n\nattributes\x18\t \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\n \x01(\r\x12\x38\n\x06\x65vents\x18\x0b \x03(\x0b\x32(.opentelemetry.proto.trace.v1.Span.Event\x12\x1c\n\x14\x64ropped_events_count\x18\x0c \x01(\r\x12\x36\n\x05links\x18\r \x03(\x0b\x32\'.opentelemetry.proto.trace.v1.Span.Link\x12\x1b\n\x13\x64ropped_links_count\x18\x0e \x01(\r\x12\x34\n\x06status\x18\x0f \x01(\x0b\x32$.opentelemetry.proto.trace.v1.Status\x1a\x8c\x01\n\x05\x45vent\x12\x16\n\x0etime_unix_nano\x18\x01 \x01(\x06\x12\x0c\n\x04name\x18\x02 \x01(\t\x12;\n\nattributes\x18\x03 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x04 \x01(\r\x1a\x9d\x01\n\x04Link\x12\x10\n\x08trace_id\x18\x01 \x01(\x0c\x12\x0f\n\x07span_id\x18\x02 \x01(\x0c\x12\x13\n\x0btrace_state\x18\x03 \x01(\t\x12;\n\nattributes\x18\x04 \x03(\x0b\x32\'.opentelemetry.proto.common.v1.KeyValue\x12 \n\x18\x64ropped_attributes_count\x18\x05 \x01(\r\"g\n\x08SpanKind\x12\x19\n\x15SPAN_KIND_UNSPECIFIED\x10\x00\x12\x0c\n\x08INTERNAL\x10\x01\x12\n\n\x06SERVER\x10\x02\x12\n\n\x06\x43LIENT\x10\x03\x12\x0c\n\x08PRODUCER\x10\x04\x12\x0c\n\x08\x43ONSUMER\x10\x05\"\x98\x03\n\x06Status\x12=\n\x04\x63ode\x18\x01 \x01(\x0e\x32/.opentelemetry.proto.trace.v1.Status.StatusCode\x12\x0f\n\x07message\x18\x02 \x01(\t\"\xbd\x02\n\nStatusCode\x12\x06\n\x02Ok\x10\x00\x12\r\n\tCancelled\x10\x01\x12\x10\n\x0cUnknownError\x10\x02\x12\x13\n\x0fInvalidArgument\x10\x03\x12\x14\n\x10\x44\x65\x61\x64lineExceeded\x10\x04\x12\x0c\n\x08NotFound\x10\x05\x12\x11\n\rAlreadyExists\x10\x06\x12\x14\n\x10PermissionDenied\x10\x07\x12\x15\n\x11ResourceExhausted\x10\x08\x12\x16\n\x12\x46\x61iledPrecondition\x10\t\x12\x0b\n\x07\x41\x62orted\x10\n\x12\x0e\n\nOutOfRange\x10\x0b\x12\x11\n\rUnimplemented\x10\x0c\x12\x11\n\rInternalError\x10\r\x12\x0f\n\x0bUnavailable\x10\x0e\x12\x0c\n\x08\x44\x61taLoss\x10\x0f\x12\x13\n\x0fUnauthenticated\x10\x10\x42n\n\x1fio.opentelemetry.proto.trace.v1B\nTraceProtoP\x01Z=github.com/open-telemetry/opentelemetry-proto/gen/go/trace/v1b\x06proto3'
,
dependencies=[opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2.DESCRIPTOR,opentelemetry_dot_proto_dot_resource_dot_v1_dot_resource__pb2.DESCRIPTOR,])
@@ -59,8 +59,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=1386,
- serialized_end=1489,
+ serialized_start=1359,
+ serialized_end=1462,
)
_sym_db.RegisterEnumDescriptor(_SPAN_SPANKIND)
@@ -141,8 +141,8 @@
],
containing_type=None,
serialized_options=None,
- serialized_start=1583,
- serialized_end=1900,
+ serialized_start=1556,
+ serialized_end=1873,
)
_sym_db.RegisterEnumDescriptor(_STATUS_STATUSCODE)
@@ -270,8 +270,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1066,
- serialized_end=1215,
+ serialized_start=1057,
+ serialized_end=1197,
)
_SPAN_LINK = _descriptor.Descriptor(
@@ -328,8 +328,8 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1218,
- serialized_end=1384,
+ serialized_start=1200,
+ serialized_end=1357,
)
_SPAN = _descriptor.Descriptor(
@@ -458,7 +458,7 @@
oneofs=[
],
serialized_start=515,
- serialized_end=1489,
+ serialized_end=1462,
)
@@ -496,20 +496,20 @@
extension_ranges=[],
oneofs=[
],
- serialized_start=1492,
- serialized_end=1900,
+ serialized_start=1465,
+ serialized_end=1873,
)
_RESOURCESPANS.fields_by_name['resource'].message_type = opentelemetry_dot_proto_dot_resource_dot_v1_dot_resource__pb2._RESOURCE
_RESOURCESPANS.fields_by_name['instrumentation_library_spans'].message_type = _INSTRUMENTATIONLIBRARYSPANS
_INSTRUMENTATIONLIBRARYSPANS.fields_by_name['instrumentation_library'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._INSTRUMENTATIONLIBRARY
_INSTRUMENTATIONLIBRARYSPANS.fields_by_name['spans'].message_type = _SPAN
-_SPAN_EVENT.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._ATTRIBUTEKEYVALUE
+_SPAN_EVENT.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._KEYVALUE
_SPAN_EVENT.containing_type = _SPAN
-_SPAN_LINK.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._ATTRIBUTEKEYVALUE
+_SPAN_LINK.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._KEYVALUE
_SPAN_LINK.containing_type = _SPAN
_SPAN.fields_by_name['kind'].enum_type = _SPAN_SPANKIND
-_SPAN.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._ATTRIBUTEKEYVALUE
+_SPAN.fields_by_name['attributes'].message_type = opentelemetry_dot_proto_dot_common_dot_v1_dot_common__pb2._KEYVALUE
_SPAN.fields_by_name['events'].message_type = _SPAN_EVENT
_SPAN.fields_by_name['links'].message_type = _SPAN_LINK
_SPAN.fields_by_name['status'].message_type = _STATUS
diff --git a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi
index adcc1dade36..e0726557d65 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi
+++ b/opentelemetry-proto/src/opentelemetry/proto/trace/v1/trace_pb2.pyi
@@ -15,8 +15,8 @@ from google.protobuf.message import (
)
from opentelemetry.proto.common.v1.common_pb2 import (
- AttributeKeyValue as opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue,
InstrumentationLibrary as opentelemetry___proto___common___v1___common_pb2___InstrumentationLibrary,
+ KeyValue as opentelemetry___proto___common___v1___common_pb2___KeyValue,
)
from opentelemetry.proto.resource.v1.resource_pb2 import (
@@ -136,13 +136,13 @@ class Span(google___protobuf___message___Message):
dropped_attributes_count: builtin___int = ...
@property
- def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___KeyValue]: ...
def __init__(self,
*,
time_unix_nano : typing___Optional[builtin___int] = None,
name : typing___Optional[typing___Text] = None,
- attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___KeyValue]] = None,
dropped_attributes_count : typing___Optional[builtin___int] = None,
) -> None: ...
if sys.version_info >= (3,):
@@ -162,14 +162,14 @@ class Span(google___protobuf___message___Message):
dropped_attributes_count: builtin___int = ...
@property
- def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___KeyValue]: ...
def __init__(self,
*,
trace_id : typing___Optional[builtin___bytes] = None,
span_id : typing___Optional[builtin___bytes] = None,
trace_state : typing___Optional[typing___Text] = None,
- attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___KeyValue]] = None,
dropped_attributes_count : typing___Optional[builtin___int] = None,
) -> None: ...
if sys.version_info >= (3,):
@@ -194,7 +194,7 @@ class Span(google___protobuf___message___Message):
dropped_links_count: builtin___int = ...
@property
- def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]: ...
+ def attributes(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[opentelemetry___proto___common___v1___common_pb2___KeyValue]: ...
@property
def events(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[type___Span.Event]: ...
@@ -215,7 +215,7 @@ class Span(google___protobuf___message___Message):
kind : typing___Optional[type___Span.SpanKindValue] = None,
start_time_unix_nano : typing___Optional[builtin___int] = None,
end_time_unix_nano : typing___Optional[builtin___int] = None,
- attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___AttributeKeyValue]] = None,
+ attributes : typing___Optional[typing___Iterable[opentelemetry___proto___common___v1___common_pb2___KeyValue]] = None,
dropped_attributes_count : typing___Optional[builtin___int] = None,
events : typing___Optional[typing___Iterable[type___Span.Event]] = None,
dropped_events_count : typing___Optional[builtin___int] = None,
diff --git a/scripts/proto_codegen.sh b/scripts/proto_codegen.sh
index c66371f42e3..b840f8452b8 100755
--- a/scripts/proto_codegen.sh
+++ b/scripts/proto_codegen.sh
@@ -12,7 +12,7 @@
# PROTO_REPO_DIR - the path to an existing checkout of the opentelemetry-proto repo
# Pinned commit/branch/tag for the current version used in opentelemetry-proto python package.
-PROTO_REPO_BRANCH_OR_COMMIT="b54688569186e0b862bf7462a983ccf2c50c0547"
+PROTO_REPO_BRANCH_OR_COMMIT="v0.4.0"
set -e
From 1dde6ffded3df7d391fd736abbb3757227814aa1 Mon Sep 17 00:00:00 2001
From: alrex
Date: Mon, 13 Jul 2020 16:03:34 -0700
Subject: [PATCH 31/79] chore: migrate to circleci (#828)
---
.circleci/config.yml | 94 +++++++++++++++++-
tox.ini | 226 +++++++++++++++++++++----------------------
2 files changed, 203 insertions(+), 117 deletions(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 64070fd605f..a00e513de24 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,9 +1,24 @@
version: 2.1
executors:
- python38:
+ py38:
docker:
- image: circleci/python:3.8
+ py37:
+ docker:
+ - image: circleci/python:3.7
+ py36:
+ docker:
+ - image: circleci/python:3.6
+ py35:
+ docker:
+ - image: circleci/python:3.5
+ py34:
+ docker:
+ - image: circleci/python:3.4
+ pypy3:
+ docker:
+ - image: pypy:3
commands:
setup_tox:
@@ -31,9 +46,23 @@ commands:
paths:
- ".tox"
+ run_tox_scenario:
+ description: "Run scripts/run-tox-scenario with setup, caching and persistence"
+ parameters:
+ pattern:
+ type: string
+ steps:
+ - checkout
+ - setup_tox
+ - restore_tox_cache
+ - run:
+ name: "Run scripts/run-tox-scenario"
+ command: tox -f '<< parameters.pattern >>'
+ - save_tox_cache
+
jobs:
docs:
- executor: python38
+ executor: py38
steps:
- checkout
- setup_tox
@@ -41,8 +70,27 @@ jobs:
- run: tox -e docs
- save_tox_cache
+ docker-tests:
+ machine:
+ image: ubuntu-1604:201903-01
+ steps:
+ - checkout
+ - run:
+ name: "Get pyenv list"
+ command: pyenv versions
+ - run:
+ name: "Set Python Version"
+ command: pyenv global 3.7.0
+ - run:
+ name: "Update pip"
+ command: pip install -U pip
+ - setup_tox
+ - restore_tox_cache
+ - run: tox -e docker-tests
+ - save_tox_cache
+
lint:
- executor: python38
+ executor: py38
steps:
- checkout
- setup_tox
@@ -50,8 +98,48 @@ jobs:
- run: tox -e lint
- save_tox_cache
+ build-py34:
+ parameters:
+ package:
+ type: string
+ default: "core"
+ executor: py34
+ steps:
+ - checkout
+ - run:
+ name: "Install tox"
+ command: sudo pip install -U tox virtualenv tox-factor
+ - restore_tox_cache
+ - run:
+ name: "Run scripts/run-tox-scenario"
+ command: tox -f py34-<< parameters.package >>
+ - save_tox_cache
+
+ build:
+ parameters:
+ version:
+ type: string
+ default: "py38"
+ package:
+ type: string
+ default: "core"
+ executor: << parameters.version >>
+ steps:
+ - run_tox_scenario:
+ pattern: << parameters.version >>-<< parameters.package >>
+
workflows:
main:
jobs:
+ - build:
+ matrix:
+ parameters:
+ version: ["py38", "py37", "py36", "py35", "pypy3"]
+ package: ["core", "exporter", "instrumentation"]
+ - build-py34:
+ matrix:
+ parameters:
+ package: ["core", "exporter", "instrumentation"]
- docs
- lint
+ - docker-tests
diff --git a/tox.ini b/tox.ini
index e4ad8e17098..ed4122a3ce6 100644
--- a/tox.ini
+++ b/tox.ini
@@ -5,60 +5,60 @@ envlist =
; Environments are organized by individual package, allowing
; for specifying supported Python versions per package.
; opentelemetry-api
- py3{4,5,6,7,8}-test-api
- pypy3-test-api
+ py3{4,5,6,7,8}-test-core-api
+ pypy3-test-core-api
; opentelemetry-proto
- py3{4,5,6,7,8}-test-proto
- pypy3-test-proto
+ py3{4,5,6,7,8}-test-core-proto
+ pypy3-test-core-proto
; opentelemetry-sdk
- py3{4,5,6,7,8}-test-sdk
- pypy3-test-sdk
+ py3{4,5,6,7,8}-test-core-sdk
+ pypy3-test-core-sdk
; opentelemetry-instrumentation
- py3{5,6,7,8}-test-instrumentation-base
- pypy3-test-instrumentation-base
-
- ; opentelemetry-example-app
- py3{4,5,6,7,8}-test-example-app
- pypy3-test-example-app
+ py3{5,6,7,8}-test-core-instrumentation
+ pypy3-test-core-instrumentation
; docs/getting-started
- py3{4,5,6,7,8}-test-getting-started
- pypy3-test-getting-started
+ py3{4,5,6,7,8}-test-core-getting-started
+ pypy3-test-core-getting-started
+
+ ; opentelemetry-example-app
+ py3{4,5,6,7,8}-test-instrumentation-example-app
+ pypy3-test-instrumentation-example-app
; opentelemetry-ext-aiohttp-client
- py3{5,6,7,8}-test-ext-aiohttp-client
- pypy3-test-ext-aiohttp-client
+ py3{5,6,7,8}-test-instrumentation-aiohttp-client
+ pypy3-test-instrumentation-aiohttp-client
; opentelemetry-ext-botocore
- py3{6,7,8}-test-ext-botocore
- pypy3-test-ext-botocore
+ py3{6,7,8}-test-instrumentation-botocore
+ pypy3-test-instrumentation-botocore
; opentelemetry-ext-django
- py3{4,5,6,7,8}-test-ext-django
- pypy3-test-ext-django
+ py3{4,5,6,7,8}-test-instrumentation-django
+ pypy3-test-instrumentation-django
; opentelemetry-ext-dbapi
- py3{4,5,6,7,8}-test-ext-dbapi
- pypy3-test-ext-dbapi
+ py3{4,5,6,7,8}-test-instrumentation-dbapi
+ pypy3-test-instrumentation-dbapi
; opentelemetry-ext-boto
- py3{5,6,7,8}-test-ext-boto
- pypy3-test-ext-boto
+ py3{5,6,7,8}-test-instrumentation-boto
+ pypy3-test-instrumentation-boto
- ; opentelemetry-ext-elasticsearch
- py3{4,5,6,7,8}-test-ext-elasticsearch{2,5,6,7}
- pypy3-test-ext-elasticsearch{2,5,6,7}
+ ; opentelemetry-instrumentation-elasticsearch
+ py3{4,5,6,7,8}-test-instrumentation-elasticsearch{2,5,6,7}
+ pypy3-test-instrumentation-elasticsearch{2,5,6,7}
; opentelemetry-ext-flask
- py3{4,5,6,7,8}-test-ext-flask
- pypy3-test-ext-flask
+ py3{4,5,6,7,8}-test-instrumentation-flask
+ pypy3-test-instrumentation-flask
; opentelemetry-ext-requests
- py3{4,5,6,7,8}-test-ext-requests
- pypy3-test-ext-requests
+ py3{4,5,6,7,8}-test-instrumentation-requests
+ pypy3-test-instrumentation-requests
; opentelemetry-instrumentation-starlette.
; starlette only supports 3.6 and above.
@@ -66,97 +66,93 @@ envlist =
pypy3-test-instrumentation-starlette
; opentelemetry-ext-jinja2
- py3{4,5,6,7,8}-test-ext-jinja2
- pypy3-test-ext-jinja2
+ py3{4,5,6,7,8}-test-instrumentation-jinja2
+ pypy3-test-instrumentation-jinja2
; opentelemetry-ext-jaeger
- py3{4,5,6,7,8}-test-ext-jaeger
- pypy3-test-ext-jaeger
+ py3{4,5,6,7,8}-test-exporter-jaeger
+ pypy3-test-exporter-jaeger
; opentelemetry-ext-datadog
- py3{5,6,7,8}-test-ext-datadog
+ py3{5,6,7,8}-test-exporter-datadog
; opentelemetry-ext-mysql
- py3{4,5,6,7,8}-test-ext-mysql
- pypy3-test-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-ext-opencensusexporter
+ py3{4,5,6,7,8}-test-exporter-opencensusexporter
; ext-opencensusexporter intentionally excluded from pypy3
; opentelemetry-ext-otlp
- py3{5,6,7,8}-test-ext-otlp
+ py3{5,6,7,8}-test-exporter-otlp
; ext-otlp intentionally excluded from pypy3
; opentelemetry-ext-prometheus
- py3{4,5,6,7,8}-test-ext-prometheus
- pypy3-test-ext-prometheus
+ py3{4,5,6,7,8}-test-exporter-prometheus
+ pypy3-test-exporter-prometheus
; opentelemetry-ext-psycopg2
- py3{4,5,6,7,8}-test-ext-psycopg2
+ py3{4,5,6,7,8}-test-instrumentation-psycopg2
; ext-psycopg2 intentionally excluded from pypy3
; opentelemetry-ext-pymemcache
- py3{4,5,6,7,8}-test-ext-pymemcache
- pypy3-test-ext-pymemcache
+ py3{4,5,6,7,8}-test-instrumentation-pymemcache
+ pypy3-test-instrumentation-pymemcache
; opentelemetry-ext-pymongo
- py3{4,5,6,7,8}-test-ext-pymongo
- pypy3-test-ext-pymongo
+ py3{4,5,6,7,8}-test-instrumentation-pymongo
+ pypy3-test-instrumentation-pymongo
; opentelemetry-ext-pymysql
- py3{4,5,6,7,8}-test-ext-pymysql
- pypy3-test-ext-pymysql
+ py3{4,5,6,7,8}-test-instrumentation-pymysql
+ pypy3-test-instrumentation-pymysql
; opentelemetry-ext-pyramid
- py3{4,5,6,7,8}-test-ext-pyramid
- pypy3-test-ext-pyramid
-
+ py3{4,5,6,7,8}-test-instrumentation-pyramid
+ pypy3-test-instrumentation-pyramid
+
; opentelemetry-ext-asgi
- py3{5,6,7,8}-test-ext-asgi
- pypy3-test-ext-asgi
+ py3{5,6,7,8}-test-instrumentation-asgi
+ pypy3-test-instrumentation-asgi
; opentelemetry-ext-asyncpg
- py3{5,6,7,8}-test-ext-asyncpg
+ py3{5,6,7,8}-test-instrumentation-asyncpg
; ext-asyncpg intentionally excluded from pypy3
; opentelemetry-ext-sqlite3
- py3{4,5,6,7,8}-test-ext-sqlite3
- pypy3-test-ext-sqlite3
+ py3{4,5,6,7,8}-test-instrumentation-sqlite3
+ pypy3-test-instrumentation-sqlite3
; opentelemetry-ext-wsgi
- py3{4,5,6,7,8}-test-ext-wsgi
- pypy3-test-ext-wsgi
+ py3{4,5,6,7,8}-test-instrumentation-wsgi
+ pypy3-test-instrumentation-wsgi
; opentelemetry-ext-zipkin
- py3{4,5,6,7,8}-test-ext-zipkin
- pypy3-test-ext-zipkin
-
- ; opentelemetry-opentracing-shim
- py3{4,5,6,7,8}-test-opentracing-shim
- pypy3-test-opentracing-shim
+ py3{4,5,6,7,8}-test-exporter-zipkin
+ pypy3-test-exporter-zipkin
; opentelemetry-opentracing-shim
- py3{4,5,6,7,8}-test-opentracing-shim
- pypy3-test-opentracing-shim
+ py3{4,5,6,7,8}-test-core-opentracing-shim
+ pypy3-test-core-opentracing-shim
; opentelemetry-ext-grpc
- py3{4,5,6,7,8}-test-ext-grpc
+ py3{4,5,6,7,8}-test-instrumentation-grpc
; opentelemetry-ext-sqlalchemy
- py3{4,5,6,7,8}-test-ext-sqlalchemy
- pypy3-test-ext-sqlalchemy
+ py3{4,5,6,7,8}-test-instrumentation-sqlalchemy
+ pypy3-test-instrumentation-sqlalchemy
; opentelemetry-ext-redis
- py3{4,5,6,7,8}-test-ext-redis
- pypy3-test-ext-redis
+ py3{4,5,6,7,8}-test-instrumentation-redis
+ pypy3-test-instrumentation-redis
; opentelemetry-ext-celery
- py3{5,6,7,8}-test-ext-celery
- pypy3-test-ext-celery
+ py3{5,6,7,8}-test-instrumentation-celery
+ pypy3-test-instrumentation-celery
; opentelemetry-ext-system-metrics
- py3{4,5,6,7,8}-test-ext-system-metrics
+ py3{4,5,6,7,8}-test-instrumentation-system-metrics
; ext-system-metrics intentionally excluded from pypy3
; known limitation: gc.get_count won't work under pypy
@@ -195,46 +191,48 @@ setenv =
mypy: MYPYPATH={toxinidir}/opentelemetry-api/src/
changedir =
- test-api: opentelemetry-api/tests
- test-sdk: opentelemetry-sdk/tests
- instrumentation-base: opentelemetry-instrumentation/tests
+ test-core-api: opentelemetry-api/tests
+ test-core-sdk: opentelemetry-sdk/tests
+ test-core-proto: opentelemetry-proto/tests
+ test-core-instrumentation: opentelemetry-instrumentation/tests
+ test-core-getting-started: docs/getting_started/tests
+ test-core-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests
+
+ test-instrumentation-grpc: ext/opentelemetry-ext-grpc/tests
+ test-instrumentation-aiohttp-client: ext/opentelemetry-ext-aiohttp-client/tests
+ test-instrumentation-requests: ext/opentelemetry-ext-requests/tests
+ test-instrumentation-jinja2: ext/opentelemetry-ext-jinja2/tests
+ test-instrumentation-dbapi: ext/opentelemetry-ext-dbapi/tests
+ test-instrumentation-django: ext/opentelemetry-ext-django/tests
+ test-instrumentation-mysql: ext/opentelemetry-ext-mysql/tests
+ test-instrumentation-pymemcache: ext/opentelemetry-ext-pymemcache/tests
+ test-instrumentation-pymongo: ext/opentelemetry-ext-pymongo/tests
+ test-instrumentation-psycopg2: ext/opentelemetry-ext-psycopg2/tests
+ test-instrumentation-pymysql: ext/opentelemetry-ext-pymysql/tests
+ test-instrumentation-pyramid: ext/opentelemetry-ext-pyramid/tests
+ test-instrumentation-asgi: ext/opentelemetry-ext-asgi/tests
+ test-instrumentation-sqlite3: ext/opentelemetry-ext-sqlite3/tests
+ test-instrumentation-wsgi: ext/opentelemetry-ext-wsgi/tests
+ test-instrumentation-boto: ext/opentelemetry-ext-boto/tests
+ test-instrumentation-botocore: ext/opentelemetry-ext-botocore/tests
+ test-instrumentation-flask: ext/opentelemetry-ext-flask/tests
+ test-instrumentation-example-app: docs/examples/opentelemetry-example-app/tests
+ test-instrumentation-sqlalchemy: ext/opentelemetry-ext-sqlalchemy/tests
+ test-instrumentation-redis: ext/opentelemetry-ext-redis/tests
test-instrumentation-starlette: ext/opentelemetry-instrumentation-starlette/tests
- test-proto: opentelemetry-proto/tests
- test-ext-grpc: ext/opentelemetry-ext-grpc/tests
- test-ext-aiohttp-client: ext/opentelemetry-ext-aiohttp-client/tests
- test-ext-requests: ext/opentelemetry-ext-requests/tests
- test-ext-jinja2: ext/opentelemetry-ext-jinja2/tests
- test-ext-jaeger: ext/opentelemetry-ext-jaeger/tests
- test-ext-datadog: ext/opentelemetry-ext-datadog/tests
- test-ext-dbapi: ext/opentelemetry-ext-dbapi/tests
- test-ext-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests
- test-ext-django: ext/opentelemetry-ext-django/tests
- test-ext-mysql: ext/opentelemetry-ext-mysql/tests
- test-ext-opencensusexporter: ext/opentelemetry-ext-opencensusexporter/tests
- test-ext-otlp: ext/opentelemetry-ext-otlp/tests
- test-ext-prometheus: ext/opentelemetry-ext-prometheus/tests
- test-ext-pymemcache: ext/opentelemetry-ext-pymemcache/tests
- test-ext-pymongo: ext/opentelemetry-ext-pymongo/tests
+ test-instrumentation-system-metrics: ext/opentelemetry-ext-system-metrics/tests
+ test-instrumentation-celery: ext/opentelemetry-ext-celery/tests
+ test-instrumentation-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests
+ test-instrumentation-asyncpg: ext/opentelemetry-ext-asyncpg/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-cloud-trace: ext/opentelemetry-exporter-cloud-trace/tests
test-exporter-cloud-monitoring: ext/opentelemetry-exporter-cloud-monitoring/tests
- test-ext-psycopg2: ext/opentelemetry-ext-psycopg2/tests
- test-ext-pymysql: ext/opentelemetry-ext-pymysql/tests
- test-ext-pyramid: ext/opentelemetry-ext-pyramid/tests
- test-ext-asgi: ext/opentelemetry-ext-asgi/tests
- test-ext-asyncpg: ext/opentelemetry-ext-asyncpg/tests
- test-ext-sqlite3: ext/opentelemetry-ext-sqlite3/tests
- test-ext-wsgi: ext/opentelemetry-ext-wsgi/tests
- test-ext-zipkin: ext/opentelemetry-ext-zipkin/tests
- test-ext-boto: ext/opentelemetry-ext-boto/tests
- test-ext-botocore: ext/opentelemetry-ext-botocore/tests
- test-ext-flask: ext/opentelemetry-ext-flask/tests
- test-example-app: docs/examples/opentelemetry-example-app/tests
- test-getting-started: docs/getting_started/tests
- test-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests
- test-ext-sqlalchemy: ext/opentelemetry-ext-sqlalchemy/tests
- test-ext-redis: ext/opentelemetry-ext-redis/tests
- test-ext-celery: ext/opentelemetry-ext-celery/tests
- test-ext-system-metrics: ext/opentelemetry-ext-system-metrics/tests
+ test-exporter-zipkin: ext/opentelemetry-ext-zipkin/tests
commands_pre =
; Install without -e to test the actual installation
@@ -243,7 +241,7 @@ commands_pre =
; cases but it saves a lot of boilerplate in this file.
test: pip install {toxinidir}/opentelemetry-api {toxinidir}/opentelemetry-sdk {toxinidir}/tests/util
- test-proto: pip install {toxinidir}/opentelemetry-proto
+ 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
@@ -339,7 +337,7 @@ commands =
; implicit Any due to unfollowed import would result).
mypyinstalled: mypy --namespace-packages opentelemetry-api/tests/mypysmoke.py --strict
-[testenv:py34-test-opentracing-shim]
+[testenv:py34-test-core-opentracing-shim]
commands =
pytest --ignore-glob='*[asyncio].py'
From 5cb01d6c907948ba56ab4595c4a7d185fbd02980 Mon Sep 17 00:00:00 2001
From: Connor Adams
Date: Tue, 14 Jul 2020 10:56:02 -0400
Subject: [PATCH 32/79] docs: Documentation for sampling (#882)
---
docs/api/trace.sampling.rst | 4 +-
.../src/opentelemetry/trace/sampling.py | 64 ++++++++++++++++++-
2 files changed, 63 insertions(+), 5 deletions(-)
diff --git a/docs/api/trace.sampling.rst b/docs/api/trace.sampling.rst
index 09a77b166ea..6280fd1d11b 100644
--- a/docs/api/trace.sampling.rst
+++ b/docs/api/trace.sampling.rst
@@ -1,5 +1,5 @@
-opentelemetry.trace.sampling
-============================
+Sampling Traces
+===============
.. automodule:: opentelemetry.trace.sampling
:members:
diff --git a/opentelemetry-api/src/opentelemetry/trace/sampling.py b/opentelemetry-api/src/opentelemetry/trace/sampling.py
index 892689783df..868678b05c0 100644
--- a/opentelemetry-api/src/opentelemetry/trace/sampling.py
+++ b/opentelemetry-api/src/opentelemetry/trace/sampling.py
@@ -12,6 +12,52 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+"""
+For general information about sampling, see `the specification `_.
+
+OpenTelemetry provides two types of samplers:
+
+- `StaticSampler`
+- `ProbabilitySampler`
+
+A `StaticSampler` always returns the same sampling decision regardless of the conditions. Both possible StaticSamplers are already created:
+
+- Always sample spans: `ALWAYS_ON`
+- Never sample spans: `ALWAYS_OFF`
+
+A `ProbabilitySampler` makes a random sampling decision based on the sampling probability given. If the span being sampled has a parent, `ProbabilitySampler` will respect the parent span's sampling decision.
+
+Currently, sampling decisions are always made during the creation of the span. However, this might not always be the case in the future (see `OTEP #115 `_).
+
+Custom samplers can be created by subclassing `Sampler` and implementing `Sampler.should_sample`.
+
+To use a sampler, pass it into the tracer provider constructor. For example:
+
+.. code:: python
+
+ from opentelemetry import trace
+ from opentelemetry.trace.sampling import ProbabilitySampler
+ from opentelemetry.sdk.trace import TracerProvider
+ from opentelemetry.sdk.trace.export import (
+ ConsoleSpanExporter,
+ SimpleExportSpanProcessor,
+ )
+
+ # sample 1 in every 1000 traces
+ sampler = ProbabilitySampler(1/1000)
+
+ # set the sampler onto the global tracer provider
+ trace.set_tracer_provider(TracerProvider(sampler=sampler))
+
+ # set up an exporter for sampled spans
+ trace.get_tracer_provider().add_span_processor(
+ SimpleExportSpanProcessor(ConsoleSpanExporter())
+ )
+
+ # created spans will now be sampled by the ProbabilitySampler
+ with trace.get_tracer(__name__).start_as_current_span("Test Span"):
+ ...
+"""
import abc
from typing import Dict, Mapping, Optional, Sequence
@@ -78,6 +124,14 @@ def should_sample(
class ProbabilitySampler(Sampler):
+ """
+ Sampler that makes sampling decisions probabalistically based on `rate`,
+ while also respecting the parent span sampling decision.
+
+ Args:
+ rate: Probability (between 0 and 1) that a span will be sampled
+ """
+
def __init__(self, rate: float):
self._rate = rate
self._bound = self.get_bound_for_rate(self._rate)
@@ -118,11 +172,15 @@ def should_sample(
return Decision(trace_id & self.TRACE_ID_LIMIT < self.bound)
-# Samplers that ignore the parent sampling decision and never/always sample.
ALWAYS_OFF = StaticSampler(Decision(False))
+"""Sampler that never samples spans, regardless of the parent span's sampling decision."""
+
ALWAYS_ON = StaticSampler(Decision(True))
+"""Sampler that always samples spans, regardless of the parent span's sampling decision."""
+
-# Samplers that respect the parent sampling decision, but otherwise
-# never/always sample.
DEFAULT_OFF = ProbabilitySampler(0.0)
+"""Sampler that respects its parent span's sampling decision, but otherwise never samples."""
+
DEFAULT_ON = ProbabilitySampler(1.0)
+"""Sampler that respects its parent span's sampling decision, but otherwise always samples."""
From 545068d6eb61beaab031af45b1572d70e6652bc3 Mon Sep 17 00:00:00 2001
From: alrex
Date: Tue, 14 Jul 2020 08:32:33 -0700
Subject: [PATCH 33/79] chore: rename workflow to give it more meaning (#909)
---
.circleci/config.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index a00e513de24..f47690257c0 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -129,7 +129,7 @@ jobs:
pattern: << parameters.version >>-<< parameters.package >>
workflows:
- main:
+ circleci-build:
jobs:
- build:
matrix:
From 7bec76a22032e498911d06b9e3dab4e33528d995 Mon Sep 17 00:00:00 2001
From: Yusuke Tsutsumi
Date: Wed, 15 Jul 2020 06:49:12 +0000
Subject: [PATCH 34/79] fastapi instrumentation (#890)
Co-authored-by: Leighton Chen
---
docs-requirements.txt | 1 +
docs/ext/fastapi/fastapi.rst | 9 ++
.../CHANGELOG.md | 5 +
.../README.rst | 43 ++++++++
.../setup.cfg | 55 +++++++++
.../setup.py | 31 ++++++
.../instrumentation/fastapi/__init__.py | 82 ++++++++++++++
.../instrumentation/fastapi/version.py | 15 +++
.../tests/__init__.py | 0
.../tests/test_fastapi_instrumentation.py | 104 ++++++++++++++++++
.../setup.cfg | 2 +-
.../instrumentation/starlette/__init__.py | 2 +-
tox.ini | 16 ++-
13 files changed, 358 insertions(+), 7 deletions(-)
create mode 100644 docs/ext/fastapi/fastapi.rst
create mode 100644 ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md
create mode 100644 ext/opentelemetry-instrumentation-fastapi/README.rst
create mode 100644 ext/opentelemetry-instrumentation-fastapi/setup.cfg
create mode 100644 ext/opentelemetry-instrumentation-fastapi/setup.py
create mode 100644 ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py
create mode 100644 ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
create mode 100644 ext/opentelemetry-instrumentation-fastapi/tests/__init__.py
create mode 100644 ext/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py
diff --git a/docs-requirements.txt b/docs-requirements.txt
index 230c76149cc..169bbb7f0b1 100644
--- a/docs-requirements.txt
+++ b/docs-requirements.txt
@@ -29,3 +29,4 @@ google-cloud-trace >=0.23.0
google-cloud-monitoring>=0.36.0
botocore~=1.0
starlette~=0.13
+fastapi~=0.58.1
\ No newline at end of file
diff --git a/docs/ext/fastapi/fastapi.rst b/docs/ext/fastapi/fastapi.rst
new file mode 100644
index 00000000000..9295261584b
--- /dev/null
+++ b/docs/ext/fastapi/fastapi.rst
@@ -0,0 +1,9 @@
+.. include:: ../../../ext/opentelemetry-instrumentation-fastapi/README.rst
+
+API
+---
+
+.. automodule:: opentelemetry.instrumentation.fastapi
+ :members:
+ :undoc-members:
+ :show-inheritance:
\ No newline at end of file
diff --git a/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md b/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md
new file mode 100644
index 00000000000..684dece0c62
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Changelog
+
+## Unreleased
+
+- Initial release ([#890](https://github.com/open-telemetry/opentelemetry-python/pull/890))
\ No newline at end of file
diff --git a/ext/opentelemetry-instrumentation-fastapi/README.rst b/ext/opentelemetry-instrumentation-fastapi/README.rst
new file mode 100644
index 00000000000..4cc612da760
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-fastapi/README.rst
@@ -0,0 +1,43 @@
+OpenTelemetry FastAPI Instrumentation
+=======================================
+
+|pypi|
+
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-fastapi.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-fastapi/
+
+
+This library provides automatic and manual instrumentation of FastAPI web frameworks,
+instrumenting http requests served by applications utilizing the framework.
+
+auto-instrumentation using the opentelemetry-instrumentation package is also supported.
+
+Installation
+------------
+
+::
+
+ pip install opentelemetry-instrumentation-fastapi
+
+
+Usage
+-----
+
+.. code-block:: python
+
+ import fastapi
+ from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
+
+ app = fastapi.FastAPI()
+
+ @app.get("/foobar")
+ async def foobar():
+ return {"message": "hello world"}
+
+ FastAPIInstrumentor.instrument_app(app)
+
+
+References
+----------
+
+* `OpenTelemetry Project `_
\ No newline at end of file
diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.cfg b/ext/opentelemetry-instrumentation-fastapi/setup.cfg
new file mode 100644
index 00000000000..5e7c2fafa6b
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-fastapi/setup.cfg
@@ -0,0 +1,55 @@
+# 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-fastapi
+description = OpenTelemetry FastAPI 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-fastapi
+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.6
+ Programming Language :: Python :: 3.7
+ Programming Language :: Python :: 3.8
+
+[options]
+python_requires = >=3.6
+package_dir=
+ =src
+packages=find_namespace:
+install_requires =
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-asgi == 0.11.dev0
+
+[options.entry_points]
+opentelemetry_instrumentor =
+ fastapi = opentelemetry.instrumentation.fastapi:FastAPIInstrumentor
+
+[options.extras_require]
+test =
+ opentelemetry-test == 0.11.dev0
+ fastapi ~= 0.58.1
+ requests ~= 2.23.0 # needed for testclient
+
+[options.packages.find]
+where = src
diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.py b/ext/opentelemetry-instrumentation-fastapi/setup.py
new file mode 100644
index 00000000000..13c7c5a99c0
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-fastapi/setup.py
@@ -0,0 +1,31 @@
+# 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",
+ "fastapi",
+ "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-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py
new file mode 100644
index 00000000000..65d608393d7
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py
@@ -0,0 +1,82 @@
+# 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 typing import Optional
+
+import fastapi
+from starlette.routing import Match
+
+from opentelemetry.ext.asgi import OpenTelemetryMiddleware
+from opentelemetry.instrumentation.fastapi.version import __version__ # noqa
+from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+
+
+class FastAPIInstrumentor(BaseInstrumentor):
+ """An instrumentor for FastAPI
+
+ See `BaseInstrumentor`
+ """
+
+ _original_fastapi = None
+
+ @staticmethod
+ def instrument_app(app: fastapi.FastAPI):
+ """Instrument an uninstrumented FastAPI application.
+ """
+ if not getattr(app, "is_instrumented_by_opentelemetry", False):
+ app.add_middleware(
+ OpenTelemetryMiddleware,
+ span_details_callback=_get_route_details,
+ )
+ app.is_instrumented_by_opentelemetry = True
+
+ def _instrument(self, **kwargs):
+ self._original_fastapi = fastapi.FastAPI
+ fastapi.FastAPI = _InstrumentedFastAPI
+
+ def _uninstrument(self, **kwargs):
+ fastapi.FastAPI = self._original_fastapi
+
+
+class _InstrumentedFastAPI(fastapi.FastAPI):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.add_middleware(
+ OpenTelemetryMiddleware, span_details_callback=_get_route_details
+ )
+
+
+def _get_route_details(scope):
+ """Callback to retrieve the fastapi route being served.
+
+ TODO: there is currently no way to retrieve http.route from
+ a starlette application from scope.
+
+ See: https://github.com/encode/starlette/pull/804
+ """
+ app = scope["app"]
+ route = None
+ for starlette_route in app.routes:
+ match, _ = starlette_route.matches(scope)
+ if match == Match.FULL:
+ route = starlette_route.path
+ break
+ if match == Match.PARTIAL:
+ route = starlette_route.path
+ # method only exists for http, if websocket
+ # leave it blank.
+ span_name = route or scope.get("method", "")
+ attributes = {}
+ if route:
+ attributes["http.route"] = route
+ return span_name, attributes
diff --git a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
new file mode 100644
index 00000000000..858e73960ff
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/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.11.dev0"
diff --git a/ext/opentelemetry-instrumentation-fastapi/tests/__init__.py b/ext/opentelemetry-instrumentation-fastapi/tests/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/ext/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py b/ext/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py
new file mode 100644
index 00000000000..47617d4e959
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-fastapi/tests/test_fastapi_instrumentation.py
@@ -0,0 +1,104 @@
+# 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 unittest
+
+import fastapi
+from fastapi.testclient import TestClient
+
+import opentelemetry.instrumentation.fastapi as otel_fastapi
+from opentelemetry.test.test_base import TestBase
+
+
+class TestFastAPIManualInstrumentation(TestBase):
+ def _create_app(self):
+ app = self._create_fastapi_app()
+ self._instrumentor.instrument_app(app)
+ return app
+
+ def setUp(self):
+ super().setUp()
+ self._instrumentor = otel_fastapi.FastAPIInstrumentor()
+ self._app = self._create_app()
+ self._client = TestClient(self._app)
+
+ def test_basic_fastapi_call(self):
+ self._client.get("/foobar")
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 3)
+ for span in spans:
+ self.assertIn("/foobar", span.name)
+
+ def test_fastapi_route_attribute_added(self):
+ """Ensure that fastapi routes are used as the span name."""
+ self._client.get("/user/123")
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 3)
+ for span in spans:
+ self.assertIn("/user/{username}", span.name)
+ self.assertEqual(
+ spans[-1].attributes["http.route"], "/user/{username}"
+ )
+ # ensure that at least one attribute that is populated by
+ # the asgi instrumentation is successfully feeding though.
+ self.assertEqual(spans[-1].attributes["http.flavor"], "1.1")
+
+ @staticmethod
+ def _create_fastapi_app():
+ app = fastapi.FastAPI()
+
+ @app.get("/foobar")
+ async def _():
+ return {"message": "hello world"}
+
+ @app.get("/user/{username}")
+ async def _(username: str):
+ return {"message": username}
+
+ return app
+
+
+class TestAutoInstrumentation(TestFastAPIManualInstrumentation):
+ """Test the auto-instrumented variant
+
+ Extending the manual instrumentation as most test cases apply
+ to both.
+ """
+
+ def _create_app(self):
+ # instrumentation is handled by the instrument call
+ self._instrumentor.instrument()
+ return self._create_fastapi_app()
+
+ def tearDown(self):
+ self._instrumentor.uninstrument()
+ super().tearDown()
+
+
+class TestAutoInstrumentationLogic(unittest.TestCase):
+ def test_instrumentation(self):
+ """Verify that instrumentation methods are instrumenting and
+ removing as expected.
+ """
+ instrumentor = otel_fastapi.FastAPIInstrumentor()
+ original = fastapi.FastAPI
+ instrumentor.instrument()
+ try:
+ instrumented = fastapi.FastAPI
+ self.assertIsNot(original, instrumented)
+ finally:
+ instrumentor.uninstrument()
+
+ should_be_original = fastapi.FastAPI
+ self.assertIs(original, should_be_original)
diff --git a/ext/opentelemetry-instrumentation-starlette/setup.cfg b/ext/opentelemetry-instrumentation-starlette/setup.cfg
index cea0cc11881..4c777a18c50 100644
--- a/ext/opentelemetry-instrumentation-starlette/setup.cfg
+++ b/ext/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/ext/opentelemetry-instrumentation-starlette
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/ext/opentelemetry-instrumentation-starlette
platforms = any
license = Apache-2.0
classifiers =
diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py
index 197a38d7591..b8763bba055 100644
--- a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py
+++ b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py
@@ -31,7 +31,7 @@ class StarletteInstrumentor(BaseInstrumentor):
@staticmethod
def instrument_app(app: applications.Starlette):
- """Instrument a previously instrumented Starlette application.
+ """Instrument an uninstrumented Starlette application.
"""
if not getattr(app, "is_instrumented_by_opentelemetry", False):
app.add_middleware(
diff --git a/tox.ini b/tox.ini
index ed4122a3ce6..4b9ed90479a 100644
--- a/tox.ini
+++ b/tox.ini
@@ -52,6 +52,11 @@ envlist =
py3{4,5,6,7,8}-test-instrumentation-elasticsearch{2,5,6,7}
pypy3-test-instrumentation-elasticsearch{2,5,6,7}
+ ; opentelemetry-instrumentation-fastapi
+ ; fastapi only supports 3.6 and above.
+ py3{6,7,8}-test-instrumentation-fastapi
+ pypy3-test-instrumentation-fastapi
+
; opentelemetry-ext-flask
py3{4,5,6,7,8}-test-instrumentation-flask
pypy3-test-instrumentation-flask
@@ -187,8 +192,7 @@ deps =
elasticsearch7: elasticsearch-dsl>=7.0,<8.0
elasticsearch7: elasticsearch>=7.0,<8.0
-setenv =
- mypy: MYPYPATH={toxinidir}/opentelemetry-api/src/
+setenv = mypy: MYPYPATH={toxinidir}/opentelemetry-api/src/
changedir =
test-core-api: opentelemetry-api/tests
@@ -215,6 +219,7 @@ changedir =
test-instrumentation-wsgi: ext/opentelemetry-ext-wsgi/tests
test-instrumentation-boto: ext/opentelemetry-ext-boto/tests
test-instrumentation-botocore: ext/opentelemetry-ext-botocore/tests
+ test-instrumentation-fastapi: ext/opentelemetry-instrumentation-fastapi/tests
test-instrumentation-flask: ext/opentelemetry-ext-flask/tests
test-instrumentation-example-app: docs/examples/opentelemetry-example-app/tests
test-instrumentation-sqlalchemy: ext/opentelemetry-ext-sqlalchemy/tests
@@ -236,7 +241,7 @@ changedir =
commands_pre =
; Install without -e to test the actual installation
- py3{4,5,6,7}: python -m pip install -U pip setuptools wheel
+ py3{4,5,6,7,8}: python -m pip install -U pip setuptools wheel
; Install common packages for all the tests. These are not needed in all the
; cases but it saves a lot of boilerplate in this file.
test: pip install {toxinidir}/opentelemetry-api {toxinidir}/opentelemetry-sdk {toxinidir}/tests/util
@@ -252,9 +257,8 @@ commands_pre =
grpc: pip install {toxinidir}/ext/opentelemetry-ext-grpc[test]
- wsgi,flask,django,asgi,pyramid,starlette: pip install {toxinidir}/tests/util
wsgi,flask,django,pyramid: pip install {toxinidir}/ext/opentelemetry-ext-wsgi
- asgi,starlette: pip install {toxinidir}/ext/opentelemetry-ext-asgi
+ asgi,starlette,fastapi: pip install {toxinidir}/ext/opentelemetry-ext-asgi
asyncpg: pip install {toxinidir}/ext/opentelemetry-ext-asyncpg
@@ -269,6 +273,8 @@ commands_pre =
django: pip install {toxinidir}/ext/opentelemetry-ext-django[test]
+ fastapi: pip install {toxinidir}/ext/opentelemetry-instrumentation-fastapi[test]
+
mysql: pip install {toxinidir}/ext/opentelemetry-ext-dbapi {toxinidir}/ext/opentelemetry-ext-mysql[test]
opencensusexporter: pip install {toxinidir}/ext/opentelemetry-ext-opencensusexporter
From 5d82b0aa30725d2d78ffb9f96cd0dd6742b96a96 Mon Sep 17 00:00:00 2001
From: alrex
Date: Wed, 15 Jul 2020 10:18:33 -0700
Subject: [PATCH 35/79] chore: update bootstrap with new instrumentations
(#913)
---
.../instrumentation/bootstrap.py | 26 +++++++++++++--
tox.ini | 32 +++++++++----------
2 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
index e313ca96315..f624a2e4dde 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
@@ -25,35 +25,57 @@
# target library to desired instrumentor path/versioned package name
instrumentations = {
+ "asgi": "opentelemetry-ext-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",
+ "elasticsearch": "opentelemetry-ext-elasticsearch>=0.11b0",
+ "fastapi": "opentelemetry-instrumentation-fastapi>=0.11b0",
"flask": "opentelemetry-ext-flask>=0.8b0",
"grpc": "opentelemetry-ext-grpc>=0.8b0",
- "requests": "opentelemetry-ext-requests>=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",
"redis": "opentelemetry-ext-redis>=0.8b0",
+ "requests": "opentelemetry-ext-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",
}
# relevant instrumentors and tracers to uninstall and check for conflicts for target libraries
libraries = {
+ "asgi": ("opentelemetry-ext-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",),
+ "elasticsearch": ("opentelemetry-ext-elasticsearch",),
+ "fastapi": ("opentelemetry-instrumentation-fastapi",),
"flask": ("opentelemetry-ext-flask",),
"grpc": ("opentelemetry-ext-grpc",),
- "requests": ("opentelemetry-ext-requests",),
"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",),
"redis": ("opentelemetry-ext-redis",),
+ "requests": ("opentelemetry-ext-requests",),
"sqlalchemy": ("opentelemetry-ext-sqlalchemy",),
+ "sqlite3": ("opentelemetry-ext-sqlite3",),
+ "starlette": ("opentelemetry-instrumentation-starlette",),
"wsgi": ("opentelemetry-ext-wsgi",),
}
diff --git a/tox.ini b/tox.ini
index 4b9ed90479a..ea3a5c29136 100644
--- a/tox.ini
+++ b/tox.ini
@@ -202,33 +202,33 @@ changedir =
test-core-getting-started: docs/getting_started/tests
test-core-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests
- test-instrumentation-grpc: ext/opentelemetry-ext-grpc/tests
test-instrumentation-aiohttp-client: ext/opentelemetry-ext-aiohttp-client/tests
- test-instrumentation-requests: ext/opentelemetry-ext-requests/tests
- test-instrumentation-jinja2: ext/opentelemetry-ext-jinja2/tests
+ test-instrumentation-asgi: ext/opentelemetry-ext-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
+ 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-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-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-psycopg2: ext/opentelemetry-ext-psycopg2/tests
test-instrumentation-pymysql: ext/opentelemetry-ext-pymysql/tests
test-instrumentation-pyramid: ext/opentelemetry-ext-pyramid/tests
- test-instrumentation-asgi: ext/opentelemetry-ext-asgi/tests
- test-instrumentation-sqlite3: ext/opentelemetry-ext-sqlite3/tests
- test-instrumentation-wsgi: ext/opentelemetry-ext-wsgi/tests
- test-instrumentation-boto: ext/opentelemetry-ext-boto/tests
- test-instrumentation-botocore: ext/opentelemetry-ext-botocore/tests
- test-instrumentation-fastapi: ext/opentelemetry-instrumentation-fastapi/tests
- test-instrumentation-flask: ext/opentelemetry-ext-flask/tests
- test-instrumentation-example-app: docs/examples/opentelemetry-example-app/tests
- test-instrumentation-sqlalchemy: ext/opentelemetry-ext-sqlalchemy/tests
test-instrumentation-redis: ext/opentelemetry-ext-redis/tests
+ test-instrumentation-requests: ext/opentelemetry-ext-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-celery: ext/opentelemetry-ext-celery/tests
- test-instrumentation-elasticsearch{2,5,6,7}: ext/opentelemetry-ext-elasticsearch/tests
- test-instrumentation-asyncpg: ext/opentelemetry-ext-asyncpg/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
From 2a952b3d4540fa767974c48afdb781d9e9340edd Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Wed, 15 Jul 2020 12:39:40 -0600
Subject: [PATCH 36/79] Fix a few issues with the Django example (#915)
---
docs/examples/django/README.rst | 2 +-
docs/examples/django/pages/views.py | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/docs/examples/django/README.rst b/docs/examples/django/README.rst
index 95c106d32f7..e8a043684f6 100644
--- a/docs/examples/django/README.rst
+++ b/docs/examples/django/README.rst
@@ -56,7 +56,7 @@ Open up a new console and activate the previous virtual environment there too:
``source django_auto_instrumentation/bin/activate``
-Go to ``opentelemetry-python/ext/opentelemetry-ext-django/example``, once there
+Go to ``opentelemetry-python/docs/examples/django``, once there
run the client with:
``python client.py hello``
diff --git a/docs/examples/django/pages/views.py b/docs/examples/django/pages/views.py
index d54633c3298..4083888e17b 100644
--- a/docs/examples/django/pages/views.py
+++ b/docs/examples/django/pages/views.py
@@ -21,7 +21,6 @@
)
trace.set_tracer_provider(TracerProvider())
-tracer = trace.get_tracer_provider().get_tracer(__name__)
trace.get_tracer_provider().add_span_processor(
SimpleExportSpanProcessor(ConsoleSpanExporter())
From ee9d28a71ca825a7518ff052dc5bafd3aa5bf2db Mon Sep 17 00:00:00 2001
From: Connor Adams
Date: Thu, 16 Jul 2020 11:43:04 -0400
Subject: [PATCH 37/79] instrumentation/grpc: Testing for gRPC Client
Interceptor (#896)
---
ext/opentelemetry-ext-grpc/CHANGELOG.md | 3 +
ext/opentelemetry-ext-grpc/setup.cfg | 1 +
.../src/opentelemetry/ext/grpc/_client.py | 40 +++-
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 | 139 +++++++++++
tox.ini | 2 +-
10 files changed, 775 insertions(+), 8 deletions(-)
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
diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md
index 23027147909..3be32e05e59 100644
--- a/ext/opentelemetry-ext-grpc/CHANGELOG.md
+++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Add status code to gRPC client spans
+ ([896](https://github.com/open-telemetry/opentelemetry-python/pull/896))
+
## 0.8b0
Released 2020-05-27
diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg
index 012b3541d21..2721a3b2578 100644
--- a/ext/opentelemetry-ext-grpc/setup.cfg
+++ b/ext/opentelemetry-ext-grpc/setup.cfg
@@ -47,6 +47,7 @@ install_requires =
test =
opentelemetry-test == 0.11.dev0
opentelemetry-sdk == 0.11.dev0
+ protobuf == 3.12.2
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py
index ebf455910c7..373d8f345cf 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py
@@ -25,6 +25,7 @@
import grpc
from opentelemetry import propagators, trace
+from opentelemetry.trace.status import Status, StatusCanonicalCode
from . import grpcext
from ._utilities import RpcInfo
@@ -33,14 +34,16 @@
class _GuardedSpan:
def __init__(self, span):
self.span = span
+ self.generated_span = None
self._engaged = True
def __enter__(self):
- self.span.__enter__()
+ 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
@@ -122,7 +125,15 @@ def intercept_unary(self, request, metadata, client_info, invoker):
timeout=client_info.timeout,
request=request,
)
- result = invoker(request, metadata)
+
+ 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)
# For RPCs that stream responses, the result can be a generator. To record
@@ -136,7 +147,7 @@ def _intercept_server_stream(
else:
mutable_metadata = OrderedDict(metadata)
- with self._start_span(client_info.full_method):
+ with self._start_span(client_info.full_method) as span:
_inject_span_context(mutable_metadata)
metadata = tuple(mutable_metadata.items())
rpc_info = RpcInfo(
@@ -146,9 +157,16 @@ def _intercept_server_stream(
)
if client_info.is_client_stream:
rpc_info.request = request_or_iterator
- result = invoker(request_or_iterator, metadata)
- for response in result:
- yield response
+
+ try:
+ result = invoker(request_or_iterator, metadata)
+ for response in result:
+ 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
@@ -172,5 +190,13 @@ def intercept_stream(
timeout=client_info.timeout,
request=request_or_iterator,
)
- result = invoker(request_or_iterator, metadata)
+
+ 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)
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..47dc9fa0bb6
--- /dev/null
+++ b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py
@@ -0,0 +1,139 @@
+# 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 metrics, trace
+from opentelemetry.ext.grpc import client_interceptor
+from opentelemetry.ext.grpc.grpcext import intercept_channel
+from opentelemetry.sdk.metrics.export.controller import PushController
+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()
+ self.server = create_test_server(25565)
+ self.server.start()
+ meter = metrics.get_meter(__name__)
+ interceptor = client_interceptor()
+ self.channel = intercept_channel(
+ grpc.insecure_channel("localhost:25565"), interceptor
+ )
+ self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel)
+
+ self._controller = PushController(
+ meter, self.memory_metrics_exporter, 30
+ )
+
+ def tearDown(self):
+ super().tearDown()
+ self.memory_metrics_exporter.clear()
+ self.server.stop(None)
+
+ 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)
+
+ 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)
+
+ 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)
+
+ def test_error_simple(self):
+ with self.assertRaises(grpc.RpcError):
+ simple_method(self._stub, error=True)
+
+ 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)
+
+ 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)
+
+ 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)
+
+ 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],
+ )
diff --git a/tox.ini b/tox.ini
index ea3a5c29136..2c87f692467 100644
--- a/tox.ini
+++ b/tox.ini
@@ -142,7 +142,7 @@ envlist =
pypy3-test-core-opentracing-shim
; opentelemetry-ext-grpc
- py3{4,5,6,7,8}-test-instrumentation-grpc
+ py3{5,6,7,8}-test-instrumentation-grpc
; opentelemetry-ext-sqlalchemy
py3{4,5,6,7,8}-test-instrumentation-sqlalchemy
From cfd9225f8ea6599cadd322f2a8818b1cb502a0ca Mon Sep 17 00:00:00 2001
From: Aaron Abbott
Date: Thu, 16 Jul 2020 18:07:59 +0000
Subject: [PATCH 38/79] Add instructions to proto package README (#905)
---
opentelemetry-proto/README.rst | 11 ++++++++---
scripts/proto_codegen.sh | 20 ++++++++++++++------
2 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/opentelemetry-proto/README.rst b/opentelemetry-proto/README.rst
index 48b9661b206..6825aa88238 100644
--- a/opentelemetry-proto/README.rst
+++ b/opentelemetry-proto/README.rst
@@ -16,11 +16,15 @@ Installation
Code Generation
---------------
-These files were generated automatically. More details on how to generate them
-are available here_.
+These files were generated automatically from code in opentelemetry-proto_.
+To regenerate the code, run ``../scripts/proto_codegen.sh``.
+To build against a new release or specific commit of opentelemetry-proto_,
+update the ``PROTO_REPO_BRANCH_OR_COMMIT`` variable in
+``../scripts/proto_codegen.sh``. Then run the script and commit the changes
+as well as any fixes needed in the OTLP exporter.
-.. _here: https://github.com/open-telemetry/opentelemetry-proto
+.. _opentelemetry-proto: https://github.com/open-telemetry/opentelemetry-proto
References
@@ -28,3 +32,4 @@ References
* `OpenTelemetry Project `_
* `OpenTelemetry Proto `_
+* `proto_codegen.sh script `_
diff --git a/scripts/proto_codegen.sh b/scripts/proto_codegen.sh
index b840f8452b8..f7742db6f68 100755
--- a/scripts/proto_codegen.sh
+++ b/scripts/proto_codegen.sh
@@ -16,16 +16,24 @@ PROTO_REPO_BRANCH_OR_COMMIT="v0.4.0"
set -e
-if [ -z "$VIRTUAL_ENV" ]; then
- echo '$VIRTUAL_ENV is not set, you probably forgot to source it. Exiting...'
- exit 1
-fi
-
PROTO_REPO_DIR=${PROTO_REPO_DIR:-"/tmp/opentelemetry-proto"}
# root of opentelemetry-python repo
repo_root="$(git rev-parse --show-toplevel)"
+venv_dir="/tmp/proto_codegen_venv"
+
+# run on exit even if crash
+cleanup() {
+ echo "Deleting $venv_dir"
+ rm -rf $venv_dir
+}
+trap cleanup EXIT
-python -m pip install -r $repo_root/dev-requirements.txt
+echo "Creating temporary virtualenv at $venv_dir using $(python3 --version)"
+python3 -m venv $venv_dir
+source $venv_dir/bin/activate
+python -m pip install \
+ -c $repo_root/dev-requirements.txt \
+ grpcio-tools mypy-protobuf
# Clone the proto repo if it doesn't exist
if [ ! -d "$PROTO_REPO_DIR" ]; then
From 23e577e5504384432ed37b31149b61627004e3e3 Mon Sep 17 00:00:00 2001
From: Andrew Xue
Date: Thu, 16 Jul 2020 16:12:44 -0400
Subject: [PATCH 39/79] remove google exporter files (#918)
---
docs-requirements.txt | 6 +-
.../CHANGELOG.md | 21 -
.../LICENSE | 201 -------
.../MANIFEST.in | 9 -
.../README.rst | 18 -
.../setup.cfg | 51 --
.../setup.py | 31 --
.../exporter/cloud_monitoring/__init__.py | 236 --------
.../exporter/cloud_monitoring/version.py | 15 -
.../tests/__init__.py | 0
.../tests/test_cloud_monitoring.py | 436 ---------------
.../CHANGELOG.md | 25 -
.../LICENSE | 201 -------
.../MANIFEST.in | 9 -
.../README.rst | 43 --
.../setup.cfg | 51 --
.../setup.py | 26 -
.../exporter/cloud_trace/__init__.py | 382 -------------
.../cloud_trace/cloud_trace_propagator.py | 89 ---
.../exporter/cloud_trace/version.py | 15 -
.../opentelemetry/tools/resource_detector.py | 47 --
.../tests/__init__.py | 0
.../tests/test_cloud_trace_exporter.py | 508 ------------------
.../tests/test_cloud_trace_propagator.py | 238 --------
.../tests/test_gcp_resource_detector.py | 84 ---
scripts/coverage.sh | 2 -
tox.ini | 13 -
27 files changed, 3 insertions(+), 2754 deletions(-)
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/LICENSE
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/MANIFEST.in
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/README.rst
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/setup.cfg
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/setup.py
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/tests/__init__.py
delete mode 100644 ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/LICENSE
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/MANIFEST.in
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/README.rst
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/setup.cfg
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/setup.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/tests/__init__.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_propagator.py
delete mode 100644 ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
diff --git a/docs-requirements.txt b/docs-requirements.txt
index 169bbb7f0b1..0fa078ef233 100644
--- a/docs-requirements.txt
+++ b/docs-requirements.txt
@@ -25,8 +25,8 @@ wrapt>=1.0.0,<2.0.0
celery>=4.0
psutil~=5.7.0
boto~=2.0
-google-cloud-trace >=0.23.0
-google-cloud-monitoring>=0.36.0
botocore~=1.0
starlette~=0.13
-fastapi~=0.58.1
\ No newline at end of file
+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/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
deleted file mode 100644
index e5f01ee5b02..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/CHANGELOG.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Changelog
-
-## Unreleased
-
-- Add support for resources
- ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
-
-## Version 0.10b0
-
-Released 2020-06-23
-
-- Add ability for exporter to add unique identifier
- ([#841](https://github.com/open-telemetry/opentelemetry-python/pull/841))
-- Added tests to tox coverage files
- ([#804](https://github.com/open-telemetry/opentelemetry-python/pull/804))
-
-## 0.9b0
-
-Released 2020-06-10
-
-- Initial release
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/LICENSE b/ext/opentelemetry-exporter-cloud-monitoring/LICENSE
deleted file mode 100644
index 261eeb9e9f8..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/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/ext/opentelemetry-exporter-cloud-monitoring/MANIFEST.in b/ext/opentelemetry-exporter-cloud-monitoring/MANIFEST.in
deleted file mode 100644
index aed3e33273b..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/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/ext/opentelemetry-exporter-cloud-monitoring/README.rst b/ext/opentelemetry-exporter-cloud-monitoring/README.rst
deleted file mode 100644
index f1fd52528c9..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/README.rst
+++ /dev/null
@@ -1,18 +0,0 @@
-OpenTelemetry Cloud Monitoring Exporters
-========================================
-
-This library provides classes for exporting metrics data to Google Cloud Monitoring.
-
-Installation
-------------
-
-::
-
- pip install opentelemetry-exporter-cloud-monitoring
-
-References
-----------
-
-* `OpenTelemetry Cloud Monitoring Exporter `_
-* `Cloud Monitoring `_
-* `OpenTelemetry Project `_
\ No newline at end of file
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/setup.cfg b/ext/opentelemetry-exporter-cloud-monitoring/setup.cfg
deleted file mode 100644
index 8875937751f..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/setup.cfg
+++ /dev/null
@@ -1,51 +0,0 @@
-
-# Copyright 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-exporter-cloud-monitoring
-description = Cloud Monitoring integration 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-exporter-cloud-monitoring
-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
-
-[options]
-python_requires = >=3.4
-package_dir=
- =src
-packages=find_namespace:
-install_requires =
- opentelemetry-api
- opentelemetry-sdk
- google-cloud-monitoring
-
-[options.packages.find]
-where = src
-
-[options.extras_require]
-test =
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/setup.py b/ext/opentelemetry-exporter-cloud-monitoring/setup.py
deleted file mode 100644
index 0ca88bc330f..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/setup.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 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",
- "exporter",
- "cloud_monitoring",
- "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-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
deleted file mode 100644
index 2c6e3abdb09..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/__init__.py
+++ /dev/null
@@ -1,236 +0,0 @@
-import logging
-import random
-from typing import Optional, Sequence
-
-import google.auth
-from google.api.label_pb2 import LabelDescriptor
-from google.api.metric_pb2 import MetricDescriptor
-from google.api.monitored_resource_pb2 import MonitoredResource
-from google.cloud.monitoring_v3 import MetricServiceClient
-from google.cloud.monitoring_v3.proto.metric_pb2 import TimeSeries
-
-from opentelemetry.sdk.metrics.export import (
- MetricRecord,
- MetricsExporter,
- MetricsExportResult,
-)
-from opentelemetry.sdk.metrics.export.aggregate import SumAggregator
-from opentelemetry.sdk.resources import Resource
-
-logger = logging.getLogger(__name__)
-MAX_BATCH_WRITE = 200
-WRITE_INTERVAL = 10
-UNIQUE_IDENTIFIER_KEY = "opentelemetry_id"
-
-OT_RESOURCE_LABEL_TO_GCP = {
- "gce_instance": {
- "cloud.account.id": "project_id",
- "host.id": "instance_id",
- "cloud.zone": "zone",
- }
-}
-
-
-# pylint is unable to resolve members of protobuf objects
-# pylint: disable=no-member
-class CloudMonitoringMetricsExporter(MetricsExporter):
- """ Implementation of Metrics Exporter to Google Cloud Monitoring
-
- You can manually pass in project_id and client, or else the
- Exporter will take that information from Application Default
- Credentials.
-
- Args:
- project_id: project id of your Google Cloud project.
- client: Client to upload metrics to Google Cloud Monitoring.
- add_unique_identifier: Add an identifier to each exporter metric. This
- must be used when there exist two (or more) exporters that may
- export to the same metric name within WRITE_INTERVAL seconds of
- each other.
- """
-
- def __init__(
- self, project_id=None, client=None, add_unique_identifier=False
- ):
- self.client = client or MetricServiceClient()
- if not project_id:
- _, self.project_id = google.auth.default()
- else:
- self.project_id = project_id
- self.project_name = self.client.project_path(self.project_id)
- self._metric_descriptors = {}
- self._last_updated = {}
- self.unique_identifier = None
- if add_unique_identifier:
- self.unique_identifier = "{:08x}".format(
- random.randint(0, 16 ** 8)
- )
-
- @staticmethod
- def _get_monitored_resource(
- resource: Resource,
- ) -> Optional[MonitoredResource]:
- """Add Google resource specific information (e.g. instance id, region).
-
- See
- https://cloud.google.com/monitoring/custom-metrics/creating-metrics#custom-metric-resources
- for supported types
- Args:
- series: ProtoBuf TimeSeries
- """
-
- if resource.labels.get("cloud.provider") != "gcp":
- return None
- resource_type = resource.labels["gcp.resource_type"]
- if resource_type not in OT_RESOURCE_LABEL_TO_GCP:
- return None
- return MonitoredResource(
- type=resource_type,
- labels={
- gcp_label: str(resource.labels[ot_label])
- for ot_label, gcp_label in OT_RESOURCE_LABEL_TO_GCP[
- resource_type
- ].items()
- },
- )
-
- def _batch_write(self, series: TimeSeries) -> None:
- """ Cloud Monitoring allows writing up to 200 time series at once
-
- :param series: ProtoBuf TimeSeries
- :return:
- """
- write_ind = 0
- while write_ind < len(series):
- self.client.create_time_series(
- self.project_name,
- series[write_ind : write_ind + MAX_BATCH_WRITE],
- )
- write_ind += MAX_BATCH_WRITE
-
- def _get_metric_descriptor(
- self, record: MetricRecord
- ) -> Optional[MetricDescriptor]:
- """ We can map Metric to MetricDescriptor using Metric.name or
- MetricDescriptor.type. We create the MetricDescriptor if it doesn't
- exist already and cache it. Note that recreating MetricDescriptors is
- a no-op if it already exists.
-
- :param record:
- :return:
- """
- instrument = record.instrument
- descriptor_type = "custom.googleapis.com/OpenTelemetry/{}".format(
- instrument.name
- )
- if descriptor_type in self._metric_descriptors:
- return self._metric_descriptors[descriptor_type]
- descriptor = {
- "name": None,
- "type": descriptor_type,
- "display_name": instrument.name,
- "description": instrument.description,
- "labels": [],
- }
- for key, value in record.labels:
- if isinstance(value, str):
- descriptor["labels"].append(
- LabelDescriptor(key=key, value_type="STRING")
- )
- elif isinstance(value, bool):
- descriptor["labels"].append(
- LabelDescriptor(key=key, value_type="BOOL")
- )
- elif isinstance(value, int):
- descriptor["labels"].append(
- LabelDescriptor(key=key, value_type="INT64")
- )
- else:
- logger.warning(
- "Label value %s is not a string, bool or integer", value
- )
-
- if self.unique_identifier:
- descriptor["labels"].append(
- LabelDescriptor(key=UNIQUE_IDENTIFIER_KEY, value_type="STRING")
- )
-
- if isinstance(record.aggregator, SumAggregator):
- descriptor["metric_kind"] = MetricDescriptor.MetricKind.GAUGE
- else:
- logger.warning(
- "Unsupported aggregation type %s, ignoring it",
- type(record.aggregator).__name__,
- )
- return None
- if instrument.value_type == int:
- descriptor["value_type"] = MetricDescriptor.ValueType.INT64
- elif instrument.value_type == float:
- descriptor["value_type"] = MetricDescriptor.ValueType.DOUBLE
- proto_descriptor = MetricDescriptor(**descriptor)
- try:
- descriptor = self.client.create_metric_descriptor(
- self.project_name, proto_descriptor
- )
- # pylint: disable=broad-except
- except Exception as ex:
- logger.error(
- "Failed to create metric descriptor %s",
- proto_descriptor,
- exc_info=ex,
- )
- return None
- self._metric_descriptors[descriptor_type] = descriptor
- return descriptor
-
- def export(
- self, metric_records: Sequence[MetricRecord]
- ) -> "MetricsExportResult":
- all_series = []
- for record in metric_records:
- instrument = record.instrument
- metric_descriptor = self._get_metric_descriptor(record)
- if not metric_descriptor:
- continue
- series = TimeSeries(
- resource=self._get_monitored_resource(
- record.instrument.meter.resource
- )
- )
- series.metric.type = metric_descriptor.type
- for key, value in record.labels:
- series.metric.labels[key] = str(value)
-
- if self.unique_identifier:
- series.metric.labels[
- UNIQUE_IDENTIFIER_KEY
- ] = self.unique_identifier
-
- point = series.points.add()
- if instrument.value_type == int:
- point.value.int64_value = record.aggregator.checkpoint
- elif instrument.value_type == float:
- point.value.double_value = record.aggregator.checkpoint
- seconds, nanos = divmod(
- record.aggregator.last_update_timestamp, 1e9
- )
-
- # Cloud Monitoring API allows, for any combination of labels and
- # metric name, one update per WRITE_INTERVAL seconds
- updated_key = (metric_descriptor.type, record.labels)
- last_updated_seconds = self._last_updated.get(updated_key, 0)
- if seconds <= last_updated_seconds + WRITE_INTERVAL:
- continue
- self._last_updated[updated_key] = seconds
- point.interval.end_time.seconds = int(seconds)
- point.interval.end_time.nanos = int(nanos)
- all_series.append(series)
- try:
- self._batch_write(all_series)
- # pylint: disable=broad-except
- except Exception as ex:
- logger.error(
- "Error while writing to Cloud Monitoring", exc_info=ex
- )
- return MetricsExportResult.FAILURE
- return MetricsExportResult.SUCCESS
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py b/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py
deleted file mode 100644
index 8d3a82b3e54..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/src/opentelemetry/exporter/cloud_monitoring/version.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 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.11.dev0"
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/tests/__init__.py b/ext/opentelemetry-exporter-cloud-monitoring/tests/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py b/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
deleted file mode 100644
index bc695f6d1f6..00000000000
--- a/ext/opentelemetry-exporter-cloud-monitoring/tests/test_cloud_monitoring.py
+++ /dev/null
@@ -1,436 +0,0 @@
-# Copyright 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 unittest
-from unittest import mock
-
-from google.api.label_pb2 import LabelDescriptor
-from google.api.metric_pb2 import MetricDescriptor
-from google.api.monitored_resource_pb2 import MonitoredResource
-from google.cloud.monitoring_v3.proto.metric_pb2 import TimeSeries
-
-from opentelemetry.exporter.cloud_monitoring import (
- MAX_BATCH_WRITE,
- UNIQUE_IDENTIFIER_KEY,
- WRITE_INTERVAL,
- CloudMonitoringMetricsExporter,
-)
-from opentelemetry.sdk.metrics.export import MetricRecord
-from opentelemetry.sdk.metrics.export.aggregate import SumAggregator
-from opentelemetry.sdk.resources import Resource
-
-
-class UnsupportedAggregator:
- pass
-
-
-class MockMeter:
- def __init__(self, resource=Resource.create_empty()):
- self.resource = resource
-
-
-class MockMetric:
- def __init__(
- self,
- name="name",
- description="description",
- value_type=int,
- meter=None,
- ):
- self.name = name
- self.description = description
- self.value_type = value_type
- self.meter = meter or MockMeter()
-
-
-# pylint: disable=protected-access
-# pylint can't deal with ProtoBuf object members
-# pylint: disable=no-member
-
-
-class TestCloudMonitoringMetricsExporter(unittest.TestCase):
- def setUp(self):
- self.client_patcher = mock.patch(
- "opentelemetry.exporter.cloud_monitoring.MetricServiceClient"
- )
- self.client_patcher.start()
- self.project_id = "PROJECT"
- self.project_name = "PROJECT_NAME"
-
- def tearDown(self):
- self.client_patcher.stop()
-
- def test_constructor_default(self):
- exporter = CloudMonitoringMetricsExporter(self.project_id)
- self.assertEqual(exporter.project_id, self.project_id)
-
- def test_constructor_explicit(self):
- client = mock.Mock()
- exporter = CloudMonitoringMetricsExporter(
- self.project_id, client=client
- )
-
- self.assertIs(exporter.client, client)
- self.assertEqual(exporter.project_id, self.project_id)
-
- def test_batch_write(self):
- client = mock.Mock()
- exporter = CloudMonitoringMetricsExporter(
- project_id=self.project_id, client=client
- )
- exporter.project_name = self.project_name
- exporter._batch_write(range(2 * MAX_BATCH_WRITE + 1))
- client.create_time_series.assert_has_calls(
- [
- mock.call(self.project_name, range(MAX_BATCH_WRITE)),
- mock.call(
- self.project_name,
- range(MAX_BATCH_WRITE, 2 * MAX_BATCH_WRITE),
- ),
- mock.call(
- self.project_name,
- range(2 * MAX_BATCH_WRITE, 2 * MAX_BATCH_WRITE + 1),
- ),
- ]
- )
-
- exporter._batch_write(range(MAX_BATCH_WRITE))
- client.create_time_series.assert_has_calls(
- [mock.call(self.project_name, range(MAX_BATCH_WRITE))]
- )
-
- exporter._batch_write(range(MAX_BATCH_WRITE - 1))
- client.create_time_series.assert_has_calls(
- [mock.call(self.project_name, range(MAX_BATCH_WRITE - 1))]
- )
-
- def test_get_metric_descriptor(self):
- client = mock.Mock()
- exporter = CloudMonitoringMetricsExporter(
- project_id=self.project_id, client=client
- )
- exporter.project_name = self.project_name
-
- self.assertIsNone(
- exporter._get_metric_descriptor(
- MetricRecord(MockMetric(), (), UnsupportedAggregator())
- )
- )
-
- record = MetricRecord(
- MockMetric(), (("label1", "value1"),), SumAggregator(),
- )
- metric_descriptor = exporter._get_metric_descriptor(record)
- client.create_metric_descriptor.assert_called_with(
- self.project_name,
- MetricDescriptor(
- **{
- "name": None,
- "type": "custom.googleapis.com/OpenTelemetry/name",
- "display_name": "name",
- "description": "description",
- "labels": [
- LabelDescriptor(key="label1", value_type="STRING")
- ],
- "metric_kind": "GAUGE",
- "value_type": "INT64",
- }
- ),
- )
-
- # Getting a cached metric descriptor shouldn't use another call
- cached_metric_descriptor = exporter._get_metric_descriptor(record)
- self.assertEqual(client.create_metric_descriptor.call_count, 1)
- self.assertEqual(metric_descriptor, cached_metric_descriptor)
-
- # Drop labels with values that aren't string, int or bool
- exporter._get_metric_descriptor(
- MetricRecord(
- MockMetric(name="name2", value_type=float),
- (
- ("label1", "value1"),
- ("label2", dict()),
- ("label3", 3),
- ("label4", False),
- ),
- SumAggregator(),
- )
- )
- client.create_metric_descriptor.assert_called_with(
- self.project_name,
- MetricDescriptor(
- **{
- "name": None,
- "type": "custom.googleapis.com/OpenTelemetry/name2",
- "display_name": "name2",
- "description": "description",
- "labels": [
- LabelDescriptor(key="label1", value_type="STRING"),
- LabelDescriptor(key="label3", value_type="INT64"),
- LabelDescriptor(key="label4", value_type="BOOL"),
- ],
- "metric_kind": "GAUGE",
- "value_type": "DOUBLE",
- }
- ),
- )
-
- def test_export(self):
- client = mock.Mock()
- exporter = CloudMonitoringMetricsExporter(
- project_id=self.project_id, client=client
- )
- exporter.project_name = self.project_name
-
- exporter.export(
- [
- MetricRecord(
- MockMetric(),
- (("label1", "value1"),),
- UnsupportedAggregator(),
- )
- ]
- )
- client.create_time_series.assert_not_called()
-
- client.create_metric_descriptor.return_value = MetricDescriptor(
- **{
- "name": None,
- "type": "custom.googleapis.com/OpenTelemetry/name",
- "display_name": "name",
- "description": "description",
- "labels": [
- LabelDescriptor(key="label1", value_type="STRING"),
- LabelDescriptor(key="label2", value_type="INT64"),
- ],
- "metric_kind": "GAUGE",
- "value_type": "DOUBLE",
- }
- )
-
- resource = Resource(
- labels={
- "cloud.account.id": 123,
- "host.id": "host",
- "cloud.zone": "US",
- "cloud.provider": "gcp",
- "extra_info": "extra",
- "gcp.resource_type": "gce_instance",
- "not_gcp_resource": "value",
- }
- )
-
- sum_agg_one = SumAggregator()
- sum_agg_one.checkpoint = 1
- sum_agg_one.last_update_timestamp = (WRITE_INTERVAL + 1) * 1e9
- exporter.export(
- [
- MetricRecord(
- MockMetric(meter=MockMeter(resource=resource)),
- (("label1", "value1"), ("label2", 1),),
- sum_agg_one,
- ),
- MetricRecord(
- MockMetric(meter=MockMeter(resource=resource)),
- (("label1", "value2"), ("label2", 2),),
- sum_agg_one,
- ),
- ]
- )
- expected_resource = MonitoredResource(
- type="gce_instance",
- labels={"project_id": "123", "instance_id": "host", "zone": "US"},
- )
-
- series1 = TimeSeries(resource=expected_resource)
- series1.metric.type = "custom.googleapis.com/OpenTelemetry/name"
- series1.metric.labels["label1"] = "value1"
- series1.metric.labels["label2"] = "1"
- point = series1.points.add()
- point.value.int64_value = 1
- point.interval.end_time.seconds = WRITE_INTERVAL + 1
- point.interval.end_time.nanos = 0
-
- series2 = TimeSeries(resource=expected_resource)
- series2.metric.type = "custom.googleapis.com/OpenTelemetry/name"
- series2.metric.labels["label1"] = "value2"
- series2.metric.labels["label2"] = "2"
- point = series2.points.add()
- point.value.int64_value = 1
- point.interval.end_time.seconds = WRITE_INTERVAL + 1
- point.interval.end_time.nanos = 0
- client.create_time_series.assert_has_calls(
- [mock.call(self.project_name, [series1, series2])]
- )
-
- # Attempting to export too soon after another export with the exact
- # same labels leads to it being dropped
-
- sum_agg_two = SumAggregator()
- sum_agg_two.checkpoint = 1
- sum_agg_two.last_update_timestamp = (WRITE_INTERVAL + 2) * 1e9
- exporter.export(
- [
- MetricRecord(
- MockMetric(),
- (("label1", "value1"), ("label2", 1),),
- sum_agg_two,
- ),
- MetricRecord(
- MockMetric(),
- (("label1", "value2"), ("label2", 2),),
- sum_agg_two,
- ),
- ]
- )
- self.assertEqual(client.create_time_series.call_count, 1)
-
- # But exporting with different labels is fine
- sum_agg_two.checkpoint = 2
- exporter.export(
- [
- MetricRecord(
- MockMetric(),
- (("label1", "changed_label"), ("label2", 2),),
- sum_agg_two,
- ),
- ]
- )
- series3 = TimeSeries()
- series3.metric.type = "custom.googleapis.com/OpenTelemetry/name"
- series3.metric.labels["label1"] = "changed_label"
- series3.metric.labels["label2"] = "2"
- point = series3.points.add()
- point.value.int64_value = 2
- point.interval.end_time.seconds = WRITE_INTERVAL + 2
- point.interval.end_time.nanos = 0
- client.create_time_series.assert_has_calls(
- [
- mock.call(self.project_name, [series1, series2]),
- mock.call(self.project_name, [series3]),
- ]
- )
-
- def test_unique_identifier(self):
- client = mock.Mock()
- exporter1 = CloudMonitoringMetricsExporter(
- project_id=self.project_id,
- client=client,
- add_unique_identifier=True,
- )
- exporter2 = CloudMonitoringMetricsExporter(
- project_id=self.project_id,
- client=client,
- add_unique_identifier=True,
- )
- exporter1.project_name = self.project_name
- exporter2.project_name = self.project_name
-
- client.create_metric_descriptor.return_value = MetricDescriptor(
- **{
- "name": None,
- "type": "custom.googleapis.com/OpenTelemetry/name",
- "display_name": "name",
- "description": "description",
- "labels": [
- LabelDescriptor(
- key=UNIQUE_IDENTIFIER_KEY, value_type="STRING"
- ),
- ],
- "metric_kind": "GAUGE",
- "value_type": "DOUBLE",
- }
- )
-
- sum_agg_one = SumAggregator()
- sum_agg_one.update(1)
- metric_record = MetricRecord(MockMetric(), (), sum_agg_one,)
- exporter1.export([metric_record])
- exporter2.export([metric_record])
-
- (
- first_call,
- second_call,
- ) = client.create_metric_descriptor.call_args_list
- self.assertEqual(first_call[0][1].labels[0].key, UNIQUE_IDENTIFIER_KEY)
- self.assertEqual(
- second_call[0][1].labels[0].key, UNIQUE_IDENTIFIER_KEY
- )
-
- first_call, second_call = client.create_time_series.call_args_list
- self.assertNotEqual(
- first_call[0][1][0].metric.labels[UNIQUE_IDENTIFIER_KEY],
- second_call[0][1][0].metric.labels[UNIQUE_IDENTIFIER_KEY],
- )
-
- def test_extract_resources(self):
- exporter = CloudMonitoringMetricsExporter(project_id=self.project_id)
-
- self.assertIsNone(
- exporter._get_monitored_resource(Resource.create_empty())
- )
- resource = Resource(
- labels={
- "cloud.account.id": 123,
- "host.id": "host",
- "cloud.zone": "US",
- "cloud.provider": "gcp",
- "extra_info": "extra",
- "gcp.resource_type": "gce_instance",
- "not_gcp_resource": "value",
- }
- )
- expected_extract = MonitoredResource(
- type="gce_instance",
- labels={"project_id": "123", "instance_id": "host", "zone": "US"},
- )
- self.assertEqual(
- exporter._get_monitored_resource(resource), expected_extract
- )
-
- resource = Resource(
- labels={
- "cloud.account.id": "123",
- "host.id": "host",
- "extra_info": "extra",
- "not_gcp_resource": "value",
- "gcp.resource_type": "gce_instance",
- "cloud.provider": "gcp",
- }
- )
- # Should throw when passed a malformed GCP resource dict
- self.assertRaises(KeyError, exporter._get_monitored_resource, resource)
-
- resource = Resource(
- labels={
- "cloud.account.id": "123",
- "host.id": "host",
- "extra_info": "extra",
- "not_gcp_resource": "value",
- "gcp.resource_type": "unsupported_gcp_resource",
- "cloud.provider": "gcp",
- }
- )
- self.assertIsNone(exporter._get_monitored_resource(resource))
-
- resource = Resource(
- labels={
- "cloud.account.id": "123",
- "host.id": "host",
- "extra_info": "extra",
- "not_gcp_resource": "value",
- "cloud.provider": "aws",
- }
- )
- self.assertIsNone(exporter._get_monitored_resource(resource))
diff --git a/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md b/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
deleted file mode 100644
index 22eac3e4bf9..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/CHANGELOG.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Changelog
-
-## Unreleased
-
-- Add support for resources and resource detector
- ([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
-
-## Version 0.10b0
-
-Released 2020-06-23
-
-- Add g.co/agent label for Google internal metrics tracking
- ([#833](https://github.com/open-telemetry/opentelemetry-python/pull/833))
-- Adding trouble-shooting tips
- ([#827](https://github.com/open-telemetry/opentelemetry-python/pull/827))
-- Added Cloud Trace context propagation
- ([#819](https://github.com/open-telemetry/opentelemetry-python/pull/819))
-- Added tests to tox coverage files
- ([#804](https://github.com/open-telemetry/opentelemetry-python/pull/804))
-
-## 0.9b0
-
-Released 2020-06-10
-
-- Initial release
diff --git a/ext/opentelemetry-exporter-cloud-trace/LICENSE b/ext/opentelemetry-exporter-cloud-trace/LICENSE
deleted file mode 100644
index 261eeb9e9f8..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/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/ext/opentelemetry-exporter-cloud-trace/MANIFEST.in b/ext/opentelemetry-exporter-cloud-trace/MANIFEST.in
deleted file mode 100644
index aed3e33273b..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/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/ext/opentelemetry-exporter-cloud-trace/README.rst b/ext/opentelemetry-exporter-cloud-trace/README.rst
deleted file mode 100644
index 001f163007e..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/README.rst
+++ /dev/null
@@ -1,43 +0,0 @@
-OpenTelemetry Cloud Trace Exporters
-===================================
-
-This library provides classes for exporting trace data to Google Cloud Trace.
-
-Installation
-------------
-
-::
-
- pip install opentelemetry-exporter-cloud-trace
-
-Usage
------
-
-.. code:: python
-
- 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(
- project_id='my-gcloud-project',
- )
- 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!')
-
-
-
-References
-----------
-
-* `Cloud Trace `_
-* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-exporter-cloud-trace/setup.cfg b/ext/opentelemetry-exporter-cloud-trace/setup.cfg
deleted file mode 100644
index 4437f40fdd3..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/setup.cfg
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright 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-exporter-cloud-trace
-description = Cloud Trace integration 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-exporter-cloud-trace
-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
-
-[options]
-python_requires = >=3.4
-package_dir=
- =src
-packages=find_namespace:
-install_requires =
- requests
- opentelemetry-api
- opentelemetry-sdk
- google-cloud-trace
-
-[options.packages.find]
-where = src
-
-[options.extras_require]
-test =
diff --git a/ext/opentelemetry-exporter-cloud-trace/setup.py b/ext/opentelemetry-exporter-cloud-trace/setup.py
deleted file mode 100644
index 332cf41d01c..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/setup.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 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", "exporter", "cloud_trace", "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-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
deleted file mode 100644
index ea36d227275..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/__init__.py
+++ /dev/null
@@ -1,382 +0,0 @@
-# Copyright 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.
-
-"""Cloud Trace Span Exporter for OpenTelemetry. Uses Cloud Trace Client's REST
-API to export traces and spans for viewing in Cloud Trace.
-
-Usage
------
-
-.. code-block:: python
-
- 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!")
-
-
-API
----
-"""
-
-import logging
-from typing import Any, Dict, List, Optional, Sequence, Tuple
-
-import google.auth
-import pkg_resources
-from google.cloud.trace_v2 import TraceServiceClient
-from google.cloud.trace_v2.proto.trace_pb2 import AttributeValue
-from google.cloud.trace_v2.proto.trace_pb2 import Span as ProtoSpan
-from google.cloud.trace_v2.proto.trace_pb2 import TruncatableString
-from google.rpc.status_pb2 import Status
-
-import opentelemetry.trace as trace_api
-from opentelemetry.exporter.cloud_trace.version import (
- __version__ as cloud_trace_version,
-)
-from opentelemetry.sdk.resources import Resource
-from opentelemetry.sdk.trace import Event
-from opentelemetry.sdk.trace.export import Span, SpanExporter, SpanExportResult
-from opentelemetry.sdk.util import BoundedDict
-from opentelemetry.trace.span import (
- get_hexadecimal_span_id,
- get_hexadecimal_trace_id,
-)
-from opentelemetry.util import types
-
-logger = logging.getLogger(__name__)
-
-MAX_NUM_LINKS = 128
-MAX_NUM_EVENTS = 32
-MAX_EVENT_ATTRS = 4
-MAX_LINK_ATTRS = 32
-MAX_SPAN_ATTRS = 32
-
-
-class CloudTraceSpanExporter(SpanExporter):
- """Cloud Trace span exporter for OpenTelemetry.
-
- Args:
- project_id: ID of the cloud project that will receive the traces.
- client: Cloud Trace client. If not given, will be taken from gcloud
- default credentials
- """
-
- def __init__(
- self, project_id=None, client=None,
- ):
- self.client = client or TraceServiceClient()
- if not project_id:
- _, self.project_id = google.auth.default()
- else:
- self.project_id = project_id
-
- def export(self, spans: Sequence[Span]) -> SpanExportResult:
- """Export the spans to Cloud Trace.
-
- See: https://cloud.google.com/trace/docs/reference/v2/rest/v2/projects.traces/batchWrite
-
- Args:
- spans: Tuple of spans to export
- """
- cloud_trace_spans = []
- for span in self._translate_to_cloud_trace(spans):
- try:
- cloud_trace_spans.append(self.client.create_span(**span))
- # pylint: disable=broad-except
- except Exception as ex:
- logger.error("Error when creating span %s", span, exc_info=ex)
- try:
- self.client.batch_write_spans(
- "projects/{}".format(self.project_id), cloud_trace_spans,
- )
- # pylint: disable=broad-except
- except Exception as ex:
- logger.error("Error while writing to Cloud Trace", exc_info=ex)
- return SpanExportResult.FAILURE
-
- return SpanExportResult.SUCCESS
-
- def _translate_to_cloud_trace(
- self, spans: Sequence[Span]
- ) -> List[Dict[str, Any]]:
- """Translate the spans to Cloud Trace format.
-
- Args:
- spans: Tuple of spans to convert
- """
-
- cloud_trace_spans = []
-
- for span in spans:
- ctx = span.get_context()
- trace_id = get_hexadecimal_trace_id(ctx.trace_id)
- span_id = get_hexadecimal_span_id(ctx.span_id)
- span_name = "projects/{}/traces/{}/spans/{}".format(
- self.project_id, trace_id, span_id
- )
-
- parent_id = None
- if span.parent:
- parent_id = get_hexadecimal_span_id(span.parent.span_id)
-
- start_time = _get_time_from_ns(span.start_time)
- end_time = _get_time_from_ns(span.end_time)
-
- if len(span.attributes) > MAX_SPAN_ATTRS:
- logger.warning(
- "Span has more then %s attributes, some will be truncated",
- MAX_SPAN_ATTRS,
- )
-
- # Span does not support a MonitoredResource object. We put the
- # information into labels instead.
- resources_and_attrs = _extract_resources(span.resource)
- resources_and_attrs.update(span.attributes)
-
- cloud_trace_spans.append(
- {
- "name": span_name,
- "span_id": span_id,
- "display_name": _get_truncatable_str_object(
- span.name, 128
- ),
- "start_time": start_time,
- "end_time": end_time,
- "parent_span_id": parent_id,
- "attributes": _extract_attributes(
- resources_and_attrs,
- MAX_SPAN_ATTRS,
- add_agent_attr=True,
- ),
- "links": _extract_links(span.links),
- "status": _extract_status(span.status),
- "time_events": _extract_events(span.events),
- }
- )
- # TODO: Leverage more of the Cloud Trace API, e.g.
- # same_process_as_parent_span and child_span_count
-
- return cloud_trace_spans
-
- def shutdown(self):
- pass
-
-
-def _get_time_from_ns(nanoseconds: int) -> Dict:
- """Given epoch nanoseconds, split into epoch milliseconds and remaining
- nanoseconds"""
- if not nanoseconds:
- return None
- seconds, nanos = divmod(nanoseconds, 1e9)
- return {"seconds": int(seconds), "nanos": int(nanos)}
-
-
-def _get_truncatable_str_object(str_to_convert: str, max_length: int):
- """Truncate the string if it exceeds the length limit and record the
- truncated bytes count."""
- truncated, truncated_byte_count = _truncate_str(str_to_convert, max_length)
-
- return TruncatableString(
- value=truncated, truncated_byte_count=truncated_byte_count
- )
-
-
-def _truncate_str(str_to_check: str, limit: int) -> Tuple[str, int]:
- """Check the length of a string. If exceeds limit, then truncate it."""
- encoded = str_to_check.encode("utf-8")
- truncated_str = encoded[:limit].decode("utf-8", errors="ignore")
- return truncated_str, len(encoded) - len(truncated_str.encode("utf-8"))
-
-
-def _extract_status(status: trace_api.Status) -> Optional[Status]:
- """Convert a Status object to protobuf object."""
- if not status:
- return None
- status_dict = {"details": None, "code": status.canonical_code.value}
-
- if status.description is not None:
- status_dict["message"] = status.description
-
- return Status(**status_dict)
-
-
-def _extract_links(links: Sequence[trace_api.Link]) -> ProtoSpan.Links:
- """Convert span.links"""
- if not links:
- return None
- extracted_links = []
- dropped_links = 0
- if len(links) > MAX_NUM_LINKS:
- logger.warning(
- "Exporting more then %s links, some will be truncated",
- MAX_NUM_LINKS,
- )
- dropped_links = len(links) - MAX_NUM_LINKS
- links = links[:MAX_NUM_LINKS]
- for link in links:
- if len(link.attributes) > MAX_LINK_ATTRS:
- logger.warning(
- "Link has more then %s attributes, some will be truncated",
- MAX_LINK_ATTRS,
- )
- trace_id = get_hexadecimal_trace_id(link.context.trace_id)
- span_id = get_hexadecimal_span_id(link.context.span_id)
- extracted_links.append(
- {
- "trace_id": trace_id,
- "span_id": span_id,
- "type": "TYPE_UNSPECIFIED",
- "attributes": _extract_attributes(
- link.attributes, MAX_LINK_ATTRS
- ),
- }
- )
- return ProtoSpan.Links(
- link=extracted_links, dropped_links_count=dropped_links
- )
-
-
-def _extract_events(events: Sequence[Event]) -> ProtoSpan.TimeEvents:
- """Convert span.events to dict."""
- if not events:
- return None
- logs = []
- dropped_annontations = 0
- if len(events) > MAX_NUM_EVENTS:
- logger.warning(
- "Exporting more then %s annotations, some will be truncated",
- MAX_NUM_EVENTS,
- )
- dropped_annontations = len(events) - MAX_NUM_EVENTS
- events = events[:MAX_NUM_EVENTS]
- for event in events:
- if len(event.attributes) > MAX_EVENT_ATTRS:
- logger.warning(
- "Event %s has more then %s attributes, some will be truncated",
- event.name,
- MAX_EVENT_ATTRS,
- )
- logs.append(
- {
- "time": _get_time_from_ns(event.timestamp),
- "annotation": {
- "description": _get_truncatable_str_object(
- event.name, 256
- ),
- "attributes": _extract_attributes(
- event.attributes, MAX_EVENT_ATTRS
- ),
- },
- }
- )
- return ProtoSpan.TimeEvents(
- time_event=logs,
- dropped_annotations_count=dropped_annontations,
- dropped_message_events_count=0,
- )
-
-
-def _strip_characters(ot_version):
- return "".join(filter(lambda x: x.isdigit() or x == ".", ot_version))
-
-
-OT_RESOURCE_LABEL_TO_GCP = {
- "gce_instance": {
- "cloud.account.id": "project_id",
- "host.id": "instance_id",
- "cloud.zone": "zone",
- }
-}
-
-
-def _extract_resources(resource: Resource) -> Dict[str, str]:
- if resource.labels.get("cloud.provider") != "gcp":
- return {}
- resource_type = resource.labels["gcp.resource_type"]
- if resource_type not in OT_RESOURCE_LABEL_TO_GCP:
- return {}
- return {
- "g.co/r/{}/{}".format(resource_type, gcp_resource_key,): str(
- resource.labels[ot_resource_key]
- )
- for ot_resource_key, gcp_resource_key in OT_RESOURCE_LABEL_TO_GCP[
- resource_type
- ].items()
- }
-
-
-def _extract_attributes(
- attrs: types.Attributes,
- num_attrs_limit: int,
- add_agent_attr: bool = False,
-) -> ProtoSpan.Attributes:
- """Convert span.attributes to dict."""
- attributes_dict = BoundedDict(num_attrs_limit)
- invalid_value_dropped_count = 0
- for key, value in attrs.items():
- key = _truncate_str(key, 128)[0]
- value = _format_attribute_value(value)
-
- if value:
- attributes_dict[key] = value
- else:
- invalid_value_dropped_count += 1
- if add_agent_attr:
- attributes_dict["g.co/agent"] = _format_attribute_value(
- "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
- _strip_characters(
- pkg_resources.get_distribution("opentelemetry-sdk").version
- ),
- _strip_characters(cloud_trace_version),
- )
- )
- return ProtoSpan.Attributes(
- attribute_map=attributes_dict,
- dropped_attributes_count=attributes_dict.dropped
- + invalid_value_dropped_count,
- )
-
-
-def _format_attribute_value(value: types.AttributeValue) -> AttributeValue:
- if isinstance(value, bool):
- value_type = "bool_value"
- elif isinstance(value, int):
- value_type = "int_value"
- elif isinstance(value, str):
- value_type = "string_value"
- value = _get_truncatable_str_object(value, 256)
- elif isinstance(value, float):
- value_type = "string_value"
- value = _get_truncatable_str_object("{:0.4f}".format(value), 256)
- else:
- logger.warning(
- "ignoring attribute value %s of type %s. Values type must be one "
- "of bool, int, string or float",
- value,
- type(value),
- )
- return None
-
- return AttributeValue(**{value_type: value})
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py
deleted file mode 100644
index 3f00c66d690..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/cloud_trace_propagator.py
+++ /dev/null
@@ -1,89 +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 re
-import typing
-
-import opentelemetry.trace as trace
-from opentelemetry.context.context import Context
-from opentelemetry.trace.propagation import httptextformat
-from opentelemetry.trace.span import (
- SpanContext,
- TraceFlags,
- get_hexadecimal_trace_id,
-)
-
-_TRACE_CONTEXT_HEADER_NAME = "X-Cloud-Trace-Context"
-_TRACE_CONTEXT_HEADER_FORMAT = r"(?P[0-9a-f]{32})\/(?P[\d]{1,20});o=(?P\d+)"
-_TRACE_CONTEXT_HEADER_RE = re.compile(_TRACE_CONTEXT_HEADER_FORMAT)
-
-
-class CloudTraceFormatPropagator(httptextformat.HTTPTextFormat):
- """This class is for injecting into a carrier the SpanContext in Google
- Cloud format, or extracting the SpanContext from a carrier using Google
- Cloud format.
- """
-
- def extract(
- self,
- get_from_carrier: httptextformat.Getter[
- httptextformat.HTTPTextFormatT
- ],
- carrier: httptextformat.HTTPTextFormatT,
- context: typing.Optional[Context] = None,
- ) -> Context:
- header = get_from_carrier(carrier, _TRACE_CONTEXT_HEADER_NAME)
-
- if not header:
- return trace.set_span_in_context(trace.INVALID_SPAN, context)
-
- match = re.fullmatch(_TRACE_CONTEXT_HEADER_RE, header[0])
- if match is None:
- return trace.set_span_in_context(trace.INVALID_SPAN, context)
-
- trace_id = match.group("trace_id")
- span_id = match.group("span_id")
- trace_options = match.group("trace_flags")
-
- if trace_id == "0" * 32 or int(span_id) == 0:
- return trace.set_span_in_context(trace.INVALID_SPAN, context)
-
- span_context = SpanContext(
- trace_id=int(trace_id, 16),
- span_id=int(span_id),
- is_remote=True,
- trace_flags=TraceFlags(trace_options),
- )
- return trace.set_span_in_context(
- trace.DefaultSpan(span_context), context
- )
-
- def inject(
- self,
- set_in_carrier: httptextformat.Setter[httptextformat.HTTPTextFormatT],
- carrier: httptextformat.HTTPTextFormatT,
- context: typing.Optional[Context] = None,
- ) -> None:
- span = trace.get_current_span(context)
- span_context = span.get_context()
- if span_context == trace.INVALID_SPAN_CONTEXT:
- return
-
- header = "{}/{};o={}".format(
- get_hexadecimal_trace_id(span_context.trace_id),
- span_context.span_id,
- int(span_context.trace_flags.sampled),
- )
- set_in_carrier(carrier, _TRACE_CONTEXT_HEADER_NAME, header)
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py
deleted file mode 100644
index 8d3a82b3e54..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/exporter/cloud_trace/version.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright 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.11.dev0"
diff --git a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py b/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py
deleted file mode 100644
index 5dbf7627f81..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/src/opentelemetry/tools/resource_detector.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import requests
-
-from opentelemetry.context import attach, detach, set_value
-from opentelemetry.sdk.resources import Resource, ResourceDetector
-
-_GCP_METADATA_URL = (
- "http://metadata.google.internal/computeMetadata/v1/?recursive=true"
-)
-_GCP_METADATA_URL_HEADER = {"Metadata-Flavor": "Google"}
-
-
-def get_gce_resources():
- """ Resource finder for common GCE attributes
-
- See: https://cloud.google.com/compute/docs/storing-retrieving-metadata
- """
- token = attach(set_value("suppress_instrumentation", True))
- all_metadata = requests.get(
- _GCP_METADATA_URL, headers=_GCP_METADATA_URL_HEADER
- ).json()
- detach(token)
- gce_resources = {
- "host.id": all_metadata["instance"]["id"],
- "cloud.account.id": all_metadata["project"]["projectId"],
- "cloud.zone": all_metadata["instance"]["zone"].split("/")[-1],
- "cloud.provider": "gcp",
- "gcp.resource_type": "gce_instance",
- }
- return gce_resources
-
-
-_RESOURCE_FINDERS = [get_gce_resources]
-
-
-class GoogleCloudResourceDetector(ResourceDetector):
- def __init__(self, raise_on_error=False):
- super().__init__(raise_on_error)
- self.cached = False
- self.gcp_resources = {}
-
- def detect(self) -> "Resource":
- if not self.cached:
- self.cached = True
- for resource_finder in _RESOURCE_FINDERS:
- found_resources = resource_finder()
- self.gcp_resources.update(found_resources)
- return Resource(self.gcp_resources)
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/__init__.py b/ext/opentelemetry-exporter-cloud-trace/tests/__init__.py
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
deleted file mode 100644
index 7400207ff46..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_exporter.py
+++ /dev/null
@@ -1,508 +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 unittest
-from unittest import mock
-
-import pkg_resources
-from google.cloud.trace_v2.proto.trace_pb2 import AttributeValue
-from google.cloud.trace_v2.proto.trace_pb2 import Span as ProtoSpan
-from google.cloud.trace_v2.proto.trace_pb2 import TruncatableString
-from google.rpc.status_pb2 import Status
-
-from opentelemetry.exporter.cloud_trace import (
- MAX_EVENT_ATTRS,
- MAX_LINK_ATTRS,
- MAX_NUM_EVENTS,
- MAX_NUM_LINKS,
- CloudTraceSpanExporter,
- _extract_attributes,
- _extract_events,
- _extract_links,
- _extract_resources,
- _extract_status,
- _format_attribute_value,
- _strip_characters,
- _truncate_str,
-)
-from opentelemetry.exporter.cloud_trace.version import (
- __version__ as cloud_trace_version,
-)
-from opentelemetry.sdk.resources import Resource
-from opentelemetry.sdk.trace import Event
-from opentelemetry.sdk.trace.export import Span
-from opentelemetry.trace import Link, SpanContext, SpanKind
-from opentelemetry.trace.status import Status as SpanStatus
-from opentelemetry.trace.status import StatusCanonicalCode
-
-
-class TestCloudTraceSpanExporter(unittest.TestCase):
- def setUp(self):
- self.client_patcher = mock.patch(
- "opentelemetry.exporter.cloud_trace.TraceServiceClient"
- )
- self.client_patcher.start()
- self.project_id = "PROJECT"
- self.attributes_variety_pack = {
- "str_key": "str_value",
- "bool_key": False,
- "double_key": 1.421,
- "int_key": 123,
- }
- self.extracted_attributes_variety_pack = ProtoSpan.Attributes(
- attribute_map={
- "str_key": AttributeValue(
- string_value=TruncatableString(
- value="str_value", truncated_byte_count=0
- )
- ),
- "bool_key": AttributeValue(bool_value=False),
- "double_key": AttributeValue(
- string_value=TruncatableString(
- value="1.4210", truncated_byte_count=0
- )
- ),
- "int_key": AttributeValue(int_value=123),
- }
- )
-
- def tearDown(self):
- self.client_patcher.stop()
-
- def test_constructor_default(self):
- exporter = CloudTraceSpanExporter(self.project_id)
- self.assertEqual(exporter.project_id, self.project_id)
-
- def test_constructor_explicit(self):
- client = mock.Mock()
- exporter = CloudTraceSpanExporter(self.project_id, client=client)
-
- self.assertIs(exporter.client, client)
- self.assertEqual(exporter.project_id, self.project_id)
-
- def test_export(self):
- trace_id = "6e0c63257de34c92bf9efcd03927272e"
- span_id = "95bb5edabd45950f"
- resource_info = Resource(
- {
- "cloud.account.id": 123,
- "host.id": "host",
- "cloud.zone": "US",
- "cloud.provider": "gcp",
- "gcp.resource_type": "gce_instance",
- }
- )
- span_datas = [
- Span(
- name="span_name",
- context=SpanContext(
- trace_id=int(trace_id, 16),
- span_id=int(span_id, 16),
- is_remote=False,
- ),
- parent=None,
- kind=SpanKind.INTERNAL,
- resource=resource_info,
- attributes={"attr_key": "attr_value"},
- )
- ]
-
- cloud_trace_spans = {
- "name": "projects/{}/traces/{}/spans/{}".format(
- self.project_id, trace_id, span_id
- ),
- "span_id": span_id,
- "parent_span_id": None,
- "display_name": TruncatableString(
- value="span_name", truncated_byte_count=0
- ),
- "attributes": ProtoSpan.Attributes(
- attribute_map={
- "g.co/r/gce_instance/zone": _format_attribute_value("US"),
- "g.co/r/gce_instance/instance_id": _format_attribute_value(
- "host"
- ),
- "g.co/r/gce_instance/project_id": _format_attribute_value(
- "123"
- ),
- "g.co/agent": _format_attribute_value(
- "opentelemetry-python {}; google-cloud-trace-exporter {}".format(
- _strip_characters(
- pkg_resources.get_distribution(
- "opentelemetry-sdk"
- ).version
- ),
- _strip_characters(cloud_trace_version),
- )
- ),
- "attr_key": _format_attribute_value("attr_value"),
- }
- ),
- "links": None,
- "status": None,
- "time_events": None,
- "start_time": None,
- "end_time": None,
- }
-
- client = mock.Mock()
-
- exporter = CloudTraceSpanExporter(self.project_id, client=client)
-
- exporter.export(span_datas)
-
- client.create_span.assert_called_with(**cloud_trace_spans)
- self.assertTrue(client.create_span.called)
-
- def test_extract_status(self):
- self.assertIsNone(_extract_status(None))
- self.assertEqual(
- _extract_status(SpanStatus(canonical_code=StatusCanonicalCode.OK)),
- Status(details=None, code=0),
- )
- self.assertEqual(
- _extract_status(
- SpanStatus(
- canonical_code=StatusCanonicalCode.UNKNOWN,
- description="error_desc",
- )
- ),
- Status(details=None, code=2, message="error_desc"),
- )
-
- def test_extract_attributes(self):
- self.assertEqual(
- _extract_attributes({}, 4), ProtoSpan.Attributes(attribute_map={})
- )
- self.assertEqual(
- _extract_attributes(self.attributes_variety_pack, 4),
- self.extracted_attributes_variety_pack,
- )
- # Test ignoring attributes with illegal value type
- self.assertEqual(
- _extract_attributes({"illegal_attribute_value": dict()}, 4),
- ProtoSpan.Attributes(attribute_map={}, dropped_attributes_count=1),
- )
-
- too_many_attrs = {}
- for attr_key in range(5):
- too_many_attrs[str(attr_key)] = 0
- proto_attrs = _extract_attributes(too_many_attrs, 4)
- self.assertEqual(proto_attrs.dropped_attributes_count, 1)
-
- def test_extract_events(self):
- self.assertIsNone(_extract_events([]))
- time_in_ns1 = 1589919268850900051
- time_in_ms_and_ns1 = {"seconds": 1589919268, "nanos": 850899968}
- time_in_ns2 = 1589919438550020326
- time_in_ms_and_ns2 = {"seconds": 1589919438, "nanos": 550020352}
- event1 = Event(
- name="event1",
- attributes=self.attributes_variety_pack,
- timestamp=time_in_ns1,
- )
- event2 = Event(
- name="event2",
- attributes={"illegal_attr_value": dict()},
- timestamp=time_in_ns2,
- )
- self.assertEqual(
- _extract_events([event1, event2]),
- ProtoSpan.TimeEvents(
- time_event=[
- {
- "time": time_in_ms_and_ns1,
- "annotation": {
- "description": TruncatableString(
- value="event1", truncated_byte_count=0
- ),
- "attributes": self.extracted_attributes_variety_pack,
- },
- },
- {
- "time": time_in_ms_and_ns2,
- "annotation": {
- "description": TruncatableString(
- value="event2", truncated_byte_count=0
- ),
- "attributes": ProtoSpan.Attributes(
- attribute_map={}, dropped_attributes_count=1
- ),
- },
- },
- ]
- ),
- )
-
- def test_extract_links(self):
- self.assertIsNone(_extract_links([]))
- trace_id = "6e0c63257de34c92bf9efcd03927272e"
- span_id1 = "95bb5edabd45950f"
- span_id2 = "b6b86ad2915c9ddc"
- link1 = Link(
- context=SpanContext(
- trace_id=int(trace_id, 16),
- span_id=int(span_id1, 16),
- is_remote=False,
- ),
- attributes={},
- )
- link2 = Link(
- context=SpanContext(
- trace_id=int(trace_id, 16),
- span_id=int(span_id1, 16),
- is_remote=False,
- ),
- attributes=self.attributes_variety_pack,
- )
- link3 = Link(
- context=SpanContext(
- trace_id=int(trace_id, 16),
- span_id=int(span_id2, 16),
- is_remote=False,
- ),
- attributes={"illegal_attr_value": dict(), "int_attr_value": 123},
- )
- self.assertEqual(
- _extract_links([link1, link2, link3]),
- ProtoSpan.Links(
- link=[
- {
- "trace_id": trace_id,
- "span_id": span_id1,
- "type": "TYPE_UNSPECIFIED",
- "attributes": ProtoSpan.Attributes(attribute_map={}),
- },
- {
- "trace_id": trace_id,
- "span_id": span_id1,
- "type": "TYPE_UNSPECIFIED",
- "attributes": self.extracted_attributes_variety_pack,
- },
- {
- "trace_id": trace_id,
- "span_id": span_id2,
- "type": "TYPE_UNSPECIFIED",
- "attributes": {
- "attribute_map": {
- "int_attr_value": AttributeValue(int_value=123)
- },
- "dropped_attributes_count": 1,
- },
- },
- ]
- ),
- )
-
- def test_extract_empty_resources(self):
- self.assertEqual(_extract_resources(Resource.create_empty()), {})
-
- def test_extract_well_formed_resources(self):
- resource = Resource(
- labels={
- "cloud.account.id": 123,
- "host.id": "host",
- "cloud.zone": "US",
- "cloud.provider": "gcp",
- "extra_info": "extra",
- "gcp.resource_type": "gce_instance",
- "not_gcp_resource": "value",
- }
- )
- expected_extract = {
- "g.co/r/gce_instance/project_id": "123",
- "g.co/r/gce_instance/instance_id": "host",
- "g.co/r/gce_instance/zone": "US",
- }
- self.assertEqual(_extract_resources(resource), expected_extract)
-
- def test_extract_malformed_resources(self):
- # This resource doesn't have all the fields required for a gce_instance
- # Specifically its missing "host.id", "cloud.zone", "cloud.account.id"
- resource = Resource(
- labels={
- "gcp.resource_type": "gce_instance",
- "cloud.provider": "gcp",
- }
- )
- # Should throw when passed a malformed GCP resource dict
- self.assertRaises(KeyError, _extract_resources, resource)
-
- def test_extract_unsupported_gcp_resources(self):
- resource = Resource(
- labels={
- "cloud.account.id": "123",
- "host.id": "host",
- "extra_info": "extra",
- "not_gcp_resource": "value",
- "gcp.resource_type": "unsupported_gcp_resource",
- "cloud.provider": "gcp",
- }
- )
- self.assertEqual(_extract_resources(resource), {})
-
- def test_extract_unsupported_provider_resources(self):
- # Resources with currently unsupported providers will be ignored
- resource = Resource(
- labels={
- "cloud.account.id": "123",
- "host.id": "host",
- "extra_info": "extra",
- "not_gcp_resource": "value",
- "cloud.provider": "aws",
- }
- )
- self.assertEqual(_extract_resources(resource), {})
-
- # pylint:disable=too-many-locals
- def test_truncate(self):
- """Cloud Trace API imposes limits on the length of many things,
- e.g. strings, number of events, number of attributes. We truncate
- these things before sending it to the API as an optimization.
- """
- str_300 = "a" * 300
- str_256 = "a" * 256
- str_128 = "a" * 128
- self.assertEqual(_truncate_str("aaaa", 1), ("a", 3))
- self.assertEqual(_truncate_str("aaaa", 5), ("aaaa", 0))
- self.assertEqual(_truncate_str("aaaa", 4), ("aaaa", 0))
- self.assertEqual(_truncate_str("ä¸æ–‡ç¿»è¯‘", 4), ("ä¸", 9))
-
- self.assertEqual(
- _format_attribute_value(str_300),
- AttributeValue(
- string_value=TruncatableString(
- value=str_256, truncated_byte_count=300 - 256
- )
- ),
- )
-
- self.assertEqual(
- _extract_attributes({str_300: str_300}, 4),
- ProtoSpan.Attributes(
- attribute_map={
- str_128: AttributeValue(
- string_value=TruncatableString(
- value=str_256, truncated_byte_count=300 - 256
- )
- )
- }
- ),
- )
-
- time_in_ns1 = 1589919268850900051
- time_in_ms_and_ns1 = {"seconds": 1589919268, "nanos": 850899968}
- event1 = Event(name=str_300, attributes={}, timestamp=time_in_ns1)
- self.assertEqual(
- _extract_events([event1]),
- ProtoSpan.TimeEvents(
- time_event=[
- {
- "time": time_in_ms_and_ns1,
- "annotation": {
- "description": TruncatableString(
- value=str_256, truncated_byte_count=300 - 256
- ),
- "attributes": {},
- },
- },
- ]
- ),
- )
-
- trace_id = "6e0c63257de34c92bf9efcd03927272e"
- span_id = "95bb5edabd45950f"
- link = Link(
- context=SpanContext(
- trace_id=int(trace_id, 16),
- span_id=int(span_id, 16),
- is_remote=False,
- ),
- attributes={},
- )
- too_many_links = [link] * (MAX_NUM_LINKS + 1)
- self.assertEqual(
- _extract_links(too_many_links),
- ProtoSpan.Links(
- link=[
- {
- "trace_id": trace_id,
- "span_id": span_id,
- "type": "TYPE_UNSPECIFIED",
- "attributes": {},
- }
- ]
- * MAX_NUM_LINKS,
- dropped_links_count=len(too_many_links) - MAX_NUM_LINKS,
- ),
- )
-
- link_attrs = {}
- for attr_key in range(MAX_LINK_ATTRS + 1):
- link_attrs[str(attr_key)] = 0
- attr_link = Link(
- context=SpanContext(
- trace_id=int(trace_id, 16),
- span_id=int(span_id, 16),
- is_remote=False,
- ),
- attributes=link_attrs,
- )
-
- proto_link = _extract_links([attr_link])
- self.assertEqual(
- len(proto_link.link[0].attributes.attribute_map), MAX_LINK_ATTRS
- )
-
- too_many_events = [event1] * (MAX_NUM_EVENTS + 1)
- self.assertEqual(
- _extract_events(too_many_events),
- ProtoSpan.TimeEvents(
- time_event=[
- {
- "time": time_in_ms_and_ns1,
- "annotation": {
- "description": TruncatableString(
- value=str_256, truncated_byte_count=300 - 256
- ),
- "attributes": {},
- },
- },
- ]
- * MAX_NUM_EVENTS,
- dropped_annotations_count=len(too_many_events)
- - MAX_NUM_EVENTS,
- ),
- )
-
- time_in_ns1 = 1589919268850900051
- event_attrs = {}
- for attr_key in range(MAX_EVENT_ATTRS + 1):
- event_attrs[str(attr_key)] = 0
- proto_events = _extract_events(
- [Event(name="a", attributes=event_attrs, timestamp=time_in_ns1)]
- )
- self.assertEqual(
- len(
- proto_events.time_event[0].annotation.attributes.attribute_map
- ),
- MAX_EVENT_ATTRS,
- )
-
- def test_strip_characters(self):
- self.assertEqual("0.10.0", _strip_characters("0.10.0b"))
- self.assertEqual("1.20.5", _strip_characters("1.20.5"))
- self.assertEqual("3.1.0", _strip_characters("3.1.0beta"))
- self.assertEqual("4.2.0", _strip_characters("4b.2rc.0a"))
- self.assertEqual("6.20.15", _strip_characters("b6.20.15"))
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_propagator.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_propagator.py
deleted file mode 100644
index a94127b7b7d..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_cloud_trace_propagator.py
+++ /dev/null
@@ -1,238 +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 typing
-import unittest
-
-import opentelemetry.trace as trace
-from opentelemetry.context import get_current
-from opentelemetry.exporter.cloud_trace.cloud_trace_propagator import (
- _TRACE_CONTEXT_HEADER_NAME,
- CloudTraceFormatPropagator,
-)
-from opentelemetry.trace.span import (
- INVALID_SPAN_ID,
- INVALID_TRACE_ID,
- SpanContext,
- TraceFlags,
- get_hexadecimal_trace_id,
-)
-
-
-def get_dict_value(dict_object: typing.Dict[str, str], key: str) -> str:
- return dict_object.get(key, "")
-
-
-class TestCloudTraceFormatPropagator(unittest.TestCase):
- def setUp(self):
- self.propagator = CloudTraceFormatPropagator()
- self.valid_trace_id = 281017822499060589596062859815111849546
- self.valid_span_id = 17725314949316355921
- self.too_long_id = 111111111111111111111111111111111111111111111
-
- def _extract(self, header_value):
- """Test helper"""
- header = {_TRACE_CONTEXT_HEADER_NAME: [header_value]}
- new_context = self.propagator.extract(get_dict_value, header)
- return trace.get_current_span(new_context).get_context()
-
- def _inject(self, span=None):
- """Test helper"""
- ctx = get_current()
- if span is not None:
- ctx = trace.set_span_in_context(span, ctx)
- output = {}
- self.propagator.inject(dict.__setitem__, output, context=ctx)
- return output.get(_TRACE_CONTEXT_HEADER_NAME)
-
- def test_no_context_header(self):
- header = {}
- new_context = self.propagator.extract(get_dict_value, header)
- self.assertEqual(
- trace.get_current_span(new_context).get_context(),
- trace.INVALID_SPAN.get_context(),
- )
-
- def test_empty_context_header(self):
- header = ""
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- def test_valid_header(self):
- header = "{}/{};o=1".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.valid_span_id
- )
- new_span_context = self._extract(header)
- self.assertEqual(new_span_context.trace_id, self.valid_trace_id)
- self.assertEqual(new_span_context.span_id, self.valid_span_id)
- self.assertEqual(new_span_context.trace_flags, TraceFlags(1))
- self.assertTrue(new_span_context.is_remote)
-
- header = "{}/{};o=10".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.valid_span_id
- )
- new_span_context = self._extract(header)
- self.assertEqual(new_span_context.trace_id, self.valid_trace_id)
- self.assertEqual(new_span_context.span_id, self.valid_span_id)
- self.assertEqual(new_span_context.trace_flags, TraceFlags(10))
- self.assertTrue(new_span_context.is_remote)
-
- header = "{}/{};o=0".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.valid_span_id
- )
- new_span_context = self._extract(header)
- self.assertEqual(new_span_context.trace_id, self.valid_trace_id)
- self.assertEqual(new_span_context.span_id, self.valid_span_id)
- self.assertEqual(new_span_context.trace_flags, TraceFlags(0))
- self.assertTrue(new_span_context.is_remote)
-
- header = "{}/{};o=0".format(
- get_hexadecimal_trace_id(self.valid_trace_id), 345
- )
- new_span_context = self._extract(header)
- self.assertEqual(new_span_context.trace_id, self.valid_trace_id)
- self.assertEqual(new_span_context.span_id, 345)
- self.assertEqual(new_span_context.trace_flags, TraceFlags(0))
- self.assertTrue(new_span_context.is_remote)
-
- def test_invalid_header_format(self):
- header = "invalid_header"
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{};o=".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.valid_span_id
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "extra_chars/{}/{};o=1".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.valid_span_id
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{}extra_chars;o=1".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.valid_span_id
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{};o=1extra_chars".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.valid_span_id
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/;o=1".format(
- get_hexadecimal_trace_id(self.valid_trace_id)
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "/{};o=1".format(self.valid_span_id)
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{};o={}".format("123", "34", "4")
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- def test_invalid_trace_id(self):
- header = "{}/{};o={}".format(INVALID_TRACE_ID, self.valid_span_id, 1)
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
- header = "{}/{};o={}".format("0" * 32, self.valid_span_id, 1)
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "0/{};o={}".format(self.valid_span_id, 1)
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "234/{};o={}".format(self.valid_span_id, 1)
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{};o={}".format(self.too_long_id, self.valid_span_id, 1)
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- def test_invalid_span_id(self):
- header = "{}/{};o={}".format(
- get_hexadecimal_trace_id(self.valid_trace_id), INVALID_SPAN_ID, 1
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{};o={}".format(
- get_hexadecimal_trace_id(self.valid_trace_id), "0" * 16, 1
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{};o={}".format(
- get_hexadecimal_trace_id(self.valid_trace_id), "0", 1
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- header = "{}/{};o={}".format(
- get_hexadecimal_trace_id(self.valid_trace_id), self.too_long_id, 1
- )
- self.assertEqual(
- self._extract(header), trace.INVALID_SPAN.get_context()
- )
-
- def test_inject_with_no_context(self):
- output = self._inject()
- self.assertIsNone(output)
-
- def test_inject_with_invalid_context(self):
- output = self._inject(trace.INVALID_SPAN)
- self.assertIsNone(output)
-
- def test_inject_with_valid_context(self):
- span_context = SpanContext(
- trace_id=self.valid_trace_id,
- span_id=self.valid_span_id,
- is_remote=True,
- trace_flags=TraceFlags(1),
- )
- output = self._inject(trace.DefaultSpan(span_context))
- self.assertEqual(
- output,
- "{}/{};o={}".format(
- get_hexadecimal_trace_id(self.valid_trace_id),
- self.valid_span_id,
- 1,
- ),
- )
diff --git a/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py b/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
deleted file mode 100644
index de618acd610..00000000000
--- a/ext/opentelemetry-exporter-cloud-trace/tests/test_gcp_resource_detector.py
+++ /dev/null
@@ -1,84 +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 unittest
-from unittest import mock
-
-from opentelemetry.sdk.resources import Resource
-from opentelemetry.tools.resource_detector import (
- _GCP_METADATA_URL,
- GoogleCloudResourceDetector,
- get_gce_resources,
-)
-
-RESOURCES_JSON_STRING = {
- "instance": {"id": "instance_id", "zone": "projects/123/zones/zone"},
- "project": {"projectId": "project_id"},
-}
-
-
-class TestGCEResourceFinder(unittest.TestCase):
- @mock.patch("opentelemetry.tools.resource_detector.requests.get")
- def test_finding_gce_resources(self, getter):
- getter.return_value.json.return_value = RESOURCES_JSON_STRING
- found_resources = get_gce_resources()
- self.assertEqual(getter.call_args_list[0][0][0], _GCP_METADATA_URL)
- self.assertEqual(
- found_resources,
- {
- "host.id": "instance_id",
- "cloud.provider": "gcp",
- "cloud.account.id": "project_id",
- "cloud.zone": "zone",
- "gcp.resource_type": "gce_instance",
- },
- )
-
-
-class TestGoogleCloudResourceDetector(unittest.TestCase):
- @mock.patch("opentelemetry.tools.resource_detector.requests.get")
- def test_finding_resources(self, getter):
- resource_finder = GoogleCloudResourceDetector()
- getter.return_value.json.return_value = RESOURCES_JSON_STRING
- found_resources = resource_finder.detect()
- self.assertEqual(getter.call_args_list[0][0][0], _GCP_METADATA_URL)
- self.assertEqual(
- found_resources,
- Resource(
- labels={
- "host.id": "instance_id",
- "cloud.provider": "gcp",
- "cloud.account.id": "project_id",
- "cloud.zone": "zone",
- "gcp.resource_type": "gce_instance",
- }
- ),
- )
- self.assertEqual(getter.call_count, 1)
-
- # Found resources should be cached and not require another network call
- found_resources = resource_finder.detect()
- self.assertEqual(getter.call_count, 1)
- self.assertEqual(
- found_resources,
- Resource(
- labels={
- "host.id": "instance_id",
- "cloud.provider": "gcp",
- "cloud.account.id": "project_id",
- "cloud.zone": "zone",
- "gcp.resource_type": "gce_instance",
- }
- ),
- )
diff --git a/scripts/coverage.sh b/scripts/coverage.sh
index a88aca74755..0b45fbf643b 100755
--- a/scripts/coverage.sh
+++ b/scripts/coverage.sh
@@ -36,8 +36,6 @@ cov ext/opentelemetry-ext-flask
cov ext/opentelemetry-ext-requests
cov ext/opentelemetry-ext-jaeger
cov ext/opentelemetry-ext-opentracing-shim
-cov ext/opentelemetry-exporter-cloud-trace
-cov ext/opentelemetry-exporter-cloud-monitoring
cov ext/opentelemetry-ext-wsgi
cov ext/opentelemetry-ext-zipkin
cov docs/examples/opentelemetry-example-app
diff --git a/tox.ini b/tox.ini
index 2c87f692467..ad7b8ad3e92 100644
--- a/tox.ini
+++ b/tox.ini
@@ -161,15 +161,6 @@ envlist =
; ext-system-metrics intentionally excluded from pypy3
; known limitation: gc.get_count won't work under pypy
- ; Coverage is temporarily disabled for pypy3 due to the pytest bug.
- ; pypy3-coverage
-
- ; opentelemetry-exporter-cloud-monitoring
- py3{4,5,6,7,8}-test-exporter-cloud-monitoring
-
- ; opentelemetry-exporter-cloud-trace
- py3{4,5,6,7,8}-test-exporter-cloud-trace
-
lint
py38-tracecontext
py38-{mypy,mypyinstalled}
@@ -235,8 +226,6 @@ changedir =
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-cloud-trace: ext/opentelemetry-exporter-cloud-trace/tests
- test-exporter-cloud-monitoring: ext/opentelemetry-exporter-cloud-monitoring/tests
test-exporter-zipkin: ext/opentelemetry-ext-zipkin/tests
commands_pre =
@@ -319,8 +308,6 @@ commands_pre =
system-metrics: pip install {toxinidir}/ext/opentelemetry-ext-system-metrics[test]
- exporter-cloud-monitoring: pip install {toxinidir}/ext/opentelemetry-exporter-cloud-monitoring
- exporter-cloud-trace: pip install {toxinidir}/ext/opentelemetry-exporter-cloud-trace
elasticsearch{2,5,6,7}: pip install {toxinidir}/opentelemetry-instrumentation {toxinidir}/ext/opentelemetry-ext-elasticsearch[test]
; In order to get a healthy coverage report,
From a818cc602d39b8537dda256d90576f0517e668d6 Mon Sep 17 00:00:00 2001
From: alrex
Date: Mon, 20 Jul 2020 08:47:10 -0700
Subject: [PATCH 40/79] one more inconsistent test to skip (#919)
---
.../tests/celery/test_celery_functional.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py b/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
index 03fadb09ae0..a3967a5612a 100644
--- a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
+++ b/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
@@ -178,6 +178,7 @@ def fn_task_parameters(user, force_logout=False):
)
+@pytest.mark.skip(reason="inconsistent test results")
def test_concurrent_delays(celery_app, memory_exporter):
@celery_app.task
def fn_task():
From ce5cb96efc0da1a6ac3488109a9421575357f429 Mon Sep 17 00:00:00 2001
From: alrex
Date: Mon, 20 Jul 2020 09:16:34 -0700
Subject: [PATCH 41/79] chore: finish migrating to circleci (#920)
Co-authored-by: Leighton Chen
---
.travis.yml | 37 -------------------------------------
README.md | 4 ++--
2 files changed, 2 insertions(+), 39 deletions(-)
delete mode 100644 .travis.yml
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index fda383970af..00000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-dist: xenial
-
-language: python
-
-cache: pip
-
-matrix:
- include:
- - python: 3.8
- env: TOXENV=lint
- - python: pypy3
- - python: 3.8
- - python: 3.4
- - python: 3.5
- - python: 3.6
- - python: 3.7
- - python: 3.8
- env: TOXENV=docker-tests
- - python: 3.8
- env: TOXENV=docs
-
-#matrix:
-# allow_failures:
-# - python: '3.8-dev'
-
-services:
- - docker
-
-install:
- - pip install tox-travis
-
-script:
- - tox
-
-after_success:
- - pip install codecov
- - codecov -v
diff --git a/README.md b/README.md
index 47e81893995..c4e335589d6 100644
--- a/README.md
+++ b/README.md
@@ -20,8 +20,8 @@
-
-
+
+
From 69740b1c61365fcd79b7ac4e60eb5d3514b51d89 Mon Sep 17 00:00:00 2001
From: alrex
Date: Mon, 20 Jul 2020 09:40:40 -0700
Subject: [PATCH 42/79] chore: updating circle ci to add tracecontext and mypy
jobs (#921)
* chore: updating circle ci to add tracecontext and mypy jobs
---
.circleci/config.yml | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index f47690257c0..bebfc4dbc12 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -64,11 +64,8 @@ jobs:
docs:
executor: py38
steps:
- - checkout
- - setup_tox
- - restore_tox_cache
- - run: tox -e docs
- - save_tox_cache
+ - run_tox_scenario:
+ pattern: docs
docker-tests:
machine:
@@ -92,11 +89,17 @@ jobs:
lint:
executor: py38
steps:
- - checkout
- - setup_tox
- - restore_tox_cache
- - run: tox -e lint
- - save_tox_cache
+ - run_tox_scenario:
+ pattern: lint
+
+ build-py38:
+ parameters:
+ package:
+ type: string
+ executor: py38
+ steps:
+ - run_tox_scenario:
+ pattern: py38-<< parameters.package >>
build-py34:
parameters:
@@ -131,6 +134,10 @@ jobs:
workflows:
circleci-build:
jobs:
+ - build-py38:
+ matrix:
+ parameters:
+ package: ["core", "exporter", "instrumentation", "tracecontext", "mypy", "mypyinstalled"]
- build:
matrix:
parameters:
From e9527dac5d8cb028c2a06c4b083558166e166352 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Tue, 21 Jul 2020 17:37:50 -0600
Subject: [PATCH 43/79] ext/opentracing: Implement get_attribute and
set_attribute (#912)
---
.../ext/opentracing_shim/__init__.py | 67 ++++++++-----------
.../tests/test_shim.py | 36 ++++++++--
2 files changed, 56 insertions(+), 47 deletions(-)
diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
index 0b948216ff3..8d8afca5cab 100644
--- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
+++ b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
@@ -90,11 +90,18 @@
import opentracing
from deprecated import deprecated
-import opentelemetry.trace as trace_api
from opentelemetry import propagators
+from opentelemetry.context import Context
+from opentelemetry.correlationcontext import get_correlation, set_correlation
from opentelemetry.ext.opentracing_shim import util
from opentelemetry.ext.opentracing_shim.version import __version__
-from opentelemetry.trace import DefaultSpan, set_span_in_context
+from opentelemetry.trace import (
+ INVALID_SPAN_CONTEXT,
+ DefaultSpan,
+ Link,
+ get_current_span,
+ set_span_in_context,
+)
logger = logging.getLogger(__name__)
@@ -130,6 +137,8 @@ class SpanContextShim(opentracing.SpanContext):
def __init__(self, otel_context):
self._otel_context = otel_context
+ # Context is being used here since it must be immutable.
+ self._baggage = Context()
def unwrap(self):
"""Returns the wrapped :class:`opentelemetry.trace.SpanContext`
@@ -144,17 +153,9 @@ def unwrap(self):
@property
def baggage(self):
- """Implements the ``baggage`` property from the base class.
+ """Implements the ``baggage`` property from the base class."""
- Warning:
- Not implemented yet.
- """
-
- logger.warning(
- "Using unimplemented property baggage on class %s.",
- self.__class__.__name__,
- )
- # TODO: Implement.
+ return self._baggage
class SpanShim(opentracing.Span):
@@ -270,31 +271,17 @@ def log(self, **kwargs):
def log_event(self, event, payload=None):
super().log_event(event, payload=payload)
- def set_baggage_item(self, key, value): # pylint:disable=unused-argument
- """Implements the ``set_baggage_item()`` method from the base class.
-
- Warning:
- Not implemented yet.
- """
-
- logger.warning(
- "Calling unimplemented method set_baggage_item() on class %s",
- self.__class__.__name__,
+ def set_baggage_item(self, key, value):
+ """Implements the ``set_baggage_item`` method from the base class."""
+ # pylint: disable=protected-access
+ self._context._baggage = set_correlation(
+ key, value, context=self._context._baggage
)
- # TODO: Implement.
-
- def get_baggage_item(self, key): # pylint:disable=unused-argument
- """Implements the ``get_baggage_item()`` method from the base class.
-
- Warning:
- Not implemented yet.
- """
- logger.warning(
- "Calling unimplemented method get_baggage_item() on class %s",
- self.__class__.__name__,
- )
- # TODO: Implement.
+ def get_baggage_item(self, key):
+ """Implements the ``get_baggage_item`` method from the base class."""
+ # pylint: disable=protected-access
+ return get_correlation(key, context=self._context._baggage)
class ScopeShim(opentracing.Scope):
@@ -469,8 +456,8 @@ def active(self):
shim and is likely to be handled in future versions.
"""
- span = trace_api.get_current_span()
- if span.get_context() == trace_api.INVALID_SPAN_CONTEXT:
+ span = get_current_span()
+ if span.get_context() == INVALID_SPAN_CONTEXT:
return None
span_context = SpanContextShim(span.get_context())
@@ -643,7 +630,7 @@ def start_span(
links = []
if references:
for ref in references:
- links.append(trace_api.Link(ref.referenced_context.unwrap()))
+ links.append(Link(ref.referenced_context.unwrap()))
# The OpenTracing API expects time values to be `float` values which
# represent the number of seconds since the epoch. OpenTelemetry
@@ -699,10 +686,10 @@ def get_as_list(dict_object, key):
propagator = propagators.get_global_httptextformat()
ctx = propagator.extract(get_as_list, carrier)
- span = trace_api.get_current_span(ctx)
+ span = get_current_span(ctx)
if span is not None:
otel_context = span.get_context()
else:
- otel_context = trace_api.INVALID_SPAN_CONTEXT
+ otel_context = INVALID_SPAN_CONTEXT
return SpanContextShim(otel_context)
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/test_shim.py b/ext/opentelemetry-ext-opentracing-shim/tests/test_shim.py
index 941d4280690..635907bc90b 100644
--- a/ext/opentelemetry-ext-opentracing-shim/tests/test_shim.py
+++ b/ext/opentelemetry-ext-opentracing-shim/tests/test_shim.py
@@ -17,12 +17,17 @@
import time
from unittest import TestCase
+from unittest.mock import Mock
import opentracing
-import opentelemetry.ext.opentracing_shim as opentracingshim
from opentelemetry import propagators, trace
-from opentelemetry.ext.opentracing_shim import util
+from opentelemetry.ext.opentracing_shim import (
+ SpanContextShim,
+ SpanShim,
+ create_tracer,
+ util,
+)
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.test.mock_httptextformat import (
MockHTTPTextFormat,
@@ -36,7 +41,7 @@ class TestShim(TestCase):
def setUp(self):
"""Create an OpenTelemetry tracer and a shim before every test case."""
trace.set_tracer_provider(TracerProvider())
- self.shim = opentracingshim.create_tracer(trace.get_tracer_provider())
+ self.shim = create_tracer(trace.get_tracer_provider())
@classmethod
def setUpClass(cls):
@@ -448,7 +453,7 @@ def test_span_context(self):
"""Test construction of `SpanContextShim` objects."""
otel_context = trace.SpanContext(1234, 5678, is_remote=False)
- context = opentracingshim.SpanContextShim(otel_context)
+ context = SpanContextShim(otel_context)
self.assertIsInstance(context, opentracing.SpanContext)
self.assertEqual(context.unwrap().trace_id, 1234)
@@ -473,7 +478,7 @@ def test_inject_http_headers(self):
otel_context = trace.SpanContext(
trace_id=1220, span_id=7478, is_remote=False
)
- context = opentracingshim.SpanContextShim(otel_context)
+ context = SpanContextShim(otel_context)
headers = {}
self.shim.inject(context, opentracing.Format.HTTP_HEADERS, headers)
@@ -486,7 +491,7 @@ def test_inject_text_map(self):
otel_context = trace.SpanContext(
trace_id=1220, span_id=7478, is_remote=False
)
- context = opentracingshim.SpanContextShim(otel_context)
+ context = SpanContextShim(otel_context)
# Verify Format.TEXT_MAP
text_map = {}
@@ -500,7 +505,7 @@ def test_inject_binary(self):
otel_context = trace.SpanContext(
trace_id=1220, span_id=7478, is_remote=False
)
- context = opentracingshim.SpanContextShim(otel_context)
+ context = SpanContextShim(otel_context)
# Verify exception for non supported binary format.
with self.assertRaises(opentracing.UnsupportedFormatException):
@@ -550,3 +555,20 @@ def test_extract_binary(self):
# Verify exception for non supported binary format.
with self.assertRaises(opentracing.UnsupportedFormatException):
self.shim.extract(opentracing.Format.BINARY, bytearray())
+
+ def test_baggage(self):
+
+ span_context_shim = SpanContextShim(
+ trace.SpanContext(1234, 5678, is_remote=False)
+ )
+
+ baggage = span_context_shim.baggage
+
+ with self.assertRaises(ValueError):
+ baggage[1] = 3
+
+ span_shim = SpanShim(Mock(), span_context_shim, Mock())
+
+ span_shim.set_baggage_item(1, 2)
+
+ self.assertTrue(span_shim.get_baggage_item(1), 2)
From 5ff9600a62f9c82fc120b03e5729a53341465626 Mon Sep 17 00:00:00 2001
From: Aravin <34178459+aravinsiva@users.noreply.github.com>
Date: Wed, 22 Jul 2020 12:27:56 -0400
Subject: [PATCH 44/79] Adding gRPC instrumentor (#788)
---
ext/opentelemetry-ext-grpc/CHANGELOG.md | 2 +
ext/opentelemetry-ext-grpc/setup.cfg | 5 +
.../src/opentelemetry/ext/grpc/__init__.py | 141 +++++++++++++++++-
.../tests/test_server_interceptor.py | 58 ++++++-
4 files changed, 203 insertions(+), 3 deletions(-)
diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md
index 3be32e05e59..4221ab53710 100644
--- a/ext/opentelemetry-ext-grpc/CHANGELOG.md
+++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md
@@ -4,6 +4,8 @@
- 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))
## 0.8b0
diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg
index 2721a3b2578..dd296032475 100644
--- a/ext/opentelemetry-ext-grpc/setup.cfg
+++ b/ext/opentelemetry-ext-grpc/setup.cfg
@@ -51,3 +51,8 @@ test =
[options.packages.find]
where = src
+
+[options.entry_points]
+opentelemetry_instrumentor =
+ grpc_client = opentelemetry.ext.grpc:GrpcInstrumentorClient
+ grpc_server = opentelemetry.ext.grpc:GrpcInstrumentorServer
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 0e9b19ef51b..368ae55f2e6 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py
@@ -12,13 +12,150 @@
# 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
# 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,
+ )
+
+ 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())
+ )
+ instrumentor = GrpcInstrumentorClient()
+ 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
+
+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.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):
+ if kwargs.get("channel_type") == "secure":
+ _wrap("grpc", "secure_channel", self.wrapper_fn)
+
+ else:
+ _wrap("grpc", "insecure_channel", self.wrapper_fn)
+
+ def _uninstrument(self, **kwargs):
+ if kwargs.get("channel_type") == "secure":
+ unwrap(grpc, "secure_channel")
+
+ else:
+ unwrap(grpc, "insecure_channel")
+
+ @contextmanager
+ def wrapper_fn(self, original_func, instance, args, kwargs):
+ with original_func(*args, **kwargs) as channel:
+ yield intercept_channel(channel, client_interceptor())
def client_interceptor(tracer_provider=None):
diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
index ebe2a8c160a..0ba57a43228 100644
--- a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
+++ b/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
@@ -22,7 +22,7 @@
import opentelemetry.ext.grpc
from opentelemetry import trace
-from opentelemetry.ext.grpc import 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
@@ -49,6 +49,62 @@ def service(self, handler_call_details):
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."""
From f2c6c8579453ddcb30ed4b47dddda1c4971e2e26 Mon Sep 17 00:00:00 2001
From: sartx
Date: Fri, 24 Jul 2020 20:35:38 +0500
Subject: [PATCH 45/79] ext/aiopg: Add instrumentation for aiopg (#801)
Co-authored-by: Leighton Chen
Co-authored-by: Alex Boten
---
docs-requirements.txt | 1 +
docs/ext/aiopg/aiopg.rst | 7 +
.../src/opentelemetry/ext/dbapi/__init__.py | 43 +-
.../tests/postgres/test_aiopg_functional.py | 200 ++++++++
.../CHANGELOG.md | 5 +
.../LICENSE | 201 ++++++++
.../MANIFEST.in | 9 +
.../README.rst | 21 +
.../setup.cfg | 58 +++
.../setup.py | 26 +
.../instrumentation/aiopg/__init__.py | 121 +++++
.../aiopg/aiopg_integration.py | 144 ++++++
.../instrumentation/aiopg/version.py | 15 +
.../instrumentation/aiopg/wrappers.py | 223 +++++++++
.../tests/__init__.py | 0
.../tests/test_aiopg_integration.py | 472 ++++++++++++++++++
tox.ini | 11 +-
17 files changed, 1535 insertions(+), 22 deletions(-)
create mode 100644 docs/ext/aiopg/aiopg.rst
create mode 100644 ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py
create mode 100644 ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md
create mode 100644 ext/opentelemetry-instrumentation-aiopg/LICENSE
create mode 100644 ext/opentelemetry-instrumentation-aiopg/MANIFEST.in
create mode 100644 ext/opentelemetry-instrumentation-aiopg/README.rst
create mode 100644 ext/opentelemetry-instrumentation-aiopg/setup.cfg
create mode 100644 ext/opentelemetry-instrumentation-aiopg/setup.py
create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py
create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py
create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
create mode 100644 ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py
create mode 100644 ext/opentelemetry-instrumentation-aiopg/tests/__init__.py
create mode 100644 ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py
diff --git a/docs-requirements.txt b/docs-requirements.txt
index 0fa078ef233..10ecacb2fd8 100644
--- a/docs-requirements.txt
+++ b/docs-requirements.txt
@@ -7,6 +7,7 @@ asgiref~=3.0
asyncpg>=0.12.0
ddtrace>=0.34.0
aiohttp~= 3.0
+aiopg>=0.13.0
Deprecated>=1.2.6
django>=2.2
PyMySQL~=0.9.3
diff --git a/docs/ext/aiopg/aiopg.rst b/docs/ext/aiopg/aiopg.rst
new file mode 100644
index 00000000000..ff8d91ed11d
--- /dev/null
+++ b/docs/ext/aiopg/aiopg.rst
@@ -0,0 +1,7 @@
+OpenTelemetry aiopg instrumentation
+===================================
+
+.. automodule:: opentelemetry.instrumentation.aiopg
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py
index b34e41b2b4b..3838dc1b157 100644
--- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py
+++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/__init__.py
@@ -46,6 +46,7 @@
import wrapt
+from opentelemetry import trace as trace_api
from opentelemetry.ext.dbapi.version import __version__
from opentelemetry.instrumentation.utils import unwrap
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
@@ -300,6 +301,26 @@ class TracedCursor:
def __init__(self, db_api_integration: DatabaseApiIntegration):
self._db_api_integration = db_api_integration
+ def _populate_span(
+ self, span: trace_api.Span, *args: typing.Tuple[typing.Any, typing.Any]
+ ):
+ statement = args[0] if args else ""
+ span.set_attribute(
+ "component", self._db_api_integration.database_component
+ )
+ span.set_attribute("db.type", self._db_api_integration.database_type)
+ span.set_attribute("db.instance", self._db_api_integration.database)
+ span.set_attribute("db.statement", statement)
+
+ for (
+ attribute_key,
+ attribute_value,
+ ) in self._db_api_integration.span_attributes.items():
+ span.set_attribute(attribute_key, attribute_value)
+
+ if len(args) > 1:
+ span.set_attribute("db.statement.parameters", str(args[1]))
+
def traced_execution(
self,
query_method: typing.Callable[..., typing.Any],
@@ -307,30 +328,10 @@ def traced_execution(
**kwargs: typing.Dict[typing.Any, typing.Any]
):
- statement = args[0] if args else ""
with self._db_api_integration.get_tracer().start_as_current_span(
self._db_api_integration.name, kind=SpanKind.CLIENT
) as span:
- span.set_attribute(
- "component", self._db_api_integration.database_component
- )
- span.set_attribute(
- "db.type", self._db_api_integration.database_type
- )
- span.set_attribute(
- "db.instance", self._db_api_integration.database
- )
- span.set_attribute("db.statement", statement)
-
- for (
- attribute_key,
- attribute_value,
- ) in self._db_api_integration.span_attributes.items():
- span.set_attribute(attribute_key, attribute_value)
-
- if len(args) > 1:
- span.set_attribute("db.statement.parameters", str(args[1]))
-
+ self._populate_span(span, *args)
try:
result = query_method(*args, **kwargs)
span.set_status(Status(StatusCanonicalCode.OK))
diff --git a/ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py b/ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py
new file mode 100644
index 00000000000..1762da1d097
--- /dev/null
+++ b/ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py
@@ -0,0 +1,200 @@
+# Copyright 2020, 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 asyncio
+import os
+import time
+
+import aiopg
+import psycopg2
+import pytest
+
+from opentelemetry import trace as trace_api
+from opentelemetry.instrumentation.aiopg import AiopgInstrumentor
+from opentelemetry.test.test_base import TestBase
+
+POSTGRES_HOST = os.getenv("POSTGRESQL_HOST ", "localhost")
+POSTGRES_PORT = int(os.getenv("POSTGRESQL_PORT ", "5432"))
+POSTGRES_DB_NAME = os.getenv("POSTGRESQL_DB_NAME ", "opentelemetry-tests")
+POSTGRES_PASSWORD = os.getenv("POSTGRESQL_HOST ", "testpassword")
+POSTGRES_USER = os.getenv("POSTGRESQL_HOST ", "testuser")
+
+
+def async_call(coro):
+ loop = asyncio.get_event_loop()
+ return loop.run_until_complete(coro)
+
+
+class TestFunctionalAiopgConnect(TestBase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls._connection = None
+ cls._cursor = None
+ cls._tracer = cls.tracer_provider.get_tracer(__name__)
+ AiopgInstrumentor().instrument(tracer_provider=cls.tracer_provider)
+ cls._connection = async_call(
+ aiopg.connect(
+ dbname=POSTGRES_DB_NAME,
+ user=POSTGRES_USER,
+ password=POSTGRES_PASSWORD,
+ host=POSTGRES_HOST,
+ port=POSTGRES_PORT,
+ )
+ )
+ cls._cursor = async_call(cls._connection.cursor())
+
+ @classmethod
+ def tearDownClass(cls):
+ if cls._cursor:
+ cls._cursor.close()
+ if cls._connection:
+ cls._connection.close()
+ AiopgInstrumentor().uninstrument()
+
+ def validate_spans(self):
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 2)
+ for span in spans:
+ if span.name == "rootSpan":
+ root_span = span
+ else:
+ child_span = span
+ self.assertIsInstance(span.start_time, int)
+ self.assertIsInstance(span.end_time, int)
+ self.assertIsNotNone(root_span)
+ self.assertIsNotNone(child_span)
+ self.assertEqual(root_span.name, "rootSpan")
+ self.assertEqual(child_span.name, "postgresql.opentelemetry-tests")
+ self.assertIsNotNone(child_span.parent)
+ self.assertIs(child_span.parent, root_span.get_context())
+ self.assertIs(child_span.kind, trace_api.SpanKind.CLIENT)
+ self.assertEqual(
+ child_span.attributes["db.instance"], POSTGRES_DB_NAME
+ )
+ self.assertEqual(child_span.attributes["net.peer.name"], POSTGRES_HOST)
+ self.assertEqual(child_span.attributes["net.peer.port"], POSTGRES_PORT)
+
+ def test_execute(self):
+ """Should create a child span for execute method
+ """
+ with self._tracer.start_as_current_span("rootSpan"):
+ async_call(
+ self._cursor.execute(
+ "CREATE TABLE IF NOT EXISTS test (id integer)"
+ )
+ )
+ self.validate_spans()
+
+ def test_executemany(self):
+ """Should create a child span for executemany
+ """
+ with pytest.raises(psycopg2.ProgrammingError):
+ with self._tracer.start_as_current_span("rootSpan"):
+ data = (("1",), ("2",), ("3",))
+ stmt = "INSERT INTO test (id) VALUES (%s)"
+ async_call(self._cursor.executemany(stmt, data))
+ self.validate_spans()
+
+ def test_callproc(self):
+ """Should create a child span for callproc
+ """
+ with self._tracer.start_as_current_span("rootSpan"), self.assertRaises(
+ Exception
+ ):
+ async_call(self._cursor.callproc("test", ()))
+ self.validate_spans()
+
+
+class TestFunctionalAiopgCreatePool(TestBase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls._connection = None
+ cls._cursor = None
+ cls._tracer = cls.tracer_provider.get_tracer(__name__)
+ AiopgInstrumentor().instrument(tracer_provider=cls.tracer_provider)
+ cls._pool = async_call(
+ aiopg.create_pool(
+ dbname=POSTGRES_DB_NAME,
+ user=POSTGRES_USER,
+ password=POSTGRES_PASSWORD,
+ host=POSTGRES_HOST,
+ port=POSTGRES_PORT,
+ )
+ )
+ cls._connection = async_call(cls._pool.acquire())
+ cls._cursor = async_call(cls._connection.cursor())
+
+ @classmethod
+ def tearDownClass(cls):
+ if cls._cursor:
+ cls._cursor.close()
+ if cls._connection:
+ cls._connection.close()
+ if cls._pool:
+ cls._pool.close()
+ AiopgInstrumentor().uninstrument()
+
+ def validate_spans(self):
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 2)
+ for span in spans:
+ if span.name == "rootSpan":
+ root_span = span
+ else:
+ child_span = span
+ self.assertIsInstance(span.start_time, int)
+ self.assertIsInstance(span.end_time, int)
+ self.assertIsNotNone(root_span)
+ self.assertIsNotNone(child_span)
+ self.assertEqual(root_span.name, "rootSpan")
+ self.assertEqual(child_span.name, "postgresql.opentelemetry-tests")
+ self.assertIsNotNone(child_span.parent)
+ self.assertIs(child_span.parent, root_span.get_context())
+ self.assertIs(child_span.kind, trace_api.SpanKind.CLIENT)
+ self.assertEqual(
+ child_span.attributes["db.instance"], POSTGRES_DB_NAME
+ )
+ self.assertEqual(child_span.attributes["net.peer.name"], POSTGRES_HOST)
+ self.assertEqual(child_span.attributes["net.peer.port"], POSTGRES_PORT)
+
+ def test_execute(self):
+ """Should create a child span for execute method
+ """
+ with self._tracer.start_as_current_span("rootSpan"):
+ async_call(
+ self._cursor.execute(
+ "CREATE TABLE IF NOT EXISTS test (id integer)"
+ )
+ )
+ self.validate_spans()
+
+ def test_executemany(self):
+ """Should create a child span for executemany
+ """
+ with pytest.raises(psycopg2.ProgrammingError):
+ with self._tracer.start_as_current_span("rootSpan"):
+ data = (("1",), ("2",), ("3",))
+ stmt = "INSERT INTO test (id) VALUES (%s)"
+ async_call(self._cursor.executemany(stmt, data))
+ self.validate_spans()
+
+ def test_callproc(self):
+ """Should create a child span for callproc
+ """
+ with self._tracer.start_as_current_span("rootSpan"), self.assertRaises(
+ Exception
+ ):
+ async_call(self._cursor.callproc("test", ()))
+ self.validate_spans()
diff --git a/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md
new file mode 100644
index 00000000000..3e04402cea9
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Changelog
+
+## Unreleased
+
+- Initial release
diff --git a/ext/opentelemetry-instrumentation-aiopg/LICENSE b/ext/opentelemetry-instrumentation-aiopg/LICENSE
new file mode 100644
index 00000000000..261eeb9e9f8
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/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-instrumentation-aiopg/MANIFEST.in b/ext/opentelemetry-instrumentation-aiopg/MANIFEST.in
new file mode 100644
index 00000000000..aed3e33273b
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/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-instrumentation-aiopg/README.rst b/ext/opentelemetry-instrumentation-aiopg/README.rst
new file mode 100644
index 00000000000..0e9248ec1d1
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/README.rst
@@ -0,0 +1,21 @@
+OpenTelemetry aiopg instrumentation
+===================================
+
+|pypi|
+
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-aiopg.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-aiopg/
+
+Installation
+------------
+
+::
+
+ pip install opentelemetry-instrumentation-aiopg
+
+
+References
+----------
+
+* `OpenTelemetry aiopg instrumentation `_
+* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/ext/opentelemetry-instrumentation-aiopg/setup.cfg
new file mode 100644
index 00000000000..4dade66644b
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/setup.cfg
@@ -0,0 +1,58 @@
+# 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-instrumentaation-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
+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.5
+ Programming Language :: Python :: 3.6
+ Programming Language :: Python :: 3.7
+ Programming Language :: Python :: 3.8
+
+[options]
+python_requires = >=3.5
+package_dir=
+ =src
+packages=find_namespace:
+install_requires =
+ opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-dbapi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11.dev0
+ aiopg >= 0.13.0
+ wrapt >= 1.0.0, < 2.0.0
+
+[options.extras_require]
+test =
+ opentelemetry-test == 0.11.dev0
+
+[options.packages.find]
+where = src
+
+
+[options.entry_points]
+opentelemetry_instrumentor =
+ aiopg = opentelemetry.instrumentation.aiopg:AiopgInstrumentor
diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.py b/ext/opentelemetry-instrumentation-aiopg/setup.py
new file mode 100644
index 00000000000..dfd463e5abb
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/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", "aiopg", "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-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py
new file mode 100644
index 00000000000..d2cc90902eb
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/__init__.py
@@ -0,0 +1,121 @@
+# 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.
+
+"""
+The integration with PostgreSQL supports the aiopg library,
+it can be enabled by using ``AiopgInstrumentor``.
+
+.. aiopg: https://github.com/aio-libs/aiopg
+
+Usage
+-----
+
+.. code-block:: python
+
+ import aiopg
+ from opentelemetry.instrumentation.aiopg import AiopgInstrumentor
+
+ AiopgInstrumentor().instrument()
+
+ cnx = await aiopg.connect(database='Database')
+ cursor = await cnx.cursor()
+ await cursor.execute("INSERT INTO test (testField) VALUES (123)")
+ cursor.close()
+ cnx.close()
+
+ pool = await aiopg.create_pool(database='Database')
+ cnx = await pool.acquire()
+ cursor = await cnx.cursor()
+ await cursor.execute("INSERT INTO test (testField) VALUES (123)")
+ cursor.close()
+ cnx.close()
+
+API
+---
+"""
+
+from opentelemetry.instrumentation.aiopg import wrappers
+from opentelemetry.instrumentation.aiopg.version import __version__
+from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+
+
+class AiopgInstrumentor(BaseInstrumentor):
+ _CONNECTION_ATTRIBUTES = {
+ "database": "info.dbname",
+ "port": "info.port",
+ "host": "info.host",
+ "user": "info.user",
+ }
+
+ _DATABASE_COMPONENT = "postgresql"
+ _DATABASE_TYPE = "sql"
+
+ def _instrument(self, **kwargs):
+ """Integrate with PostgreSQL aiopg library.
+ aiopg: https://github.com/aio-libs/aiopg
+ """
+
+ tracer_provider = kwargs.get("tracer_provider")
+
+ wrappers.wrap_connect(
+ __name__,
+ self._DATABASE_COMPONENT,
+ self._DATABASE_TYPE,
+ self._CONNECTION_ATTRIBUTES,
+ version=__version__,
+ tracer_provider=tracer_provider,
+ )
+
+ wrappers.wrap_create_pool(
+ __name__,
+ self._DATABASE_COMPONENT,
+ self._DATABASE_TYPE,
+ self._CONNECTION_ATTRIBUTES,
+ version=__version__,
+ tracer_provider=tracer_provider,
+ )
+
+ def _uninstrument(self, **kwargs):
+ """"Disable aiopg instrumentation"""
+ wrappers.unwrap_connect()
+ wrappers.unwrap_create_pool()
+
+ # pylint:disable=no-self-use
+ def instrument_connection(self, connection):
+ """Enable instrumentation in a aiopg connection.
+
+ Args:
+ connection: The connection to instrument.
+
+ Returns:
+ An instrumented connection.
+ """
+ return wrappers.instrument_connection(
+ __name__,
+ connection,
+ self._DATABASE_COMPONENT,
+ self._DATABASE_TYPE,
+ self._CONNECTION_ATTRIBUTES,
+ )
+
+ def uninstrument_connection(self, connection):
+ """Disable instrumentation in a aiopg connection.
+
+ Args:
+ connection: The connection to uninstrument.
+
+ Returns:
+ An uninstrumented connection.
+ """
+ return wrappers.uninstrument_connection(connection)
diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py
new file mode 100644
index 00000000000..def4a72c3d1
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/aiopg_integration.py
@@ -0,0 +1,144 @@
+import typing
+
+import wrapt
+from aiopg.utils import _ContextManager, _PoolAcquireContextManager
+
+from opentelemetry.ext.dbapi import DatabaseApiIntegration, TracedCursor
+from opentelemetry.trace import SpanKind
+from opentelemetry.trace.status import Status, StatusCanonicalCode
+
+
+# pylint: disable=abstract-method
+class AsyncProxyObject(wrapt.ObjectProxy):
+ def __aiter__(self):
+ return self.__wrapped__.__aiter__()
+
+ async def __anext__(self):
+ result = await self.__wrapped__.__anext__()
+ return result
+
+ async def __aenter__(self):
+ return await self.__wrapped__.__aenter__()
+
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
+ return await self.__wrapped__.__aexit__(exc_type, exc_val, exc_tb)
+
+ def __await__(self):
+ return self.__wrapped__.__await__()
+
+
+class AiopgIntegration(DatabaseApiIntegration):
+ async def wrapped_connection(
+ self,
+ connect_method: typing.Callable[..., typing.Any],
+ args: typing.Tuple[typing.Any, typing.Any],
+ kwargs: typing.Dict[typing.Any, typing.Any],
+ ):
+ """Add object proxy to connection object.
+ """
+ connection = await connect_method(*args, **kwargs)
+ # pylint: disable=protected-access
+ self.get_connection_attributes(connection._conn)
+ return get_traced_connection_proxy(connection, self)
+
+ async def wrapped_pool(self, create_pool_method, args, kwargs):
+ pool = await create_pool_method(*args, **kwargs)
+ async with pool.acquire() as connection:
+ # pylint: disable=protected-access
+ self.get_connection_attributes(connection._conn)
+ return get_traced_pool_proxy(pool, self)
+
+
+def get_traced_connection_proxy(
+ connection, db_api_integration, *args, **kwargs
+):
+ # pylint: disable=abstract-method
+ class TracedConnectionProxy(AsyncProxyObject):
+ # pylint: disable=unused-argument
+ def __init__(self, connection, *args, **kwargs):
+ super().__init__(connection)
+
+ def cursor(self, *args, **kwargs):
+ coro = self._cursor(*args, **kwargs)
+ return _ContextManager(coro)
+
+ async def _cursor(self, *args, **kwargs):
+ # pylint: disable=protected-access
+ cursor = await self.__wrapped__._cursor(*args, **kwargs)
+ return get_traced_cursor_proxy(cursor, db_api_integration)
+
+ return TracedConnectionProxy(connection, *args, **kwargs)
+
+
+def get_traced_pool_proxy(pool, db_api_integration, *args, **kwargs):
+ # pylint: disable=abstract-method
+ class TracedPoolProxy(AsyncProxyObject):
+ # pylint: disable=unused-argument
+ def __init__(self, pool, *args, **kwargs):
+ super().__init__(pool)
+
+ def acquire(self):
+ """Acquire free connection from the pool."""
+ coro = self._acquire()
+ return _PoolAcquireContextManager(coro, self)
+
+ async def _acquire(self):
+ # pylint: disable=protected-access
+ connection = await self.__wrapped__._acquire()
+ return get_traced_connection_proxy(
+ connection, db_api_integration, *args, **kwargs
+ )
+
+ return TracedPoolProxy(pool, *args, **kwargs)
+
+
+class AsyncTracedCursor(TracedCursor):
+ async def traced_execution(
+ self,
+ query_method: typing.Callable[..., typing.Any],
+ *args: typing.Tuple[typing.Any, typing.Any],
+ **kwargs: typing.Dict[typing.Any, typing.Any]
+ ):
+
+ with self._db_api_integration.get_tracer().start_as_current_span(
+ self._db_api_integration.name, kind=SpanKind.CLIENT
+ ) as span:
+ self._populate_span(span, *args)
+ try:
+ result = await query_method(*args, **kwargs)
+ span.set_status(Status(StatusCanonicalCode.OK))
+ return result
+ except Exception as ex: # pylint: disable=broad-except
+ span.set_status(Status(StatusCanonicalCode.UNKNOWN, str(ex)))
+ raise ex
+
+
+def get_traced_cursor_proxy(cursor, db_api_integration, *args, **kwargs):
+ _traced_cursor = AsyncTracedCursor(db_api_integration)
+
+ # pylint: disable=abstract-method
+ class AsyncTracedCursorProxy(AsyncProxyObject):
+
+ # pylint: disable=unused-argument
+ def __init__(self, cursor, *args, **kwargs):
+ super().__init__(cursor)
+
+ async def execute(self, *args, **kwargs):
+ result = await _traced_cursor.traced_execution(
+ self.__wrapped__.execute, *args, **kwargs
+ )
+ return result
+
+ async def executemany(self, *args, **kwargs):
+ result = await _traced_cursor.traced_execution(
+ self.__wrapped__.executemany, *args, **kwargs
+ )
+ return result
+
+ async def callproc(self, *args, **kwargs):
+ result = await _traced_cursor.traced_execution(
+ self.__wrapped__.callproc, *args, **kwargs
+ )
+ return result
+
+ return AsyncTracedCursorProxy(cursor, *args, **kwargs)
diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
new file mode 100644
index 00000000000..858e73960ff
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/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.11.dev0"
diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py
new file mode 100644
index 00000000000..473c5039c32
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/wrappers.py
@@ -0,0 +1,223 @@
+# 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.
+
+"""
+The trace integration with aiopg based on dbapi integration,
+where replaced sync wrap methods to async
+
+Usage
+-----
+
+.. code-block:: python
+
+ from opentelemetry import trace
+ from opentelemetry.instrumentation.aiopg import trace_integration
+ from opentelemetry.trace import TracerProvider
+
+ trace.set_tracer_provider(TracerProvider())
+
+ trace_integration(aiopg.connection, "_connect", "postgresql", "sql")
+
+API
+---
+"""
+import logging
+import typing
+
+import aiopg
+import wrapt
+
+from opentelemetry.instrumentation.aiopg.aiopg_integration import (
+ AiopgIntegration,
+ get_traced_connection_proxy,
+)
+from opentelemetry.instrumentation.aiopg.version import __version__
+from opentelemetry.instrumentation.utils import unwrap
+from opentelemetry.trace import TracerProvider
+
+logger = logging.getLogger(__name__)
+
+
+def trace_integration(
+ database_component: str,
+ database_type: str = "",
+ connection_attributes: typing.Dict = None,
+ tracer_provider: typing.Optional[TracerProvider] = None,
+):
+ """Integrate with aiopg library.
+ based on dbapi integration, where replaced sync wrap methods to async
+
+ Args:
+ database_component: Database driver name or
+ database name "postgreSQL".
+ database_type: The Database type. For any SQL database, "sql".
+ connection_attributes: Attribute names for database, port, host and
+ user in Connection object.
+ tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to
+ use. If ommited the current configured one is used.
+ """
+
+ wrap_connect(
+ __name__,
+ database_component,
+ database_type,
+ connection_attributes,
+ __version__,
+ tracer_provider,
+ )
+
+
+def wrap_connect(
+ name: str,
+ database_component: str,
+ database_type: str = "",
+ connection_attributes: typing.Dict = None,
+ version: str = "",
+ tracer_provider: typing.Optional[TracerProvider] = None,
+):
+ """Integrate with aiopg library.
+ https://github.com/aio-libs/aiopg
+
+ Args:
+ name: Name of opentelemetry extension for aiopg.
+ database_component: Database driver name
+ or database name "postgreSQL".
+ database_type: The Database type. For any SQL database, "sql".
+ connection_attributes: Attribute names for database, port, host and
+ user in Connection object.
+ version: Version of opentelemetry extension for aiopg.
+ tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to
+ use. If ommited the current configured one is used.
+ """
+
+ # pylint: disable=unused-argument
+ async def wrap_connect_(
+ wrapped: typing.Callable[..., typing.Any],
+ instance: typing.Any,
+ args: typing.Tuple[typing.Any, typing.Any],
+ kwargs: typing.Dict[typing.Any, typing.Any],
+ ):
+ db_integration = AiopgIntegration(
+ name,
+ database_component,
+ database_type=database_type,
+ connection_attributes=connection_attributes,
+ version=version,
+ tracer_provider=tracer_provider,
+ )
+ return await db_integration.wrapped_connection(wrapped, args, kwargs)
+
+ try:
+ wrapt.wrap_function_wrapper(aiopg, "connect", wrap_connect_)
+ except Exception as ex: # pylint: disable=broad-except
+ logger.warning("Failed to integrate with aiopg. %s", str(ex))
+
+
+def unwrap_connect():
+ """"Disable integration with aiopg library.
+ https://github.com/aio-libs/aiopg
+ """
+
+ unwrap(aiopg, "connect")
+
+
+def instrument_connection(
+ name: str,
+ connection,
+ database_component: str,
+ database_type: str = "",
+ connection_attributes: typing.Dict = None,
+ version: str = "",
+ tracer_provider: typing.Optional[TracerProvider] = None,
+):
+ """Enable instrumentation in a database connection.
+
+ Args:
+ name: Name of opentelemetry extension for aiopg.
+ connection: The connection to instrument.
+ database_component: Database driver name or database name "postgreSQL".
+ database_type: The Database type. For any SQL database, "sql".
+ connection_attributes: Attribute names for database, port, host and
+ user in a connection object.
+ version: Version of opentelemetry extension for aiopg.
+ tracer_provider: The :class:`opentelemetry.trace.TracerProvider` to
+ use. If ommited the current configured one is used.
+
+ Returns:
+ An instrumented connection.
+ """
+ db_integration = AiopgIntegration(
+ name,
+ database_component,
+ database_type,
+ connection_attributes=connection_attributes,
+ version=version,
+ tracer_provider=tracer_provider,
+ )
+ db_integration.get_connection_attributes(connection)
+ return get_traced_connection_proxy(connection, db_integration)
+
+
+def uninstrument_connection(connection):
+ """Disable instrumentation in a database connection.
+
+ Args:
+ connection: The connection to uninstrument.
+
+ Returns:
+ An uninstrumented connection.
+ """
+ if isinstance(connection, wrapt.ObjectProxy):
+ return connection.__wrapped__
+
+ logger.warning("Connection is not instrumented")
+ return connection
+
+
+def wrap_create_pool(
+ name: str,
+ database_component: str,
+ database_type: str = "",
+ connection_attributes: typing.Dict = None,
+ version: str = "",
+ tracer_provider: typing.Optional[TracerProvider] = None,
+):
+ # pylint: disable=unused-argument
+ async def wrap_create_pool_(
+ wrapped: typing.Callable[..., typing.Any],
+ instance: typing.Any,
+ args: typing.Tuple[typing.Any, typing.Any],
+ kwargs: typing.Dict[typing.Any, typing.Any],
+ ):
+ db_integration = AiopgIntegration(
+ name,
+ database_component,
+ database_type,
+ connection_attributes=connection_attributes,
+ version=version,
+ tracer_provider=tracer_provider,
+ )
+ return await db_integration.wrapped_pool(wrapped, args, kwargs)
+
+ try:
+ wrapt.wrap_function_wrapper(aiopg, "create_pool", wrap_create_pool_)
+ except Exception as ex: # pylint: disable=broad-except
+ logger.warning("Failed to integrate with DB API. %s", str(ex))
+
+
+def unwrap_create_pool():
+ """"Disable integration with aiopg library.
+ https://github.com/aio-libs/aiopg
+ """
+ unwrap(aiopg, "create_pool")
diff --git a/ext/opentelemetry-instrumentation-aiopg/tests/__init__.py b/ext/opentelemetry-instrumentation-aiopg/tests/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py b/ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py
new file mode 100644
index 00000000000..f7daf7ccc0f
--- /dev/null
+++ b/ext/opentelemetry-instrumentation-aiopg/tests/test_aiopg_integration.py
@@ -0,0 +1,472 @@
+# 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 asyncio
+import logging
+from unittest import mock
+from unittest.mock import MagicMock
+
+import aiopg
+from aiopg.utils import _ContextManager, _PoolAcquireContextManager
+
+import opentelemetry.instrumentation.aiopg
+from opentelemetry import trace as trace_api
+from opentelemetry.instrumentation.aiopg import AiopgInstrumentor, wrappers
+from opentelemetry.instrumentation.aiopg.aiopg_integration import (
+ AiopgIntegration,
+)
+from opentelemetry.sdk import resources
+from opentelemetry.test.test_base import TestBase
+
+
+def async_call(coro):
+ loop = asyncio.get_event_loop()
+ return loop.run_until_complete(coro)
+
+
+class TestAiopgInstrumentor(TestBase):
+ def setUp(self):
+ super().setUp()
+ self.origin_aiopg_connect = aiopg.connect
+ self.origin_aiopg_create_pool = aiopg.create_pool
+ aiopg.connect = mock_connect
+ aiopg.create_pool = mock_create_pool
+
+ def tearDown(self):
+ super().tearDown()
+ aiopg.connect = self.origin_aiopg_connect
+ aiopg.create_pool = self.origin_aiopg_create_pool
+ with self.disable_logging():
+ AiopgInstrumentor().uninstrument()
+
+ def test_instrumentor_connect(self):
+ AiopgInstrumentor().instrument()
+
+ cnx = async_call(aiopg.connect(database="test"))
+
+ cursor = async_call(cnx.cursor())
+
+ query = "SELECT * FROM test"
+ async_call(cursor.execute(query))
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+
+ # Check version and name in span's instrumentation info
+ self.check_span_instrumentation_info(
+ span, opentelemetry.instrumentation.aiopg
+ )
+
+ # check that no spans are generated after uninstrument
+ AiopgInstrumentor().uninstrument()
+
+ cnx = async_call(aiopg.connect(database="test"))
+ cursor = async_call(cnx.cursor())
+ query = "SELECT * FROM test"
+ cursor.execute(query)
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+
+ def test_instrumentor_create_pool(self):
+ AiopgInstrumentor().instrument()
+
+ pool = async_call(aiopg.create_pool(database="test"))
+ cnx = async_call(pool.acquire())
+ cursor = async_call(cnx.cursor())
+
+ query = "SELECT * FROM test"
+ async_call(cursor.execute(query))
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+
+ # Check version and name in span's instrumentation info
+ self.check_span_instrumentation_info(
+ span, opentelemetry.instrumentation.aiopg
+ )
+
+ # check that no spans are generated after uninstrument
+ AiopgInstrumentor().uninstrument()
+
+ pool = async_call(aiopg.create_pool(database="test"))
+ cnx = async_call(pool.acquire())
+ cursor = async_call(cnx.cursor())
+ query = "SELECT * FROM test"
+ cursor.execute(query)
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+
+ def test_custom_tracer_provider_connect(self):
+ resource = resources.Resource.create({})
+ result = self.create_tracer_provider(resource=resource)
+ tracer_provider, exporter = result
+
+ AiopgInstrumentor().instrument(tracer_provider=tracer_provider)
+
+ cnx = async_call(aiopg.connect(database="test"))
+ cursor = async_call(cnx.cursor())
+ query = "SELECT * FROM test"
+ async_call(cursor.execute(query))
+
+ spans_list = exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+ self.assertIs(span.resource, resource)
+
+ def test_custom_tracer_provider_create_pool(self):
+ resource = resources.Resource.create({})
+ result = self.create_tracer_provider(resource=resource)
+ tracer_provider, exporter = result
+
+ AiopgInstrumentor().instrument(tracer_provider=tracer_provider)
+
+ pool = async_call(aiopg.create_pool(database="test"))
+ cnx = async_call(pool.acquire())
+ cursor = async_call(cnx.cursor())
+ query = "SELECT * FROM test"
+ async_call(cursor.execute(query))
+
+ spans_list = exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+
+ self.assertIs(span.resource, resource)
+
+ def test_instrument_connection(self):
+ cnx = async_call(aiopg.connect(database="test"))
+ query = "SELECT * FROM test"
+ cursor = async_call(cnx.cursor())
+ async_call(cursor.execute(query))
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 0)
+
+ cnx = AiopgInstrumentor().instrument_connection(cnx)
+ cursor = async_call(cnx.cursor())
+ async_call(cursor.execute(query))
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+
+ def test_uninstrument_connection(self):
+ AiopgInstrumentor().instrument()
+ cnx = async_call(aiopg.connect(database="test"))
+ query = "SELECT * FROM test"
+ cursor = async_call(cnx.cursor())
+ async_call(cursor.execute(query))
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+
+ cnx = AiopgInstrumentor().uninstrument_connection(cnx)
+ cursor = async_call(cnx.cursor())
+ async_call(cursor.execute(query))
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+
+
+class TestAiopgIntegration(TestBase):
+ def setUp(self):
+ super().setUp()
+ self.tracer = self.tracer_provider.get_tracer(__name__)
+
+ def test_span_succeeded(self):
+ connection_props = {
+ "database": "testdatabase",
+ "server_host": "testhost",
+ "server_port": 123,
+ "user": "testuser",
+ }
+ connection_attributes = {
+ "database": "database",
+ "port": "server_port",
+ "host": "server_host",
+ "user": "user",
+ }
+ db_integration = AiopgIntegration(
+ self.tracer, "testcomponent", "testtype", connection_attributes
+ )
+ mock_connection = async_call(
+ db_integration.wrapped_connection(
+ mock_connect, {}, connection_props
+ )
+ )
+ cursor = async_call(mock_connection.cursor())
+ async_call(cursor.execute("Test query", ("param1Value", False)))
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+ self.assertEqual(span.name, "testcomponent.testdatabase")
+ self.assertIs(span.kind, trace_api.SpanKind.CLIENT)
+
+ self.assertEqual(span.attributes["component"], "testcomponent")
+ self.assertEqual(span.attributes["db.type"], "testtype")
+ self.assertEqual(span.attributes["db.instance"], "testdatabase")
+ self.assertEqual(span.attributes["db.statement"], "Test query")
+ self.assertEqual(
+ span.attributes["db.statement.parameters"],
+ "('param1Value', False)",
+ )
+ self.assertEqual(span.attributes["db.user"], "testuser")
+ self.assertEqual(span.attributes["net.peer.name"], "testhost")
+ self.assertEqual(span.attributes["net.peer.port"], 123)
+ self.assertIs(
+ span.status.canonical_code,
+ trace_api.status.StatusCanonicalCode.OK,
+ )
+
+ def test_span_failed(self):
+ db_integration = AiopgIntegration(self.tracer, "testcomponent")
+ mock_connection = async_call(
+ db_integration.wrapped_connection(mock_connect, {}, {})
+ )
+ cursor = async_call(mock_connection.cursor())
+ with self.assertRaises(Exception):
+ async_call(cursor.execute("Test query", throw_exception=True))
+
+ spans_list = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+ self.assertEqual(span.attributes["db.statement"], "Test query")
+ self.assertIs(
+ span.status.canonical_code,
+ trace_api.status.StatusCanonicalCode.UNKNOWN,
+ )
+ self.assertEqual(span.status.description, "Test Exception")
+
+ def test_executemany(self):
+ db_integration = AiopgIntegration(self.tracer, "testcomponent")
+ mock_connection = async_call(
+ db_integration.wrapped_connection(mock_connect, {}, {})
+ )
+ cursor = async_call(mock_connection.cursor())
+ async_call(cursor.executemany("Test query"))
+ spans_list = self.memory_exporter.get_finished_spans()
+
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+ self.assertEqual(span.attributes["db.statement"], "Test query")
+
+ def test_callproc(self):
+ db_integration = AiopgIntegration(self.tracer, "testcomponent")
+ mock_connection = async_call(
+ db_integration.wrapped_connection(mock_connect, {}, {})
+ )
+ cursor = async_call(mock_connection.cursor())
+ async_call(cursor.callproc("Test stored procedure"))
+ spans_list = self.memory_exporter.get_finished_spans()
+
+ self.assertEqual(len(spans_list), 1)
+ span = spans_list[0]
+ self.assertEqual(
+ span.attributes["db.statement"], "Test stored procedure"
+ )
+
+ def test_wrap_connect(self):
+ aiopg_mock = AiopgMock()
+ with mock.patch("aiopg.connect", aiopg_mock.connect):
+ wrappers.wrap_connect(self.tracer, "-")
+ connection = async_call(aiopg.connect())
+ self.assertEqual(aiopg_mock.connect_call_count, 1)
+ self.assertIsInstance(connection.__wrapped__, mock.Mock)
+
+ def test_unwrap_connect(self):
+ wrappers.wrap_connect(self.tracer, "-")
+ aiopg_mock = AiopgMock()
+ with mock.patch("aiopg.connect", aiopg_mock.connect):
+ connection = async_call(aiopg.connect())
+ self.assertEqual(aiopg_mock.connect_call_count, 1)
+ wrappers.unwrap_connect()
+ connection = async_call(aiopg.connect())
+ self.assertEqual(aiopg_mock.connect_call_count, 2)
+ self.assertIsInstance(connection, mock.Mock)
+
+ def test_wrap_create_pool(self):
+ async def check_connection(pool):
+ async with pool.acquire() as connection:
+ self.assertEqual(aiopg_mock.create_pool_call_count, 1)
+ self.assertIsInstance(
+ connection.__wrapped__, AiopgConnectionMock
+ )
+
+ aiopg_mock = AiopgMock()
+ with mock.patch("aiopg.create_pool", aiopg_mock.create_pool):
+ wrappers.wrap_create_pool(self.tracer, "-")
+ pool = async_call(aiopg.create_pool())
+ async_call(check_connection(pool))
+
+ def test_unwrap_create_pool(self):
+ async def check_connection(pool):
+ async with pool.acquire() as connection:
+ self.assertEqual(aiopg_mock.create_pool_call_count, 2)
+ self.assertIsInstance(connection, AiopgConnectionMock)
+
+ aiopg_mock = AiopgMock()
+ with mock.patch("aiopg.create_pool", aiopg_mock.create_pool):
+ wrappers.wrap_create_pool(self.tracer, "-")
+ pool = async_call(aiopg.create_pool())
+ self.assertEqual(aiopg_mock.create_pool_call_count, 1)
+
+ wrappers.unwrap_create_pool()
+ pool = async_call(aiopg.create_pool())
+ async_call(check_connection(pool))
+
+ def test_instrument_connection(self):
+ connection = mock.Mock()
+ # Avoid get_attributes failing because can't concatenate mock
+ connection.database = "-"
+ connection2 = wrappers.instrument_connection(
+ self.tracer, connection, "-"
+ )
+ self.assertIs(connection2.__wrapped__, connection)
+
+ def test_uninstrument_connection(self):
+ connection = mock.Mock()
+ # Set connection.database to avoid a failure because mock can't
+ # be concatenated
+ connection.database = "-"
+ connection2 = wrappers.instrument_connection(
+ self.tracer, connection, "-"
+ )
+ self.assertIs(connection2.__wrapped__, connection)
+
+ connection3 = wrappers.uninstrument_connection(connection2)
+ self.assertIs(connection3, connection)
+
+ with self.assertLogs(level=logging.WARNING):
+ connection4 = wrappers.uninstrument_connection(connection)
+ self.assertIs(connection4, connection)
+
+
+# pylint: disable=unused-argument
+async def mock_connect(*args, **kwargs):
+ database = kwargs.get("database")
+ server_host = kwargs.get("server_host")
+ server_port = kwargs.get("server_port")
+ user = kwargs.get("user")
+ return MockConnection(database, server_port, server_host, user)
+
+
+# pylint: disable=unused-argument
+async def mock_create_pool(*args, **kwargs):
+ database = kwargs.get("database")
+ server_host = kwargs.get("server_host")
+ server_port = kwargs.get("server_port")
+ user = kwargs.get("user")
+ return MockPool(database, server_port, server_host, user)
+
+
+class MockPool:
+ def __init__(self, database, server_port, server_host, user):
+ self.database = database
+ self.server_port = server_port
+ self.server_host = server_host
+ self.user = user
+
+ async def release(self, conn):
+ return conn
+
+ def acquire(self):
+ """Acquire free connection from the pool."""
+ coro = self._acquire()
+ return _PoolAcquireContextManager(coro, self)
+
+ async def _acquire(self):
+ connect = await mock_connect(
+ self.database, self.server_port, self.server_host, self.user
+ )
+ return connect
+
+
+class MockPsycopg2Connection:
+ def __init__(self, database, server_port, server_host, user):
+ self.database = database
+ self.server_port = server_port
+ self.server_host = server_host
+ self.user = user
+
+
+class MockConnection:
+ def __init__(self, database, server_port, server_host, user):
+ self._conn = MockPsycopg2Connection(
+ database, server_port, server_host, user
+ )
+
+ # pylint: disable=no-self-use
+ def cursor(self):
+ coro = self._cursor()
+ return _ContextManager(coro)
+
+ async def _cursor(self):
+ return MockCursor()
+
+ def close(self):
+ pass
+
+
+class MockCursor:
+ # pylint: disable=unused-argument, no-self-use
+ async def execute(self, query, params=None, throw_exception=False):
+ if throw_exception:
+ raise Exception("Test Exception")
+
+ # pylint: disable=unused-argument, no-self-use
+ async def executemany(self, query, params=None, throw_exception=False):
+ if throw_exception:
+ raise Exception("Test Exception")
+
+ # pylint: disable=unused-argument, no-self-use
+ async def callproc(self, query, params=None, throw_exception=False):
+ if throw_exception:
+ raise Exception("Test Exception")
+
+
+class AiopgConnectionMock:
+ _conn = MagicMock()
+
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
+ pass
+
+ async def __aenter__(self):
+ return MagicMock()
+
+
+class AiopgPoolMock:
+ async def release(self, conn):
+ return conn
+
+ def acquire(self):
+ coro = self._acquire()
+ return _PoolAcquireContextManager(coro, self)
+
+ async def _acquire(self):
+ return AiopgConnectionMock()
+
+
+class AiopgMock:
+ def __init__(self):
+ self.connect_call_count = 0
+ self.create_pool_call_count = 0
+
+ async def connect(self, *args, **kwargs):
+ self.connect_call_count += 1
+ return MagicMock()
+
+ async def create_pool(self, *args, **kwargs):
+ self.create_pool_call_count += 1
+ return AiopgPoolMock()
diff --git a/tox.ini b/tox.ini
index ad7b8ad3e92..f956733d566 100644
--- a/tox.ini
+++ b/tox.ini
@@ -32,6 +32,10 @@ envlist =
py3{5,6,7,8}-test-instrumentation-aiohttp-client
pypy3-test-instrumentation-aiohttp-client
+ ; opentelemetry-instrumentation-aiopg
+ py3{5,6,7,8}-test-instrumentation-aiopg
+ ; instrumentation-aiopg intentionally excluded from pypy3
+
; opentelemetry-ext-botocore
py3{6,7,8}-test-instrumentation-botocore
pypy3-test-instrumentation-botocore
@@ -116,7 +120,7 @@ envlist =
; opentelemetry-ext-pyramid
py3{4,5,6,7,8}-test-instrumentation-pyramid
pypy3-test-instrumentation-pyramid
-
+
; opentelemetry-ext-asgi
py3{5,6,7,8}-test-instrumentation-asgi
pypy3-test-instrumentation-asgi
@@ -194,6 +198,7 @@ changedir =
test-core-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests
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-asyncpg: ext/opentelemetry-ext-asyncpg/tests
test-instrumentation-boto: ext/opentelemetry-ext-boto/tests
@@ -295,6 +300,8 @@ commands_pre =
aiohttp-client: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/ext/opentelemetry-ext-aiohttp-client
+ aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/ext/opentelemetry-instrumentation-aiopg[test]
+
jaeger: pip install {toxinidir}/ext/opentelemetry-ext-jaeger
opentracing-shim: pip install {toxinidir}/opentelemetry-sdk
@@ -392,6 +399,7 @@ deps =
pymongo ~= 3.1
pymysql ~= 0.9.3
psycopg2-binary ~= 2.8.4
+ aiopg >= 0.13.0
sqlalchemy ~= 1.3.16
redis ~= 3.3.11
celery ~= 4.0, != 4.4.4
@@ -412,6 +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}/ext/opentelemetry-ext-redis \
-e {toxinidir}/ext/opentelemetry-ext-system-metrics \
-e {toxinidir}/ext/opentelemetry-ext-opencensusexporter
From 935280c3b8820351d9761c786148f1ff0e9b120d Mon Sep 17 00:00:00 2001
From: alrex
Date: Fri, 24 Jul 2020 08:48:44 -0700
Subject: [PATCH 46/79] api/sdk: Rename record_error to record_exception per
spec (#927)
---
opentelemetry-api/CHANGELOG.md | 2 ++
.../src/opentelemetry/trace/span.py | 6 +++---
opentelemetry-sdk/CHANGELOG.md | 2 ++
.../src/opentelemetry/sdk/trace/__init__.py | 12 ++++++------
opentelemetry-sdk/tests/trace/test_trace.py | 19 ++++++++++++-------
5 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md
index 413946b85b9..d6348459917 100644
--- a/opentelemetry-api/CHANGELOG.md
+++ b/opentelemetry-api/CHANGELOG.md
@@ -4,6 +4,8 @@
- Return INVALID_SPAN if no TracerProvider set for get_current_span
([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751))
+- Rename record_error to record_exception
+ ([#927](https://github.com/open-telemetry/opentelemetry-python/pull/927))
## 0.9b0
diff --git a/opentelemetry-api/src/opentelemetry/trace/span.py b/opentelemetry-api/src/opentelemetry/trace/span.py
index baea6670f63..d207ecf565b 100644
--- a/opentelemetry-api/src/opentelemetry/trace/span.py
+++ b/opentelemetry-api/src/opentelemetry/trace/span.py
@@ -89,8 +89,8 @@ def set_status(self, status: Status) -> None:
"""
@abc.abstractmethod
- def record_error(self, err: Exception) -> None:
- """Records an error as a span event."""
+ def record_exception(self, exception: Exception) -> None:
+ """Records an exception as a span event."""
def __enter__(self) -> "Span":
"""Invoked when `Span` is used as a context manager.
@@ -257,7 +257,7 @@ def update_name(self, name: str) -> None:
def set_status(self, status: Status) -> None:
pass
- def record_error(self, err: Exception) -> None:
+ def record_exception(self, exception: Exception) -> None:
pass
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index 46ad8b8e29c..6427b2c9b51 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -4,6 +4,8 @@
- Add support for resources and resource detector
([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
+- Rename record_error to record_exception
+ ([#927](https://github.com/open-telemetry/opentelemetry-python/pull/927))
## Version 0.10b0
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
index 1118b424888..848f571e6a8 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
@@ -683,14 +683,14 @@ def __exit__(
super().__exit__(exc_type, exc_val, exc_tb)
- def record_error(self, err: Exception) -> None:
- """Records an error as a span event."""
+ def record_exception(self, exception: Exception) -> None:
+ """Records an exception as a span event."""
self.add_event(
- name="error",
+ name="exception",
attributes={
- "error.type": err.__class__.__name__,
- "error.message": str(err),
- "error.stack": traceback.format_exc(),
+ "exception.type": exception.__class__.__name__,
+ "exception.message": str(exception),
+ "exception.stacktrace": traceback.format_exc(),
},
)
diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py
index a43db73a3da..02cc836e882 100644
--- a/opentelemetry-sdk/tests/trace/test_trace.py
+++ b/opentelemetry-sdk/tests/trace/test_trace.py
@@ -801,18 +801,23 @@ def error_status_test(context):
.start_as_current_span("root")
)
- def test_record_error(self):
+ def test_record_exception(self):
span = trace.Span("name", mock.Mock(spec=trace_api.SpanContext))
try:
raise ValueError("invalid")
except ValueError as err:
- span.record_error(err)
- error_event = span.events[0]
- self.assertEqual("error", error_event.name)
- self.assertEqual("invalid", error_event.attributes["error.message"])
- self.assertEqual("ValueError", error_event.attributes["error.type"])
+ span.record_exception(err)
+ exception_event = span.events[0]
+ self.assertEqual("exception", exception_event.name)
+ self.assertEqual(
+ "invalid", exception_event.attributes["exception.message"]
+ )
+ self.assertEqual(
+ "ValueError", exception_event.attributes["exception.type"]
+ )
self.assertIn(
- "ValueError: invalid", error_event.attributes["error.stack"]
+ "ValueError: invalid",
+ exception_event.attributes["exception.stacktrace"],
)
From 004896f1987e84b2d8f5c84bb1505099e178694c Mon Sep 17 00:00:00 2001
From: achronak
Date: Fri, 24 Jul 2020 21:43:19 +0300
Subject: [PATCH 47/79] docs: Update README.rst (#935)
---
docs/examples/basic_meter/README.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/examples/basic_meter/README.rst b/docs/examples/basic_meter/README.rst
index d77fbb7c4bb..46efe363883 100644
--- a/docs/examples/basic_meter/README.rst
+++ b/docs/examples/basic_meter/README.rst
@@ -5,7 +5,7 @@ These examples show how to use OpenTelemetry to capture and report metrics.
There are three different examples:
-* basic_metrics: Shows to how create a metric instrument, how to configure an
+* basic_metrics: Shows how to create a metric instrument, how to configure an
exporter and a controller and also how to capture data by using the direct
calling convention.
From 4a922d6b4f3a0f3c624b401a7d249fca0af996ce Mon Sep 17 00:00:00 2001
From: alrex
Date: Mon, 27 Jul 2020 08:05:09 -0700
Subject: [PATCH 48/79] meta: adding aabmass as approver (#941)
once approved the PR, aabmass will be added to the approvers team
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index c4e335589d6..624166d25e2 100644
--- a/README.md
+++ b/README.md
@@ -103,6 +103,7 @@ Meeting notes are available as a public [Google doc](https://docs.google.com/doc
Approvers ([@open-telemetry/python-approvers](https://github.com/orgs/open-telemetry/teams/python-approvers)):
+- [Aaron Abbott](https://github.com/aabmass), Google
- [Carlos Alberto Cortez](https://github.com/carlosalberto), Lightstep
- [Tahir H. Butt](https://github.com/majorgreys) DataDog
- [Chris Kleinknecht](https://github.com/c24t), Google
From 090fb7c68417270339a4486574f51b6960d82944 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mauricio=20V=C3=A1squez?=
Date: Mon, 27 Jul 2020 17:44:39 -0500
Subject: [PATCH 49/79] Drop mauriciovasquezbernal from approvers (#948)
I haven't contributed to the project in a while and I don't expect to start
contributing again. This commit removes myself as an approver of the project.
---
README.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/README.md b/README.md
index 624166d25e2..a402e5c73e9 100644
--- a/README.md
+++ b/README.md
@@ -109,7 +109,6 @@ Approvers ([@open-telemetry/python-approvers](https://github.com/orgs/open-telem
- [Chris Kleinknecht](https://github.com/c24t), Google
- [Diego Hurtado](https://github.com/ocelotl)
- [Hector Hernandez](https://github.com/hectorhdzg), Microsoft
-- [Mauricio Vásquez](https://github.com/mauriciovasquezbernal), Kinvolk
- [Reiley Yang](https://github.com/reyang), Microsoft
- [Yusuke Tsutsumi](https://github.com/toumorokoshi), Google
From 7f74a890086de2dc0fd34a6ba6d926b3b3fd82e5 Mon Sep 17 00:00:00 2001
From: Thomas Desrosiers <681004+thomasdesr@users.noreply.github.com>
Date: Tue, 28 Jul 2020 11:40:32 -0400
Subject: [PATCH 50/79] ext/asyncpg: Shouldn't capture query parameters by
default (#854)
* Update CHANGELOG.md
Co-authored-by: alrex
---
ext/opentelemetry-ext-asyncpg/CHANGELOG.md | 3 +
.../src/opentelemetry/ext/asyncpg/__init__.py | 66 ++++---
.../tests/asyncpg/test_asyncpg_functional.py | 176 +++++++++++-------
3 files changed, 150 insertions(+), 95 deletions(-)
diff --git a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
index e81079bfb8c..052b66ea4e5 100644
--- a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
+++ b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Shouldn't capture query parameters by default
+ ([#854](https://github.com/open-telemetry/opentelemetry-python/pull/854))
+
## Version 0.10b0
Released 2020-06-23
diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py
index c373d7194dc..4a3a51ac08d 100644
--- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py
+++ b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/__init__.py
@@ -74,36 +74,11 @@ def _hydrate_span_from_args(connection, query, parameters) -> dict:
return span_attributes
-async def _do_execute(func, instance, args, kwargs):
- span_attributes = _hydrate_span_from_args(instance, args[0], args[1:])
- tracer = getattr(asyncpg, _APPLIED)
-
- exception = None
-
- with tracer.start_as_current_span(
- "postgresql", kind=SpanKind.CLIENT
- ) as span:
-
- for attribute, value in span_attributes.items():
- span.set_attribute(attribute, value)
-
- try:
- result = await func(*args, **kwargs)
- except Exception as exc: # pylint: disable=W0703
- exception = exc
- raise
- finally:
- if exception is not None:
- span.set_status(
- Status(_exception_to_canonical_code(exception))
- )
- else:
- span.set_status(Status(StatusCanonicalCode.OK))
-
- return result
-
-
class AsyncPGInstrumentor(BaseInstrumentor):
+ def __init__(self, capture_parameters=False):
+ super().__init__()
+ self.capture_parameters = capture_parameters
+
def _instrument(self, **kwargs):
tracer_provider = kwargs.get(
"tracer_provider", trace.get_tracer_provider()
@@ -113,6 +88,7 @@ def _instrument(self, **kwargs):
_APPLIED,
tracer_provider.get_tracer("asyncpg", __version__),
)
+
for method in [
"Connection.execute",
"Connection.executemany",
@@ -121,7 +97,7 @@ def _instrument(self, **kwargs):
"Connection.fetchrow",
]:
wrapt.wrap_function_wrapper(
- "asyncpg.connection", method, _do_execute
+ "asyncpg.connection", method, self._do_execute
)
def _uninstrument(self, **__):
@@ -134,3 +110,33 @@ def _uninstrument(self, **__):
"fetchrow",
]:
unwrap(asyncpg.Connection, method)
+
+ async def _do_execute(self, func, instance, args, kwargs):
+ span_attributes = _hydrate_span_from_args(
+ instance, args[0], args[1:] if self.capture_parameters else None,
+ )
+ tracer = getattr(asyncpg, _APPLIED)
+
+ exception = None
+
+ with tracer.start_as_current_span(
+ "postgresql", kind=SpanKind.CLIENT
+ ) as span:
+
+ for attribute, value in span_attributes.items():
+ span.set_attribute(attribute, value)
+
+ try:
+ result = await func(*args, **kwargs)
+ except Exception as exc: # pylint: disable=W0703
+ exception = exc
+ raise
+ finally:
+ if exception is not None:
+ span.set_status(
+ Status(_exception_to_canonical_code(exception))
+ )
+ else:
+ span.set_status(Status(StatusCanonicalCode.OK))
+
+ return result
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 c5f55574381..d3060592a64 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
@@ -19,7 +19,7 @@ def _await(coro):
return loop.run_until_complete(coro)
-class TestFunctionalPsycopg(TestBase):
+class TestFunctionalAsyncPG(TestBase):
@classmethod
def setUpClass(cls):
super().setUpClass()
@@ -58,24 +58,6 @@ def test_instrumented_execute_method_without_arguments(self, *_, **__):
},
)
- def test_instrumented_execute_method_with_arguments(self, *_, **__):
- _await(self._connection.execute("SELECT $1;", "1"))
- spans = self.memory_exporter.get_finished_spans()
- self.assertEqual(len(spans), 1)
- self.assertEqual(
- StatusCanonicalCode.OK, spans[0].status.canonical_code
- )
- self.assertEqual(
- spans[0].attributes,
- {
- "db.type": "sql",
- "db.user": POSTGRES_USER,
- "db.statement.parameters": "('1',)",
- "db.instance": POSTGRES_DB_NAME,
- "db.statement": "SELECT $1;",
- },
- )
-
def test_instrumented_fetch_method_without_arguments(self, *_, **__):
_await(self._connection.fetch("SELECT 42;"))
spans = self.memory_exporter.get_finished_spans()
@@ -90,52 +72,6 @@ def test_instrumented_fetch_method_without_arguments(self, *_, **__):
},
)
- def test_instrumented_fetch_method_with_arguments(self, *_, **__):
- _await(self._connection.fetch("SELECT $1;", "1"))
- spans = self.memory_exporter.get_finished_spans()
- self.assertEqual(len(spans), 1)
- self.assertEqual(
- spans[0].attributes,
- {
- "db.type": "sql",
- "db.user": POSTGRES_USER,
- "db.statement.parameters": "('1',)",
- "db.instance": POSTGRES_DB_NAME,
- "db.statement": "SELECT $1;",
- },
- )
-
- def test_instrumented_executemany_method_with_arguments(self, *_, **__):
- _await(self._connection.executemany("SELECT $1;", [["1"], ["2"]]))
- spans = self.memory_exporter.get_finished_spans()
- self.assertEqual(len(spans), 1)
- self.assertEqual(
- {
- "db.type": "sql",
- "db.statement": "SELECT $1;",
- "db.statement.parameters": "([['1'], ['2']],)",
- "db.user": POSTGRES_USER,
- "db.instance": POSTGRES_DB_NAME,
- },
- spans[0].attributes,
- )
-
- def test_instrumented_execute_interface_error_method(self, *_, **__):
- with self.assertRaises(asyncpg.InterfaceError):
- _await(self._connection.execute("SELECT 42;", 1, 2, 3))
- spans = self.memory_exporter.get_finished_spans()
- self.assertEqual(len(spans), 1)
- self.assertEqual(
- spans[0].attributes,
- {
- "db.type": "sql",
- "db.instance": POSTGRES_DB_NAME,
- "db.user": POSTGRES_USER,
- "db.statement.parameters": "(1, 2, 3)",
- "db.statement": "SELECT 42;",
- },
- )
-
def test_instrumented_transaction_method(self, *_, **__):
async def _transaction_execute():
async with self._connection.transaction():
@@ -229,3 +165,113 @@ async def _transaction_execute():
self.assertEqual(
StatusCanonicalCode.OK, spans[2].status.canonical_code
)
+
+ def test_instrumented_method_doesnt_capture_parameters(self, *_, **__):
+ _await(self._connection.execute("SELECT $1;", "1"))
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 1)
+ self.assertEqual(
+ StatusCanonicalCode.OK, spans[0].status.canonical_code
+ )
+ self.assertEqual(
+ spans[0].attributes,
+ {
+ "db.type": "sql",
+ "db.user": POSTGRES_USER,
+ # This shouldn't be set because we don't capture parameters by
+ # default
+ #
+ # "db.statement.parameters": "('1',)",
+ "db.instance": POSTGRES_DB_NAME,
+ "db.statement": "SELECT $1;",
+ },
+ )
+
+
+class TestFunctionalAsyncPG_CaptureParameters(TestBase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls._connection = None
+ cls._cursor = None
+ cls._tracer = cls.tracer_provider.get_tracer(__name__)
+ AsyncPGInstrumentor(capture_parameters=True).instrument(
+ tracer_provider=cls.tracer_provider
+ )
+ cls._connection = _await(
+ asyncpg.connect(
+ database=POSTGRES_DB_NAME,
+ user=POSTGRES_USER,
+ password=POSTGRES_PASSWORD,
+ host=POSTGRES_HOST,
+ port=POSTGRES_PORT,
+ )
+ )
+
+ @classmethod
+ def tearDownClass(cls):
+ AsyncPGInstrumentor().uninstrument()
+
+ def test_instrumented_execute_method_with_arguments(self, *_, **__):
+ _await(self._connection.execute("SELECT $1;", "1"))
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 1)
+ self.assertEqual(
+ StatusCanonicalCode.OK, spans[0].status.canonical_code
+ )
+ self.assertEqual(
+ spans[0].attributes,
+ {
+ "db.type": "sql",
+ "db.user": POSTGRES_USER,
+ "db.statement.parameters": "('1',)",
+ "db.instance": POSTGRES_DB_NAME,
+ "db.statement": "SELECT $1;",
+ },
+ )
+
+ def test_instrumented_fetch_method_with_arguments(self, *_, **__):
+ _await(self._connection.fetch("SELECT $1;", "1"))
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 1)
+ self.assertEqual(
+ spans[0].attributes,
+ {
+ "db.type": "sql",
+ "db.user": POSTGRES_USER,
+ "db.statement.parameters": "('1',)",
+ "db.instance": POSTGRES_DB_NAME,
+ "db.statement": "SELECT $1;",
+ },
+ )
+
+ def test_instrumented_executemany_method_with_arguments(self, *_, **__):
+ _await(self._connection.executemany("SELECT $1;", [["1"], ["2"]]))
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 1)
+ self.assertEqual(
+ {
+ "db.type": "sql",
+ "db.statement": "SELECT $1;",
+ "db.statement.parameters": "([['1'], ['2']],)",
+ "db.user": POSTGRES_USER,
+ "db.instance": POSTGRES_DB_NAME,
+ },
+ spans[0].attributes,
+ )
+
+ def test_instrumented_execute_interface_error_method(self, *_, **__):
+ with self.assertRaises(asyncpg.InterfaceError):
+ _await(self._connection.execute("SELECT 42;", 1, 2, 3))
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 1)
+ self.assertEqual(
+ spans[0].attributes,
+ {
+ "db.type": "sql",
+ "db.instance": POSTGRES_DB_NAME,
+ "db.user": POSTGRES_USER,
+ "db.statement.parameters": "(1, 2, 3)",
+ "db.statement": "SELECT 42;",
+ },
+ )
From 8bc7786b191b4f1b1f161de983db71643bf9f51e Mon Sep 17 00:00:00 2001
From: alrex
Date: Tue, 28 Jul 2020 09:18:19 -0700
Subject: [PATCH 51/79] chore: create pull_request_template.md (#952)
---
.github/pull_request_template.md | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 .github/pull_request_template.md
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 00000000000..2281d05e176
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,27 @@
+# Description
+
+Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
+
+Fixes # (issue)
+
+## Type of change
+
+Please delete options that are not relevant.
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
+- [ ] This change requires a documentation update
+
+# How Has This Been Tested?
+
+Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
+
+- [ ] Test A
+
+# Checklist:
+
+- [ ] Followed the style guidelines of this project
+- [ ] Changelogs have been updated
+- [ ] Unit tests have been added
+- [ ] Documentation has been updated
From f682cf57a90828f24969281a98980a7dafe0ee26 Mon Sep 17 00:00:00 2001
From: alrex
Date: Tue, 28 Jul 2020 13:26:40 -0700
Subject: [PATCH 52/79] release: updating versions and changelogs (#954)
---
docs/examples/opentelemetry-example-app/setup.cfg | 8 ++++----
.../src/opentelemetry_example_app/version.py | 2 +-
ext/opentelemetry-ext-aiohttp-client/setup.cfg | 4 ++--
.../src/opentelemetry/ext/aiohttp_client/version.py | 2 +-
ext/opentelemetry-ext-asgi/setup.cfg | 4 ++--
.../src/opentelemetry/ext/asgi/version.py | 2 +-
ext/opentelemetry-ext-asyncpg/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-asyncpg/setup.cfg | 6 +++---
.../src/opentelemetry/ext/asyncpg/version.py | 2 +-
ext/opentelemetry-ext-boto/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-boto/setup.cfg | 6 +++---
.../src/opentelemetry/ext/boto/version.py | 2 +-
ext/opentelemetry-ext-botocore/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-botocore/setup.cfg | 6 +++---
.../src/opentelemetry/ext/botocore/version.py | 2 +-
ext/opentelemetry-ext-celery/setup.cfg | 6 +++---
.../src/opentelemetry/ext/celery/version.py | 2 +-
ext/opentelemetry-ext-datadog/setup.cfg | 4 ++--
.../src/opentelemetry/ext/datadog/version.py | 2 +-
ext/opentelemetry-ext-dbapi/setup.cfg | 6 +++---
.../src/opentelemetry/ext/dbapi/version.py | 2 +-
ext/opentelemetry-ext-django/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-django/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/django/version.py | 2 +-
ext/opentelemetry-ext-elasticsearch/setup.cfg | 6 +++---
.../src/opentelemetry/ext/elasticsearch/version.py | 2 +-
ext/opentelemetry-ext-flask/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-flask/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/flask/version.py | 2 +-
ext/opentelemetry-ext-grpc/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-grpc/setup.cfg | 6 +++---
.../src/opentelemetry/ext/grpc/version.py | 2 +-
ext/opentelemetry-ext-jaeger/setup.cfg | 4 ++--
.../src/opentelemetry/ext/jaeger/version.py | 2 +-
ext/opentelemetry-ext-jinja2/setup.cfg | 6 +++---
.../src/opentelemetry/ext/jinja2/version.py | 2 +-
ext/opentelemetry-ext-mysql/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-mysql/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/mysql/version.py | 2 +-
ext/opentelemetry-ext-opencensusexporter/setup.cfg | 4 ++--
.../src/opentelemetry/ext/opencensusexporter/version.py | 2 +-
ext/opentelemetry-ext-opentracing-shim/setup.cfg | 4 ++--
.../src/opentelemetry/ext/opentracing_shim/version.py | 2 +-
ext/opentelemetry-ext-otlp/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-otlp/setup.cfg | 6 +++---
.../src/opentelemetry/ext/otlp/version.py | 2 +-
ext/opentelemetry-ext-prometheus/setup.cfg | 4 ++--
.../src/opentelemetry/ext/prometheus/version.py | 2 +-
ext/opentelemetry-ext-psycopg2/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/psycopg2/version.py | 2 +-
ext/opentelemetry-ext-pymemcache/setup.cfg | 6 +++---
.../src/opentelemetry/ext/pymemcache/version.py | 2 +-
ext/opentelemetry-ext-pymongo/setup.cfg | 6 +++---
.../src/opentelemetry/ext/pymongo/version.py | 2 +-
ext/opentelemetry-ext-pymysql/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/pymysql/version.py | 2 +-
ext/opentelemetry-ext-pyramid/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-pyramid/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/pyramid/version.py | 2 +-
ext/opentelemetry-ext-redis/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/redis/version.py | 2 +-
ext/opentelemetry-ext-requests/setup.cfg | 6 +++---
.../src/opentelemetry/ext/requests/version.py | 2 +-
ext/opentelemetry-ext-sqlalchemy/setup.cfg | 6 +++---
.../src/opentelemetry/ext/sqlalchemy/version.py | 2 +-
ext/opentelemetry-ext-sqlite3/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/sqlite3/version.py | 2 +-
ext/opentelemetry-ext-system-metrics/setup.cfg | 4 ++--
.../src/opentelemetry/ext/system_metrics/version.py | 2 +-
ext/opentelemetry-ext-wsgi/CHANGELOG.md | 4 ++++
ext/opentelemetry-ext-wsgi/setup.cfg | 6 +++---
.../src/opentelemetry/ext/wsgi/version.py | 2 +-
ext/opentelemetry-ext-zipkin/setup.cfg | 4 ++--
.../src/opentelemetry/ext/zipkin/version.py | 2 +-
ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md | 4 ++++
ext/opentelemetry-instrumentation-aiopg/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/aiopg/version.py | 2 +-
ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md | 4 ++++
ext/opentelemetry-instrumentation-fastapi/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/fastapi/version.py | 2 +-
ext/opentelemetry-instrumentation-starlette/setup.cfg | 6 +++---
.../opentelemetry/instrumentation/starlette/version.py | 2 +-
opentelemetry-api/CHANGELOG.md | 4 ++++
opentelemetry-api/src/opentelemetry/version.py | 2 +-
opentelemetry-instrumentation/setup.cfg | 2 +-
.../src/opentelemetry/instrumentation/version.py | 2 +-
opentelemetry-proto/src/opentelemetry/proto/version.py | 2 +-
opentelemetry-sdk/CHANGELOG.md | 4 ++++
opentelemetry-sdk/setup.cfg | 2 +-
opentelemetry-sdk/src/opentelemetry/sdk/version.py | 2 +-
tests/util/src/opentelemetry/test/version.py | 2 +-
91 files changed, 204 insertions(+), 148 deletions(-)
diff --git a/docs/examples/opentelemetry-example-app/setup.cfg b/docs/examples/opentelemetry-example-app/setup.cfg
index 185229dc920..8905023bbff 100644
--- a/docs/examples/opentelemetry-example-app/setup.cfg
+++ b/docs/examples/opentelemetry-example-app/setup.cfg
@@ -43,10 +43,10 @@ zip_safe = False
include_package_data = True
install_requires =
typing; python_version<'3.5'
- opentelemetry-api == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
- opentelemetry-ext-requests == 0.11.dev0
- opentelemetry-ext-flask == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-sdk == 0.11b0
+ opentelemetry-ext-requests == 0.11b0
+ opentelemetry-ext-flask == 0.11b0
flask
requests
protobuf~=3.11
diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
index 858e73960ff..15e8d9536da 100644
--- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
+++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/ext/opentelemetry-ext-aiohttp-client/setup.cfg
index 157b6918033..9044083ff72 100644
--- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg
+++ b/ext/opentelemetry-ext-aiohttp-client/setup.cfg
@@ -39,8 +39,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api >= 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api >= 0.11b0
+ opentelemetry-instrumentation == 0.11b0
aiohttp ~= 3.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
index 5924968fb21..ae93e514558 100644
--- a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
+++ b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-asgi/setup.cfg b/ext/opentelemetry-ext-asgi/setup.cfg
index 75b4c12f833..9183287f0d2 100644
--- a/ext/opentelemetry-ext-asgi/setup.cfg
+++ b/ext/opentelemetry-ext-asgi/setup.cfg
@@ -39,8 +39,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
asgiref ~= 3.0
[options.extras_require]
diff --git a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
+++ b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
index 052b66ea4e5..2dc9ad6f044 100644
--- a/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
+++ b/ext/opentelemetry-ext-asyncpg/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Shouldn't capture query parameters by default
([#854](https://github.com/open-telemetry/opentelemetry-python/pull/854))
diff --git a/ext/opentelemetry-ext-asyncpg/setup.cfg b/ext/opentelemetry-ext-asyncpg/setup.cfg
index 786e69f6ee9..2eaa54b8477 100644
--- a/ext/opentelemetry-ext-asyncpg/setup.cfg
+++ b/ext/opentelemetry-ext-asyncpg/setup.cfg
@@ -39,13 +39,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
asyncpg >= 0.12.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
+++ b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-boto/CHANGELOG.md b/ext/opentelemetry-ext-boto/CHANGELOG.md
index 612b73b39a1..ec62b405955 100644
--- a/ext/opentelemetry-ext-boto/CHANGELOG.md
+++ b/ext/opentelemetry-ext-boto/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- ext/boto and ext/botocore: fails to export spans via jaeger
([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866))
diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/ext/opentelemetry-ext-boto/setup.cfg
index 64a9932756c..a9e0ec9f4e6 100644
--- a/ext/opentelemetry-ext-boto/setup.cfg
+++ b/ext/opentelemetry-ext-boto/setup.cfg
@@ -41,14 +41,14 @@ package_dir=
packages=find_namespace:
install_requires =
boto ~= 2.0
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
[options.extras_require]
test =
boto~=2.0
moto~=1.0
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
+++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-botocore/CHANGELOG.md b/ext/opentelemetry-ext-botocore/CHANGELOG.md
index ccdc954a6b7..ac8d9c4a514 100644
--- a/ext/opentelemetry-ext-botocore/CHANGELOG.md
+++ b/ext/opentelemetry-ext-botocore/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- ext/boto and ext/botocore: fails to export spans via jaeger
([#866](https://github.com/open-telemetry/opentelemetry-python/pull/866))
diff --git a/ext/opentelemetry-ext-botocore/setup.cfg b/ext/opentelemetry-ext-botocore/setup.cfg
index 9e0aabfd23b..5e2d0e0b35d 100644
--- a/ext/opentelemetry-ext-botocore/setup.cfg
+++ b/ext/opentelemetry-ext-botocore/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
botocore ~= 1.0
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
[options.extras_require]
test =
moto ~= 1.0
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
+++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-celery/setup.cfg b/ext/opentelemetry-ext-celery/setup.cfg
index 67609b2c2c9..d70e0f7b011 100644
--- a/ext/opentelemetry-ext-celery/setup.cfg
+++ b/ext/opentelemetry-ext-celery/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
celery ~= 4.0
[options.extras_require]
test =
pytest
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
+++ b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/ext/opentelemetry-ext-datadog/setup.cfg
index d97bcdaa69f..62ffd1c907b 100644
--- a/ext/opentelemetry-ext-datadog/setup.cfg
+++ b/ext/opentelemetry-ext-datadog/setup.cfg
@@ -40,8 +40,8 @@ package_dir=
packages=find_namespace:
install_requires =
ddtrace>=0.34.0
- opentelemetry-api == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-sdk == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
+++ b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-dbapi/setup.cfg b/ext/opentelemetry-ext-dbapi/setup.cfg
index bf7af968f71..5ee74e322a0 100644
--- a/ext/opentelemetry-ext-dbapi/setup.cfg
+++ b/ext/opentelemetry-ext-dbapi/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
+++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-django/CHANGELOG.md b/ext/opentelemetry-ext-django/CHANGELOG.md
index abbf90451b6..6e3cc9c9827 100644
--- a/ext/opentelemetry-ext-django/CHANGELOG.md
+++ b/ext/opentelemetry-ext-django/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
## 0.8b0
diff --git a/ext/opentelemetry-ext-django/setup.cfg b/ext/opentelemetry-ext-django/setup.cfg
index e9cea61cede..8474194ef5e 100644
--- a/ext/opentelemetry-ext-django/setup.cfg
+++ b/ext/opentelemetry-ext-django/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
django >= 1.10
- opentelemetry-ext-wsgi == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
- opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-wsgi == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.11b0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
+++ b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/ext/opentelemetry-ext-elasticsearch/setup.cfg
index 40f3b392b4d..46f32b13ef7 100644
--- a/ext/opentelemetry-ext-elasticsearch/setup.cfg
+++ b/ext/opentelemetry-ext-elasticsearch/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
wrapt >= 1.0.0, < 2.0.0
elasticsearch >= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
elasticsearch-dsl >= 2.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
+++ b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-flask/CHANGELOG.md b/ext/opentelemetry-ext-flask/CHANGELOG.md
index 1db23d4e805..3109c159023 100644
--- a/ext/opentelemetry-ext-flask/CHANGELOG.md
+++ b/ext/opentelemetry-ext-flask/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
## 0.7b1
diff --git a/ext/opentelemetry-ext-flask/setup.cfg b/ext/opentelemetry-ext-flask/setup.cfg
index 663b2169a59..3d99a53a8c0 100644
--- a/ext/opentelemetry-ext-flask/setup.cfg
+++ b/ext/opentelemetry-ext-flask/setup.cfg
@@ -41,14 +41,14 @@ package_dir=
packages=find_namespace:
install_requires =
flask ~= 1.0
- opentelemetry-ext-wsgi == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
- opentelemetry-api == 0.11.dev0
+ opentelemetry-ext-wsgi == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.11b0
[options.extras_require]
test =
flask~=1.0
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
+++ b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md
index 4221ab53710..fff83ab5a7b 100644
--- a/ext/opentelemetry-ext-grpc/CHANGELOG.md
+++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## 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
diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg
index dd296032475..4dd808a19ea 100644
--- a/ext/opentelemetry-ext-grpc/setup.cfg
+++ b/ext/opentelemetry-ext-grpc/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
+ opentelemetry-api == 0.11b0
grpcio ~= 1.27
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-test == 0.11b0
+ opentelemetry-sdk == 0.11b0
protobuf == 3.12.2
[options.packages.find]
diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-jaeger/setup.cfg b/ext/opentelemetry-ext-jaeger/setup.cfg
index c19107eedd4..1c0a006529c 100644
--- a/ext/opentelemetry-ext-jaeger/setup.cfg
+++ b/ext/opentelemetry-ext-jaeger/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
thrift >= 0.10.0
- opentelemetry-api == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-sdk == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
index 60f2f9e9d22..13bf32b8f8c 100644
--- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
+++ b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/ext/opentelemetry-ext-jinja2/setup.cfg
index 54a7515150f..1fbd74a3d04 100644
--- a/ext/opentelemetry-ext-jinja2/setup.cfg
+++ b/ext/opentelemetry-ext-jinja2/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
jinja2~=2.7
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
+++ b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-mysql/CHANGELOG.md b/ext/opentelemetry-ext-mysql/CHANGELOG.md
index a4ab4809397..46b9d327dd3 100644
--- a/ext/opentelemetry-ext-mysql/CHANGELOG.md
+++ b/ext/opentelemetry-ext-mysql/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- bugfix: Fix auto-instrumentation entry point for mysql
([#858](https://github.com/open-telemetry/opentelemetry-python/pull/858))
diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg
index ceb985e8b41..0e7209b1686 100644
--- a/ext/opentelemetry-ext-mysql/setup.cfg
+++ b/ext/opentelemetry-ext-mysql/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-dbapi == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-dbapi == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
mysql-connector-python ~= 8.0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
+++ b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.cfg b/ext/opentelemetry-ext-opencensusexporter/setup.cfg
index ea963dce187..1cf9d1a3cfc 100644
--- a/ext/opentelemetry-ext-opencensusexporter/setup.cfg
+++ b/ext/opentelemetry-ext-opencensusexporter/setup.cfg
@@ -42,8 +42,8 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
opencensus-proto >= 0.1.0, < 1.0.0
- opentelemetry-api == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-sdk == 0.11b0
protobuf >= 3.8.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
+++ b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-opentracing-shim/setup.cfg b/ext/opentelemetry-ext-opentracing-shim/setup.cfg
index abc052a5aaa..d2b9cf28ccf 100644
--- a/ext/opentelemetry-ext-opentracing-shim/setup.cfg
+++ b/ext/opentelemetry-ext-opentracing-shim/setup.cfg
@@ -42,11 +42,11 @@ packages=find_namespace:
install_requires =
Deprecated >= 1.2.6
opentracing ~= 2.0
- opentelemetry-api == 0.11.dev0
+ opentelemetry-api == 0.11b0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
opentracing ~= 2.2.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
+++ b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-otlp/CHANGELOG.md b/ext/opentelemetry-ext-otlp/CHANGELOG.md
index fbfff4496e0..32e75eda55d 100644
--- a/ext/opentelemetry-ext-otlp/CHANGELOG.md
+++ b/ext/opentelemetry-ext-otlp/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## 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))
## 0.9b0
diff --git a/ext/opentelemetry-ext-otlp/setup.cfg b/ext/opentelemetry-ext-otlp/setup.cfg
index 65908e0a3c0..b6f7068d7fd 100644
--- a/ext/opentelemetry-ext-otlp/setup.cfg
+++ b/ext/opentelemetry-ext-otlp/setup.cfg
@@ -41,9 +41,9 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
googleapis-common-protos ~= 1.52.0
- opentelemetry-api == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
- opentelemetry-proto == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-sdk == 0.11b0
+ opentelemetry-proto == 0.11b0
backoff ~= 1.10.0
[options.extras_require]
diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
+++ b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-prometheus/setup.cfg b/ext/opentelemetry-ext-prometheus/setup.cfg
index 5dae17f5cbc..3c55f3121c4 100644
--- a/ext/opentelemetry-ext-prometheus/setup.cfg
+++ b/ext/opentelemetry-ext-prometheus/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
prometheus_client >= 0.5.0, < 1.0.0
- opentelemetry-api == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-sdk == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
+++ b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/ext/opentelemetry-ext-psycopg2/setup.cfg
index bb0fd9a57c4..9cf7b560c73 100644
--- a/ext/opentelemetry-ext-psycopg2/setup.cfg
+++ b/ext/opentelemetry-ext-psycopg2/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-dbapi == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-dbapi == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
psycopg2-binary >= 2.7.3.1
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
+++ b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/ext/opentelemetry-ext-pymemcache/setup.cfg
index c2252274b1f..0fbc8d60add 100644
--- a/ext/opentelemetry-ext-pymemcache/setup.cfg
+++ b/ext/opentelemetry-ext-pymemcache/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
pymemcache ~= 1.3
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
+++ b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/ext/opentelemetry-ext-pymongo/setup.cfg
index 5e08d987763..a1f72846059 100644
--- a/ext/opentelemetry-ext-pymongo/setup.cfg
+++ b/ext/opentelemetry-ext-pymongo/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
pymongo ~= 3.1
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
+++ b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/ext/opentelemetry-ext-pymysql/setup.cfg
index db28ef9581e..adb51131b76 100644
--- a/ext/opentelemetry-ext-pymysql/setup.cfg
+++ b/ext/opentelemetry-ext-pymysql/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-dbapi == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-dbapi == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
PyMySQL ~= 0.9.3
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
+++ b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-pyramid/CHANGELOG.md b/ext/opentelemetry-ext-pyramid/CHANGELOG.md
index 586f8bb5ce5..f871a0aa5f8 100644
--- a/ext/opentelemetry-ext-pyramid/CHANGELOG.md
+++ b/ext/opentelemetry-ext-pyramid/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
## 0.9b0
diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/ext/opentelemetry-ext-pyramid/setup.cfg
index bcdf850e87c..1255dbad149 100644
--- a/ext/opentelemetry-ext-pyramid/setup.cfg
+++ b/ext/opentelemetry-ext-pyramid/setup.cfg
@@ -41,15 +41,15 @@ package_dir=
packages=find_namespace:
install_requires =
pyramid >= 1.7
- opentelemetry-instrumentation == 0.11.dev0
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-wsgi == 0.11.dev0
+ opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-wsgi == 0.11b0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
werkzeug == 0.16.1
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
+++ b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-redis/setup.cfg b/ext/opentelemetry-ext-redis/setup.cfg
index 26159c6568b..e654b81addf 100644
--- a/ext/opentelemetry-ext-redis/setup.cfg
+++ b/ext/opentelemetry-ext-redis/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
redis >= 2.6
wrapt >= 1.12.1
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-test == 0.11b0
+ opentelemetry-sdk == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
+++ b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/ext/opentelemetry-ext-requests/setup.cfg
index 714a1b3231a..4ded4aa45d0 100644
--- a/ext/opentelemetry-ext-requests/setup.cfg
+++ b/ext/opentelemetry-ext-requests/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
requests ~= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
httpretty ~= 1.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
+++ b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-sqlalchemy/setup.cfg b/ext/opentelemetry-ext-sqlalchemy/setup.cfg
index 76178b82456..153ebf831e0 100644
--- a/ext/opentelemetry-ext-sqlalchemy/setup.cfg
+++ b/ext/opentelemetry-ext-sqlalchemy/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
wrapt >= 1.11.2
sqlalchemy
[options.extras_require]
test =
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-sdk == 0.11b0
pytest
[options.packages.find]
diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
+++ b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/ext/opentelemetry-ext-sqlite3/setup.cfg
index 95f60988eab..c986e1f0670 100644
--- a/ext/opentelemetry-ext-sqlite3/setup.cfg
+++ b/ext/opentelemetry-ext-sqlite3/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-dbapi == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-dbapi == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
+++ b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-system-metrics/setup.cfg b/ext/opentelemetry-ext-system-metrics/setup.cfg
index 4006290514e..d26d13ae62c 100644
--- a/ext/opentelemetry-ext-system-metrics/setup.cfg
+++ b/ext/opentelemetry-ext-system-metrics/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
+ opentelemetry-api == 0.11b0
psutil ~= 5.7.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
+++ b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-wsgi/CHANGELOG.md b/ext/opentelemetry-ext-wsgi/CHANGELOG.md
index da9df382f46..739ee7b0cc5 100644
--- a/ext/opentelemetry-ext-wsgi/CHANGELOG.md
+++ b/ext/opentelemetry-ext-wsgi/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Set span status on wsgi errors
([#864](https://github.com/open-telemetry/opentelemetry-python/pull/864))
diff --git a/ext/opentelemetry-ext-wsgi/setup.cfg b/ext/opentelemetry-ext-wsgi/setup.cfg
index e7f30870537..39388451455 100644
--- a/ext/opentelemetry-ext-wsgi/setup.cfg
+++ b/ext/opentelemetry-ext-wsgi/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
+++ b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-ext-zipkin/setup.cfg b/ext/opentelemetry-ext-zipkin/setup.cfg
index 164f0d84c23..a280c9cca35 100644
--- a/ext/opentelemetry-ext-zipkin/setup.cfg
+++ b/ext/opentelemetry-ext-zipkin/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
requests ~= 2.7
- opentelemetry-api == 0.11.dev0
- opentelemetry-sdk == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-sdk == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
+++ b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md
index 3e04402cea9..c62fac06178 100644
--- a/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md
+++ b/ext/opentelemetry-instrumentation-aiopg/CHANGELOG.md
@@ -2,4 +2,8 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Initial release
diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/ext/opentelemetry-instrumentation-aiopg/setup.cfg
index 4dade66644b..8c2e79eaca2 100644
--- a/ext/opentelemetry-instrumentation-aiopg/setup.cfg
+++ b/ext/opentelemetry-instrumentation-aiopg/setup.cfg
@@ -39,15 +39,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-dbapi == 0.11.dev0
- opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-dbapi == 0.11b0
+ opentelemetry-instrumentation == 0.11b0
aiopg >= 0.13.0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
+++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md b/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md
index 684dece0c62..c8c5cea0d3d 100644
--- a/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md
+++ b/ext/opentelemetry-instrumentation-fastapi/CHANGELOG.md
@@ -2,4 +2,8 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Initial release ([#890](https://github.com/open-telemetry/opentelemetry-python/pull/890))
\ No newline at end of file
diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.cfg b/ext/opentelemetry-instrumentation-fastapi/setup.cfg
index 5e7c2fafa6b..dab33428049 100644
--- a/ext/opentelemetry-instrumentation-fastapi/setup.cfg
+++ b/ext/opentelemetry-instrumentation-fastapi/setup.cfg
@@ -38,8 +38,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-asgi == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-asgi == 0.11b0
[options.entry_points]
opentelemetry_instrumentor =
@@ -47,7 +47,7 @@ opentelemetry_instrumentor =
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
fastapi ~= 0.58.1
requests ~= 2.23.0 # needed for testclient
diff --git a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
+++ b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/ext/opentelemetry-instrumentation-starlette/setup.cfg b/ext/opentelemetry-instrumentation-starlette/setup.cfg
index 4c777a18c50..26ae27198b1 100644
--- a/ext/opentelemetry-instrumentation-starlette/setup.cfg
+++ b/ext/opentelemetry-instrumentation-starlette/setup.cfg
@@ -38,8 +38,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11.dev0
- opentelemetry-ext-asgi == 0.11.dev0
+ opentelemetry-api == 0.11b0
+ opentelemetry-ext-asgi == 0.11b0
[options.entry_points]
opentelemetry_instrumentor =
@@ -47,7 +47,7 @@ opentelemetry_instrumentor =
[options.extras_require]
test =
- opentelemetry-test == 0.11.dev0
+ opentelemetry-test == 0.11b0
starlette ~= 0.13.0
requests ~= 2.23.0 # needed for testclient
diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
index 858e73960ff..15e8d9536da 100644
--- a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
+++ b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md
index d6348459917..da976ed37e4 100644
--- a/opentelemetry-api/CHANGELOG.md
+++ b/opentelemetry-api/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Return INVALID_SPAN if no TracerProvider set for get_current_span
([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751))
- Rename record_error to record_exception
diff --git a/opentelemetry-api/src/opentelemetry/version.py b/opentelemetry-api/src/opentelemetry/version.py
index 858e73960ff..15e8d9536da 100644
--- a/opentelemetry-api/src/opentelemetry/version.py
+++ b/opentelemetry-api/src/opentelemetry/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/opentelemetry-instrumentation/setup.cfg b/opentelemetry-instrumentation/setup.cfg
index a51705177b5..8744c8cdaa1 100644
--- a/opentelemetry-instrumentation/setup.cfg
+++ b/opentelemetry-instrumentation/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.11.dev0
+ opentelemetry-api == 0.11b0
wrapt >= 1.0.0, < 2.0.0
[options.packages.find]
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
index 858e73960ff..15e8d9536da 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/opentelemetry-proto/src/opentelemetry/proto/version.py b/opentelemetry-proto/src/opentelemetry/proto/version.py
index 858e73960ff..15e8d9536da 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/version.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index 6427b2c9b51..cbb96eabcd5 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.11b0
+
+Released 2020-07-28
+
- Add support for resources and resource detector
([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
- Rename record_error to record_exception
diff --git a/opentelemetry-sdk/setup.cfg b/opentelemetry-sdk/setup.cfg
index b4e7ed6a9d9..cb2cb5184e5 100644
--- a/opentelemetry-sdk/setup.cfg
+++ b/opentelemetry-sdk/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.11.dev0
+ opentelemetry-api == 0.11b0
[options.packages.find]
where = src
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/version.py b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
index 858e73960ff..15e8d9536da 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/version.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
diff --git a/tests/util/src/opentelemetry/test/version.py b/tests/util/src/opentelemetry/test/version.py
index c41ce2492a1..f3cf7aea33b 100644
--- a/tests/util/src/opentelemetry/test/version.py
+++ b/tests/util/src/opentelemetry/test/version.py
@@ -1 +1 @@
-__version__ = "0.11.dev0"
+__version__ = "0.11b0"
From 158d6c984750cf905165c7137e5cbc6790c947ff Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Tue, 28 Jul 2020 16:04:31 -0600
Subject: [PATCH 53/79] Move duplicated code to a dependency (#942)
---
eachdist.ini | 1 +
ext/opentelemetry-ext-boto/setup.cfg | 1 +
.../src/opentelemetry/ext/boto/__init__.py | 55 +------------------
.../opentelemetry/ext/botocore/__init__.py | 31 +++++------
tox.ini | 2 +-
5 files changed, 20 insertions(+), 70 deletions(-)
diff --git a/eachdist.ini b/eachdist.ini
index c77d82f345f..4a197ad2914 100644
--- a/eachdist.ini
+++ b/eachdist.ini
@@ -10,6 +10,7 @@ sortfirst=
ext/opentelemetry-ext-wsgi
ext/opentelemetry-ext-dbapi
ext/opentelemetry-ext-asgi
+ ext/opentelemetry-ext-botocore
ext/*
[lintroots]
diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/ext/opentelemetry-ext-boto/setup.cfg
index 64a9932756c..67956bad83a 100644
--- a/ext/opentelemetry-ext-boto/setup.cfg
+++ b/ext/opentelemetry-ext-boto/setup.cfg
@@ -43,6 +43,7 @@ install_requires =
boto ~= 2.0
opentelemetry-api == 0.11.dev0
opentelemetry-instrumentation == 0.11.dev0
+ opentelemetry-ext-botocore == 0.11.dev0
[options.extras_require]
test =
diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
index 637200b078b..f1f04723afa 100644
--- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
+++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
@@ -48,9 +48,10 @@
from inspect import currentframe
from boto.connection import AWSAuthConnection, AWSQueryConnection
-from wrapt import ObjectProxy, wrap_function_wrapper
+from wrapt import wrap_function_wrapper
from opentelemetry.ext.boto.version import __version__
+from opentelemetry.ext.botocore import add_span_arg_tags, unwrap
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.sdk.trace import Resource
from opentelemetry.trace import SpanKind, get_tracer
@@ -197,55 +198,3 @@ def _patched_auth_request(self, original_func, instance, args, kwargs):
args,
kwargs,
)
-
-
-def truncate_arg_value(value, max_len=1024):
- """Truncate values which are bytes and greater than ``max_len``.
- Useful for parameters like "Body" in ``put_object`` operations.
- """
- if isinstance(value, bytes) and len(value) > max_len:
- return b"..."
-
- return value
-
-
-def add_span_arg_tags(span, endpoint_name, args, args_names, args_traced):
- if endpoint_name not in ["kms", "sts"]:
- tags = dict(
- (name, value)
- for (name, value) in zip(args_names, args)
- if name in args_traced
- )
- tags = flatten_dict(tags)
- for key, value in {
- k: truncate_arg_value(v)
- for k, v in tags.items()
- if k not in {"s3": ["params.Body"]}.get(endpoint_name, [])
- }.items():
- span.set_attribute(key, value)
-
-
-def flatten_dict(dict_, sep=".", prefix=""):
- """
- Returns a normalized dict of depth 1 with keys in order of embedding
- """
- # adapted from https://stackoverflow.com/a/19647596
- return (
- {
- prefix + sep + k if prefix else k: v
- for kk, vv in dict_.items()
- for k, v in flatten_dict(vv, sep, kk).items()
- }
- if isinstance(dict_, dict)
- else {prefix: dict_}
- )
-
-
-def unwrap(obj, attr):
- function = getattr(obj, attr, None)
- if (
- function
- and isinstance(function, ObjectProxy)
- and hasattr(function, "__wrapped__")
- ):
- setattr(obj, attr, function.__wrapped__)
diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
index f9da154d970..70e790d9bf6 100644
--- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
+++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
@@ -160,6 +160,21 @@ def truncate_arg_value(value, max_len=1024):
return value
+ def flatten_dict(dict_, sep=".", prefix=""):
+ """
+ Returns a normalized dict of depth 1 with keys in order of embedding
+ """
+ # adapted from https://stackoverflow.com/a/19647596
+ return (
+ {
+ prefix + sep + k if prefix else k: v
+ for kk, vv in dict_.items()
+ for k, v in flatten_dict(vv, sep, kk).items()
+ }
+ if isinstance(dict_, dict)
+ else {prefix: dict_}
+ )
+
if endpoint_name not in {"kms", "sts"}:
tags = dict(
(name, value)
@@ -175,22 +190,6 @@ def truncate_arg_value(value, max_len=1024):
span.set_attribute(key, value)
-def flatten_dict(dict_, sep=".", prefix=""):
- """
- Returns a normalized dict of depth 1 with keys in order of embedding
- """
- # adapted from https://stackoverflow.com/a/19647596
- return (
- {
- prefix + sep + k if prefix else k: v
- for kk, vv in dict_.items()
- for k, v in flatten_dict(vv, sep, kk).items()
- }
- if isinstance(dict_, dict)
- else {prefix: dict_}
- )
-
-
def deep_getattr(obj, attr_string, default=None):
"""
Returns the attribute of ``obj`` at the dotted path given by
diff --git a/tox.ini b/tox.ini
index f956733d566..07a0bf42bdf 100644
--- a/tox.ini
+++ b/tox.ini
@@ -256,11 +256,11 @@ commands_pre =
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]
- botocore: pip install {toxinidir}/opentelemetry-instrumentation
botocore: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test]
dbapi: pip install {toxinidir}/ext/opentelemetry-ext-dbapi[test]
From d67ad7b7344af0e58dafeaa5d881eb1d16ddaa46 Mon Sep 17 00:00:00 2001
From: Alex Boten
Date: Tue, 28 Jul 2020 15:26:00 -0700
Subject: [PATCH 54/79] bumping version to 0.12.dev0
---
docs/examples/opentelemetry-example-app/setup.cfg | 8 ++++----
.../src/opentelemetry_example_app/version.py | 2 +-
ext/opentelemetry-ext-aiohttp-client/setup.cfg | 4 ++--
.../src/opentelemetry/ext/aiohttp_client/version.py | 2 +-
ext/opentelemetry-ext-asgi/setup.cfg | 4 ++--
.../src/opentelemetry/ext/asgi/version.py | 2 +-
ext/opentelemetry-ext-asyncpg/setup.cfg | 6 +++---
.../src/opentelemetry/ext/asyncpg/version.py | 2 +-
ext/opentelemetry-ext-boto/setup.cfg | 6 +++---
.../src/opentelemetry/ext/boto/version.py | 2 +-
ext/opentelemetry-ext-botocore/setup.cfg | 6 +++---
.../src/opentelemetry/ext/botocore/version.py | 2 +-
ext/opentelemetry-ext-celery/setup.cfg | 6 +++---
.../src/opentelemetry/ext/celery/version.py | 2 +-
ext/opentelemetry-ext-datadog/setup.cfg | 4 ++--
.../src/opentelemetry/ext/datadog/version.py | 2 +-
ext/opentelemetry-ext-dbapi/setup.cfg | 6 +++---
.../src/opentelemetry/ext/dbapi/version.py | 2 +-
ext/opentelemetry-ext-django/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/django/version.py | 2 +-
ext/opentelemetry-ext-elasticsearch/setup.cfg | 6 +++---
.../src/opentelemetry/ext/elasticsearch/version.py | 2 +-
ext/opentelemetry-ext-flask/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/flask/version.py | 2 +-
ext/opentelemetry-ext-grpc/setup.cfg | 6 +++---
.../src/opentelemetry/ext/grpc/version.py | 2 +-
ext/opentelemetry-ext-jaeger/setup.cfg | 4 ++--
.../src/opentelemetry/ext/jaeger/version.py | 2 +-
ext/opentelemetry-ext-jinja2/setup.cfg | 6 +++---
.../src/opentelemetry/ext/jinja2/version.py | 2 +-
ext/opentelemetry-ext-mysql/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/mysql/version.py | 2 +-
ext/opentelemetry-ext-opencensusexporter/setup.cfg | 4 ++--
.../src/opentelemetry/ext/opencensusexporter/version.py | 2 +-
ext/opentelemetry-ext-opentracing-shim/setup.cfg | 4 ++--
.../src/opentelemetry/ext/opentracing_shim/version.py | 2 +-
ext/opentelemetry-ext-otlp/setup.cfg | 6 +++---
.../src/opentelemetry/ext/otlp/version.py | 2 +-
ext/opentelemetry-ext-prometheus/setup.cfg | 4 ++--
.../src/opentelemetry/ext/prometheus/version.py | 2 +-
ext/opentelemetry-ext-psycopg2/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/psycopg2/version.py | 2 +-
ext/opentelemetry-ext-pymemcache/setup.cfg | 6 +++---
.../src/opentelemetry/ext/pymemcache/version.py | 2 +-
ext/opentelemetry-ext-pymongo/setup.cfg | 6 +++---
.../src/opentelemetry/ext/pymongo/version.py | 2 +-
ext/opentelemetry-ext-pymysql/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/pymysql/version.py | 2 +-
ext/opentelemetry-ext-pyramid/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/pyramid/version.py | 2 +-
ext/opentelemetry-ext-redis/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/redis/version.py | 2 +-
ext/opentelemetry-ext-requests/setup.cfg | 6 +++---
.../src/opentelemetry/ext/requests/version.py | 2 +-
ext/opentelemetry-ext-sqlalchemy/setup.cfg | 6 +++---
.../src/opentelemetry/ext/sqlalchemy/version.py | 2 +-
ext/opentelemetry-ext-sqlite3/setup.cfg | 8 ++++----
.../src/opentelemetry/ext/sqlite3/version.py | 2 +-
ext/opentelemetry-ext-system-metrics/setup.cfg | 4 ++--
.../src/opentelemetry/ext/system_metrics/version.py | 2 +-
ext/opentelemetry-ext-wsgi/setup.cfg | 6 +++---
.../src/opentelemetry/ext/wsgi/version.py | 2 +-
ext/opentelemetry-ext-zipkin/setup.cfg | 4 ++--
.../src/opentelemetry/ext/zipkin/version.py | 2 +-
ext/opentelemetry-instrumentation-aiopg/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/aiopg/version.py | 2 +-
ext/opentelemetry-instrumentation-fastapi/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/fastapi/version.py | 2 +-
ext/opentelemetry-instrumentation-starlette/setup.cfg | 6 +++---
.../opentelemetry/instrumentation/starlette/version.py | 2 +-
opentelemetry-api/src/opentelemetry/version.py | 2 +-
opentelemetry-instrumentation/setup.cfg | 2 +-
.../src/opentelemetry/instrumentation/version.py | 2 +-
opentelemetry-proto/src/opentelemetry/proto/version.py | 2 +-
opentelemetry-sdk/setup.cfg | 2 +-
opentelemetry-sdk/src/opentelemetry/sdk/version.py | 2 +-
tests/util/src/opentelemetry/test/version.py | 2 +-
77 files changed, 148 insertions(+), 148 deletions(-)
diff --git a/docs/examples/opentelemetry-example-app/setup.cfg b/docs/examples/opentelemetry-example-app/setup.cfg
index 8905023bbff..f7dd1eccdf1 100644
--- a/docs/examples/opentelemetry-example-app/setup.cfg
+++ b/docs/examples/opentelemetry-example-app/setup.cfg
@@ -43,10 +43,10 @@ zip_safe = False
include_package_data = True
install_requires =
typing; python_version<'3.5'
- opentelemetry-api == 0.11b0
- opentelemetry-sdk == 0.11b0
- opentelemetry-ext-requests == 0.11b0
- opentelemetry-ext-flask == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
+ opentelemetry-ext-requests == 0.12.dev0
+ opentelemetry-ext-flask == 0.12.dev0
flask
requests
protobuf~=3.11
diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
+++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-aiohttp-client/setup.cfg b/ext/opentelemetry-ext-aiohttp-client/setup.cfg
index 9044083ff72..d2be7e8c6ea 100644
--- a/ext/opentelemetry-ext-aiohttp-client/setup.cfg
+++ b/ext/opentelemetry-ext-aiohttp-client/setup.cfg
@@ -39,8 +39,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api >= 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api >= 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
aiohttp ~= 3.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
index ae93e514558..8d947df443a 100644
--- a/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
+++ b/ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext/aiohttp_client/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-asgi/setup.cfg b/ext/opentelemetry-ext-asgi/setup.cfg
index 9183287f0d2..175e2649950 100644
--- a/ext/opentelemetry-ext-asgi/setup.cfg
+++ b/ext/opentelemetry-ext-asgi/setup.cfg
@@ -39,8 +39,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
asgiref ~= 3.0
[options.extras_require]
diff --git a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
+++ b/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-asyncpg/setup.cfg b/ext/opentelemetry-ext-asyncpg/setup.cfg
index 2eaa54b8477..bf1670172b4 100644
--- a/ext/opentelemetry-ext-asyncpg/setup.cfg
+++ b/ext/opentelemetry-ext-asyncpg/setup.cfg
@@ -39,13 +39,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
asyncpg >= 0.12.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
+++ b/ext/opentelemetry-ext-asyncpg/src/opentelemetry/ext/asyncpg/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/ext/opentelemetry-ext-boto/setup.cfg
index a9e0ec9f4e6..9d447b81356 100644
--- a/ext/opentelemetry-ext-boto/setup.cfg
+++ b/ext/opentelemetry-ext-boto/setup.cfg
@@ -41,14 +41,14 @@ package_dir=
packages=find_namespace:
install_requires =
boto ~= 2.0
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
[options.extras_require]
test =
boto~=2.0
moto~=1.0
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
+++ b/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-botocore/setup.cfg b/ext/opentelemetry-ext-botocore/setup.cfg
index 5e2d0e0b35d..0d8b9e4ad4a 100644
--- a/ext/opentelemetry-ext-botocore/setup.cfg
+++ b/ext/opentelemetry-ext-botocore/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
botocore ~= 1.0
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
[options.extras_require]
test =
moto ~= 1.0
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
+++ b/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-celery/setup.cfg b/ext/opentelemetry-ext-celery/setup.cfg
index d70e0f7b011..39e019e83a9 100644
--- a/ext/opentelemetry-ext-celery/setup.cfg
+++ b/ext/opentelemetry-ext-celery/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
celery ~= 4.0
[options.extras_require]
test =
pytest
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
+++ b/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-datadog/setup.cfg b/ext/opentelemetry-ext-datadog/setup.cfg
index 62ffd1c907b..95b0bb08571 100644
--- a/ext/opentelemetry-ext-datadog/setup.cfg
+++ b/ext/opentelemetry-ext-datadog/setup.cfg
@@ -40,8 +40,8 @@ package_dir=
packages=find_namespace:
install_requires =
ddtrace>=0.34.0
- opentelemetry-api == 0.11b0
- opentelemetry-sdk == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
+++ b/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-dbapi/setup.cfg b/ext/opentelemetry-ext-dbapi/setup.cfg
index 5ee74e322a0..34542525dd3 100644
--- a/ext/opentelemetry-ext-dbapi/setup.cfg
+++ b/ext/opentelemetry-ext-dbapi/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
+++ b/ext/opentelemetry-ext-dbapi/src/opentelemetry/ext/dbapi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-django/setup.cfg b/ext/opentelemetry-ext-django/setup.cfg
index 8474194ef5e..602a2cf7ba3 100644
--- a/ext/opentelemetry-ext-django/setup.cfg
+++ b/ext/opentelemetry-ext-django/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
django >= 1.10
- opentelemetry-ext-wsgi == 0.11b0
- opentelemetry-instrumentation == 0.11b0
- opentelemetry-api == 0.11b0
+ opentelemetry-ext-wsgi == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.12.dev0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
+++ b/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/ext/opentelemetry-ext-elasticsearch/setup.cfg
index 46f32b13ef7..877f62872c5 100644
--- a/ext/opentelemetry-ext-elasticsearch/setup.cfg
+++ b/ext/opentelemetry-ext-elasticsearch/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
wrapt >= 1.0.0, < 2.0.0
elasticsearch >= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
elasticsearch-dsl >= 2.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
+++ b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-flask/setup.cfg b/ext/opentelemetry-ext-flask/setup.cfg
index 3d99a53a8c0..e4b978645b8 100644
--- a/ext/opentelemetry-ext-flask/setup.cfg
+++ b/ext/opentelemetry-ext-flask/setup.cfg
@@ -41,14 +41,14 @@ package_dir=
packages=find_namespace:
install_requires =
flask ~= 1.0
- opentelemetry-ext-wsgi == 0.11b0
- opentelemetry-instrumentation == 0.11b0
- opentelemetry-api == 0.11b0
+ opentelemetry-ext-wsgi == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.12.dev0
[options.extras_require]
test =
flask~=1.0
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
+++ b/ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg
index 4dd808a19ea..0a4e4e5b679 100644
--- a/ext/opentelemetry-ext-grpc/setup.cfg
+++ b/ext/opentelemetry-ext-grpc/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
+ opentelemetry-api == 0.12.dev0
grpcio ~= 1.27
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
- opentelemetry-sdk == 0.11b0
+ opentelemetry-test == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
protobuf == 3.12.2
[options.packages.find]
diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-jaeger/setup.cfg b/ext/opentelemetry-ext-jaeger/setup.cfg
index 1c0a006529c..fc581301b6f 100644
--- a/ext/opentelemetry-ext-jaeger/setup.cfg
+++ b/ext/opentelemetry-ext-jaeger/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
thrift >= 0.10.0
- opentelemetry-api == 0.11b0
- opentelemetry-sdk == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
index 13bf32b8f8c..4a2d033215f 100644
--- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
+++ b/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/ext/opentelemetry-ext-jinja2/setup.cfg
index 1fbd74a3d04..fc0222a0e44 100644
--- a/ext/opentelemetry-ext-jinja2/setup.cfg
+++ b/ext/opentelemetry-ext-jinja2/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
jinja2~=2.7
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
+++ b/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-mysql/setup.cfg b/ext/opentelemetry-ext-mysql/setup.cfg
index 0e7209b1686..e114ae1dbea 100644
--- a/ext/opentelemetry-ext-mysql/setup.cfg
+++ b/ext/opentelemetry-ext-mysql/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-ext-dbapi == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-dbapi == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
mysql-connector-python ~= 8.0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
+++ b/ext/opentelemetry-ext-mysql/src/opentelemetry/ext/mysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.cfg b/ext/opentelemetry-ext-opencensusexporter/setup.cfg
index 1cf9d1a3cfc..0a3376083a7 100644
--- a/ext/opentelemetry-ext-opencensusexporter/setup.cfg
+++ b/ext/opentelemetry-ext-opencensusexporter/setup.cfg
@@ -42,8 +42,8 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
opencensus-proto >= 0.1.0, < 1.0.0
- opentelemetry-api == 0.11b0
- opentelemetry-sdk == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
protobuf >= 3.8.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
+++ b/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-opentracing-shim/setup.cfg b/ext/opentelemetry-ext-opentracing-shim/setup.cfg
index d2b9cf28ccf..f0878b82b64 100644
--- a/ext/opentelemetry-ext-opentracing-shim/setup.cfg
+++ b/ext/opentelemetry-ext-opentracing-shim/setup.cfg
@@ -42,11 +42,11 @@ packages=find_namespace:
install_requires =
Deprecated >= 1.2.6
opentracing ~= 2.0
- opentelemetry-api == 0.11b0
+ opentelemetry-api == 0.12.dev0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
opentracing ~= 2.2.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
+++ b/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-otlp/setup.cfg b/ext/opentelemetry-ext-otlp/setup.cfg
index b6f7068d7fd..b6bfac669b9 100644
--- a/ext/opentelemetry-ext-otlp/setup.cfg
+++ b/ext/opentelemetry-ext-otlp/setup.cfg
@@ -41,9 +41,9 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
googleapis-common-protos ~= 1.52.0
- opentelemetry-api == 0.11b0
- opentelemetry-sdk == 0.11b0
- opentelemetry-proto == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
+ opentelemetry-proto == 0.12.dev0
backoff ~= 1.10.0
[options.extras_require]
diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
+++ b/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-prometheus/setup.cfg b/ext/opentelemetry-ext-prometheus/setup.cfg
index 3c55f3121c4..3571f93c540 100644
--- a/ext/opentelemetry-ext-prometheus/setup.cfg
+++ b/ext/opentelemetry-ext-prometheus/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
prometheus_client >= 0.5.0, < 1.0.0
- opentelemetry-api == 0.11b0
- opentelemetry-sdk == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
+++ b/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-psycopg2/setup.cfg b/ext/opentelemetry-ext-psycopg2/setup.cfg
index 9cf7b560c73..73d541cad61 100644
--- a/ext/opentelemetry-ext-psycopg2/setup.cfg
+++ b/ext/opentelemetry-ext-psycopg2/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-ext-dbapi == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-dbapi == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
psycopg2-binary >= 2.7.3.1
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
+++ b/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-pymemcache/setup.cfg b/ext/opentelemetry-ext-pymemcache/setup.cfg
index 0fbc8d60add..798988461c4 100644
--- a/ext/opentelemetry-ext-pymemcache/setup.cfg
+++ b/ext/opentelemetry-ext-pymemcache/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
pymemcache ~= 1.3
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
+++ b/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-pymongo/setup.cfg b/ext/opentelemetry-ext-pymongo/setup.cfg
index a1f72846059..4aae442aa17 100644
--- a/ext/opentelemetry-ext-pymongo/setup.cfg
+++ b/ext/opentelemetry-ext-pymongo/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
pymongo ~= 3.1
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
+++ b/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-pymysql/setup.cfg b/ext/opentelemetry-ext-pymysql/setup.cfg
index adb51131b76..9d8ccdff6f6 100644
--- a/ext/opentelemetry-ext-pymysql/setup.cfg
+++ b/ext/opentelemetry-ext-pymysql/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-ext-dbapi == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-dbapi == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
PyMySQL ~= 0.9.3
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
+++ b/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-pyramid/setup.cfg b/ext/opentelemetry-ext-pyramid/setup.cfg
index 1255dbad149..21a4910ac41 100644
--- a/ext/opentelemetry-ext-pyramid/setup.cfg
+++ b/ext/opentelemetry-ext-pyramid/setup.cfg
@@ -41,15 +41,15 @@ package_dir=
packages=find_namespace:
install_requires =
pyramid >= 1.7
- opentelemetry-instrumentation == 0.11b0
- opentelemetry-api == 0.11b0
- opentelemetry-ext-wsgi == 0.11b0
+ opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-wsgi == 0.12.dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
werkzeug == 0.16.1
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
+++ b/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-redis/setup.cfg b/ext/opentelemetry-ext-redis/setup.cfg
index e654b81addf..0b245f341a1 100644
--- a/ext/opentelemetry-ext-redis/setup.cfg
+++ b/ext/opentelemetry-ext-redis/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
redis >= 2.6
wrapt >= 1.12.1
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
- opentelemetry-sdk == 0.11b0
+ opentelemetry-test == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
+++ b/ext/opentelemetry-ext-redis/src/opentelemetry/ext/redis/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-requests/setup.cfg b/ext/opentelemetry-ext-requests/setup.cfg
index 4ded4aa45d0..52d6f96739e 100644
--- a/ext/opentelemetry-ext-requests/setup.cfg
+++ b/ext/opentelemetry-ext-requests/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
requests ~= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
httpretty ~= 1.0
[options.packages.find]
diff --git a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
+++ b/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-sqlalchemy/setup.cfg b/ext/opentelemetry-ext-sqlalchemy/setup.cfg
index 153ebf831e0..16416f37ef8 100644
--- a/ext/opentelemetry-ext-sqlalchemy/setup.cfg
+++ b/ext/opentelemetry-ext-sqlalchemy/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
wrapt >= 1.11.2
sqlalchemy
[options.extras_require]
test =
- opentelemetry-sdk == 0.11b0
+ opentelemetry-sdk == 0.12.dev0
pytest
[options.packages.find]
diff --git a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
+++ b/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-sqlite3/setup.cfg b/ext/opentelemetry-ext-sqlite3/setup.cfg
index c986e1f0670..51f6b2f30d7 100644
--- a/ext/opentelemetry-ext-sqlite3/setup.cfg
+++ b/ext/opentelemetry-ext-sqlite3/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-ext-dbapi == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-dbapi == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
+++ b/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-system-metrics/setup.cfg b/ext/opentelemetry-ext-system-metrics/setup.cfg
index d26d13ae62c..08a1fe8f1c4 100644
--- a/ext/opentelemetry-ext-system-metrics/setup.cfg
+++ b/ext/opentelemetry-ext-system-metrics/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
+ opentelemetry-api == 0.12.dev0
psutil ~= 5.7.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
+++ b/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-wsgi/setup.cfg b/ext/opentelemetry-ext-wsgi/setup.cfg
index 39388451455..97445a847cd 100644
--- a/ext/opentelemetry-ext-wsgi/setup.cfg
+++ b/ext/opentelemetry-ext-wsgi/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
+++ b/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-ext-zipkin/setup.cfg b/ext/opentelemetry-ext-zipkin/setup.cfg
index a280c9cca35..7674cab5365 100644
--- a/ext/opentelemetry-ext-zipkin/setup.cfg
+++ b/ext/opentelemetry-ext-zipkin/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
requests ~= 2.7
- opentelemetry-api == 0.11b0
- opentelemetry-sdk == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
+++ b/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/ext/opentelemetry-instrumentation-aiopg/setup.cfg
index 8c2e79eaca2..f2428301b5e 100644
--- a/ext/opentelemetry-instrumentation-aiopg/setup.cfg
+++ b/ext/opentelemetry-instrumentation-aiopg/setup.cfg
@@ -39,15 +39,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-ext-dbapi == 0.11b0
- opentelemetry-instrumentation == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-dbapi == 0.12.dev0
+ opentelemetry-instrumentation == 0.12.dev0
aiopg >= 0.13.0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
[options.packages.find]
where = src
diff --git a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
+++ b/ext/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-instrumentation-fastapi/setup.cfg b/ext/opentelemetry-instrumentation-fastapi/setup.cfg
index dab33428049..b700b3d724a 100644
--- a/ext/opentelemetry-instrumentation-fastapi/setup.cfg
+++ b/ext/opentelemetry-instrumentation-fastapi/setup.cfg
@@ -38,8 +38,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-ext-asgi == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-asgi == 0.12.dev0
[options.entry_points]
opentelemetry_instrumentor =
@@ -47,7 +47,7 @@ opentelemetry_instrumentor =
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
fastapi ~= 0.58.1
requests ~= 2.23.0 # needed for testclient
diff --git a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
+++ b/ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/ext/opentelemetry-instrumentation-starlette/setup.cfg b/ext/opentelemetry-instrumentation-starlette/setup.cfg
index 26ae27198b1..f1613a8cd8f 100644
--- a/ext/opentelemetry-instrumentation-starlette/setup.cfg
+++ b/ext/opentelemetry-instrumentation-starlette/setup.cfg
@@ -38,8 +38,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.11b0
- opentelemetry-ext-asgi == 0.11b0
+ opentelemetry-api == 0.12.dev0
+ opentelemetry-ext-asgi == 0.12.dev0
[options.entry_points]
opentelemetry_instrumentor =
@@ -47,7 +47,7 @@ opentelemetry_instrumentor =
[options.extras_require]
test =
- opentelemetry-test == 0.11b0
+ opentelemetry-test == 0.12.dev0
starlette ~= 0.13.0
requests ~= 2.23.0 # needed for testclient
diff --git a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
+++ b/ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/opentelemetry-api/src/opentelemetry/version.py b/opentelemetry-api/src/opentelemetry/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/opentelemetry-api/src/opentelemetry/version.py
+++ b/opentelemetry-api/src/opentelemetry/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/opentelemetry-instrumentation/setup.cfg b/opentelemetry-instrumentation/setup.cfg
index 8744c8cdaa1..4dee7c3cf83 100644
--- a/opentelemetry-instrumentation/setup.cfg
+++ b/opentelemetry-instrumentation/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.11b0
+ opentelemetry-api == 0.12.dev0
wrapt >= 1.0.0, < 2.0.0
[options.packages.find]
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/opentelemetry-proto/src/opentelemetry/proto/version.py b/opentelemetry-proto/src/opentelemetry/proto/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/version.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/opentelemetry-sdk/setup.cfg b/opentelemetry-sdk/setup.cfg
index cb2cb5184e5..6ea60117a1f 100644
--- a/opentelemetry-sdk/setup.cfg
+++ b/opentelemetry-sdk/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.11b0
+ opentelemetry-api == 0.12.dev0
[options.packages.find]
where = src
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/version.py b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
index 15e8d9536da..780a92b6a1b 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/version.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
diff --git a/tests/util/src/opentelemetry/test/version.py b/tests/util/src/opentelemetry/test/version.py
index f3cf7aea33b..1ad7bc603eb 100644
--- a/tests/util/src/opentelemetry/test/version.py
+++ b/tests/util/src/opentelemetry/test/version.py
@@ -1 +1 @@
-__version__ = "0.11b0"
+__version__ = "0.12.dev0"
From eec050ba92340459be8c489fe5e906fe8ba58899 Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Wed, 29 Jul 2020 10:03:46 -0700
Subject: [PATCH 55/79] Rename exporter packages from "ext" to "exporter"
(#953)
---
.flake8 | 4 +-
.github/workflows/docs.yml | 1 +
docs/conf.py | 9 ++-
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 ----
docs/examples/datadog_exporter/README.rst | 4 +-
.../datadog_exporter/basic_example.py | 2 +-
docs/examples/datadog_exporter/client.py | 2 +-
docs/examples/datadog_exporter/server.py | 4 +-
.../opencensus-exporter-metrics/README.rst | 4 +-
.../opencensus-exporter-metrics/collector.py | 2 +-
.../opencensus-exporter-tracer/README.rst | 4 +-
.../opencensus-exporter-tracer/collector.py | 2 +-
docs/examples/opentracing/main.py | 2 +-
docs/examples/opentracing/requirements.txt | 2 +-
docs/{ext => exporter}/datadog/datadog.rst | 2 +-
docs/{ext => exporter}/jaeger/jaeger.rst | 4 +-
.../opencensus/opencensus.rst} | 2 +-
docs/{ext => exporter}/otlp/otlp.rst | 2 +-
.../prometheus/prometheus.rst | 2 +-
docs/{ext => exporter}/zipkin/zipkin.rst | 2 +-
.../ext/cloud_monitoring/cloud_monitoring.rst | 7 --
docs/ext/cloud_trace/cloud_trace.rst | 7 --
docs/getting_started/jaeger_example.py | 2 +-
docs/getting_started/prometheus_example.py | 2 +-
docs/index.rst | 12 ++-
eachdist.ini | 1 +
.../CHANGELOG.md | 3 +
.../README.rst | 6 +-
.../opentelemetry-exporter-datadog}/setup.cfg | 4 +-
.../opentelemetry-exporter-datadog}/setup.py | 3 +-
.../exporter}/datadog/__init__.py | 4 +-
.../exporter}/datadog/constants.py | 0
.../exporter}/datadog/exporter.py | 0
.../exporter}/datadog/propagator.py | 0
.../exporter}/datadog/spanprocessor.py | 0
.../exporter}/datadog/version.py | 0
.../tests/__init__.py | 0
.../tests/test_datadog_exporter.py | 2 +-
.../tests/test_datadog_format.py | 2 +-
.../CHANGELOG.md | 3 +
.../opentelemetry-exporter-jaeger}/LICENSE | 0
.../MANIFEST.in | 0
.../opentelemetry-exporter-jaeger}/README.rst | 8 +-
.../examples/jaeger_exporter_example.py | 2 +-
.../opentelemetry-exporter-jaeger}/setup.cfg | 4 +-
.../opentelemetry-exporter-jaeger}/setup.py | 2 +-
.../exporter}/jaeger/__init__.py | 6 +-
.../exporter}/jaeger/gen/__init__.py | 0
.../exporter}/jaeger/gen/agent/Agent-remote | 0
.../exporter}/jaeger/gen/agent/Agent.py | 0
.../exporter}/jaeger/gen/agent/__init__.py | 0
.../exporter}/jaeger/gen/agent/constants.py | 0
.../exporter}/jaeger/gen/agent/ttypes.py | 0
.../jaeger/gen/jaeger/Collector-remote | 0
.../exporter}/jaeger/gen/jaeger/Collector.py | 0
.../exporter}/jaeger/gen/jaeger/__init__.py | 0
.../exporter}/jaeger/gen/jaeger/constants.py | 0
.../exporter}/jaeger/gen/jaeger/ttypes.py | 0
.../gen/zipkincore/ZipkinCollector-remote | 0
.../jaeger/gen/zipkincore/ZipkinCollector.py | 0
.../jaeger/gen/zipkincore/__init__.py | 0
.../jaeger/gen/zipkincore/constants.py | 0
.../exporter}/jaeger/gen/zipkincore/ttypes.py | 0
.../opentelemetry/exporter}/jaeger/version.py | 0
.../tests/__init__.py | 0
.../tests/test_jaeger_exporter.py | 4 +-
.../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 | 26 ++++++
.../exporter/opencensus}/__init__.py | 0
.../opencensus}/metrics_exporter/__init__.py | 2 +-
.../opencensus}/trace_exporter/__init__.py | 2 +-
.../exporter/opencensus}/util.py | 2 +-
.../exporter/opencensus}/version.py | 0
.../tests/__init__.py | 0
.../test_otcollector_metrics_exporter.py | 4 +-
.../tests/test_otcollector_trace_exporter.py | 6 +-
.../opentelemetry-exporter-otlp}/CHANGELOG.md | 3 +
.../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 | 3 +-
.../opentelemetry/exporter}/otlp/__init__.py | 2 +-
.../exporter}/otlp/trace_exporter/__init__.py | 0
.../opentelemetry/exporter}/otlp/version.py | 0
.../tests/__init__.py | 0
.../tests/test_otlp_trace_exporter.py | 10 +--
.../CHANGELOG.md | 12 +++
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +-
.../setup.cfg | 4 +-
.../setup.py | 26 ++++++
.../exporter}/prometheus/__init__.py | 2 +-
.../exporter}/prometheus/version.py | 0
.../tests/__init__.py | 0
.../tests/test_prometheus_exporter.py | 4 +-
.../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 | 2 +-
.../exporter}/zipkin/__init__.py | 2 +-
.../opentelemetry/exporter}/zipkin/version.py | 0
.../tests/__init__.py | 0
.../tests/test_zipkin_exporter.py | 2 +-
.../test_opencensusexporter_functional.py | 2 +-
.../setup.py | 26 ------
ext/opentelemetry-ext-prometheus/CHANGELOG.md | 9 ---
ext/opentelemetry-ext-zipkin/setup.py | 26 ------
pyproject.toml | 2 +-
scripts/build.sh | 2 +-
scripts/coverage.sh | 6 +-
tox.ini | 44 +++++------
125 files changed, 221 insertions(+), 384 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
rename docs/{ext => exporter}/datadog/datadog.rst (71%)
rename docs/{ext => exporter}/jaeger/jaeger.rst (64%)
rename docs/{ext/opencensusexporter/opencensusexporter.rst => exporter/opencensus/opencensus.rst} (64%)
rename docs/{ext => exporter}/otlp/otlp.rst (72%)
rename docs/{ext => exporter}/prometheus/prometheus.rst (71%)
rename docs/{ext => exporter}/zipkin/zipkin.rst (71%)
delete mode 100644 docs/ext/cloud_monitoring/cloud_monitoring.rst
delete mode 100644 docs/ext/cloud_trace/cloud_trace.rst
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-jaeger => exporter/opentelemetry-exporter-datadog}/setup.py (91%)
rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/__init__.py (93%)
rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/constants.py (100%)
rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/exporter.py (100%)
rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/propagator.py (100%)
rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/datadog/spanprocessor.py (100%)
rename {ext/opentelemetry-ext-datadog/src/opentelemetry/ext => exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter}/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 (99%)
rename {ext/opentelemetry-ext-datadog => exporter/opentelemetry-exporter-datadog}/tests/test_datadog_format.py (98%)
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 (97%)
rename {ext/opentelemetry-ext-jaeger => exporter/opentelemetry-exporter-jaeger}/setup.cfg (94%)
rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-jaeger}/setup.py (91%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/__init__.py (98%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/__init__.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/Agent-remote (100%)
mode change 100755 => 100644
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/Agent.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/__init__.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/constants.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/agent/ttypes.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/Collector-remote (100%)
mode change 100755 => 100644
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/Collector.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/__init__.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/constants.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/jaeger/ttypes.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/ZipkinCollector-remote (100%)
mode change 100755 => 100644
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/ZipkinCollector.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/__init__.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/constants.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/jaeger/gen/zipkincore/ttypes.py (100%)
rename {ext/opentelemetry-ext-jaeger/src/opentelemetry/ext => exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter}/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 (99%)
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%)
create mode 100644 exporter/opentelemetry-exporter-opencensus/setup.py
rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/__init__.py (100%)
rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/metrics_exporter/__init__.py (98%)
rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/trace_exporter/__init__.py (99%)
rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/util.py (98%)
rename {ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter => exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus}/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 (98%)
rename {ext/opentelemetry-ext-opencensusexporter => exporter/opentelemetry-exporter-opencensus}/tests/test_otcollector_trace_exporter.py (98%)
rename {ext/opentelemetry-ext-otlp => exporter/opentelemetry-exporter-otlp}/CHANGELOG.md (65%)
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-datadog => exporter/opentelemetry-exporter-otlp}/setup.py (92%)
rename {ext/opentelemetry-ext-otlp/src/opentelemetry/ext => exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter}/otlp/__init__.py (95%)
rename {ext/opentelemetry-ext-otlp/src/opentelemetry/ext => exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter}/otlp/trace_exporter/__init__.py (100%)
rename {ext/opentelemetry-ext-otlp/src/opentelemetry/ext => exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter}/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 (97%)
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%)
create mode 100644 exporter/opentelemetry-exporter-prometheus/setup.py
rename {ext/opentelemetry-ext-prometheus/src/opentelemetry/ext => exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter}/prometheus/__init__.py (98%)
rename {ext/opentelemetry-ext-prometheus/src/opentelemetry/ext => exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter}/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 (97%)
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-prometheus => exporter/opentelemetry-exporter-zipkin}/setup.py (91%)
rename {ext/opentelemetry-ext-zipkin/src/opentelemetry/ext => exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter}/zipkin/__init__.py (99%)
rename {ext/opentelemetry-ext-zipkin/src/opentelemetry/ext => exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter}/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 (99%)
delete mode 100644 ext/opentelemetry-ext-opencensusexporter/setup.py
delete mode 100644 ext/opentelemetry-ext-prometheus/CHANGELOG.md
delete mode 100644 ext/opentelemetry-ext-zipkin/setup.py
diff --git a/.flake8 b/.flake8
index 8555d626c6f..2780677a643 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-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/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 -----------------------------------------------------
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/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/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/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-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/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
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..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.exporter.jaeger import JaegerSpanExporter
from opentelemetry.ext import opentracing_shim
-from opentelemetry.ext.jaeger import JaegerSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
from rediscache import RedisCache
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/docs/ext/datadog/datadog.rst b/docs/exporter/datadog/datadog.rst
similarity index 71%
rename from docs/ext/datadog/datadog.rst
rename to docs/exporter/datadog/datadog.rst
index 5ae7e042890..3b43c2bdf72 100644
--- a/docs/ext/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/ext/jaeger/jaeger.rst b/docs/exporter/jaeger/jaeger.rst
similarity index 64%
rename from docs/ext/jaeger/jaeger.rst
rename to docs/exporter/jaeger/jaeger.rst
index d7b93a6f10f..6988d8cea9c 100644
--- a/docs/ext/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/ext/opencensusexporter/opencensusexporter.rst b/docs/exporter/opencensus/opencensus.rst
similarity index 64%
rename from docs/ext/opencensusexporter/opencensusexporter.rst
rename to docs/exporter/opencensus/opencensus.rst
index 07b9a855582..6bdcd6a873c 100644
--- a/docs/ext/opencensusexporter/opencensusexporter.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/ext/otlp/otlp.rst b/docs/exporter/otlp/otlp.rst
similarity index 72%
rename from docs/ext/otlp/otlp.rst
rename to docs/exporter/otlp/otlp.rst
index 4739d21a581..7663ec9489c 100644
--- a/docs/ext/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/ext/prometheus/prometheus.rst b/docs/exporter/prometheus/prometheus.rst
similarity index 71%
rename from docs/ext/prometheus/prometheus.rst
rename to docs/exporter/prometheus/prometheus.rst
index 9ca7754af95..f4ad1a8245b 100644
--- a/docs/ext/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/ext/zipkin/zipkin.rst b/docs/exporter/zipkin/zipkin.rst
similarity index 71%
rename from docs/ext/zipkin/zipkin.rst
rename to docs/exporter/zipkin/zipkin.rst
index 8a5191a86d1..18042022a45 100644
--- a/docs/ext/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/docs/ext/cloud_monitoring/cloud_monitoring.rst b/docs/ext/cloud_monitoring/cloud_monitoring.rst
deleted file mode 100644
index a3a4f5660ad..00000000000
--- a/docs/ext/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/ext/cloud_trace/cloud_trace.rst b/docs/ext/cloud_trace/cloud_trace.rst
deleted file mode 100644
index 5914b00d1a4..00000000000
--- a/docs/ext/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/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/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/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/**
diff --git a/eachdist.ini b/eachdist.ini
index 4a197ad2914..82fc0271eda 100644
--- a/eachdist.ini
+++ b/eachdist.ini
@@ -7,6 +7,7 @@ sortfirst=
opentelemetry-instrumentation
opentelemetry-proto
tests/util
+ exporter/*
ext/opentelemetry-ext-wsgi
ext/opentelemetry-ext-dbapi
ext/opentelemetry-ext-asgi
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..d15d5a4b5d1 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
+ ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+
## 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 95b0bb08571..266abe9e0ba 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-jaeger/setup.py b/exporter/opentelemetry-exporter-datadog/setup.py
similarity index 91%
rename from ext/opentelemetry-ext-jaeger/setup.py
rename to exporter/opentelemetry-exporter-datadog/setup.py
index 842a6f6416b..0c3bdf453fd 100644
--- a/ext/opentelemetry-ext-jaeger/setup.py
+++ b/exporter/opentelemetry-exporter-datadog/setup.py
@@ -11,13 +11,14 @@
# 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", "jaeger", "version.py"
+ BASE_DIR, "src", "opentelemetry", "exporter", "datadog", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/__init__.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py
similarity index 93%
rename from ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/__init__.py
rename to exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py
index 85bdaea40aa..7adde5df500 100644
--- a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/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/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/constants.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/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/exporter/datadog/constants.py
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/exporter.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/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/exporter/datadog/exporter.py
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/propagator.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/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/exporter/datadog/propagator.py
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/spanprocessor.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/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/exporter/datadog/spanprocessor.py
diff --git a/ext/opentelemetry-ext-datadog/src/opentelemetry/ext/datadog/version.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/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/exporter/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 99%
rename from ext/opentelemetry-ext-datadog/tests/test_datadog_exporter.py
rename to exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py
index 5306d517b76..a3e67790d97 100644
--- a/ext/opentelemetry-ext-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/ext/opentelemetry-ext-datadog/tests/test_datadog_format.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py
similarity index 98%
rename from ext/opentelemetry-ext-datadog/tests/test_datadog_format.py
rename to exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py
index 31633f83701..1a398745b8d 100644
--- a/ext/opentelemetry-ext-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
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..7b9a03d3122 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
+ ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+
## 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 97%
rename from ext/opentelemetry-ext-jaeger/examples/jaeger_exporter_example.py
rename to exporter/opentelemetry-exporter-jaeger/examples/jaeger_exporter_example.py
index 1aca62fc23f..68453fd9fac 100644
--- a/ext/opentelemetry-ext-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/ext/opentelemetry-ext-jaeger/setup.cfg b/exporter/opentelemetry-exporter-jaeger/setup.cfg
similarity index 94%
rename from ext/opentelemetry-ext-jaeger/setup.cfg
rename to exporter/opentelemetry-exporter-jaeger/setup.cfg
index fc581301b6f..b660e8ec1c1 100644
--- a/ext/opentelemetry-ext-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/ext/opentelemetry-ext-otlp/setup.py b/exporter/opentelemetry-exporter-jaeger/setup.py
similarity index 91%
rename from ext/opentelemetry-ext-otlp/setup.py
rename to exporter/opentelemetry-exporter-jaeger/setup.py
index 64c30afbaba..1bd39703297 100644
--- a/ext/opentelemetry-ext-otlp/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", "otlp", "version.py"
+ BASE_DIR, "src", "opentelemetry", "exporter", "jaeger", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py
similarity index 98%
rename from ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/__init__.py
rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py
index f12031d510b..993bf4f0872 100644
--- a/ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/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
@@ -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/ext/opentelemetry-ext-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 ext/opentelemetry-ext-jaeger/src/opentelemetry/ext/jaeger/gen/__init__.py
rename to exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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/exporter/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 99%
rename from ext/opentelemetry-ext-jaeger/tests/test_jaeger_exporter.py
rename to exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py
index 7bca8e83178..30b7c85826a 100644
--- a/ext/opentelemetry-ext-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/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..c7f0cf69b5c 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
+ ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+
## 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 0a3376083a7..64b4b4a2286 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/exporter/opentelemetry-exporter-opencensus/setup.py b/exporter/opentelemetry-exporter-opencensus/setup.py
new file mode 100644
index 00000000000..65c91aba9ff
--- /dev/null
+++ b/exporter/opentelemetry-exporter-opencensus/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", "exporter", "opencensus", "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-opencensusexporter/src/opentelemetry/ext/opencensusexporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/__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/exporter/opencensus/__init__.py
diff --git a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py
similarity index 98%
rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/metrics_exporter/__init__.py
rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/metrics_exporter/__init__.py
index bb1a1ee888c..e83e779df67 100644
--- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/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/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py
similarity index 99%
rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/trace_exporter/__init__.py
rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/trace_exporter/__init__.py
index adadef1666f..e5eb4eaf770 100644
--- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/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/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/util.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py
similarity index 98%
rename from ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/util.py
rename to exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/util.py
index 88ff6258f7d..9b9e7201906 100644
--- a/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/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/ext/opentelemetry-ext-opencensusexporter/src/opentelemetry/ext/opencensusexporter/version.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/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/exporter/opencensus/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 98%
rename from ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_metrics_exporter.py
rename to exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py
index f538e5acecd..eddaf963608 100644
--- a/ext/opentelemetry-ext-opencensusexporter/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/ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_trace_exporter.py b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py
similarity index 98%
rename from ext/opentelemetry-ext-opencensusexporter/tests/test_otcollector_trace_exporter.py
rename to exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_trace_exporter.py
index 0801d6d0c1b..d07fd053b45 100644
--- a/ext/opentelemetry-ext-opencensusexporter/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/ext/opentelemetry-ext-otlp/CHANGELOG.md b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
similarity index 65%
rename from ext/opentelemetry-ext-otlp/CHANGELOG.md
rename to exporter/opentelemetry-exporter-otlp/CHANGELOG.md
index 32e75eda55d..bcaa7d11811 100644
--- a/ext/opentelemetry-ext-otlp/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
@@ -2,6 +2,9 @@
## 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
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 b6bfac669b9..262ac02008b 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-datadog/setup.py b/exporter/opentelemetry-exporter-otlp/setup.py
similarity index 92%
rename from ext/opentelemetry-ext-datadog/setup.py
rename to exporter/opentelemetry-exporter-otlp/setup.py
index f6573911046..c04c30fca48 100644
--- a/ext/opentelemetry-ext-datadog/setup.py
+++ b/exporter/opentelemetry-exporter-otlp/setup.py
@@ -11,14 +11,13 @@
# 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", "datadog", "version.py"
+ BASE_DIR, "src", "opentelemetry", "exporter", "otlp", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py
similarity index 95%
rename from ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/__init__.py
rename to exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py
index 1b315c5847a..dca0042a68d 100644
--- a/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/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/ext/opentelemetry-ext-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 ext/opentelemetry-ext-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/ext/opentelemetry-ext-otlp/src/opentelemetry/ext/otlp/version.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/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/exporter/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 97%
rename from ext/opentelemetry-ext-otlp/tests/test_otlp_trace_exporter.py
rename to exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py
index 3e7affb2213..c7e26508b25 100644
--- a/ext/opentelemetry-ext-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/CHANGELOG.md b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md
new file mode 100644
index 00000000000..5c978d394d4
--- /dev/null
+++ b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md
@@ -0,0 +1,12 @@
+# Changelog
+
+## Unreleased
+
+- Change package name to opentelemetry-exporter-prometheus
+ ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+
+## 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 3571f93c540..94359e9641c 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/exporter/opentelemetry-exporter-prometheus/setup.py b/exporter/opentelemetry-exporter-prometheus/setup.py
new file mode 100644
index 00000000000..86067a2bd56
--- /dev/null
+++ b/exporter/opentelemetry-exporter-prometheus/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", "exporter", "prometheus", "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-prometheus/src/opentelemetry/ext/prometheus/__init__.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py
similarity index 98%
rename from ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/__init__.py
rename to exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/__init__.py
index da22042dcc5..e03c23a99e1 100644
--- a/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/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/ext/opentelemetry-ext-prometheus/src/opentelemetry/ext/prometheus/version.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/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/exporter/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 97%
rename from ext/opentelemetry-ext-prometheus/tests/test_prometheus_exporter.py
rename to exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py
index 2ba6b701215..d624086ce3c 100644
--- a/ext/opentelemetry-ext-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/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..2218d44c20b 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
+ ([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+
## 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 7674cab5365..f1246813e38 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-prometheus/setup.py b/exporter/opentelemetry-exporter-zipkin/setup.py
similarity index 91%
rename from ext/opentelemetry-ext-prometheus/setup.py
rename to exporter/opentelemetry-exporter-zipkin/setup.py
index 0276cd66554..9822805d9dc 100644
--- a/ext/opentelemetry-ext-prometheus/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", "prometheus", "version.py"
+ BASE_DIR, "src", "opentelemetry", "exporter", "zipkin", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/__init__.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py
similarity index 99%
rename from ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/__init__.py
rename to exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py
index 8a487290ce1..10bd6e93e97 100644
--- a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/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
diff --git a/ext/opentelemetry-ext-zipkin/src/opentelemetry/ext/zipkin/version.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/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/exporter/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 99%
rename from ext/opentelemetry-ext-zipkin/tests/test_zipkin_exporter.py
rename to exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py
index 1f2d53d3048..9f6da2e240f 100644
--- a/ext/opentelemetry-ext-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
diff --git a/ext/opentelemetry-ext-opencensusexporter/setup.py b/ext/opentelemetry-ext-opencensusexporter/setup.py
deleted file mode 100644
index dfb8fd82bff..00000000000
--- a/ext/opentelemetry-ext-opencensusexporter/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", "opencensusexporter", "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-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-zipkin/setup.py b/ext/opentelemetry-ext-zipkin/setup.py
deleted file mode 100644
index a01df70c9d0..00000000000
--- a/ext/opentelemetry-ext-zipkin/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", "zipkin", "version.py"
-)
-PACKAGE_INFO = {}
-with open(VERSION_FILENAME) as f:
- exec(f.read(), PACKAGE_INFO)
-
-setuptools.setup(version=PACKAGE_INFO["__version__"])
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|
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 07a0bf42bdf..a018ec7a896 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}/exporter/opentelemetry-exporter-opencensus
docker-compose up -d
python check_availability.py
commands =
From fc58032694fd96b17df18f08532f63e9f60f0e3a Mon Sep 17 00:00:00 2001
From: Connor Adams
Date: Wed, 29 Jul 2020 16:58:51 -0400
Subject: [PATCH 56/79] automatic metrics for gRPC client interceptor (#917)
---
ext/opentelemetry-ext-grpc/CHANGELOG.md | 2 +
ext/opentelemetry-ext-grpc/setup.cfg | 1 +
.../src/opentelemetry/ext/grpc/__init__.py | 53 +++--
.../src/opentelemetry/ext/grpc/_client.py | 185 ++++++++++++------
.../src/opentelemetry/ext/grpc/_utilities.py | 79 ++++++++
.../tests/test_client_interceptor.py | 175 +++++++++++++++--
6 files changed, 415 insertions(+), 80 deletions(-)
diff --git a/ext/opentelemetry-ext-grpc/CHANGELOG.md b/ext/opentelemetry-ext-grpc/CHANGELOG.md
index fff83ab5a7b..5f272a80f8a 100644
--- a/ext/opentelemetry-ext-grpc/CHANGELOG.md
+++ b/ext/opentelemetry-ext-grpc/CHANGELOG.md
@@ -11,6 +11,8 @@ Released 2020-07-28
- 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
diff --git a/ext/opentelemetry-ext-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg
index 0a4e4e5b679..c7dac4c3561 100644
--- a/ext/opentelemetry-ext-grpc/setup.cfg
+++ b/ext/opentelemetry-ext-grpc/setup.cfg
@@ -41,6 +41,7 @@ package_dir=
packages=find_namespace:
install_requires =
opentelemetry-api == 0.12.dev0
+ opentelemetry-sdk == 0.12.dev0
grpcio ~= 1.27
[options.extras_require]
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 368ae55f2e6..1a665662818 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py
@@ -33,6 +33,10 @@
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:
@@ -42,7 +46,12 @@
trace.get_tracer_provider().add_span_processor(
SimpleExportSpanProcessor(ConsoleSpanExporter())
)
- instrumentor = GrpcInstrumentorClient()
+
+ # 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():
@@ -109,6 +118,7 @@ def serve():
serve()
"""
from contextlib import contextmanager
+from functools import partial
import grpc
from wrapt import wrap_function_wrapper as _wrap
@@ -139,11 +149,21 @@ def wrapper_fn(self, original_func, instance, args, kwargs):
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", self.wrapper_fn)
+ _wrap(
+ "grpc",
+ "secure_channel",
+ partial(self.wrapper_fn, exporter, interval),
+ )
else:
- _wrap("grpc", "insecure_channel", self.wrapper_fn)
+ _wrap(
+ "grpc",
+ "insecure_channel",
+ partial(self.wrapper_fn, exporter, interval),
+ )
def _uninstrument(self, **kwargs):
if kwargs.get("channel_type") == "secure":
@@ -152,17 +172,28 @@ def _uninstrument(self, **kwargs):
else:
unwrap(grpc, "insecure_channel")
- @contextmanager
- def wrapper_fn(self, original_func, instance, args, kwargs):
- with original_func(*args, **kwargs) as channel:
- yield intercept_channel(channel, client_interceptor())
-
-
-def client_interceptor(tracer_provider=None):
+ 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.
@@ -171,7 +202,7 @@ def client_interceptor(tracer_provider=None):
tracer = trace.get_tracer(__name__, __version__, tracer_provider)
- return _client.OpenTelemetryClientInterceptor(tracer)
+ return _client.OpenTelemetryClientInterceptor(tracer, exporter, interval)
def server_interceptor(tracer_provider=None):
diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py
index 373d8f345cf..028804f599c 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_client.py
@@ -24,11 +24,12 @@
import grpc
-from opentelemetry import propagators, trace
+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
+from ._utilities import RpcInfo, TimedMetricRecorder
class _GuardedSpan:
@@ -63,7 +64,7 @@ def append_metadata(
propagators.inject(append_metadata, metadata)
-def _make_future_done_callback(span, rpc_info):
+def _make_future_done_callback(span, rpc_info, client_info, metrics_recorder):
def callback(response_future):
with span:
code = response_future.code()
@@ -72,6 +73,10 @@ def callback(response_future):
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
@@ -79,21 +84,34 @@ def callback(response_future):
class OpenTelemetryClientInterceptor(
grpcext.UnaryClientInterceptor, grpcext.StreamClientInterceptor
):
- def __init__(self, tracer):
+ 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):
+ 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)
+ _make_future_done_callback(
+ guarded_span.release(),
+ rpc_info,
+ client_info,
+ self._metrics_recorder,
+ )
)
return result
response = result
@@ -104,11 +122,24 @@ def _trace_result(self, guarded_span, rpc_info, result):
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()
@@ -116,25 +147,37 @@ def intercept_unary(self, request, metadata, client_info, invoker):
mutable_metadata = OrderedDict(metadata)
with self._start_guarded_span(client_info.full_method) as guarded_span:
- _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,
- )
-
- try:
- result = invoker(request, metadata)
- except grpc.RpcError as exc:
- guarded_span.generated_span.set_status(
- Status(StatusCanonicalCode(exc.code().value[0]))
+ 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,
)
- raise
- return self._trace_result(guarded_span, rpc_info, result)
+ 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
@@ -148,25 +191,44 @@ def _intercept_server_stream(
mutable_metadata = OrderedDict(metadata)
with self._start_span(client_info.full_method) as span:
- _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
-
- try:
- result = invoker(request_or_iterator, metadata)
- for response in result:
- yield response
- except grpc.RpcError as exc:
- span.set_status(
- Status(StatusCanonicalCode(exc.code().value[0]))
+ 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,
)
- raise
+
+ 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
@@ -182,21 +244,32 @@ def intercept_stream(
mutable_metadata = OrderedDict(metadata)
with self._start_guarded_span(client_info.full_method) as guarded_span:
- _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,
- )
+ 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
- try:
- result = invoker(request_or_iterator, metadata)
- except grpc.RpcError as exc:
- guarded_span.generated_span.set_status(
- Status(StatusCanonicalCode(exc.code().value[0]))
+ request_or_iterator = self._bytes_out_iterator_wrapper(
+ request_or_iterator, client_info
)
- raise
- return self._trace_result(guarded_span, rpc_info, result)
+ 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/_utilities.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py
index b6ff7d311a4..1dfe31ec995 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py
@@ -14,6 +14,13 @@
"""Internal utilities."""
+from contextlib import contextmanager
+from time import time
+
+import grpc
+
+from opentelemetry.sdk.metrics import Counter, ValueRecorder
+
class RpcInfo:
def __init__(
@@ -31,3 +38,75 @@ def __init__(
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/tests/test_client_interceptor.py b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py
index 47dc9fa0bb6..a668f05ca79 100644
--- a/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py
+++ b/ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py
@@ -15,10 +15,12 @@
import grpc
import opentelemetry.ext.grpc
-from opentelemetry import metrics, trace
-from opentelemetry.ext.grpc import client_interceptor
-from opentelemetry.ext.grpc.grpcext import intercept_channel
-from opentelemetry.sdk.metrics.export.controller import PushController
+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
@@ -34,24 +36,81 @@
class TestClientProto(TestBase):
def setUp(self):
super().setUp()
+ GrpcInstrumentorClient().instrument(
+ exporter=self.memory_metrics_exporter
+ )
self.server = create_test_server(25565)
self.server.start()
- meter = metrics.get_meter(__name__)
- interceptor = client_interceptor()
- self.channel = intercept_channel(
- grpc.insecure_channel("localhost:25565"), interceptor
- )
+ self.channel = grpc.insecure_channel("localhost:25565")
self._stub = test_server_pb2_grpc.GRPCTestServerStub(self.channel)
- self._controller = PushController(
- meter, self.memory_metrics_exporter, 30
- )
-
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()
@@ -64,6 +123,10 @@ def test_unary_stream(self):
# 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()
@@ -76,6 +139,10 @@ def test_stream_unary(self):
# 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()
@@ -90,10 +157,57 @@ def test_stream_stream(self):
# 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]
@@ -106,6 +220,7 @@ 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]
@@ -118,6 +233,8 @@ 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]
@@ -130,6 +247,10 @@ 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]
@@ -137,3 +258,31 @@ def test_error_stream_stream(self):
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)
From 8c4fca5c754bb98fcb0101e5865e5b7e70ecf659 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Thu, 30 Jul 2020 08:56:11 -0600
Subject: [PATCH 57/79] Update environment variable names (#904)
---
docs/examples/django/README.rst | 2 +-
ext/opentelemetry-ext-django/CHANGELOG.md | 2 +
ext/opentelemetry-ext-django/README.rst | 4 +-
.../tests/conftest.py | 2 +-
.../CHANGELOG.md | 4 +-
.../ext/elasticsearch/__init__.py | 5 +--
.../tests/test_elasticsearch.py | 2 +-
ext/opentelemetry-ext-flask/CHANGELOG.md | 4 +-
ext/opentelemetry-ext-flask/README.rst | 4 +-
ext/opentelemetry-ext-pyramid/CHANGELOG.md | 6 +--
ext/opentelemetry-ext-pyramid/README.rst | 4 +-
opentelemetry-api/CHANGELOG.md | 5 ++-
.../opentelemetry/configuration/__init__.py | 37 ++++++++++---------
.../src/opentelemetry/context/__init__.py | 2 +-
.../tests/configuration/test_configuration.py | 30 +++++++--------
opentelemetry-sdk/CHANGELOG.md | 5 ++-
opentelemetry-sdk/tests/conftest.py | 6 +--
17 files changed, 63 insertions(+), 61 deletions(-)
diff --git a/docs/examples/django/README.rst b/docs/examples/django/README.rst
index e8a043684f6..6f441dd333d 100644
--- a/docs/examples/django/README.rst
+++ b/docs/examples/django/README.rst
@@ -36,7 +36,7 @@ Execution of the Django app
Set these environment variables first:
-#. ``export OPENTELEMETRY_PYTHON_DJANGO_INSTRUMENT=True``
+#. ``export OTEL_PYTHON_DJANGO_INSTRUMENT=True``
#. ``export DJANGO_SETTINGS_MODULE=instrumentation_example.settings``
The way to achieve OpenTelemetry instrumentation for your Django app is to use
diff --git a/ext/opentelemetry-ext-django/CHANGELOG.md b/ext/opentelemetry-ext-django/CHANGELOG.md
index 6e3cc9c9827..0328ccaa20a 100644
--- a/ext/opentelemetry-ext-django/CHANGELOG.md
+++ b/ext/opentelemetry-ext-django/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
+
## Version 0.11b0
Released 2020-07-28
diff --git a/ext/opentelemetry-ext-django/README.rst b/ext/opentelemetry-ext-django/README.rst
index 1759cb6602a..b7a822f1979 100644
--- a/ext/opentelemetry-ext-django/README.rst
+++ b/ext/opentelemetry-ext-django/README.rst
@@ -20,13 +20,13 @@ Configuration
Exclude lists
*************
-To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
+To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_DJANGO_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
For example,
::
- export OPENTELEMETRY_PYTHON_DJANGO_EXCLUDED_URLS="client/.*/info,healthcheck"
+ export OTEL_PYTHON_DJANGO_EXCLUDED_URLS="client/.*/info,healthcheck"
will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``.
diff --git a/ext/opentelemetry-ext-django/tests/conftest.py b/ext/opentelemetry-ext-django/tests/conftest.py
index b2b39bc049a..8797bfc3060 100644
--- a/ext/opentelemetry-ext-django/tests/conftest.py
+++ b/ext/opentelemetry-ext-django/tests/conftest.py
@@ -16,4 +16,4 @@
def pytest_sessionstart(session): # pylint: disable=unused-argument
- environ.setdefault("OPENTELEMETRY_PYTHON_DJANGO_INSTRUMENT", "True")
+ environ.setdefault("OTEL_PYTHON_DJANGO_INSTRUMENT", "True")
diff --git a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md b/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
index 7425aa5e1ec..ede33c6646e 100644
--- a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
+++ b/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
@@ -2,8 +2,10 @@
## Unreleased
+- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
+
## Version 0.10b0
Released 2020-06-23
-- Initial release
\ No newline at end of file
+- Initial release
diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py
index 7c41ba3f0da..6746d1ac70a 100644
--- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py
+++ b/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py
@@ -40,7 +40,7 @@
---
Elasticsearch instrumentation prefixes operation names with the string "Elasticsearch". This
-can be changed to a different string by either setting the `OPENTELEMETRY_PYTHON_ELASTICSEARCH_NAME_PREFIX`
+can be changed to a different string by either setting the `OTEL_PYTHON_ELASTICSEARCH_NAME_PREFIX`
environment variable or by passing the prefix as an argument to the instrumentor. For example,
@@ -88,8 +88,7 @@ class ElasticsearchInstrumentor(BaseInstrumentor):
def __init__(self, span_name_prefix=None):
if not span_name_prefix:
span_name_prefix = environ.get(
- "OPENTELEMETRY_PYTHON_ELASTICSEARCH_NAME_PREFIX",
- "Elasticsearch",
+ "OTEL_PYTHON_ELASTICSEARCH_NAME_PREFIX", "Elasticsearch",
)
self._span_name_prefix = span_name_prefix.strip()
super().__init__()
diff --git a/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py b/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py
index f6ca6bdae1f..3c4fe7f70f0 100644
--- a/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py
+++ b/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py
@@ -95,7 +95,7 @@ def test_prefix_arg(self, request_mock):
def test_prefix_env(self, request_mock):
prefix = "prefix-from-args"
- env_var = "OPENTELEMETRY_PYTHON_ELASTICSEARCH_NAME_PREFIX"
+ env_var = "OTEL_PYTHON_ELASTICSEARCH_NAME_PREFIX"
os.environ[env_var] = prefix
ElasticsearchInstrumentor().uninstrument()
ElasticsearchInstrumentor().instrument()
diff --git a/ext/opentelemetry-ext-flask/CHANGELOG.md b/ext/opentelemetry-ext-flask/CHANGELOG.md
index 3109c159023..334084c1494 100644
--- a/ext/opentelemetry-ext-flask/CHANGELOG.md
+++ b/ext/opentelemetry-ext-flask/CHANGELOG.md
@@ -2,9 +2,9 @@
## Unreleased
-## Version 0.11b0
+- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
-Released 2020-07-28
+## Version 0.11b0
- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
diff --git a/ext/opentelemetry-ext-flask/README.rst b/ext/opentelemetry-ext-flask/README.rst
index 395053972ef..a75a0cfbaad 100644
--- a/ext/opentelemetry-ext-flask/README.rst
+++ b/ext/opentelemetry-ext-flask/README.rst
@@ -21,13 +21,13 @@ Configuration
Exclude lists
*************
-To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
+To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_FLASK_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
For example,
::
- export OPENTELEMETRY_PYTHON_FLASK_EXCLUDED_URLS="client/.*/info,healthcheck"
+ export OTEL_PYTHON_FLASK_EXCLUDED_URLS="client/.*/info,healthcheck"
will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``.
diff --git a/ext/opentelemetry-ext-pyramid/CHANGELOG.md b/ext/opentelemetry-ext-pyramid/CHANGELOG.md
index f871a0aa5f8..2e20d5a0bdf 100644
--- a/ext/opentelemetry-ext-pyramid/CHANGELOG.md
+++ b/ext/opentelemetry-ext-pyramid/CHANGELOG.md
@@ -2,9 +2,9 @@
## Unreleased
-## Version 0.11b0
+- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
-Released 2020-07-28
+## Version 0.11b0
- Use one general exclude list instead of two ([#872](https://github.com/open-telemetry/opentelemetry-python/pull/872))
@@ -12,4 +12,4 @@ Released 2020-07-28
Released 2020-06-10
-- Initial release
\ No newline at end of file
+- Initial release
diff --git a/ext/opentelemetry-ext-pyramid/README.rst b/ext/opentelemetry-ext-pyramid/README.rst
index 319d6bff4ce..6ec38b83c90 100644
--- a/ext/opentelemetry-ext-pyramid/README.rst
+++ b/ext/opentelemetry-ext-pyramid/README.rst
@@ -15,13 +15,13 @@ Installation
Exclude lists
*************
-To exclude certain URLs from being tracked, set the environment variable ``OPENTELEMETRY_PYTHON_PYRAMID_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
+To exclude certain URLs from being tracked, set the environment variable ``OTEL_PYTHON_PYRAMID_EXCLUDED_URLS`` with comma delimited regexes representing which URLs to exclude.
For example,
::
- export OPENTELEMETRY_PYTHON_PYRAMID_EXCLUDED_URLS="client/.*/info,healthcheck"
+ export OTEL_PYTHON_PYRAMID_EXCLUDED_URLS="client/.*/info,healthcheck"
will exclude requests such as ``https://site/client/123/info`` and ``https://site/xyz/healthcheck``.
diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md
index da976ed37e4..2226b5d0273 100644
--- a/opentelemetry-api/CHANGELOG.md
+++ b/opentelemetry-api/CHANGELOG.md
@@ -2,9 +2,10 @@
## Unreleased
-## Version 0.11b0
+- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL`
+ ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
-Released 2020-07-28
+## Version 0.11b0
- Return INVALID_SPAN if no TracerProvider set for get_current_span
([#751](https://github.com/open-telemetry/opentelemetry-python/pull/751))
diff --git a/opentelemetry-api/src/opentelemetry/configuration/__init__.py b/opentelemetry-api/src/opentelemetry/configuration/__init__.py
index 36c0950c0b0..0c606b5af4d 100644
--- a/opentelemetry-api/src/opentelemetry/configuration/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/configuration/__init__.py
@@ -16,30 +16,33 @@
Simple configuration manager
This is a configuration manager for OpenTelemetry. It reads configuration
-values from environment variables prefixed with ``OPENTELEMETRY_PYTHON_`` whose
-characters are only alphanumeric characters and unserscores, except for the
-first character after ``OPENTELEMETRY_PYTHON_`` which must not be a number.
+values from environment variables prefixed with ``OTEL_`` (for environment
+variables that apply to any OpenTelemetry implementation) or with
+``OTEL_PYTHON_`` (for environment variables that are specific to the Python
+implementation of OpenTelemetry) whose characters are only alphanumeric
+characters and unserscores, except for the first character after ``OTEL_`` or
+``OTEL_PYTHON_`` which must not be a number.
For example, these environment variables will be read:
-1. ``OPENTELEMETRY_PYTHON_SOMETHING``
-2. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_``
-3. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_AND__ELSE``
-4. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_AND_else``
-5. ``OPENTELEMETRY_PYTHON_SOMETHING_ELSE_AND_else2``
+1. ``OTEL_SOMETHING``
+2. ``OTEL_SOMETHING_ELSE_``
+3. ``OTEL_SOMETHING_ELSE_AND__ELSE``
+4. ``OTEL_SOMETHING_ELSE_AND_else``
+5. ``OTEL_SOMETHING_ELSE_AND_else2``
These won't:
1. ``OPENTELEMETRY_PYTH_SOMETHING``
-2. ``OPENTELEMETRY_PYTHON_2_SOMETHING_AND__ELSE``
-3. ``OPENTELEMETRY_PYTHON_SOMETHING_%_ELSE``
+2. ``OTEL_2_SOMETHING_AND__ELSE``
+3. ``OTEL_SOMETHING_%_ELSE``
The values stored in the environment variables can be found in an instance of
``opentelemetry.configuration.Configuration``. This class can be instantiated
freely because instantiating it returns always the same object.
For example, if the environment variable
-``OPENTELEMETRY_PYTHON_METER_PROVIDER`` value is ``my_meter_provider``, then
+``OTEL_PYTHON_METER_PROVIDER`` value is ``my_meter_provider``, then
``Configuration().meter_provider == "my_meter_provider"`` would be ``True``.
Non defined attributes will always return ``None``. This is intended to make it
@@ -49,8 +52,8 @@
Environment variables used by OpenTelemetry
-------------------------------------------
-1. OPENTELEMETRY_PYTHON_METER_PROVIDER
-2. OPENTELEMETRY_PYTHON_TRACER_PROVIDER
+1. OTEL_PYTHON_METER_PROVIDER
+2. OTEL_PYTHON_TRACER_PROVIDER
The value of these environment variables should be the name of the entry point
that points to the class that implements either provider. This OpenTelemetry
@@ -70,7 +73,7 @@
}
To use the meter provider above, then the
-``OPENTELEMETRY_PYTHON_METER_PROVIDER`` should be set to
+``OTEL_PYTHON_METER_PROVIDER`` should be set to
``"default_meter_provider"`` (this is not actually necessary since the
OpenTelemetry API provided providers are the default ones used if no
configuration is found in the environment variables).
@@ -110,13 +113,11 @@ def __new__(cls) -> "Configuration":
instance = super().__new__(cls)
for key, value_str in environ.items():
- match = fullmatch(
- r"OPENTELEMETRY_PYTHON_([A-Za-z_][\w_]*)", key
- )
+ match = fullmatch(r"OTEL_(PYTHON_)?([A-Za-z_][\w_]*)", key)
if match is not None:
- key = match.group(1)
+ key = match.group(2)
value = value_str # type: ConfigValue
if value_str == "True":
diff --git a/opentelemetry-api/src/opentelemetry/context/__init__.py b/opentelemetry-api/src/opentelemetry/context/__init__.py
index adf1bc0869f..a5f24118d34 100644
--- a/opentelemetry-api/src/opentelemetry/context/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/context/__init__.py
@@ -55,7 +55,7 @@ def wrapper(
default_context = "contextvars_context"
configured_context = environ.get(
- "OPENTELEMETRY_CONTEXT", default_context
+ "OTEL_CONTEXT", default_context
) # type: str
try:
_RUNTIME_CONTEXT = next(
diff --git a/opentelemetry-api/tests/configuration/test_configuration.py b/opentelemetry-api/tests/configuration/test_configuration.py
index 316847a0044..557591513b8 100644
--- a/opentelemetry-api/tests/configuration/test_configuration.py
+++ b/opentelemetry-api/tests/configuration/test_configuration.py
@@ -32,10 +32,10 @@ def test_singleton(self) -> None:
@patch.dict(
"os.environ", # type: ignore
{
- "OPENTELEMETRY_PYTHON_METER_PROVIDER": "meter_provider",
- "OPENTELEMETRY_PYTHON_TRACER_PROVIDER": "tracer_provider",
- "OPENTELEMETRY_PYTHON_OThER": "other",
- "OPENTELEMETRY_PYTHON_OTHER_7": "other_7",
+ "OTEL_PYTHON_METER_PROVIDER": "meter_provider",
+ "OTEL_PYTHON_TRACER_PROVIDER": "tracer_provider",
+ "OTEL_OThER": "other",
+ "OTEL_OTHER_7": "other_7",
"OPENTELEMETRY_PTHON_TRACEX_PROVIDER": "tracex_provider",
},
)
@@ -56,7 +56,7 @@ def test_environment_variables(self) -> None:
@patch.dict(
"os.environ", # type: ignore
- {"OPENTELEMETRY_PYTHON_TRACER_PROVIDER": "tracer_provider"},
+ {"OTEL_PYTHON_TRACER_PROVIDER": "tracer_provider"},
)
def test_property(self) -> None:
with self.assertRaises(AttributeError):
@@ -79,8 +79,7 @@ def test_getattr(self) -> None:
def test_reset(self) -> None:
environ_patcher = patch.dict(
- "os.environ",
- {"OPENTELEMETRY_PYTHON_TRACER_PROVIDER": "tracer_provider"},
+ "os.environ", {"OTEL_PYTHON_TRACER_PROVIDER": "tracer_provider"},
)
environ_patcher.start()
@@ -99,10 +98,7 @@ def test_reset(self) -> None:
@patch.dict(
"os.environ", # type: ignore
- {
- "OPENTELEMETRY_PYTHON_TRUE": "True",
- "OPENTELEMETRY_PYTHON_FALSE": "False",
- },
+ {"OTEL_TRUE": "True", "OTEL_FALSE": "False"},
)
def test_boolean(self) -> None:
self.assertIsInstance(
@@ -117,9 +113,9 @@ def test_boolean(self) -> None:
@patch.dict(
"os.environ", # type: ignore
{
- "OPENTELEMETRY_PYTHON_POSITIVE_INTEGER": "123",
- "OPENTELEMETRY_PYTHON_NEGATIVE_INTEGER": "-123",
- "OPENTELEMETRY_PYTHON_NON_INTEGER": "-12z3",
+ "OTEL_POSITIVE_INTEGER": "123",
+ "OTEL_NEGATIVE_INTEGER": "-123",
+ "OTEL_NON_INTEGER": "-12z3",
},
)
def test_integer(self) -> None:
@@ -136,9 +132,9 @@ def test_integer(self) -> None:
@patch.dict(
"os.environ", # type: ignore
{
- "OPENTELEMETRY_PYTHON_POSITIVE_FLOAT": "123.123",
- "OPENTELEMETRY_PYTHON_NEGATIVE_FLOAT": "-123.123",
- "OPENTELEMETRY_PYTHON_NON_FLOAT": "-12z3.123",
+ "OTEL_POSITIVE_FLOAT": "123.123",
+ "OTEL_NEGATIVE_FLOAT": "-123.123",
+ "OTEL_NON_FLOAT": "-12z3.123",
},
)
def test_float(self) -> None:
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index cbb96eabcd5..bf7618e77fc 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -2,9 +2,10 @@
## Unreleased
-## Version 0.11b0
+- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL`
+ ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
-Released 2020-07-28
+## Version 0.11b0
- Add support for resources and resource detector
([#853](https://github.com/open-telemetry/opentelemetry-python/pull/853))
diff --git a/opentelemetry-sdk/tests/conftest.py b/opentelemetry-sdk/tests/conftest.py
index 80a79222a1f..ed5853b43d3 100644
--- a/opentelemetry-sdk/tests/conftest.py
+++ b/opentelemetry-sdk/tests/conftest.py
@@ -20,11 +20,11 @@ def pytest_sessionstart(session):
# pylint: disable=unused-argument
if version_info < (3, 5):
# contextvars are not supported in 3.4, use thread-local storage
- environ["OPENTELEMETRY_CONTEXT"] = "threadlocal_context"
+ environ["OTEL_CONTEXT"] = "threadlocal_context"
else:
- environ["OPENTELEMETRY_CONTEXT"] = "contextvars_context"
+ environ["OTEL_CONTEXT"] = "contextvars_context"
def pytest_sessionfinish(session):
# pylint: disable=unused-argument
- environ.pop("OPENTELEMETRY_CONTEXT")
+ environ.pop("OTEL_CONTEXT")
From 1112792b18bb177ba58fa11ebaecc9597041a73c Mon Sep 17 00:00:00 2001
From: Emmanuel Courreges
Date: Thu, 30 Jul 2020 17:18:38 +0200
Subject: [PATCH 58/79] Add proper length zero padding to hex strings of
traceId, spanId, parentId sent on the wire (#908)
---
.../CHANGELOG.md | 4 +-
.../opentelemetry/exporter/zipkin/__init__.py | 9 +--
.../tests/test_zipkin_exporter.py | 66 +++++++++++++++++++
3 files changed, 74 insertions(+), 5 deletions(-)
diff --git a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md
index 2218d44c20b..1063d35cf53 100644
--- a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md
@@ -4,6 +4,8 @@
- Change package name to opentelemetry-exporter-zipkin
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+- Add proper length zero padding to hex strings of traceId, spanId, parentId sent on the wire, for compatibility with jaeger-collector
+ ([#908](https://github.com/open-telemetry/opentelemetry-python/pull/908))
## 0.8b0
@@ -23,4 +25,4 @@ Released 2020-05-12
Released 2020-02-21
-- Initial release
\ No newline at end of file
+- Initial release
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 10bd6e93e97..b0eb1bce0f1 100644
--- a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py
+++ b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/__init__.py
@@ -168,8 +168,9 @@ def _translate_to_zipkin(self, spans: Sequence[Span]):
duration_mus = _nsec_to_usec_round(span.end_time - span.start_time)
zipkin_span = {
- "traceId": format(trace_id, "x"),
- "id": format(span_id, "x"),
+ # Ensure left-zero-padding of traceId, spanId, parentId
+ "traceId": format(trace_id, "032x"),
+ "id": format(span_id, "016x"),
"name": span.name,
"timestamp": start_timestamp_mus,
"duration": duration_mus,
@@ -184,10 +185,10 @@ def _translate_to_zipkin(self, spans: Sequence[Span]):
if isinstance(span.parent, Span):
zipkin_span["parentId"] = format(
- span.parent.get_context().span_id, "x"
+ span.parent.get_context().span_id, "016x"
)
elif isinstance(span.parent, SpanContext):
- zipkin_span["parentId"] = format(span.parent.span_id, "x")
+ zipkin_span["parentId"] = format(span.parent.span_id, "016x")
zipkin_spans.append(zipkin_span)
return zipkin_spans
diff --git a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py
index 9f6da2e240f..f6e24a1495a 100644
--- a/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py
+++ b/exporter/opentelemetry-exporter-zipkin/tests/test_zipkin_exporter.py
@@ -264,6 +264,72 @@ def test_export(self):
headers={"Content-Type": "application/json"},
)
+ # pylint: disable=too-many-locals
+ def test_zero_padding(self):
+ """test that hex ids starting with 0
+ are properly padded to 16 or 32 hex chars
+ when exported
+ """
+
+ span_names = "testZeroes"
+ trace_id = 0x0E0C63257DE34C926F9EFCD03927272E
+ span_id = 0x04BF92DEEFC58C92
+ parent_id = 0x0AAAAAAAAAAAAAAA
+
+ start_time = 683647322 * 10 ** 9 # in ns
+ duration = 50 * 10 ** 6
+ end_time = start_time + duration
+
+ span_context = trace_api.SpanContext(
+ trace_id,
+ span_id,
+ is_remote=False,
+ trace_flags=TraceFlags(TraceFlags.SAMPLED),
+ )
+ parent_context = trace_api.SpanContext(
+ trace_id, parent_id, is_remote=False
+ )
+
+ otel_span = trace.Span(
+ name=span_names[0], context=span_context, parent=parent_context,
+ )
+
+ otel_span.start(start_time=start_time)
+ otel_span.end(end_time=end_time)
+
+ service_name = "test-service"
+ local_endpoint = {"serviceName": service_name, "port": 9411}
+
+ exporter = ZipkinSpanExporter(service_name)
+ # Check traceId are properly lowercase 16 or 32 hex
+ expected = [
+ {
+ "traceId": "0e0c63257de34c926f9efcd03927272e",
+ "id": "04bf92deefc58c92",
+ "name": span_names[0],
+ "timestamp": start_time // 10 ** 3,
+ "duration": duration // 10 ** 3,
+ "localEndpoint": local_endpoint,
+ "kind": None,
+ "tags": {},
+ "annotations": None,
+ "debug": True,
+ "parentId": "0aaaaaaaaaaaaaaa",
+ }
+ ]
+
+ mock_post = MagicMock()
+ with patch("requests.post", mock_post):
+ mock_post.return_value = MockResponse(200)
+ status = exporter.export([otel_span])
+ self.assertEqual(SpanExportResult.SUCCESS, status)
+
+ mock_post.assert_called_with(
+ url="http://localhost:9411/api/v2/spans",
+ data=json.dumps(expected),
+ headers={"Content-Type": "application/json"},
+ )
+
@patch("requests.post")
def test_invalid_response(self, mock_post):
mock_post.return_value = MockResponse(404)
From 242d5a7314886b8a30b6c69051dd8450f00d2baf Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Mon, 3 Aug 2020 01:46:23 -0700
Subject: [PATCH 59/79] [WIP] Views API Prototype (#596)
---
docs/examples/basic_meter/basic_metrics.py | 6 +-
.../basic_meter/calling_conventions.py | 5 +-
docs/examples/basic_meter/observer.py | 2 -
docs/examples/basic_meter/view.py | 112 ++++++
.../test_otcollector_metrics_exporter.py | 8 +-
.../tests/test_prometheus_exporter.py | 29 +-
.../src/opentelemetry/ext/grpc/_utilities.py | 5 -
.../src/opentelemetry/metrics/__init__.py | 3 -
opentelemetry-sdk/CHANGELOG.md | 2 +
.../src/opentelemetry/sdk/metrics/__init__.py | 136 +++----
.../sdk/metrics/export/aggregate.py | 159 ++++++--
.../sdk/metrics/export/batcher.py | 89 ++---
.../src/opentelemetry/sdk/metrics/view.py | 186 +++++++++
.../src/opentelemetry/sdk/util/__init__.py | 5 +
.../tests/metrics/export/test_export.py | 116 ++----
.../tests/metrics/test_metrics.py | 357 ++++++++----------
opentelemetry-sdk/tests/metrics/test_view.py | 191 ++++++++++
17 files changed, 910 insertions(+), 501 deletions(-)
create mode 100644 docs/examples/basic_meter/view.py
create mode 100644 opentelemetry-sdk/src/opentelemetry/sdk/metrics/view.py
create mode 100644 opentelemetry-sdk/tests/metrics/test_view.py
diff --git a/docs/examples/basic_meter/basic_metrics.py b/docs/examples/basic_meter/basic_metrics.py
index e65aa788b83..ff050d5cde1 100644
--- a/docs/examples/basic_meter/basic_metrics.py
+++ b/docs/examples/basic_meter/basic_metrics.py
@@ -19,6 +19,7 @@
- How to configure a meter passing a sateful or stateless.
- How to configure an exporter and how to create a controller.
- How to create some metrics intruments and how to capture data with them.
+- How to use views to specify aggregation types for each metric instrument.
"""
import sys
import time
@@ -57,7 +58,6 @@
unit="1",
value_type=int,
metric_type=Counter,
- label_keys=("environment",),
)
requests_size = meter.create_metric(
@@ -66,7 +66,6 @@
unit="1",
value_type=int,
metric_type=ValueRecorder,
- label_keys=("environment",),
)
# Labels are used to identify key-values that are associated with a specific
@@ -86,4 +85,5 @@
requests_counter.add(35, testing_labels)
requests_size.record(2, testing_labels)
-time.sleep(5)
+
+input("...\n")
diff --git a/docs/examples/basic_meter/calling_conventions.py b/docs/examples/basic_meter/calling_conventions.py
index 3615f60d7d4..376f030e31f 100644
--- a/docs/examples/basic_meter/calling_conventions.py
+++ b/docs/examples/basic_meter/calling_conventions.py
@@ -33,7 +33,6 @@
unit="1",
value_type=int,
metric_type=Counter,
- label_keys=("environment",),
)
requests_size = meter.create_metric(
@@ -42,7 +41,6 @@
unit="1",
value_type=int,
metric_type=ValueRecorder,
- label_keys=("environment",),
)
clicks_counter = meter.create_metric(
@@ -51,7 +49,6 @@
unit="1",
value_type=int,
metric_type=Counter,
- label_keys=("environment",),
)
labels = {"environment": "staging"}
@@ -78,3 +75,5 @@
# specified labels for each.
meter.record_batch(labels, ((requests_counter, 50), (clicks_counter, 70)))
time.sleep(5)
+
+input("...\n")
diff --git a/docs/examples/basic_meter/observer.py b/docs/examples/basic_meter/observer.py
index 076c416c0ab..a53f37d1cec 100644
--- a/docs/examples/basic_meter/observer.py
+++ b/docs/examples/basic_meter/observer.py
@@ -41,7 +41,6 @@ def get_cpu_usage_callback(observer):
unit="1",
value_type=float,
observer_type=ValueObserver,
- label_keys=("cpu_number",),
)
@@ -58,7 +57,6 @@ def get_ram_usage_callback(observer):
unit="1",
value_type=float,
observer_type=ValueObserver,
- label_keys=(),
)
input("Metrics will be printed soon. Press a key to finish...\n")
diff --git a/docs/examples/basic_meter/view.py b/docs/examples/basic_meter/view.py
new file mode 100644
index 00000000000..cc4ba1a6835
--- /dev/null
+++ b/docs/examples/basic_meter/view.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.
+#
+"""
+This example shows how to use the different modes to capture metrics.
+It shows the usage of the direct, bound and batch calling conventions.
+"""
+from opentelemetry import metrics
+from opentelemetry.sdk.metrics import (
+ MeterProvider,
+ UpDownCounter,
+ ValueRecorder,
+)
+from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter
+from opentelemetry.sdk.metrics.export.aggregate import (
+ HistogramAggregator,
+ LastValueAggregator,
+ MinMaxSumCountAggregator,
+ SumAggregator,
+)
+from opentelemetry.sdk.metrics.view import View, ViewConfig
+
+# Use the meter type provided by the SDK package
+metrics.set_meter_provider(MeterProvider())
+meter = metrics.get_meter(__name__)
+metrics.get_meter_provider().start_pipeline(meter, ConsoleMetricsExporter(), 5)
+
+requests_counter = meter.create_metric(
+ name="requests",
+ description="number of requests",
+ unit="1",
+ value_type=int,
+ metric_type=UpDownCounter,
+)
+
+requests_size = meter.create_metric(
+ name="requests_size",
+ description="size of requests",
+ unit="1",
+ value_type=int,
+ metric_type=ValueRecorder,
+)
+
+# Views are used to define an aggregation type and label keys to aggregate by
+# for a given metric
+
+# Two views with the same metric and aggregation type but different label keys
+# With ViewConfig.LABEL_KEYS, all labels but the ones defined in label_keys are
+# dropped from the aggregation
+counter_view1 = View(
+ requests_counter,
+ SumAggregator,
+ label_keys=["environment"],
+ view_config=ViewConfig.LABEL_KEYS,
+)
+counter_view2 = View(
+ requests_counter,
+ MinMaxSumCountAggregator,
+ label_keys=["os_type"],
+ view_config=ViewConfig.LABEL_KEYS,
+)
+# This view has ViewConfig set to UNGROUPED, meaning all recorded metrics take
+# the labels directly without and consideration for label_keys
+counter_view3 = View(
+ requests_counter,
+ LastValueAggregator,
+ label_keys=["environment"], # is not used due to ViewConfig.UNGROUPED
+ view_config=ViewConfig.UNGROUPED,
+)
+# This view uses the HistogramAggregator which accepts an option config
+# parameter to specify the bucket ranges
+size_view = View(
+ requests_size,
+ HistogramAggregator,
+ label_keys=["environment"], # is not used due to ViewConfig.UNGROUPED
+ aggregator_config={"bounds": [20, 40, 60, 80, 100]},
+ view_config=ViewConfig.UNGROUPED,
+)
+
+# Register the views to the view manager to use the views. Views MUST be
+# registered before recording metrics. Metrics that are recorded without
+# views defined for them will use a default for that type of metric
+meter.register_view(counter_view1)
+meter.register_view(counter_view2)
+meter.register_view(counter_view3)
+meter.register_view(size_view)
+
+# The views will evaluate the labels passed into the record and aggregate upon
+# the unique labels that are generated
+# view1 labels will evaluate to {"environment": "staging"}
+# view2 labels will evaluate to {"os_type": linux}
+# view3 labels will evaluate to {"environment": "staging", "os_type": "linux"}
+requests_counter.add(100, {"environment": "staging", "os_type": "linux"})
+
+# Since this is using the HistogramAggregator, the bucket counts will be reflected
+# with each record
+requests_size.record(25, {"test": "value"})
+requests_size.record(-3, {"test": "value"})
+requests_size.record(200, {"test": "value"})
+
+input("...\n")
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 eddaf963608..1403c6c59e9 100644
--- a/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py
+++ b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py
@@ -25,7 +25,7 @@
Counter,
MeterProvider,
ValueRecorder,
- get_labels_as_key,
+ get_dict_as_key,
)
from opentelemetry.sdk.metrics.export import (
MetricRecord,
@@ -42,7 +42,7 @@ def setUpClass(cls):
metrics.set_meter_provider(MeterProvider())
cls._meter = metrics.get_meter(__name__)
cls._labels = {"environment": "staging"}
- cls._key_labels = get_labels_as_key(cls._labels)
+ cls._key_labels = get_dict_as_key(cls._labels)
def test_constructor(self):
mock_get_node = mock.Mock()
@@ -119,7 +119,7 @@ def test_export(self):
client=mock_client, host_name=host_name
)
test_metric = self._meter.create_metric(
- "testname", "testdesc", "unit", int, Counter, ["environment"]
+ "testname", "testdesc", "unit", int, Counter,
)
record = MetricRecord(
test_metric, self._key_labels, aggregate.SumAggregator(),
@@ -142,7 +142,7 @@ def test_export(self):
def test_translate_to_collector(self):
test_metric = self._meter.create_metric(
- "testname", "testdesc", "unit", int, Counter, ["environment"]
+ "testname", "testdesc", "unit", int, Counter,
)
aggregator = aggregate.SumAggregator()
aggregator.update(123)
diff --git a/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py
index d624086ce3c..56ab29b70da 100644
--- a/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py
+++ b/exporter/opentelemetry-exporter-prometheus/tests/test_prometheus_exporter.py
@@ -32,15 +32,10 @@ def setUp(self):
set_meter_provider(metrics.MeterProvider())
self._meter = get_meter_provider().get_meter(__name__)
self._test_metric = self._meter.create_metric(
- "testname",
- "testdesc",
- "unit",
- int,
- metrics.Counter,
- ["environment"],
+ "testname", "testdesc", "unit", int, metrics.Counter,
)
labels = {"environment": "staging"}
- self._labels_key = metrics.get_labels_as_key(labels)
+ self._labels_key = metrics.get_dict_as_key(labels)
self._mock_registry_register = mock.Mock()
self._registry_register_patch = mock.patch(
@@ -78,15 +73,10 @@ def test_export(self):
def test_counter_to_prometheus(self):
meter = get_meter_provider().get_meter(__name__)
metric = meter.create_metric(
- "test@name",
- "testdesc",
- "unit",
- int,
- metrics.Counter,
- ["environment@", "os"],
+ "test@name", "testdesc", "unit", int, metrics.Counter,
)
labels = {"environment@": "staging", "os": "Windows"}
- key_labels = metrics.get_labels_as_key(labels)
+ key_labels = metrics.get_dict_as_key(labels)
aggregator = SumAggregator()
aggregator.update(123)
aggregator.take_checkpoint()
@@ -117,7 +107,7 @@ def test_invalid_metric(self):
"tesname", "testdesc", "unit", int, StubMetric
)
labels = {"environment": "staging"}
- key_labels = metrics.get_labels_as_key(labels)
+ key_labels = metrics.get_dict_as_key(labels)
record = MetricRecord(metric, key_labels, None)
collector = CustomCollector("testprefix")
collector.add_metrics_data([record])
@@ -143,15 +133,8 @@ def __init__(
unit: str,
value_type,
meter,
- label_keys,
enabled: bool = True,
):
super().__init__(
- name,
- description,
- unit,
- value_type,
- meter,
- label_keys=label_keys,
- enabled=enabled,
+ name, description, unit, value_type, meter, enabled=enabled,
)
diff --git a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py
index 1dfe31ec995..a5776355829 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py
+++ b/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/_utilities.py
@@ -45,7 +45,6 @@ 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(
@@ -54,7 +53,6 @@ def __init__(self, meter, span_kind):
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),
@@ -62,7 +60,6 @@ def __init__(self, meter, span_kind):
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),
@@ -70,7 +67,6 @@ def __init__(self, meter, span_kind):
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),
@@ -78,7 +74,6 @@ def __init__(self, meter, span_kind):
unit="by",
value_type=int,
metric_type=Counter,
- label_keys=base_attributes,
)
def record_bytes_in(self, bytes_in, method):
diff --git a/opentelemetry-api/src/opentelemetry/metrics/__init__.py b/opentelemetry-api/src/opentelemetry/metrics/__init__.py
index 90f2f03f56b..22b7b880b40 100644
--- a/opentelemetry-api/src/opentelemetry/metrics/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/metrics/__init__.py
@@ -342,7 +342,6 @@ def create_metric(
unit: str,
value_type: Type[ValueT],
metric_type: Type[MetricT],
- label_keys: Sequence[str] = (),
enabled: bool = True,
) -> "Metric":
"""Creates a ``metric_kind`` metric with type ``value_type``.
@@ -354,7 +353,6 @@ def create_metric(
(https://unitsofmeasure.org/ucum.html).
value_type: The type of values being recorded by the metric.
metric_type: The type of metric being created.
- label_keys: The keys for the labels with dynamic values.
enabled: Whether to report the metric by default.
Returns: A new ``metric_type`` metric with values of ``value_type``.
"""
@@ -413,7 +411,6 @@ def create_metric(
unit: str,
value_type: Type[ValueT],
metric_type: Type[MetricT],
- label_keys: Sequence[str] = (),
enabled: bool = True,
) -> "Metric":
# pylint: disable=no-self-use
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index bf7618e77fc..d4b46202e50 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -4,6 +4,8 @@
- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL`
([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
+- Implement Views in metrics SDK
+ ([#596](https://github.com/open-telemetry/opentelemetry-python/pull/596))
## Version 0.11b0
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py
index 62c616a3e29..2af8a551ee1 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/__init__.py
@@ -23,19 +23,20 @@
MetricsExporter,
)
from opentelemetry.sdk.metrics.export.aggregate import Aggregator
-from opentelemetry.sdk.metrics.export.batcher import UngroupedBatcher
+from opentelemetry.sdk.metrics.export.batcher import Batcher
from opentelemetry.sdk.metrics.export.controller import PushController
+from opentelemetry.sdk.metrics.view import (
+ ViewData,
+ ViewManager,
+ get_default_aggregator,
+)
from opentelemetry.sdk.resources import Resource
+from opentelemetry.sdk.util import get_dict_as_key
from opentelemetry.sdk.util.instrumentation import InstrumentationInfo
logger = logging.getLogger(__name__)
-def get_labels_as_key(labels: Dict[str, str]) -> Tuple[Tuple[str, str]]:
- """Gets a list of labels that can be used as a key in a dictionary."""
- return tuple(sorted(labels.items()))
-
-
class BaseBoundInstrument:
"""Class containing common behavior for all bound metric instruments.
@@ -43,37 +44,38 @@ class BaseBoundInstrument:
instruments for a specific set of labels.
Args:
- value_type: The type of values for this bound instrument (int, float).
- enabled: True if the originating instrument is enabled.
- aggregator: The aggregator for this bound metric instrument. Will
- handle aggregation upon updates and checkpointing of values for
- exporting.
+ labels: A set of labels as keys that bind this metric instrument.
+ metric: The metric that created this bound instrument.
"""
def __init__(
- self,
- value_type: Type[metrics_api.ValueT],
- enabled: bool,
- aggregator: Aggregator,
+ self, labels: Tuple[Tuple[str, str]], metric: metrics_api.MetricT
):
- self.value_type = value_type
- self.enabled = enabled
- self.aggregator = aggregator
+ self._labels = labels
+ self._metric = metric
+ self.view_datas = metric.meter.view_manager.get_view_datas(
+ metric, labels
+ )
+ self._view_datas_lock = threading.Lock()
self._ref_count = 0
self._ref_count_lock = threading.Lock()
def _validate_update(self, value: metrics_api.ValueT) -> bool:
- if not self.enabled:
+ if not self._metric.enabled:
return False
- if not isinstance(value, self.value_type):
+ if not isinstance(value, self._metric.value_type):
logger.warning(
- "Invalid value passed for %s.", self.value_type.__name__
+ "Invalid value passed for %s.",
+ self._metric.value_type.__name__,
)
return False
return True
def update(self, value: metrics_api.ValueT):
- self.aggregator.update(value)
+ with self._view_datas_lock:
+ # record the value for each view_data belonging to this aggregator
+ for view_data in self.view_datas:
+ view_data.record(value)
def release(self):
self.decrease_ref_count()
@@ -90,11 +92,6 @@ def ref_count(self):
with self._ref_count_lock:
return self._ref_count
- def __repr__(self):
- return '{}(data="{}")'.format(
- type(self).__name__, self.aggregator.current
- )
-
class BoundCounter(metrics_api.BoundCounter, BaseBoundInstrument):
def add(self, value: metrics_api.ValueT) -> None:
@@ -151,7 +148,6 @@ def __init__(
unit: str,
value_type: Type[metrics_api.ValueT],
meter: "Meter",
- label_keys: Sequence[str] = (),
enabled: bool = True,
):
self.name = name
@@ -159,23 +155,17 @@ def __init__(
self.unit = unit
self.value_type = value_type
self.meter = meter
- self.label_keys = label_keys
self.enabled = enabled
self.bound_instruments = {}
self.bound_instruments_lock = threading.Lock()
def bind(self, labels: Dict[str, str]) -> BaseBoundInstrument:
"""See `opentelemetry.metrics.Metric.bind`."""
- key = get_labels_as_key(labels)
+ key = get_dict_as_key(labels)
with self.bound_instruments_lock:
bound_instrument = self.bound_instruments.get(key)
if bound_instrument is None:
- bound_instrument = self.BOUND_INSTR_TYPE(
- self.value_type,
- self.enabled,
- # Aggregator will be created based off type of metric
- self.meter.batcher.aggregator_for(self.__class__),
- )
+ bound_instrument = self.BOUND_INSTR_TYPE(key, self)
self.bound_instruments[key] = bound_instrument
bound_instrument.increase_ref_count()
return bound_instrument
@@ -250,7 +240,6 @@ def __init__(
description: str,
unit: str,
value_type: Type[metrics_api.ValueT],
- meter: "Meter",
label_keys: Sequence[str] = (),
enabled: bool = True,
):
@@ -259,7 +248,6 @@ def __init__(
self.description = description
self.unit = unit
self.value_type = value_type
- self.meter = meter
self.label_keys = label_keys
self.enabled = enabled
@@ -268,21 +256,19 @@ def __init__(
def observe(
self, value: metrics_api.ValueT, labels: Dict[str, str]
) -> None:
- key = get_labels_as_key(labels)
+ key = get_dict_as_key(labels)
if not self._validate_observe(value, key):
return
if key not in self.aggregators:
# TODO: how to cleanup aggregators?
- self.aggregators[key] = self.meter.batcher.aggregator_for(
- self.__class__
- )
+ self.aggregators[key] = get_default_aggregator(self)()
aggregator = self.aggregators[key]
aggregator.update(value)
# pylint: disable=W0613
def _validate_observe(
- self, value: metrics_api.ValueT, key: Tuple[Tuple[str, str]],
+ self, value: metrics_api.ValueT, key: Tuple[Tuple[str, str]]
) -> bool:
if not self.enabled:
return False
@@ -315,7 +301,7 @@ class SumObserver(Observer, metrics_api.SumObserver):
"""See `opentelemetry.metrics.SumObserver`."""
def _validate_observe(
- self, value: metrics_api.ValueT, key: Tuple[Tuple[str, str]],
+ self, value: metrics_api.ValueT, key: Tuple[Tuple[str, str]]
) -> bool:
if not super()._validate_observe(value, key):
return False
@@ -344,7 +330,7 @@ class Record:
def __init__(
self,
instrument: metrics_api.InstrumentT,
- labels: Dict[str, str],
+ labels: Tuple[Tuple[str, str]],
aggregator: Aggregator,
):
self.instrument = instrument
@@ -366,11 +352,13 @@ def __init__(
instrumentation_info: "InstrumentationInfo",
):
self.instrumentation_info = instrumentation_info
- self.batcher = UngroupedBatcher(source.stateful)
+ self.batcher = Batcher(source.stateful)
self.resource = source.resource
self.metrics = set()
self.observers = set()
+ self.metrics_lock = threading.Lock()
self.observers_lock = threading.Lock()
+ self.view_manager = ViewManager()
def collect(self) -> None:
"""Collects all the metrics created with this `Meter` for export.
@@ -387,23 +375,24 @@ def _collect_metrics(self) -> None:
for metric in self.metrics:
if not metric.enabled:
continue
-
to_remove = []
-
with metric.bound_instruments_lock:
- for labels, bound_instr in metric.bound_instruments.items():
- # TODO: Consider storing records in memory?
- record = Record(metric, labels, bound_instr.aggregator)
- # Checkpoints the current aggregators
- # Applies different batching logic based on type of batcher
- self.batcher.process(record)
-
- if bound_instr.ref_count() == 0:
+ for (
+ labels,
+ bound_instrument,
+ ) in metric.bound_instruments.items():
+ for view_data in bound_instrument.view_datas:
+ record = Record(
+ metric, view_data.labels, view_data.aggregator
+ )
+ self.batcher.process(record)
+
+ if bound_instrument.ref_count() == 0:
to_remove.append(labels)
- # Remove handles that were released
- for labels in to_remove:
- del metric.bound_instruments[labels]
+ # Remove handles that were released
+ for labels in to_remove:
+ del metric.bound_instruments[labels]
def _collect_observers(self) -> None:
with self.observers_lock:
@@ -436,21 +425,15 @@ def create_metric(
unit: str,
value_type: Type[metrics_api.ValueT],
metric_type: Type[metrics_api.MetricT],
- label_keys: Sequence[str] = (),
enabled: bool = True,
) -> metrics_api.MetricT:
"""See `opentelemetry.metrics.Meter.create_metric`."""
# Ignore type b/c of mypy bug in addition to missing annotations
metric = metric_type( # type: ignore
- name,
- description,
- unit,
- value_type,
- self,
- label_keys=label_keys,
- enabled=enabled,
+ name, description, unit, value_type, self, enabled=enabled
)
- self.metrics.add(metric)
+ with self.metrics_lock:
+ self.metrics.add(metric)
return metric
def register_observer(
@@ -465,14 +448,7 @@ def register_observer(
enabled: bool = True,
) -> metrics_api.Observer:
ob = observer_type(
- callback,
- name,
- description,
- unit,
- value_type,
- self,
- label_keys,
- enabled,
+ callback, name, description, unit, value_type, label_keys, enabled
)
with self.observers_lock:
self.observers.add(ob)
@@ -482,6 +458,12 @@ def unregister_observer(self, observer: metrics_api.Observer) -> None:
with self.observers_lock:
self.observers.remove(observer)
+ def register_view(self, view):
+ self.view_manager.register_view(view)
+
+ def unregister_view(self, view):
+ self.view_manager.unregister_view(view)
+
class MeterProvider(metrics_api.MeterProvider):
"""See `opentelemetry.metrics.MeterProvider`.
@@ -519,7 +501,7 @@ def get_meter(
return Meter(
self,
InstrumentationInfo(
- instrumenting_module_name, instrumenting_library_version,
+ instrumenting_module_name, instrumenting_library_version
),
)
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py
index 3292529aeda..121f39a98b6 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/aggregate.py
@@ -13,11 +13,14 @@
# limitations under the License.
import abc
+import logging
import threading
-from collections import namedtuple
+from collections import OrderedDict, namedtuple
from opentelemetry.util import time_ns
+logger = logging.getLogger(__name__)
+
class Aggregator(abc.ABC):
"""Base class for aggregators.
@@ -26,9 +29,13 @@ class Aggregator(abc.ABC):
snapshot of these values upon export (checkpoint).
"""
- def __init__(self):
+ def __init__(self, config=None):
self.current = None
self.checkpoint = None
+ if config:
+ self.config = config
+ else:
+ self.config = {}
@abc.abstractmethod
def update(self, value):
@@ -44,10 +51,10 @@ def merge(self, other):
class SumAggregator(Aggregator):
- """Aggregator for Counter metrics."""
+ """Aggregator for counter metrics."""
- def __init__(self):
- super().__init__()
+ def __init__(self, config=None):
+ super().__init__(config=config)
self.current = 0
self.checkpoint = 0
self._lock = threading.Lock()
@@ -64,11 +71,12 @@ def take_checkpoint(self):
self.current = 0
def merge(self, other):
- with self._lock:
- self.checkpoint += other.checkpoint
- self.last_update_timestamp = get_latest_timestamp(
- self.last_update_timestamp, other.last_update_timestamp
- )
+ if verify_type(self, other):
+ with self._lock:
+ self.checkpoint += other.checkpoint
+ self.last_update_timestamp = get_latest_timestamp(
+ self.last_update_timestamp, other.last_update_timestamp
+ )
class MinMaxSumCountAggregator(Aggregator):
@@ -90,8 +98,8 @@ def _merge_checkpoint(cls, val1, val2):
val1.count + val2.count,
)
- def __init__(self):
- super().__init__()
+ def __init__(self, config=None):
+ super().__init__(config=config)
self.current = self._EMPTY
self.checkpoint = self._EMPTY
self._lock = threading.Lock()
@@ -116,20 +124,97 @@ def take_checkpoint(self):
self.current = self._EMPTY
def merge(self, other):
- with self._lock:
- self.checkpoint = self._merge_checkpoint(
- self.checkpoint, other.checkpoint
- )
- self.last_update_timestamp = get_latest_timestamp(
- self.last_update_timestamp, other.last_update_timestamp
+ if verify_type(self, other):
+ with self._lock:
+ self.checkpoint = self._merge_checkpoint(
+ self.checkpoint, other.checkpoint
+ )
+ self.last_update_timestamp = get_latest_timestamp(
+ self.last_update_timestamp, other.last_update_timestamp
+ )
+
+
+class HistogramAggregator(Aggregator):
+ """Agregator for ValueRecorder metrics that keeps a histogram of values."""
+
+ def __init__(self, config=None):
+ super().__init__(config=config)
+ self._lock = threading.Lock()
+ self.last_update_timestamp = None
+ boundaries = self.config.get("bounds")
+ if boundaries and self._validate_boundaries(boundaries):
+ self._boundaries = boundaries
+ else:
+ # no buckets except < 0 and >
+ self._boundaries = (0,)
+
+ self.current = OrderedDict([(bb, 0) for bb in self._boundaries])
+ self.checkpoint = OrderedDict([(bb, 0) for bb in self._boundaries])
+
+ self.current[">"] = 0
+ self.checkpoint[">"] = 0
+
+ # pylint: disable=R0201
+ def _validate_boundaries(self, boundaries):
+ if not boundaries:
+ logger.warning("Bounds is empty. Using default.")
+ return False
+ if not all(
+ boundaries[ii] < boundaries[ii + 1]
+ for ii in range(len(boundaries) - 1)
+ ):
+ logger.warning(
+ "Bounds must be sorted in increasing order. Using default."
)
+ return False
+ return True
+
+ @classmethod
+ def _merge_checkpoint(cls, val1, val2):
+ if val1.keys() == val2.keys():
+ for ii, bb in val2.items():
+ val1[ii] += bb
+ else:
+ logger.warning("Cannot merge histograms with different buckets.")
+ return val1
+
+ def update(self, value):
+ with self._lock:
+ if self.current is None:
+ self.current = [0 for ii in range(len(self._boundaries) + 1)]
+ # greater than max value
+ if value >= self._boundaries[len(self._boundaries) - 1]:
+ self.current[">"] += 1
+ else:
+ for bb in self._boundaries:
+ # find first bucket that value is less than
+ if value < bb:
+ self.current[bb] += 1
+ break
+ self.last_update_timestamp = time_ns()
+
+ def take_checkpoint(self):
+ with self._lock:
+ self.checkpoint = self.current
+ self.current = OrderedDict([(bb, 0) for bb in self._boundaries])
+ self.current[">"] = 0
+
+ def merge(self, other):
+ if verify_type(self, other):
+ with self._lock:
+ self.checkpoint = self._merge_checkpoint(
+ self.checkpoint, other.checkpoint
+ )
+ self.last_update_timestamp = get_latest_timestamp(
+ self.last_update_timestamp, other.last_update_timestamp
+ )
class LastValueAggregator(Aggregator):
"""Aggregator that stores last value results."""
- def __init__(self):
- super().__init__()
+ def __init__(self, config=None):
+ super().__init__(config=config)
self._lock = threading.Lock()
self.last_update_timestamp = None
@@ -158,8 +243,8 @@ class ValueObserverAggregator(Aggregator):
_TYPE = namedtuple("minmaxsumcountlast", "min max sum count last")
- def __init__(self):
- super().__init__()
+ def __init__(self, config=None):
+ super().__init__(config=config)
self.mmsc = MinMaxSumCountAggregator()
self.current = None
self.checkpoint = self._TYPE(None, None, None, 0, None)
@@ -175,14 +260,15 @@ def take_checkpoint(self):
self.checkpoint = self._TYPE(*(self.mmsc.checkpoint + (self.current,)))
def merge(self, other):
- self.mmsc.merge(other.mmsc)
- last = self.checkpoint.last
- self.last_update_timestamp = get_latest_timestamp(
- self.last_update_timestamp, other.last_update_timestamp
- )
- if self.last_update_timestamp == other.last_update_timestamp:
- last = other.checkpoint.last
- self.checkpoint = self._TYPE(*(self.mmsc.checkpoint + (last,)))
+ if verify_type(self, other):
+ self.mmsc.merge(other.mmsc)
+ last = self.checkpoint.last
+ self.last_update_timestamp = get_latest_timestamp(
+ self.last_update_timestamp, other.last_update_timestamp
+ )
+ if self.last_update_timestamp == other.last_update_timestamp:
+ last = other.checkpoint.last
+ self.checkpoint = self._TYPE(*(self.mmsc.checkpoint + (last,)))
def get_latest_timestamp(time_stamp, other_timestamp):
@@ -192,3 +278,16 @@ def get_latest_timestamp(time_stamp, other_timestamp):
if time_stamp < other_timestamp:
return other_timestamp
return time_stamp
+
+
+# pylint: disable=R1705
+def verify_type(this, other):
+ if isinstance(other, this.__class__):
+ return True
+ else:
+ logger.warning(
+ "Error in merging %s with %s.",
+ this.__class__.__name__,
+ other.__class__.__name__,
+ )
+ return False
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py
index 527760d51b5..79b27674c0a 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py
@@ -12,29 +12,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import abc
-from typing import Sequence, Type
+from typing import Sequence
-from opentelemetry.metrics import (
- Counter,
- InstrumentT,
- SumObserver,
- UpDownCounter,
- UpDownSumObserver,
- ValueObserver,
- ValueRecorder,
-)
from opentelemetry.sdk.metrics.export import MetricRecord
-from opentelemetry.sdk.metrics.export.aggregate import (
- Aggregator,
- LastValueAggregator,
- MinMaxSumCountAggregator,
- SumAggregator,
- ValueObserverAggregator,
-)
+from opentelemetry.sdk.util import get_dict_as_key
-class Batcher(abc.ABC):
+class Batcher:
"""Base class for all batcher types.
The batcher is responsible for storing the aggregators and aggregated
@@ -50,23 +34,6 @@ def __init__(self, stateful: bool):
# (deltas)
self.stateful = stateful
- def aggregator_for(self, instrument_type: Type[InstrumentT]) -> Aggregator:
- """Returns an aggregator based on metric instrument type.
-
- Aggregators keep track of and updates values when metrics get updated.
- """
- # pylint:disable=R0201
- if issubclass(instrument_type, (Counter, UpDownCounter)):
- return SumAggregator()
- if issubclass(instrument_type, (SumObserver, UpDownSumObserver)):
- return LastValueAggregator()
- if issubclass(instrument_type, ValueRecorder):
- return MinMaxSumCountAggregator()
- if issubclass(instrument_type, ValueObserver):
- return ValueObserverAggregator()
- # TODO: Add other aggregators
- return SumAggregator()
-
def checkpoint_set(self) -> Sequence[MetricRecord]:
"""Returns a list of MetricRecords used for exporting.
@@ -74,7 +41,11 @@ def checkpoint_set(self) -> Sequence[MetricRecord]:
data in all of the aggregators in this batcher.
"""
metric_records = []
- for (instrument, labels), aggregator in self._batch_map.items():
+ # pylint: disable=W0612
+ for (
+ (instrument, aggregator_type, _, labels),
+ aggregator,
+ ) in self._batch_map.items():
metric_records.append(MetricRecord(instrument, labels, aggregator))
return metric_records
@@ -86,32 +57,34 @@ def finished_collection(self):
if not self.stateful:
self._batch_map = {}
- @abc.abstractmethod
def process(self, record) -> None:
- """Stores record information to be ready for exporting.
-
- Depending on type of batcher, performs pre-export logic, such as
- filtering records based off of keys.
- """
-
-
-class UngroupedBatcher(Batcher):
- """Accepts all records and passes them for exporting"""
-
- def process(self, record):
+ """Stores record information to be ready for exporting."""
# Checkpoints the current aggregator value to be collected for export
- record.aggregator.take_checkpoint()
- batch_key = (record.instrument, record.labels)
- batch_value = self._batch_map.get(batch_key)
aggregator = record.aggregator
+
+ # The uniqueness of a batch record is defined by a specific metric
+ # using an aggregator type with a specific set of labels.
+ # If two aggregators are the same but with different configs, they are still two valid unique records
+ # (for example, two histogram views with different buckets)
+ key = (
+ record.instrument,
+ aggregator.__class__,
+ get_dict_as_key(aggregator.config),
+ record.labels,
+ )
+ batch_value = self._batch_map.get(key)
if batch_value:
- # Update the stored checkpointed value if exists. The call to merge
- # here combines only identical records (same key).
- batch_value.merge(aggregator)
- return
+ if batch_value != aggregator:
+ aggregator.take_checkpoint()
+ batch_value.merge(aggregator)
+ else:
+ aggregator.take_checkpoint()
+
if self.stateful:
# if stateful batcher, create a copy of the aggregator and update
# it with the current checkpointed value for long-term storage
- aggregator = self.aggregator_for(record.instrument.__class__)
+ aggregator = record.aggregator.__class__(
+ config=record.aggregator.config
+ )
aggregator.merge(record.aggregator)
- self._batch_map[batch_key] = aggregator
+ self._batch_map[key] = aggregator
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/view.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/view.py
new file mode 100644
index 00000000000..0dd75c6887b
--- /dev/null
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/view.py
@@ -0,0 +1,186 @@
+# 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 logging
+import threading
+from collections import defaultdict
+from typing import Optional, Sequence, Tuple
+
+from opentelemetry.metrics import (
+ Counter,
+ InstrumentT,
+ SumObserver,
+ UpDownCounter,
+ UpDownSumObserver,
+ ValueObserver,
+ ValueRecorder,
+ ValueT,
+)
+from opentelemetry.sdk.metrics.export.aggregate import (
+ Aggregator,
+ LastValueAggregator,
+ MinMaxSumCountAggregator,
+ SumAggregator,
+ ValueObserverAggregator,
+)
+
+logger = logging.getLogger(__name__)
+
+
+class ViewData:
+ def __init__(self, labels: Tuple[Tuple[str, str]], aggregator: Aggregator):
+ self.labels = labels
+ self.aggregator = aggregator
+
+ def record(self, value: ValueT):
+ self.aggregator.update(value)
+
+ # Uniqueness is based on labels and aggregator type
+ def __hash__(self):
+ return hash((self.labels, self.aggregator.__class__))
+
+ def __eq__(self, other):
+ return (
+ self.labels == other.labels
+ and self.aggregator.__class__ == other.aggregator.__class__
+ )
+
+
+class ViewConfig:
+
+ UNGROUPED = 0
+ LABEL_KEYS = 1
+ DROP_ALL = 2
+
+
+class View:
+ def __init__(
+ self,
+ metric: InstrumentT,
+ aggregator: type,
+ aggregator_config: Optional[dict] = None,
+ label_keys: Optional[Sequence[str]] = None,
+ view_config: ViewConfig = ViewConfig.UNGROUPED,
+ ):
+ self.metric = metric
+ self.aggregator = aggregator
+ if aggregator_config is None:
+ aggregator_config = {}
+ self.aggregator_config = aggregator_config
+ if label_keys is None:
+ label_keys = []
+ self.label_keys = sorted(label_keys)
+ self.view_config = view_config
+ self.view_datas = set()
+
+ def get_view_data(self, labels):
+ """Find an existing ViewData for this set of labels. If that ViewData
+ does not exist, create a new one to represent the labels
+ """
+ active_labels = []
+ if self.view_config == ViewConfig.LABEL_KEYS:
+ # reduce the set of labels to only labels specified in label_keys
+ active_labels = {
+ (lk, lv) for lk, lv in labels if lk in set(self.label_keys)
+ }
+ active_labels = tuple(active_labels)
+ elif self.view_config == ViewConfig.UNGROUPED:
+ active_labels = labels
+
+ for view_data in self.view_datas:
+ if view_data.labels == active_labels:
+ return view_data
+ new_view_data = ViewData(
+ active_labels, self.aggregator(self.aggregator_config)
+ )
+ self.view_datas.add(new_view_data)
+ return new_view_data
+
+ # Uniqueness is based on metric, aggregator type, aggregator config,
+ # ordered label keys and ViewConfig
+ def __hash__(self):
+ return hash(
+ (
+ self.metric,
+ self.aggregator.__class__,
+ tuple(self.label_keys),
+ tuple(self.aggregator_config),
+ self.view_config,
+ )
+ )
+
+ def __eq__(self, other):
+ return (
+ self.metric == other.metric
+ and self.aggregator.__class__ == other.aggregator.__class__
+ and self.label_keys == other.label_keys
+ and self.aggregator_config == other.aggregator_config
+ and self.view_config == other.view_config
+ )
+
+
+class ViewManager:
+ def __init__(self):
+ self.views = defaultdict(set) # Map[Metric, Set]
+ self._view_lock = threading.Lock()
+ self.view_datas = set()
+
+ def register_view(self, view):
+ with self._view_lock:
+ if view not in self.views[view.metric]:
+ self.views[view.metric].add(view)
+ else:
+ logger.warning("View already registered.")
+ return
+
+ def unregister_view(self, view):
+ with self._view_lock:
+ if self.views.get(view.metric) is None:
+ logger.warning("Metric for view does not exist.")
+ elif view in self.views.get(view.metric):
+ self.views.get(view.metric).remove(view)
+
+ def get_view_datas(self, metric, labels):
+ view_datas = set()
+ views = self.views.get(metric)
+ # No views configured, use default aggregations
+ if views is None:
+ # make a default view for the metric
+ default_view = View(metric, get_default_aggregator(metric))
+ self.register_view(default_view)
+ views = [default_view]
+
+ for view in views:
+ view_datas.add(view.get_view_data(labels))
+
+ return view_datas
+
+
+def get_default_aggregator(instrument: InstrumentT) -> Aggregator:
+ """Returns an aggregator based on metric instrument's type.
+
+ Aggregators keep track of and updates values when metrics get updated.
+ """
+ # pylint:disable=R0201
+ instrument_type = instrument.__class__
+ if issubclass(instrument_type, (Counter, UpDownCounter)):
+ return SumAggregator
+ if issubclass(instrument_type, (SumObserver, UpDownSumObserver)):
+ return LastValueAggregator
+ if issubclass(instrument_type, ValueRecorder):
+ return MinMaxSumCountAggregator
+ if issubclass(instrument_type, ValueObserver):
+ return ValueObserverAggregator
+ logger.warning("No default aggregator configured for: %s", instrument_type)
+ return SumAggregator
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py
index b8ebd22fc82..2e0d2e85a8e 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py
@@ -31,6 +31,11 @@ def ns_to_iso_str(nanoseconds):
return ts.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
+def get_dict_as_key(labels):
+ """Converts a dict to be used as a unique key"""
+ return tuple(sorted(labels.items()))
+
+
class BoundedList(Sequence):
"""An append only list with a fixed max size.
diff --git a/opentelemetry-sdk/tests/metrics/export/test_export.py b/opentelemetry-sdk/tests/metrics/export/test_export.py
index 4d790bb6c0b..99aa9c4a629 100644
--- a/opentelemetry-sdk/tests/metrics/export/test_export.py
+++ b/opentelemetry-sdk/tests/metrics/export/test_export.py
@@ -29,7 +29,7 @@
SumAggregator,
ValueObserverAggregator,
)
-from opentelemetry.sdk.metrics.export.batcher import UngroupedBatcher
+from opentelemetry.sdk.metrics.export.batcher import Batcher
from opentelemetry.sdk.metrics.export.controller import PushController
@@ -62,38 +62,17 @@ def test_export(self):
class TestBatcher(unittest.TestCase):
- def test_aggregator_for_counter(self):
- batcher = UngroupedBatcher(True)
- self.assertTrue(
- isinstance(batcher.aggregator_for(metrics.Counter), SumAggregator)
- )
-
- def test_aggregator_for_updowncounter(self):
- batcher = UngroupedBatcher(True)
- self.assertTrue(
- isinstance(
- batcher.aggregator_for(metrics.UpDownCounter), SumAggregator,
- )
- )
-
- # TODO: Add other aggregator tests
-
def test_checkpoint_set(self):
meter = metrics.MeterProvider().get_meter(__name__)
- batcher = UngroupedBatcher(True)
+ batcher = Batcher(True)
aggregator = SumAggregator()
metric = metrics.Counter(
- "available memory",
- "available memory",
- "bytes",
- int,
- meter,
- ("environment",),
+ "available memory", "available memory", "bytes", int, meter
)
aggregator.update(1.0)
labels = ()
_batch_map = {}
- _batch_map[(metric, labels)] = aggregator
+ _batch_map[(metric, SumAggregator, tuple(), labels)] = aggregator
batcher._batch_map = _batch_map
records = batcher.checkpoint_set()
self.assertEqual(len(records), 1)
@@ -102,127 +81,98 @@ def test_checkpoint_set(self):
self.assertEqual(records[0].aggregator, aggregator)
def test_checkpoint_set_empty(self):
- batcher = UngroupedBatcher(True)
+ batcher = Batcher(True)
records = batcher.checkpoint_set()
self.assertEqual(len(records), 0)
def test_finished_collection_stateless(self):
meter = metrics.MeterProvider().get_meter(__name__)
- batcher = UngroupedBatcher(False)
+ batcher = Batcher(False)
aggregator = SumAggregator()
metric = metrics.Counter(
- "available memory",
- "available memory",
- "bytes",
- int,
- meter,
- ("environment",),
+ "available memory", "available memory", "bytes", int, meter
)
aggregator.update(1.0)
labels = ()
_batch_map = {}
- _batch_map[(metric, labels)] = aggregator
+ _batch_map[(metric, SumAggregator, tuple(), labels)] = aggregator
batcher._batch_map = _batch_map
batcher.finished_collection()
self.assertEqual(len(batcher._batch_map), 0)
def test_finished_collection_stateful(self):
meter = metrics.MeterProvider().get_meter(__name__)
- batcher = UngroupedBatcher(True)
+ batcher = Batcher(True)
aggregator = SumAggregator()
metric = metrics.Counter(
- "available memory",
- "available memory",
- "bytes",
- int,
- meter,
- ("environment",),
+ "available memory", "available memory", "bytes", int, meter
)
aggregator.update(1.0)
labels = ()
_batch_map = {}
- _batch_map[(metric, labels)] = aggregator
+ _batch_map[(metric, SumAggregator, tuple(), labels)] = aggregator
batcher._batch_map = _batch_map
batcher.finished_collection()
self.assertEqual(len(batcher._batch_map), 1)
- # TODO: Abstract the logic once other batchers implemented
- def test_ungrouped_batcher_process_exists(self):
+ def test_batcher_process_exists(self):
meter = metrics.MeterProvider().get_meter(__name__)
- batcher = UngroupedBatcher(True)
+ batcher = Batcher(True)
aggregator = SumAggregator()
aggregator2 = SumAggregator()
metric = metrics.Counter(
- "available memory",
- "available memory",
- "bytes",
- int,
- meter,
- ("environment",),
+ "available memory", "available memory", "bytes", int, meter
)
labels = ()
_batch_map = {}
- _batch_map[(metric, labels)] = aggregator
+ batch_key = (metric, SumAggregator, tuple(), labels)
+ _batch_map[batch_key] = aggregator
aggregator2.update(1.0)
batcher._batch_map = _batch_map
record = metrics.Record(metric, labels, aggregator2)
batcher.process(record)
self.assertEqual(len(batcher._batch_map), 1)
- self.assertIsNotNone(batcher._batch_map.get((metric, labels)))
- self.assertEqual(batcher._batch_map.get((metric, labels)).current, 0)
- self.assertEqual(
- batcher._batch_map.get((metric, labels)).checkpoint, 1.0
- )
+ self.assertIsNotNone(batcher._batch_map.get(batch_key))
+ self.assertEqual(batcher._batch_map.get(batch_key).current, 0)
+ self.assertEqual(batcher._batch_map.get(batch_key).checkpoint, 1.0)
- def test_ungrouped_batcher_process_not_exists(self):
+ def test_batcher_process_not_exists(self):
meter = metrics.MeterProvider().get_meter(__name__)
- batcher = UngroupedBatcher(True)
+ batcher = Batcher(True)
aggregator = SumAggregator()
metric = metrics.Counter(
- "available memory",
- "available memory",
- "bytes",
- int,
- meter,
- ("environment",),
+ "available memory", "available memory", "bytes", int, meter
)
labels = ()
_batch_map = {}
+ batch_key = (metric, SumAggregator, tuple(), labels)
aggregator.update(1.0)
batcher._batch_map = _batch_map
record = metrics.Record(metric, labels, aggregator)
batcher.process(record)
self.assertEqual(len(batcher._batch_map), 1)
- self.assertIsNotNone(batcher._batch_map.get((metric, labels)))
- self.assertEqual(batcher._batch_map.get((metric, labels)).current, 0)
- self.assertEqual(
- batcher._batch_map.get((metric, labels)).checkpoint, 1.0
- )
+ self.assertIsNotNone(batcher._batch_map.get(batch_key))
+ self.assertEqual(batcher._batch_map.get(batch_key).current, 0)
+ self.assertEqual(batcher._batch_map.get(batch_key).checkpoint, 1.0)
- def test_ungrouped_batcher_process_not_stateful(self):
+ def test_batcher_process_not_stateful(self):
meter = metrics.MeterProvider().get_meter(__name__)
- batcher = UngroupedBatcher(True)
+ batcher = Batcher(True)
aggregator = SumAggregator()
metric = metrics.Counter(
- "available memory",
- "available memory",
- "bytes",
- int,
- meter,
- ("environment",),
+ "available memory", "available memory", "bytes", int, meter
)
labels = ()
_batch_map = {}
+ batch_key = (metric, SumAggregator, tuple(), labels)
aggregator.update(1.0)
batcher._batch_map = _batch_map
record = metrics.Record(metric, labels, aggregator)
batcher.process(record)
self.assertEqual(len(batcher._batch_map), 1)
- self.assertIsNotNone(batcher._batch_map.get((metric, labels)))
- self.assertEqual(batcher._batch_map.get((metric, labels)).current, 0)
- self.assertEqual(
- batcher._batch_map.get((metric, labels)).checkpoint, 1.0
- )
+ self.assertIsNotNone(batcher._batch_map.get(batch_key))
+ self.assertEqual(batcher._batch_map.get(batch_key).current, 0)
+ self.assertEqual(batcher._batch_map.get(batch_key).checkpoint, 1.0)
class TestSumAggregator(unittest.TestCase):
diff --git a/opentelemetry-sdk/tests/metrics/test_metrics.py b/opentelemetry-sdk/tests/metrics/test_metrics.py
index ae07c233413..b854f2d5db9 100644
--- a/opentelemetry-sdk/tests/metrics/test_metrics.py
+++ b/opentelemetry-sdk/tests/metrics/test_metrics.py
@@ -17,7 +17,11 @@
from opentelemetry import metrics as metrics_api
from opentelemetry.sdk import metrics, resources
-from opentelemetry.sdk.metrics import export
+from opentelemetry.sdk.metrics.export.aggregate import (
+ MinMaxSumCountAggregator,
+ SumAggregator,
+)
+from opentelemetry.sdk.metrics.view import View
class TestMeterProvider(unittest.TestCase):
@@ -68,17 +72,16 @@ def test_extends_api(self):
meter = metrics.MeterProvider().get_meter(__name__)
self.assertIsInstance(meter, metrics_api.Meter)
- def test_collect(self):
+ def test_collect_metrics(self):
meter = metrics.MeterProvider().get_meter(__name__)
batcher_mock = mock.Mock()
meter.batcher = batcher_mock
- label_keys = ("key1",)
- counter = metrics.Counter(
- "name", "desc", "unit", float, meter, label_keys
+ counter = meter.create_metric(
+ "name", "desc", "unit", float, metrics.Counter
)
labels = {"key1": "value1"}
+ meter.register_view(View(counter, SumAggregator))
counter.add(1.0, labels)
- meter.metrics.add(counter)
meter.collect()
self.assertTrue(batcher_mock.process.called)
@@ -89,17 +92,24 @@ def test_collect_no_metrics(self):
meter.collect()
self.assertFalse(batcher_mock.process.called)
+ def test_collect_not_registered(self):
+ meter = metrics.MeterProvider().get_meter(__name__)
+ batcher_mock = mock.Mock()
+ meter.batcher = batcher_mock
+ counter = metrics.Counter("name", "desc", "unit", float, meter)
+ labels = {"key1": "value1"}
+ counter.add(1.0, labels)
+ meter.collect()
+ self.assertFalse(batcher_mock.process.called)
+
def test_collect_disabled_metric(self):
meter = metrics.MeterProvider().get_meter(__name__)
batcher_mock = mock.Mock()
meter.batcher = batcher_mock
- label_keys = ("key1",)
- counter = metrics.Counter(
- "name", "desc", "unit", float, meter, label_keys, False
- )
+ counter = metrics.Counter("name", "desc", "unit", float, meter, False)
labels = {"key1": "value1"}
+ meter.register_view(View(counter, SumAggregator))
counter.add(1.0, labels)
- meter.metrics.add(counter)
meter.collect()
self.assertFalse(batcher_mock.process.called)
@@ -113,7 +123,7 @@ def callback(observer):
observer.observe(45, {})
observer = metrics.ValueObserver(
- callback, "name", "desc", "unit", int, meter, (), True
+ callback, "name", "desc", "unit", int, (), True
)
meter.observers.add(observer)
@@ -122,57 +132,43 @@ def callback(observer):
def test_record_batch(self):
meter = metrics.MeterProvider().get_meter(__name__)
- label_keys = ("key1",)
- labels = {"key1": "value1"}
- counter = metrics.Counter(
- "name", "desc", "unit", float, meter, label_keys
- )
- record_tuples = [(counter, 1.0)]
- meter.record_batch(labels, record_tuples)
- self.assertEqual(counter.bind(labels).aggregator.current, 1.0)
-
- def test_record_batch_multiple(self):
- meter = metrics.MeterProvider().get_meter(__name__)
- label_keys = ("key1", "key2", "key3")
labels = {"key1": "value1", "key2": "value2", "key3": "value3"}
- counter = metrics.Counter(
- "name", "desc", "unit", float, meter, label_keys
- )
+ counter = metrics.Counter("name", "desc", "unit", float, meter)
valuerecorder = metrics.ValueRecorder(
- "name", "desc", "unit", float, meter, label_keys
+ "name", "desc", "unit", float, meter
)
+ counter_v = View(counter, SumAggregator)
+ measure_v = View(valuerecorder, MinMaxSumCountAggregator)
+ meter.register_view(counter_v)
+ meter.register_view(measure_v)
record_tuples = [(counter, 1.0), (valuerecorder, 3.0)]
meter.record_batch(labels, record_tuples)
- self.assertEqual(counter.bind(labels).aggregator.current, 1.0)
+ labels_key = metrics.get_dict_as_key(labels)
self.assertEqual(
- valuerecorder.bind(labels).aggregator.current, (3.0, 3.0, 3.0, 1)
+ counter.bound_instruments[labels_key]
+ .view_datas.pop()
+ .aggregator.current,
+ 1.0,
)
-
- def test_record_batch_exists(self):
- meter = metrics.MeterProvider().get_meter(__name__)
- label_keys = ("key1",)
- labels = {"key1": "value1"}
- counter = metrics.Counter(
- "name", "desc", "unit", float, meter, label_keys
+ self.assertEqual(
+ valuerecorder.bound_instruments[labels_key]
+ .view_datas.pop()
+ .aggregator.current,
+ (3.0, 3.0, 3.0, 1),
)
- counter.add(1.0, labels)
- bound_counter = counter.bind(labels)
- record_tuples = [(counter, 1.0)]
- meter.record_batch(labels, record_tuples)
- self.assertEqual(counter.bind(labels), bound_counter)
- self.assertEqual(bound_counter.aggregator.current, 2.0)
def test_create_metric(self):
resource = mock.Mock(spec=resources.Resource)
meter_provider = metrics.MeterProvider(resource=resource)
meter = meter_provider.get_meter(__name__)
counter = meter.create_metric(
- "name", "desc", "unit", int, metrics.Counter, ()
+ "name", "desc", "unit", int, metrics.Counter
)
self.assertIsInstance(counter, metrics.Counter)
self.assertEqual(counter.value_type, int)
self.assertEqual(counter.name, "name")
self.assertIs(counter.meter.resource, resource)
+ self.assertEqual(counter.meter, meter)
def test_create_updowncounter(self):
meter = metrics.MeterProvider().get_meter(__name__)
@@ -186,11 +182,12 @@ def test_create_updowncounter(self):
def test_create_valuerecorder(self):
meter = metrics.MeterProvider().get_meter(__name__)
valuerecorder = meter.create_metric(
- "name", "desc", "unit", float, metrics.ValueRecorder, ()
+ "name", "desc", "unit", float, metrics.ValueRecorder
)
self.assertIsInstance(valuerecorder, metrics.ValueRecorder)
self.assertEqual(valuerecorder.value_type, float)
self.assertEqual(valuerecorder.name, "name")
+ self.assertEqual(valuerecorder.meter, meter)
def test_register_observer(self):
meter = metrics.MeterProvider().get_meter(__name__)
@@ -224,71 +221,15 @@ def test_unregister_observer(self):
meter.unregister_observer(observer)
self.assertEqual(len(meter.observers), 0)
- def test_direct_call_release_bound_instrument(self):
- meter = metrics.MeterProvider().get_meter(__name__)
- label_keys = ("key1",)
- labels = {"key1": "value1"}
-
- counter = metrics.Counter(
- "name", "desc", "unit", float, meter, label_keys
- )
- meter.metrics.add(counter)
- counter.add(4.0, labels)
-
- valuerecorder = metrics.ValueRecorder(
- "name", "desc", "unit", float, meter, label_keys
- )
- meter.metrics.add(valuerecorder)
- valuerecorder.record(42.0, labels)
-
- self.assertEqual(len(counter.bound_instruments), 1)
- self.assertEqual(len(valuerecorder.bound_instruments), 1)
-
- meter.collect()
-
- self.assertEqual(len(counter.bound_instruments), 0)
- self.assertEqual(len(valuerecorder.bound_instruments), 0)
-
- def test_release_bound_instrument(self):
- meter = metrics.MeterProvider().get_meter(__name__)
- label_keys = ("key1",)
- labels = {"key1": "value1"}
-
- counter = metrics.Counter(
- "name", "desc", "unit", float, meter, label_keys
- )
- meter.metrics.add(counter)
- bound_counter = counter.bind(labels)
- bound_counter.add(4.0)
-
- valuerecorder = metrics.ValueRecorder(
- "name", "desc", "unit", float, meter, label_keys
- )
- meter.metrics.add(valuerecorder)
- bound_valuerecorder = valuerecorder.bind(labels)
- bound_valuerecorder.record(42)
-
- bound_counter.release()
- bound_valuerecorder.release()
-
- # be sure that bound instruments are only released after collection
- self.assertEqual(len(counter.bound_instruments), 1)
- self.assertEqual(len(valuerecorder.bound_instruments), 1)
-
- meter.collect()
-
- self.assertEqual(len(counter.bound_instruments), 0)
- self.assertEqual(len(valuerecorder.bound_instruments), 0)
-
class TestMetric(unittest.TestCase):
def test_bind(self):
meter = metrics.MeterProvider().get_meter(__name__)
metric_types = [metrics.Counter, metrics.ValueRecorder]
labels = {"key": "value"}
- key_labels = tuple(sorted(labels.items()))
+ key_labels = metrics.get_dict_as_key(labels)
for _type in metric_types:
- metric = _type("name", "desc", "unit", int, meter, ("key",))
+ metric = _type("name", "desc", "unit", int, meter)
bound_instrument = metric.bind(labels)
self.assertEqual(
metric.bound_instruments.get(key_labels), bound_instrument
@@ -298,86 +239,84 @@ def test_bind(self):
class TestCounter(unittest.TestCase):
def test_add(self):
meter = metrics.MeterProvider().get_meter(__name__)
- metric = metrics.Counter("name", "desc", "unit", int, meter, ("key",))
+ metric = metrics.Counter("name", "desc", "unit", int, meter)
labels = {"key": "value"}
- bound_counter = metric.bind(labels)
+ counter_v = View(metric, SumAggregator)
+ meter.register_view(counter_v)
+ bound_mock = metric.bind(labels)
metric.add(3, labels)
metric.add(2, labels)
- self.assertEqual(bound_counter.aggregator.current, 5)
+ self.assertEqual(bound_mock.view_datas.pop().aggregator.current, 5)
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_add_non_decreasing_int_error(self, logger_mock):
meter = metrics.MeterProvider().get_meter(__name__)
- metric = metrics.Counter("name", "desc", "unit", int, meter, ("key",))
+ metric = metrics.Counter("name", "desc", "unit", int, meter)
labels = {"key": "value"}
+ counter_v = View(metric, SumAggregator)
+ meter.register_view(counter_v)
bound_counter = metric.bind(labels)
metric.add(3, labels)
metric.add(0, labels)
metric.add(-1, labels)
- self.assertEqual(bound_counter.aggregator.current, 3)
+ self.assertEqual(bound_counter.view_datas.pop().aggregator.current, 3)
self.assertEqual(logger_mock.warning.call_count, 1)
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_add_non_decreasing_float_error(self, logger_mock):
meter = metrics.MeterProvider().get_meter(__name__)
- metric = metrics.Counter(
- "name", "desc", "unit", float, meter, ("key",)
- )
+ metric = metrics.Counter("name", "desc", "unit", float, meter)
labels = {"key": "value"}
+ counter_v = View(metric, SumAggregator)
+ meter.register_view(counter_v)
bound_counter = metric.bind(labels)
metric.add(3.3, labels)
metric.add(0.0, labels)
metric.add(0.1, labels)
metric.add(-0.1, labels)
- self.assertEqual(bound_counter.aggregator.current, 3.4)
+ self.assertEqual(
+ bound_counter.view_datas.pop().aggregator.current, 3.4
+ )
self.assertEqual(logger_mock.warning.call_count, 1)
class TestUpDownCounter(unittest.TestCase):
- @mock.patch("opentelemetry.sdk.metrics.logger")
- def test_add(self, logger_mock):
+ def test_add(self):
meter = metrics.MeterProvider().get_meter(__name__)
- metric = metrics.UpDownCounter(
- "name", "desc", "unit", int, meter, ("key",)
- )
+ metric = metrics.UpDownCounter("name", "desc", "unit", int, meter)
labels = {"key": "value"}
bound_counter = metric.bind(labels)
+ counter_v = View(metric, SumAggregator)
+ meter.register_view(counter_v)
metric.add(3, labels)
metric.add(2, labels)
- self.assertEqual(bound_counter.aggregator.current, 5)
-
- metric.add(0, labels)
- metric.add(-3, labels)
- metric.add(-1, labels)
- self.assertEqual(bound_counter.aggregator.current, 1)
- self.assertEqual(logger_mock.warning.call_count, 0)
+ self.assertEqual(bound_counter.view_datas.pop().aggregator.current, 5)
class TestValueRecorder(unittest.TestCase):
def test_record(self):
meter = metrics.MeterProvider().get_meter(__name__)
- metric = metrics.ValueRecorder(
- "name", "desc", "unit", int, meter, ("key",)
- )
+ metric = metrics.ValueRecorder("name", "desc", "unit", int, meter)
labels = {"key": "value"}
+ measure_v = View(metric, MinMaxSumCountAggregator)
bound_valuerecorder = metric.bind(labels)
+ meter.register_view(measure_v)
values = (37, 42, 7)
for val in values:
metric.record(val, labels)
self.assertEqual(
- bound_valuerecorder.aggregator.current,
+ bound_valuerecorder.view_datas.pop().aggregator.current,
(min(values), max(values), sum(values), len(values)),
)
class TestSumObserver(unittest.TestCase):
def test_observe(self):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.SumObserver(
- None, "name", "desc", "unit", int, meter, ("key",), True
+ None, "name", "desc", "unit", int, ("key",), True
)
labels = {"key": "value"}
- key_labels = tuple(sorted(labels.items()))
+ key_labels = metrics.get_dict_as_key(labels)
values = (37, 42, 60, 100)
for val in values:
observer.observe(val, labels)
@@ -385,9 +324,8 @@ def test_observe(self):
self.assertEqual(observer.aggregators[key_labels].current, values[-1])
def test_observe_disabled(self):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.SumObserver(
- None, "name", "desc", "unit", int, meter, ("key",), False
+ None, "name", "desc", "unit", int, ("key",), False
)
labels = {"key": "value"}
observer.observe(37, labels)
@@ -395,9 +333,8 @@ def test_observe_disabled(self):
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_observe_incorrect_type(self, logger_mock):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.SumObserver(
- None, "name", "desc", "unit", int, meter, ("key",), True
+ None, "name", "desc", "unit", int, ("key",), True
)
labels = {"key": "value"}
observer.observe(37.0, labels)
@@ -406,9 +343,8 @@ def test_observe_incorrect_type(self, logger_mock):
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_observe_non_decreasing_error(self, logger_mock):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.SumObserver(
- None, "name", "desc", "unit", int, meter, ("key",), True
+ None, "name", "desc", "unit", int, ("key",), True
)
labels = {"key": "value"}
observer.observe(37, labels)
@@ -417,11 +353,9 @@ def test_observe_non_decreasing_error(self, logger_mock):
self.assertTrue(logger_mock.warning.called)
def test_run(self):
- meter = metrics.MeterProvider().get_meter(__name__)
-
callback = mock.Mock()
observer = metrics.SumObserver(
- callback, "name", "desc", "unit", int, meter, (), True
+ callback, "name", "desc", "unit", int, (), True
)
self.assertTrue(observer.run())
@@ -429,13 +363,11 @@ def test_run(self):
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_run_exception(self, logger_mock):
- meter = metrics.MeterProvider().get_meter(__name__)
-
callback = mock.Mock()
callback.side_effect = Exception("We have a problem!")
observer = metrics.SumObserver(
- callback, "name", "desc", "unit", int, meter, (), True
+ callback, "name", "desc", "unit", int, (), True
)
self.assertFalse(observer.run())
@@ -444,12 +376,11 @@ def test_run_exception(self, logger_mock):
class TestUpDownSumObserver(unittest.TestCase):
def test_observe(self):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.UpDownSumObserver(
- None, "name", "desc", "unit", int, meter, ("key",), True
+ None, "name", "desc", "unit", int, ("key",), True
)
labels = {"key": "value"}
- key_labels = tuple(sorted(labels.items()))
+ key_labels = metrics.get_dict_as_key(labels)
values = (37, 42, 14, 30)
for val in values:
observer.observe(val, labels)
@@ -457,9 +388,8 @@ def test_observe(self):
self.assertEqual(observer.aggregators[key_labels].current, values[-1])
def test_observe_disabled(self):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.UpDownSumObserver(
- None, "name", "desc", "unit", int, meter, ("key",), False
+ None, "name", "desc", "unit", int, ("key",), False
)
labels = {"key": "value"}
observer.observe(37, labels)
@@ -467,9 +397,8 @@ def test_observe_disabled(self):
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_observe_incorrect_type(self, logger_mock):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.UpDownSumObserver(
- None, "name", "desc", "unit", int, meter, ("key",), True
+ None, "name", "desc", "unit", int, ("key",), True
)
labels = {"key": "value"}
observer.observe(37.0, labels)
@@ -477,11 +406,9 @@ def test_observe_incorrect_type(self, logger_mock):
self.assertTrue(logger_mock.warning.called)
def test_run(self):
- meter = metrics.MeterProvider().get_meter(__name__)
-
callback = mock.Mock()
observer = metrics.UpDownSumObserver(
- callback, "name", "desc", "unit", int, meter, (), True
+ callback, "name", "desc", "unit", int, (), True
)
self.assertTrue(observer.run())
@@ -489,13 +416,11 @@ def test_run(self):
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_run_exception(self, logger_mock):
- meter = metrics.MeterProvider().get_meter(__name__)
-
callback = mock.Mock()
callback.side_effect = Exception("We have a problem!")
observer = metrics.UpDownSumObserver(
- callback, "name", "desc", "unit", int, meter, (), True
+ callback, "name", "desc", "unit", int, (), True
)
self.assertFalse(observer.run())
@@ -504,12 +429,11 @@ def test_run_exception(self, logger_mock):
class TestValueObserver(unittest.TestCase):
def test_observe(self):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.ValueObserver(
- None, "name", "desc", "unit", int, meter, ("key",), True
+ None, "name", "desc", "unit", int, ("key",), True
)
labels = {"key": "value"}
- key_labels = tuple(sorted(labels.items()))
+ key_labels = metrics.get_dict_as_key(labels)
values = (37, 42, 7, 21)
for val in values:
observer.observe(val, labels)
@@ -521,9 +445,8 @@ def test_observe(self):
self.assertEqual(observer.aggregators[key_labels].current, values[-1])
def test_observe_disabled(self):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.ValueObserver(
- None, "name", "desc", "unit", int, meter, ("key",), False
+ None, "name", "desc", "unit", int, ("key",), False
)
labels = {"key": "value"}
observer.observe(37, labels)
@@ -531,9 +454,8 @@ def test_observe_disabled(self):
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_observe_incorrect_type(self, logger_mock):
- meter = metrics.MeterProvider().get_meter(__name__)
observer = metrics.ValueObserver(
- None, "name", "desc", "unit", int, meter, ("key",), True
+ None, "name", "desc", "unit", int, ("key",), True
)
labels = {"key": "value"}
observer.observe(37.0, labels)
@@ -541,11 +463,9 @@ def test_observe_incorrect_type(self, logger_mock):
self.assertTrue(logger_mock.warning.called)
def test_run(self):
- meter = metrics.MeterProvider().get_meter(__name__)
-
callback = mock.Mock()
observer = metrics.ValueObserver(
- callback, "name", "desc", "unit", int, meter, (), True
+ callback, "name", "desc", "unit", int, (), True
)
self.assertTrue(observer.run())
@@ -553,78 +473,95 @@ def test_run(self):
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_run_exception(self, logger_mock):
- meter = metrics.MeterProvider().get_meter(__name__)
-
callback = mock.Mock()
callback.side_effect = Exception("We have a problem!")
observer = metrics.ValueObserver(
- callback, "name", "desc", "unit", int, meter, (), True
+ callback, "name", "desc", "unit", int, (), True
)
self.assertFalse(observer.run())
self.assertTrue(logger_mock.warning.called)
+# pylint: disable=no-self-use
class TestBoundCounter(unittest.TestCase):
def test_add(self):
- aggregator = export.aggregate.SumAggregator()
- bound_metric = metrics.BoundCounter(int, True, aggregator)
+ meter_mock = mock.Mock()
+ metric_mock = mock.Mock()
+ metric_mock.enabled = True
+ metric_mock.value_type = int
+ metric_mock.meter = meter_mock
+ bound_metric = metrics.BoundCounter((), metric_mock)
+ view_datas_mock = mock.Mock()
+ bound_metric.view_datas = [view_datas_mock]
bound_metric.add(3)
- self.assertEqual(bound_metric.aggregator.current, 3)
+ view_datas_mock.record.assert_called_once_with(3)
def test_add_disabled(self):
- aggregator = export.aggregate.SumAggregator()
- bound_counter = metrics.BoundCounter(int, False, aggregator)
- bound_counter.add(3)
- self.assertEqual(bound_counter.aggregator.current, 0)
+ meter_mock = mock.Mock()
+ metric_mock = mock.Mock()
+ metric_mock.enabled = False
+ metric_mock.value_type = int
+ metric_mock.meter = meter_mock
+ bound_metric = metrics.BoundCounter((), metric_mock)
+ view_datas_mock = mock.Mock()
+ bound_metric.view_datas = [view_datas_mock]
+ bound_metric.add(3)
+ view_datas_mock.record.update_view.assert_not_called()
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_add_incorrect_type(self, logger_mock):
- aggregator = export.aggregate.SumAggregator()
- bound_counter = metrics.BoundCounter(int, True, aggregator)
- bound_counter.add(3.0)
- self.assertEqual(bound_counter.aggregator.current, 0)
+ meter_mock = mock.Mock()
+ viewm_mock = mock.Mock()
+ meter_mock.view_manager = viewm_mock
+ metric_mock = mock.Mock()
+ metric_mock.enabled = True
+ metric_mock.value_type = float
+ metric_mock.meter = meter_mock
+ bound_metric = metrics.BoundCounter((), metric_mock)
+ view_datas_mock = mock.Mock()
+ bound_metric.view_datas = [view_datas_mock]
+ bound_metric.add(3)
+ view_datas_mock.record.update_view.assert_not_called()
self.assertTrue(logger_mock.warning.called)
- def test_update(self):
- aggregator = export.aggregate.SumAggregator()
- bound_counter = metrics.BoundCounter(int, True, aggregator)
- bound_counter.update(4.0)
- self.assertEqual(bound_counter.aggregator.current, 4.0)
-
class TestBoundValueRecorder(unittest.TestCase):
def test_record(self):
- aggregator = export.aggregate.MinMaxSumCountAggregator()
- bound_valuerecorder = metrics.BoundValueRecorder(int, True, aggregator)
+ meter_mock = mock.Mock()
+ metric_mock = mock.Mock()
+ metric_mock.enabled = True
+ metric_mock.value_type = int
+ metric_mock.meter = meter_mock
+ bound_valuerecorder = metrics.BoundValueRecorder((), metric_mock)
+ view_datas_mock = mock.Mock()
+ bound_valuerecorder.view_datas = [view_datas_mock]
bound_valuerecorder.record(3)
- self.assertEqual(bound_valuerecorder.aggregator.current, (3, 3, 3, 1))
+ view_datas_mock.record.assert_called_once_with(3)
def test_record_disabled(self):
- aggregator = export.aggregate.MinMaxSumCountAggregator()
- bound_valuerecorder = metrics.BoundValueRecorder(
- int, False, aggregator
- )
+ meter_mock = mock.Mock()
+ metric_mock = mock.Mock()
+ metric_mock.enabled = False
+ metric_mock.value_type = int
+ metric_mock.meter = meter_mock
+ bound_valuerecorder = metrics.BoundValueRecorder((), metric_mock)
+ view_datas_mock = mock.Mock()
+ bound_valuerecorder.view_datas = [view_datas_mock]
bound_valuerecorder.record(3)
- self.assertEqual(
- bound_valuerecorder.aggregator.current, (None, None, None, 0)
- )
+ view_datas_mock.record.update_view.assert_not_called()
@mock.patch("opentelemetry.sdk.metrics.logger")
def test_record_incorrect_type(self, logger_mock):
- aggregator = export.aggregate.MinMaxSumCountAggregator()
- bound_valuerecorder = metrics.BoundValueRecorder(int, True, aggregator)
- bound_valuerecorder.record(3.0)
- self.assertEqual(
- bound_valuerecorder.aggregator.current, (None, None, None, 0)
- )
+ meter_mock = mock.Mock()
+ metric_mock = mock.Mock()
+ metric_mock.enabled = True
+ metric_mock.value_type = float
+ metric_mock.meter = meter_mock
+ bound_valuerecorder = metrics.BoundValueRecorder((), metric_mock)
+ view_datas_mock = mock.Mock()
+ bound_valuerecorder.view_datas = [view_datas_mock]
+ bound_valuerecorder.record(3)
+ view_datas_mock.record.update_view.assert_not_called()
self.assertTrue(logger_mock.warning.called)
-
- def test_update(self):
- aggregator = export.aggregate.MinMaxSumCountAggregator()
- bound_valuerecorder = metrics.BoundValueRecorder(int, True, aggregator)
- bound_valuerecorder.update(4.0)
- self.assertEqual(
- bound_valuerecorder.aggregator.current, (4.0, 4.0, 4.0, 1)
- )
diff --git a/opentelemetry-sdk/tests/metrics/test_view.py b/opentelemetry-sdk/tests/metrics/test_view.py
new file mode 100644
index 00000000000..7dd7571d38e
--- /dev/null
+++ b/opentelemetry-sdk/tests/metrics/test_view.py
@@ -0,0 +1,191 @@
+# 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 unittest
+from unittest import mock
+
+from opentelemetry.sdk import metrics
+from opentelemetry.sdk.metrics import Counter, view
+from opentelemetry.sdk.metrics.export import aggregate
+from opentelemetry.sdk.metrics.export.aggregate import (
+ MinMaxSumCountAggregator,
+ SumAggregator,
+)
+from opentelemetry.sdk.metrics.export.controller import PushController
+from opentelemetry.sdk.metrics.export.in_memory_metrics_exporter import (
+ InMemoryMetricsExporter,
+)
+from opentelemetry.sdk.metrics.view import View, ViewConfig
+
+
+class TestUtil(unittest.TestCase):
+ @mock.patch("opentelemetry.sdk.metrics.view.logger")
+ def test_default_aggregator(self, logger_mock):
+ meter = metrics.MeterProvider().get_meter(__name__)
+ counter = metrics.Counter("", "", "1", int, meter)
+ self.assertEqual(
+ view.get_default_aggregator(counter), aggregate.SumAggregator
+ )
+ ud_counter = metrics.UpDownCounter("", "", "1", int, meter)
+ self.assertEqual(
+ view.get_default_aggregator(ud_counter), aggregate.SumAggregator
+ )
+ observer = metrics.SumObserver(lambda: None, "", "", "1", int)
+ self.assertEqual(
+ view.get_default_aggregator(observer),
+ aggregate.LastValueAggregator,
+ )
+ ud_observer = metrics.SumObserver(lambda: None, "", "", "1", int)
+ self.assertEqual(
+ view.get_default_aggregator(ud_observer),
+ aggregate.LastValueAggregator,
+ )
+ recorder = metrics.ValueRecorder("", "", "1", int, meter)
+ self.assertEqual(
+ view.get_default_aggregator(recorder),
+ aggregate.MinMaxSumCountAggregator,
+ )
+ v_observer = metrics.ValueObserver(lambda: None, "", "", "1", int)
+ self.assertEqual(
+ view.get_default_aggregator(v_observer),
+ aggregate.ValueObserverAggregator,
+ )
+ self.assertEqual(
+ view.get_default_aggregator(DummyMetric()), aggregate.SumAggregator
+ )
+ self.assertEqual(logger_mock.warning.call_count, 1)
+
+
+class TestStateless(unittest.TestCase):
+ def setUp(self):
+ self.meter = metrics.MeterProvider(stateful=False).get_meter(__name__)
+ self.exporter = InMemoryMetricsExporter()
+ self.controller = PushController(self.meter, self.exporter, 30)
+
+ def tearDown(self):
+ self.controller.shutdown()
+
+ def test_label_keys(self):
+ test_counter = self.meter.create_metric(
+ name="test_counter",
+ description="description",
+ unit="By",
+ value_type=int,
+ metric_type=Counter,
+ )
+ counter_view = View(
+ test_counter,
+ SumAggregator,
+ label_keys=["environment"],
+ view_config=ViewConfig.LABEL_KEYS,
+ )
+
+ self.meter.register_view(counter_view)
+ test_counter.add(6, {"environment": "production", "customer_id": 123})
+ test_counter.add(5, {"environment": "production", "customer_id": 247})
+
+ self.controller.tick()
+
+ metric_data = self.exporter.get_exported_metrics()
+ self.assertEqual(len(metric_data), 1)
+ self.assertEqual(
+ metric_data[0].labels, (("environment", "production"),)
+ )
+ self.assertEqual(metric_data[0].aggregator.checkpoint, 11)
+
+ def test_ungrouped(self):
+ test_counter = self.meter.create_metric(
+ name="test_counter",
+ description="description",
+ unit="By",
+ value_type=int,
+ metric_type=Counter,
+ )
+ counter_view = View(
+ test_counter,
+ SumAggregator,
+ label_keys=["environment"],
+ view_config=ViewConfig.UNGROUPED,
+ )
+
+ self.meter.register_view(counter_view)
+ test_counter.add(6, {"environment": "production", "customer_id": 123})
+ test_counter.add(5, {"environment": "production", "customer_id": 247})
+
+ self.controller.tick()
+
+ metric_data = self.exporter.get_exported_metrics()
+ data_set = set()
+ for data in metric_data:
+ data_set.add((data.labels, data.aggregator.checkpoint))
+ self.assertEqual(len(metric_data), 2)
+ label1 = (("customer_id", 123), ("environment", "production"))
+ label2 = (("customer_id", 247), ("environment", "production"))
+ self.assertTrue((label1, 6) in data_set)
+ self.assertTrue((label2, 5) in data_set)
+
+ def test_multiple_views(self):
+ test_counter = self.meter.create_metric(
+ name="test_counter",
+ description="description",
+ unit="By",
+ value_type=int,
+ metric_type=Counter,
+ )
+
+ counter_view = View(
+ test_counter,
+ SumAggregator,
+ label_keys=["environment"],
+ view_config=ViewConfig.UNGROUPED,
+ )
+
+ mmsc_view = View(
+ test_counter,
+ MinMaxSumCountAggregator,
+ label_keys=["environment"],
+ view_config=ViewConfig.LABEL_KEYS,
+ )
+
+ self.meter.register_view(counter_view)
+ self.meter.register_view(mmsc_view)
+ test_counter.add(6, {"environment": "production", "customer_id": 123})
+ test_counter.add(5, {"environment": "production", "customer_id": 247})
+
+ self.controller.tick()
+
+ metric_data = self.exporter.get_exported_metrics()
+ sum_set = set()
+ mmsc_set = set()
+ for data in metric_data:
+ if isinstance(data.aggregator, SumAggregator):
+ tup = (data.labels, data.aggregator.checkpoint)
+ sum_set.add(tup)
+ elif isinstance(data.aggregator, MinMaxSumCountAggregator):
+ mmsc_set.add(data)
+ self.assertEqual(data.labels, (("environment", "production"),))
+ self.assertEqual(data.aggregator.checkpoint.sum, 11)
+ # we have to assert this way because order is unknown
+ self.assertEqual(len(sum_set), 2)
+ self.assertEqual(len(mmsc_set), 1)
+ label1 = (("customer_id", 123), ("environment", "production"))
+ label2 = (("customer_id", 247), ("environment", "production"))
+ self.assertTrue((label1, 6) in sum_set)
+ self.assertTrue((label2, 5) in sum_set)
+
+
+class DummyMetric(metrics.Metric):
+ # pylint: disable=W0231
+ def __init__(self):
+ pass
From 28d0cdf9316830e2b1a35b96b59c62bfe2a233ab Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Mon, 3 Aug 2020 10:10:45 -0700
Subject: [PATCH 60/79] Rename web framework packages from "ext" to
"instrumentation" (#961)
---
docs-requirements.txt | 3 +-
docs/conf.py | 10 ++-
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 +-
docs/ext/aiohttp_client/aiohttp_client.rst | 7 --
docs/ext/asgi/asgi.rst | 10 ---
docs/ext/flask/flask.rst | 7 --
docs/ext/grpc/grpc.rst | 4 +-
docs/ext/pyramid/pyramid.rst | 7 --
docs/ext/wsgi/wsgi.rst | 7 --
docs/getting-started.rst | 4 +-
docs/getting_started/flask_example.py | 4 +-
docs/index.rst | 8 +++
.../aiohttp_client/aiohttp_client.rst | 7 ++
docs/{ext => instrumentation}/aiopg/aiopg.rst | 2 +-
docs/instrumentation/asgi/asgi.rst | 10 +++
.../django/django.rst | 2 +-
.../fastapi/fastapi.rst | 2 +-
docs/instrumentation/flask/flask.rst | 7 ++
docs/instrumentation/instrumentation.rst | 4 +-
docs/instrumentation/pyramid/pyramid.rst | 7 ++
docs/instrumentation/requests/requests.rst | 7 ++
.../starlette/starlette.rst | 2 +-
.../wsgi/wsgi.rst} | 4 +-
eachdist.ini | 7 +-
.../exporter/datadog/exporter.py | 12 ++--
.../tests/test_datadog_exporter.py | 10 +--
.../CHANGELOG.md | 9 ---
ext/opentelemetry-ext-grpc/setup.cfg | 2 +-
ext/opentelemetry-ext-requests/README.rst | 23 -------
.../CHANGELOG.md | 12 ++++
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 6 +-
.../setup.cfg | 6 +-
.../setup.py | 7 +-
.../aiohttp_client/__init__.py | 10 +--
.../aiohttp_client/version.py | 0
.../tests/__init__.py | 0
.../tests/test_aiohttp_client_integration.py | 16 ++---
.../CHANGELOG.md | 0
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 2 +-
.../setup.cfg | 4 +-
.../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 | 10 +--
.../setup.cfg | 6 +-
.../setup.py | 2 +-
.../instrumentation}/asgi/__init__.py | 4 +-
.../instrumentation/asgi}/version.py | 0
.../tests/__init__.py | 0
.../tests/test_asgi_middleware.py | 2 +-
.../CHANGELOG.md | 2 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +--
.../setup.cfg | 8 +--
.../setup.py | 2 +-
.../instrumentation}/django/__init__.py | 2 +-
.../instrumentation}/django/middleware.py | 4 +-
.../instrumentation/django}/version.py | 0
.../tests/__init__.py | 0
.../tests/conftest.py | 0
.../tests/test_middleware.py | 4 +-
.../tests/views.py | 0
.../CHANGELOG.md | 0
.../README.rst | 0
.../setup.cfg | 4 +-
.../setup.py | 0
.../instrumentation/fastapi/__init__.py | 2 +-
.../instrumentation/fastapi}/version.py | 0
.../tests/__init__.py | 0
.../tests/test_fastapi_instrumentation.py | 0
.../CHANGELOG.md | 2 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +--
.../setup.cfg | 8 +--
.../setup.py | 4 +-
.../instrumentation}/flask/__init__.py | 8 +--
.../instrumentation/flask}/version.py | 0
.../tests/__init__.py | 0
.../tests/base_test.py | 0
.../tests/test_automatic.py | 2 +-
.../tests/test_programmatic.py | 4 +-
.../CHANGELOG.md | 0
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 12 ++--
.../setup.cfg | 10 +--
.../setup.py | 7 +-
.../instrumentation}/pyramid/__init__.py | 20 +++---
.../instrumentation}/pyramid/callbacks.py | 8 +--
.../instrumentation/pyramid}/version.py | 0
.../tests/__init__.py | 0
.../tests/pyramid_base_test.py | 0
.../tests/test_automatic.py | 2 +-
.../tests/test_programmatic.py | 12 ++--
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 23 +++++++
.../setup.cfg | 8 +--
.../setup.py | 7 +-
.../instrumentation}/requests/__init__.py | 6 +-
.../instrumentation/requests}/version.py | 0
.../tests/__init__.py | 0
.../tests/test_requests_integration.py | 8 ++-
.../CHANGELOG.md | 0
.../README.rst | 0
.../setup.cfg | 4 +-
.../setup.py | 0
.../instrumentation/starlette/__init__.py | 2 +-
.../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 | 8 +--
.../setup.cfg | 4 +-
.../setup.py | 2 +-
.../instrumentation}/wsgi/__init__.py | 6 +-
.../instrumentation/wsgi}/version.py | 0
.../tests/__init__.py | 0
.../tests/test_wsgi_middleware.py | 2 +-
.../src/opentelemetry/metrics/__init__.py | 2 +-
.../src/opentelemetry/trace/__init__.py | 2 +-
.../instrumentation/bootstrap.py | 34 +++++-----
scripts/build.sh | 2 +-
scripts/coverage.sh | 10 +--
tests/w3c_tracecontext_validation_server.py | 4 +-
tox.ini | 66 +++++++++----------
146 files changed, 352 insertions(+), 301 deletions(-)
delete mode 100644 docs/ext/aiohttp_client/aiohttp_client.rst
delete mode 100644 docs/ext/asgi/asgi.rst
delete mode 100644 docs/ext/flask/flask.rst
delete mode 100644 docs/ext/pyramid/pyramid.rst
delete mode 100644 docs/ext/wsgi/wsgi.rst
create mode 100644 docs/instrumentation/aiohttp_client/aiohttp_client.rst
rename docs/{ext => instrumentation}/aiopg/aiopg.rst (80%)
create mode 100644 docs/instrumentation/asgi/asgi.rst
rename docs/{ext => instrumentation}/django/django.rst (71%)
rename docs/{ext => instrumentation}/fastapi/fastapi.rst (57%)
create mode 100644 docs/instrumentation/flask/flask.rst
create mode 100644 docs/instrumentation/pyramid/pyramid.rst
create mode 100644 docs/instrumentation/requests/requests.rst
rename docs/{ext => instrumentation}/starlette/starlette.rst (57%)
rename docs/{ext/requests/requests.rst => instrumentation/wsgi/wsgi.rst} (51%)
delete mode 100644 ext/opentelemetry-ext-aiohttp-client/CHANGELOG.md
delete mode 100644 ext/opentelemetry-ext-requests/README.rst
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 (64%)
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 (88%)
rename {ext/opentelemetry-ext-aiohttp-client/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation}/aiohttp_client/__init__.py (95%)
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 (93%)
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 (75%)
rename {ext => instrumentation}/opentelemetry-instrumentation-aiopg/setup.cfg (94%)
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 (74%)
rename {ext/opentelemetry-ext-asgi => instrumentation/opentelemetry-instrumentation-asgi}/setup.cfg (87%)
rename {ext/opentelemetry-ext-asgi => 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 (97%)
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 (99%)
rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/CHANGELOG.md (81%)
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 (67%)
rename {ext/opentelemetry-ext-django => instrumentation/opentelemetry-instrumentation-django}/setup.cfg (88%)
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 (97%)
rename {ext/opentelemetry-ext-django/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation}/django/middleware.py (97%)
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 (96%)
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 (93%)
rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/setup.py (100%)
rename {ext => instrumentation}/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py (97%)
rename {ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid => 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 (85%)
rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-flask}/LICENSE (100%)
rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-flask}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/README.rst (67%)
rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/setup.cfg (88%)
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 (95%)
rename {ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests => 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 (96%)
rename {ext/opentelemetry-ext-flask => instrumentation/opentelemetry-instrumentation-flask}/tests/test_programmatic.py (97%)
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 (54%)
rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/setup.cfg (85%)
rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-pyramid}/setup.py (89%)
rename {ext/opentelemetry-ext-pyramid/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation}/pyramid/__init__.py (85%)
rename {ext/opentelemetry-ext-pyramid/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation}/pyramid/callbacks.py (94%)
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 (97%)
rename {ext/opentelemetry-ext-pyramid => instrumentation/opentelemetry-instrumentation-pyramid}/tests/test_programmatic.py (94%)
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%)
create mode 100644 instrumentation/opentelemetry-instrumentation-requests/README.rst
rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-requests}/setup.cfg (87%)
rename {ext/opentelemetry-ext-requests => instrumentation/opentelemetry-instrumentation-requests}/setup.py (88%)
rename {ext/opentelemetry-ext-requests/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation}/requests/__init__.py (97%)
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 (97%)
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 (93%)
rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/setup.py (100%)
rename {ext => instrumentation}/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py (97%)
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 (63%)
rename {ext/opentelemetry-ext-wsgi => instrumentation/opentelemetry-instrumentation-wsgi}/setup.cfg (94%)
rename {ext/opentelemetry-ext-pyramid => 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 (97%)
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 (99%)
diff --git a/docs-requirements.txt b/docs-requirements.txt
index 10ecacb2fd8..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
@@ -29,5 +30,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/docs/conf.py b/docs/conf.py
index d3af10b7d66..db836ea27ef 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(instr)
+ if isdir(join(instr, f))
+]
+
+sys.path[:0] = source_dirs + exp_dirs + ext_dirs + instr_dirs
# -- Project information -----------------------------------------------------
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 6f441dd333d..38ef365b323 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/ext/aiohttp_client/aiohttp_client.rst b/docs/ext/aiohttp_client/aiohttp_client.rst
deleted file mode 100644
index e5ab26b0ea0..00000000000
--- a/docs/ext/aiohttp_client/aiohttp_client.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-OpenTelemetry aiohttp client Integration
-========================================
-
-.. automodule:: opentelemetry.ext.aiohttp_client
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/ext/asgi/asgi.rst b/docs/ext/asgi/asgi.rst
deleted file mode 100644
index 82c98330693..00000000000
--- a/docs/ext/asgi/asgi.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-opentelemetry.ext.asgi package
-==============================
-
-Module contents
----------------
-
-.. automodule:: opentelemetry.ext.asgi
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/ext/flask/flask.rst b/docs/ext/flask/flask.rst
deleted file mode 100644
index 2fc19de3ec0..00000000000
--- a/docs/ext/flask/flask.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-OpenTelemetry Flask Integration
-===============================
-
-.. automodule:: opentelemetry.ext.flask
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/ext/grpc/grpc.rst b/docs/ext/grpc/grpc.rst
index 8a0775f28f2..351d3bfb0d5 100644
--- a/docs/ext/grpc/grpc.rst
+++ b/docs/ext/grpc/grpc.rst
@@ -1,5 +1,5 @@
-OpenTelemetry gRPC Integration
-==============================
+OpenTelemetry gRPC Instrumentation
+==================================
Module contents
---------------
diff --git a/docs/ext/pyramid/pyramid.rst b/docs/ext/pyramid/pyramid.rst
deleted file mode 100644
index b46718c387a..00000000000
--- a/docs/ext/pyramid/pyramid.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-OpenTelemetry Pyramid Integration
-=================================
-
-.. automodule:: opentelemetry.ext.pyramid
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/ext/wsgi/wsgi.rst b/docs/ext/wsgi/wsgi.rst
deleted file mode 100644
index af2bd4dd365..00000000000
--- a/docs/ext/wsgi/wsgi.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-OpenTelemetry WSGI Middleware
-=============================
-
-.. automodule:: opentelemetry.ext.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/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
new file mode 100644
index 00000000000..f8549f07fa7
--- /dev/null
+++ b/docs/instrumentation/aiohttp_client/aiohttp_client.rst
@@ -0,0 +1,7 @@
+OpenTelemetry aiohttp client Instrumentation
+============================================
+
+.. automodule:: opentelemetry.instrumentation.aiohttp_client
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/docs/ext/aiopg/aiopg.rst b/docs/instrumentation/aiopg/aiopg.rst
similarity index 80%
rename from docs/ext/aiopg/aiopg.rst
rename to docs/instrumentation/aiopg/aiopg.rst
index ff8d91ed11d..9da450c4e78 100644
--- a/docs/ext/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
new file mode 100644
index 00000000000..abb1621973c
--- /dev/null
+++ b/docs/instrumentation/asgi/asgi.rst
@@ -0,0 +1,10 @@
+OpenTelemetry asgi Instrumentation
+===================================
+
+Module contents
+---------------
+
+.. automodule:: opentelemetry.instrumentation.asgi
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/docs/ext/django/django.rst b/docs/instrumentation/django/django.rst
similarity index 71%
rename from docs/ext/django/django.rst
rename to docs/instrumentation/django/django.rst
index 1a2c844e28c..80767308439 100644
--- a/docs/ext/django/django.rst
+++ b/docs/instrumentation/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/fastapi/fastapi.rst b/docs/instrumentation/fastapi/fastapi.rst
similarity index 57%
rename from docs/ext/fastapi/fastapi.rst
rename to docs/instrumentation/fastapi/fastapi.rst
index 9295261584b..09eb8a828b3 100644
--- a/docs/ext/fastapi/fastapi.rst
+++ b/docs/instrumentation/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/instrumentation/flask/flask.rst b/docs/instrumentation/flask/flask.rst
new file mode 100644
index 00000000000..ac8932acd42
--- /dev/null
+++ b/docs/instrumentation/flask/flask.rst
@@ -0,0 +1,7 @@
+OpenTelemetry Flask Instrumentation
+===================================
+
+.. automodule:: opentelemetry.instrumentation.flask
+ :members:
+ :undoc-members:
+ :show-inheritance:
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
new file mode 100644
index 00000000000..56abd2800b4
--- /dev/null
+++ b/docs/instrumentation/pyramid/pyramid.rst
@@ -0,0 +1,7 @@
+OpenTelemetry Pyramid Instrumentation
+=====================================
+
+.. automodule:: opentelemetry.instrumentation.pyramid
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/docs/instrumentation/requests/requests.rst b/docs/instrumentation/requests/requests.rst
new file mode 100644
index 00000000000..7a0665cd998
--- /dev/null
+++ b/docs/instrumentation/requests/requests.rst
@@ -0,0 +1,7 @@
+OpenTelemetry requests Instrumentation
+======================================
+
+.. automodule:: opentelemetry.instrumentation.requests
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/docs/ext/starlette/starlette.rst b/docs/instrumentation/starlette/starlette.rst
similarity index 57%
rename from docs/ext/starlette/starlette.rst
rename to docs/instrumentation/starlette/starlette.rst
index 8e2d1d7bc83..0efa8cce832 100644
--- a/docs/ext/starlette/starlette.rst
+++ b/docs/instrumentation/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/docs/ext/requests/requests.rst b/docs/instrumentation/wsgi/wsgi.rst
similarity index 51%
rename from docs/ext/requests/requests.rst
rename to docs/instrumentation/wsgi/wsgi.rst
index 5959d4c9243..39ad5ffd583 100644
--- a/docs/ext/requests/requests.rst
+++ b/docs/instrumentation/wsgi/wsgi.rst
@@ -1,7 +1,7 @@
-OpenTelemetry requests Integration
+OpenTelemetry WSGI Instrumentation
==================================
-.. automodule:: opentelemetry.ext.requests
+.. automodule:: opentelemetry.instrumentation.wsgi
:members:
:undoc-members:
:show-inheritance:
diff --git a/eachdist.ini b/eachdist.ini
index 82fc0271eda..06d940378c2 100644
--- a/eachdist.ini
+++ b/eachdist.ini
@@ -7,11 +7,12 @@ sortfirst=
opentelemetry-instrumentation
opentelemetry-proto
tests/util
- exporter/*
- ext/opentelemetry-ext-wsgi
+ instrumentation/opentelemetry-instrumentation-wsgi
ext/opentelemetry-ext-dbapi
- ext/opentelemetry-ext-asgi
+ instrumentation/opentelemetry-instrumentation-asgi
ext/opentelemetry-ext-botocore
+ instrumentation/*
+ exporter/*
ext/*
[lintroots]
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..785bcccccef 100644
--- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py
+++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py
@@ -32,11 +32,11 @@
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.instrumentation.django": DatadogSpanTypes.WEB,
+ "opentelemetry.instrumentation.flask": DatadogSpanTypes.WEB,
"opentelemetry.ext.grpc": DatadogSpanTypes.GRPC,
"opentelemetry.ext.jinja2": DatadogSpanTypes.TEMPLATE,
"opentelemetry.ext.mysql": 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..cf3c3c72566 100644
--- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py
+++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py
@@ -290,10 +290,10 @@ 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.instrumentation.django",
+ "opentelemetry.instrumentation.flask",
"opentelemetry.ext.grpc",
"opentelemetry.ext.jinja2",
"opentelemetry.ext.mysql",
@@ -301,9 +301,9 @@ def test_span_types(self):
"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/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-grpc/setup.cfg b/ext/opentelemetry-ext-grpc/setup.cfg
index c7dac4c3561..a3533bdf590 100644
--- a/ext/opentelemetry-ext-grpc/setup.cfg
+++ b/ext/opentelemetry-ext-grpc/setup.cfg
@@ -14,7 +14,7 @@
[metadata]
name = opentelemetry-ext-grpc
-description = OpenTelemetry gRPC Integration
+description = OpenTelemetry gRPC instrumentation
long_description = file: README.rst
long_description_content_type = text/x-rst
author = OpenTelemetry Authors
diff --git a/ext/opentelemetry-ext-requests/README.rst b/ext/opentelemetry-ext-requests/README.rst
deleted file mode 100644
index 95d80d4997b..00000000000
--- a/ext/opentelemetry-ext-requests/README.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-OpenTelemetry requests Integration
-==================================
-
-|pypi|
-
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-requests.svg
- :target: https://pypi.org/project/opentelemetry-ext-requests/
-
-This library allows tracing HTTP requests made by the
-`requests `_ library.
-
-Installation
-------------
-
-::
-
- pip install opentelemetry-ext-requests
-
-References
-----------
-
-* `OpenTelemetry requests Integration `_
-* `OpenTelemetry Project `_
diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md
new file mode 100644
index 00000000000..d7dce5f65cf
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md
@@ -0,0 +1,12 @@
+# Changelog
+
+## Unreleased
+
+- Change package name to opentelemetry-instrumentation-aiohttp-client
+ ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
+
+## 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 64%
rename from ext/opentelemetry-ext-aiohttp-client/README.rst
rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/README.rst
index c257639cf34..bc44e0e2627 100644
--- a/ext/opentelemetry-ext-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/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 88%
rename from ext/opentelemetry-ext-aiohttp-client/setup.py
rename to instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py
index 1b44425f066..fe74e232353 100644
--- a/ext/opentelemetry-ext-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", "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 95%
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
index a05e7c06015..2d9b8bd7a58 100644
--- 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
@@ -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/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 93%
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
index 8db20c227ec..f44e3df2da6 100644
--- a/ext/opentelemetry-ext-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/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 75%
rename from ext/opentelemetry-instrumentation-aiopg/README.rst
rename to instrumentation/opentelemetry-instrumentation-aiopg/README.rst
index 0e9248ec1d1..f7a66579dfc 100644
--- a/ext/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/ext/opentelemetry-instrumentation-aiopg/setup.cfg b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg
similarity index 94%
rename from ext/opentelemetry-instrumentation-aiopg/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg
index f2428301b5e..bd9a06c5248 100644
--- a/ext/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/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..7f2812bd05b 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
+ ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
+
## 0.8b0
Released 2020-05-27
diff --git a/ext/opentelemetry-ext-asgi/README.rst b/instrumentation/opentelemetry-instrumentation-asgi/README.rst
similarity index 74%
rename from ext/opentelemetry-ext-asgi/README.rst
rename to instrumentation/opentelemetry-instrumentation-asgi/README.rst
index bc286e5c8b1..f2b760976a7 100644
--- a/ext/opentelemetry-ext-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/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-asgi/setup.py b/instrumentation/opentelemetry-instrumentation-asgi/setup.py
similarity index 91%
rename from ext/opentelemetry-ext-asgi/setup.py
rename to instrumentation/opentelemetry-instrumentation-asgi/setup.py
index 8bf19bd4225..3369352fe1e 100644
--- a/ext/opentelemetry-ext-asgi/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", "asgi", "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 97%
rename from ext/opentelemetry-ext-asgi/src/opentelemetry/ext/asgi/__init__.py
rename to instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/__init__.py
index 43b8804c245..02aabfea95c 100644
--- a/ext/opentelemetry-ext-asgi/src/opentelemetry/ext/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/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 99%
rename from ext/opentelemetry-ext-asgi/tests/test_asgi_middleware.py
rename to instrumentation/opentelemetry-instrumentation-asgi/tests/test_asgi_middleware.py
index 05aa84b3c41..f994e25966c 100644
--- a/ext/opentelemetry-ext-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/ext/opentelemetry-ext-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md
similarity index 81%
rename from ext/opentelemetry-ext-django/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md
index 0328ccaa20a..ae682630db6 100644
--- a/ext/opentelemetry-ext-django/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+- Change package name to opentelemetry-instrumentation-django
+ ([#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/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 67%
rename from ext/opentelemetry-ext-django/README.rst
rename to instrumentation/opentelemetry-instrumentation-django/README.rst
index b7a822f1979..5cb570c7e9f 100644
--- a/ext/opentelemetry-ext-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
-------------
@@ -34,5 +34,5 @@ References
----------
* `Django `_
-* `OpenTelemetry Django Tracing `_
+* `OpenTelemetry Instrumentation for Django `_
* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-django/setup.cfg b/instrumentation/opentelemetry-instrumentation-django/setup.cfg
similarity index 88%
rename from ext/opentelemetry-ext-django/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-django/setup.cfg
index 602a2cf7ba3..b2ccaf22b81 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 =
@@ -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
@@ -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 97%
rename from ext/opentelemetry-ext-django/src/opentelemetry/ext/django/__init__.py
rename to instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py
index 3eb3b2dd728..e0992e9a30f 100644
--- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/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/ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py
similarity index 97%
rename from ext/opentelemetry-ext-django/src/opentelemetry/ext/django/middleware.py
rename to instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/middleware.py
index c0cb2447564..2c155b1be14 100644
--- a/ext/opentelemetry-ext-django/src/opentelemetry/ext/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/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 96%
rename from ext/opentelemetry-ext-django/tests/test_middleware.py
rename to instrumentation/opentelemetry-instrumentation-django/tests/test_middleware.py
index e5c3e10d03b..3250ac0c1c3 100644
--- a/ext/opentelemetry-ext-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/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 93%
rename from ext/opentelemetry-instrumentation-fastapi/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg
index b700b3d724a..f4c64744f84 100644
--- a/ext/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 =
@@ -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/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 97%
rename from ext/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py
rename to instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py
index 65d608393d7..57c9a5bfc79 100644
--- a/ext/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/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/version.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
similarity index 100%
rename from ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/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 85%
rename from ext/opentelemetry-ext-flask/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md
index 334084c1494..156cf9db317 100644
--- a/ext/opentelemetry-ext-flask/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md
@@ -2,6 +2,8 @@
## Unreleased
+- Change package name to opentelemetry-instrumentation-flask
+ ([#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/ext/opentelemetry-ext-pyramid/LICENSE b/instrumentation/opentelemetry-instrumentation-flask/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-pyramid/LICENSE
rename to instrumentation/opentelemetry-instrumentation-flask/LICENSE
diff --git a/ext/opentelemetry-ext-pyramid/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-flask/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-pyramid/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 67%
rename from ext/opentelemetry-ext-flask/README.rst
rename to instrumentation/opentelemetry-instrumentation-flask/README.rst
index a75a0cfbaad..f79d8fd6041 100644
--- a/ext/opentelemetry-ext-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
-------------
@@ -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/ext/opentelemetry-ext-flask/setup.cfg b/instrumentation/opentelemetry-instrumentation-flask/setup.cfg
similarity index 88%
rename from ext/opentelemetry-ext-flask/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-flask/setup.cfg
index e4b978645b8..281a11249dc 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 =
@@ -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/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 95%
rename from ext/opentelemetry-ext-flask/src/opentelemetry/ext/flask/__init__.py
rename to instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py
index 464958a7e99..d1936b1cd36 100644
--- a/ext/opentelemetry-ext-flask/src/opentelemetry/ext/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/ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/version.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py
similarity index 100%
rename from ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/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 96%
rename from ext/opentelemetry-ext-flask/tests/test_automatic.py
rename to instrumentation/opentelemetry-instrumentation-flask/tests/test_automatic.py
index b94c7b33d6b..d081bed9ee8 100644
--- a/ext/opentelemetry-ext-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/ext/opentelemetry-ext-flask/tests/test_programmatic.py b/instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py
similarity index 97%
rename from ext/opentelemetry-ext-flask/tests/test_programmatic.py
rename to instrumentation/opentelemetry-instrumentation-flask/tests/test_programmatic.py
index 3a15979cb47..181f4e1e61e 100644
--- a/ext/opentelemetry-ext-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/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 54%
rename from ext/opentelemetry-ext-pyramid/README.rst
rename to instrumentation/opentelemetry-instrumentation-pyramid/README.rst
index 6ec38b83c90..931486773ae 100644
--- a/ext/opentelemetry-ext-pyramid/README.rst
+++ b/instrumentation/opentelemetry-instrumentation-pyramid/README.rst
@@ -1,17 +1,17 @@
-OpenTelemetry Pyramid Integration
-=================================
+OpenTelemetry Pyramid Instrumentation
+=====================================
|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
*************
@@ -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/ext/opentelemetry-ext-pyramid/setup.cfg b/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg
similarity index 85%
rename from ext/opentelemetry-ext-pyramid/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg
index 21a4910ac41..7f23f27ca5a 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 =
@@ -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]
@@ -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-wsgi/setup.py b/instrumentation/opentelemetry-instrumentation-pyramid/setup.py
similarity index 89%
rename from ext/opentelemetry-ext-wsgi/setup.py
rename to instrumentation/opentelemetry-instrumentation-pyramid/setup.py
index 886800eacf9..7141a898132 100644
--- a/ext/opentelemetry-ext-wsgi/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", "ext", "wsgi", "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 85%
rename from ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/__init__.py
rename to instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/__init__.py
index c3db25ee7cb..4125453153b 100644
--- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/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,13 +86,13 @@
from wrapt import ObjectProxy
from wrapt import wrap_function_wrapper as _wrap
-from opentelemetry.ext.pyramid.callbacks import (
+from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.pyramid.callbacks import (
SETTING_TRACE_ENABLED,
TWEEN_NAME,
trace_tween_factory,
)
-from opentelemetry.ext.pyramid.version import __version__
-from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.pyramid.version import __version__
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/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py
similarity index 94%
rename from ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/pyramid/callbacks.py
rename to instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/callbacks.py
index 4d3b81fdabf..fe45c39e2a7 100644
--- a/ext/opentelemetry-ext-pyramid/src/opentelemetry/ext/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/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 97%
rename from ext/opentelemetry-ext-pyramid/tests/test_automatic.py
rename to instrumentation/opentelemetry-instrumentation-pyramid/tests/test_automatic.py
index d19da3c2b36..b065e260648 100644
--- a/ext/opentelemetry-ext-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/ext/opentelemetry-ext-pyramid/tests/test_programmatic.py b/instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py
similarity index 94%
rename from ext/opentelemetry-ext-pyramid/tests/test_programmatic.py
rename to instrumentation/opentelemetry-instrumentation-pyramid/tests/test_programmatic.py
index d086fc37eb9..add4660caab 100644
--- a/ext/opentelemetry-ext-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,9 @@ 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 +172,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/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..dda179d918a 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
+ ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
+
## 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/instrumentation/opentelemetry-instrumentation-requests/README.rst b/instrumentation/opentelemetry-instrumentation-requests/README.rst
new file mode 100644
index 00000000000..d4944d35268
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-requests/README.rst
@@ -0,0 +1,23 @@
+OpenTelemetry Requests Instrumentation
+======================================
+
+|pypi|
+
+.. |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.
+
+Installation
+------------
+
+::
+
+ pip install opentelemetry-instrumentation-requests
+
+References
+----------
+
+* `OpenTelemetry requests Instrumentation `_
+* `OpenTelemetry Project `_
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/ext/opentelemetry-ext-requests/setup.py b/instrumentation/opentelemetry-instrumentation-requests/setup.py
similarity index 88%
rename from ext/opentelemetry-ext-requests/setup.py
rename to instrumentation/opentelemetry-instrumentation-requests/setup.py
index a71a8d44b5e..237fef583b9 100644
--- a/ext/opentelemetry-ext-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", "ext", "requests", "version.py"
+ BASE_DIR,
+ "src",
+ "opentelemetry",
+ "instrumentation",
+ "requests",
+ "version.py",
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
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 97%
rename from ext/opentelemetry-ext-requests/src/opentelemetry/ext/requests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/__init__.py
index a4db0591c8b..a12f05999e1 100644
--- a/ext/opentelemetry-ext-requests/src/opentelemetry/ext/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,8 +51,8 @@
from requests.sessions import Session
from opentelemetry import context, propagators
-from opentelemetry.ext.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/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 97%
rename from ext/opentelemetry-ext-requests/tests/test_requests_integration.py
rename to instrumentation/opentelemetry-instrumentation-requests/tests/test_requests_integration.py
index 75a63f3cf8c..afec0a88d0f 100644
--- a/ext/opentelemetry-ext-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,9 @@ 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/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 93%
rename from ext/opentelemetry-instrumentation-starlette/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-starlette/setup.cfg
index f1613a8cd8f..905f4992e48 100644
--- a/ext/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 =
@@ -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/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 97%
rename from ext/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py
rename to instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/__init__.py
index b8763bba055..f469447f3ac 100644
--- a/ext/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/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..6f1085b8bb4 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
+ ([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
+
## 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 63%
rename from ext/opentelemetry-ext-wsgi/README.rst
rename to instrumentation/opentelemetry-instrumentation-wsgi/README.rst
index 12ee81cb098..ac39dac0c7c 100644
--- a/ext/opentelemetry-ext-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,12 +15,12 @@ Installation
::
- pip install opentelemetry-ext-wsgi
+ pip install opentelemetry-instrumentation-wsgi
References
----------
-* `OpenTelemetry WSGI Middleware `_
+* `OpenTelemetry WSGI Middleware `_
* `OpenTelemetry Project `_
* `WSGI `_
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-pyramid/setup.py b/instrumentation/opentelemetry-instrumentation-wsgi/setup.py
similarity index 91%
rename from ext/opentelemetry-ext-pyramid/setup.py
rename to instrumentation/opentelemetry-instrumentation-wsgi/setup.py
index 175db54ed57..fb4ffa7437b 100644
--- a/ext/opentelemetry-ext-pyramid/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", "pyramid", "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 97%
rename from ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/wsgi/__init__.py
rename to instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py
index 709de24edf2..8a2d0bec085 100644
--- a/ext/opentelemetry-ext-wsgi/src/opentelemetry/ext/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,8 +59,8 @@ def hello():
import wsgiref.util as wsgiref_util
from opentelemetry import context, propagators, trace
-from opentelemetry.ext.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/"
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 99%
rename from ext/opentelemetry-ext-wsgi/tests/test_wsgi_middleware.py
rename to instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py
index 2a2d518513f..5734027b0aa 100644
--- a/ext/opentelemetry-ext-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 22b7b880b40..bd2e3b85735 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..857ceb84fe1 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
@@ -25,16 +25,16 @@
# 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",
+ "flask": "opentelemetry-instrumentation-flask>=0.8b0",
"grpc": "opentelemetry-ext-grpc>=0.8b0",
"jinja2": "opentelemetry-ext-jinja2>=0.8b0",
"mysql": "opentelemetry-ext-mysql>=0.8b0",
@@ -42,27 +42,27 @@
"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",),
+ "flask": ("opentelemetry-instrumentation-flask",),
"grpc": ("opentelemetry-ext-grpc",),
"jinja2": ("opentelemetry-ext-jinja2",),
"mysql": ("opentelemetry-ext-mysql",),
@@ -70,13 +70,13 @@
"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/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 5cf393e7e66..830381225f4 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 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-ext-asgi
+ cov instrumentation/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 a018ec7a896..6dab08f703a 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
@@ -197,19 +197,19 @@ 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-aiopg: ext/opentelemetry-instrumentation-aiopg/tests
- test-instrumentation-asgi: ext/opentelemetry-ext-asgi/tests
+ 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-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-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
- test-instrumentation-flask: ext/opentelemetry-ext-flask/tests
+ test-instrumentation-fastapi: instrumentation/opentelemetry-instrumentation-fastapi/tests
+ 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
@@ -217,14 +217,14 @@ changedir =
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-starlette: instrumentation/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,31 +243,31 @@ 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]
- 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]
dbapi: pip install {toxinidir}/ext/opentelemetry-ext-dbapi[test]
- django: pip install {toxinidir}/ext/opentelemetry-ext-django[test]
+ django: pip install {toxinidir}/instrumentation/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]
@@ -286,21 +286,21 @@ 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]
+ 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}/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]
+ aiopg: pip install {toxinidir}/ext/opentelemetry-ext-dbapi pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg[test]
jaeger: pip install {toxinidir}/exporter/opentelemetry-exporter-jaeger
@@ -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
@@ -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 6e34dfe2e5fdddb1f9a08d2409b56fb3ba96bf47 Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Mon, 3 Aug 2020 17:48:44 -0700
Subject: [PATCH 61/79] Rename db framework packages from "ext" to
"instrumentation" (#966)
---
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/postgres/test_psycopg_functional.py | 2 +-
.../tests/pymongo/test_pymongo_functional.py | 2 +-
.../tests/pymysql/test_pymysql_functional.py | 2 +-
.../tests/redis/test_redis_functional.py | 2 +-
.../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 +-
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 | 5 +-
.../CHANGELOG.md | 3 +
.../README.rst | 23 ++++++
.../setup.cfg | 6 +-
.../setup.py | 7 +-
.../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 | 6 +-
.../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 | 8 +-
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 20 +++++
.../setup.cfg | 10 +--
.../setup.py | 31 ++++++++
.../instrumentation}/psycopg2/__init__.py | 6 +-
.../instrumentation}/psycopg2/version.py | 0
.../tests/__init__.py | 0
.../tests/test_psycopg2_integration.py | 8 +-
.../CHANGELOG.md | 12 +++
.../LICENSE | 0
.../MANIFEST.IN | 0
.../README.rst | 20 +++++
.../setup.cfg | 8 +-
.../setup.py | 7 +-
.../instrumentation}/pymemcache/__init__.py | 4 +-
.../instrumentation}/pymemcache/version.py | 0
.../tests/__init__.py | 0
.../tests/test_pymemcache.py | 2 +-
.../tests/utils.py | 0
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 21 +++++
.../setup.cfg | 8 +-
.../setup.py | 31 ++++++++
.../instrumentation}/pymongo/__init__.py | 4 +-
.../instrumentation}/pymongo/version.py | 0
.../tests/__init__.py | 0
.../tests/test_pymongo.py | 5 +-
.../CHANGELOG.md | 12 +++
.../README.rst | 20 +++++
.../setup.cfg | 10 +--
.../setup.py | 31 ++++++++
.../instrumentation}/pymysql/__init__.py | 6 +-
.../instrumentation}/pymysql/version.py | 0
.../tests/__init__.py | 0
.../tests/test_pymysql_integration.py | 8 +-
.../CHANGELOG.md | 12 +++
.../MANIFEST.in | 0
.../README.rst | 23 ++++++
.../setup.cfg | 8 +-
.../setup.py | 2 +-
.../instrumentation}/redis/__init__.py | 8 +-
.../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 | 31 ++++++++
.../instrumentation}/sqlalchemy/__init__.py | 6 +-
.../instrumentation}/sqlalchemy/engine.py | 2 +-
.../instrumentation}/sqlalchemy/version.py | 0
.../tests/__init__.py | 0
.../tests/test_sqlalchemy.py | 2 +-
.../CHANGELOG.md | 12 +++
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 21 +++++
.../setup.cfg | 10 +--
.../setup.py | 31 ++++++++
.../instrumentation}/sqlite3/__init__.py | 6 +-
.../instrumentation}/sqlite3/version.py | 0
.../tests/__init__.py | 0
.../tests/test_sqlite3.py | 2 +-
.../instrumentation/bootstrap.py | 40 +++++-----
tox.ini | 78 +++++++++----------
154 files changed, 725 insertions(+), 636 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 (89%)
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 (97%)
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 (94%)
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 (94%)
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 (94%)
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 (88%)
rename {ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation}/pymemcache/__init__.py (97%)
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 (99%)
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 (97%)
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 (98%)
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 (93%)
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 (94%)
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 (95%)
rename {ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation}/sqlalchemy/engine.py (98%)
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 (95%)
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 (93%)
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 (97%)
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/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/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-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/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..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.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 89%
rename from ext/opentelemetry-ext-dbapi/setup.py
rename to instrumentation/opentelemetry-instrumentation-asyncpg/setup.py
index f5c1b3fa814..2ad47ac9d98 100644
--- a/ext/opentelemetry-ext-dbapi/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", "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 97%
rename from ext/opentelemetry-ext-dbapi/tests/test_dbapi_integration.py
rename to instrumentation/opentelemetry-instrumentation-dbapi/tests/test_dbapi_integration.py
index a2ba9f7d89d..29915703339 100644
--- a/ext/opentelemetry-ext-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
@@ -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..1cbd240cc59 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,9 +44,9 @@
import mysql.connector
-from opentelemetry.ext import dbapi
-from opentelemetry.ext.mysql.version import __version__
+from opentelemetry.instrumentation import dbapi
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.mysql.version import __version__
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 94%
rename from ext/opentelemetry-ext-mysql/tests/test_mysql_integration.py
rename to instrumentation/opentelemetry-instrumentation-mysql/tests/test_mysql_integration.py
index 6a86ef89279..6c114d969f0 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,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.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..4bd0e16be54
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.py
@@ -0,0 +1,31 @@
+# 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 94%
rename from ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/psycopg2/__init__.py
rename to instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/__init__.py
index ec6c4c82ad5..7782f6fe632 100644
--- a/ext/opentelemetry-ext-psycopg2/src/opentelemetry/ext/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,9 +44,9 @@
import psycopg2
-from opentelemetry.ext import dbapi
-from opentelemetry.ext.psycopg2.version import __version__
+from opentelemetry.instrumentation import dbapi
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.psycopg2.version import __version__
from opentelemetry.trace import get_tracer
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 94%
rename from ext/opentelemetry-ext-psycopg2/tests/test_psycopg2_integration.py
rename to instrumentation/opentelemetry-instrumentation-psycopg2/tests/test_psycopg2_integration.py
index f854787bd9e..629b2f62b65 100644
--- a/ext/opentelemetry-ext-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,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.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/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 88%
rename from ext/opentelemetry-ext-pymemcache/setup.py
rename to instrumentation/opentelemetry-instrumentation-pymemcache/setup.py
index 4b730b4f31e..46bf607933b 100644
--- a/ext/opentelemetry-ext-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", "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 97%
rename from ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/pymemcache/__init__.py
rename to instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/__init__.py
index e63bbe6f131..332e92ccdde 100644
--- a/ext/opentelemetry-ext-pymemcache/src/opentelemetry/ext/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,8 +44,8 @@
from wrapt import ObjectProxy
from wrapt import wrap_function_wrapper as _wrap
-from opentelemetry.ext.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/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 99%
rename from ext/opentelemetry-ext-pymemcache/tests/test_pymemcache.py
rename to instrumentation/opentelemetry-instrumentation-pymemcache/tests/test_pymemcache.py
index aea4ad82f1a..794da9972be 100644
--- a/ext/opentelemetry-ext-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/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..7b862ae2aa8
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-pymongo/setup.py
@@ -0,0 +1,31 @@
+# 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 97%
rename from ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/pymongo/__init__.py
rename to instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/__init__.py
index fa8a599539e..0d5ddc10ee7 100644
--- a/ext/opentelemetry-ext-pymongo/src/opentelemetry/ext/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,8 +43,8 @@
from pymongo import monitoring
from opentelemetry import trace
-from opentelemetry.ext.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/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 98%
rename from ext/opentelemetry-ext-pymongo/tests/test_pymongo.py
rename to instrumentation/opentelemetry-instrumentation-pymongo/tests/test_pymongo.py
index abb4e8ab50a..57f91e131bd 100644
--- a/ext/opentelemetry-ext-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.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/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..74cd948fee8
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-pymysql/setup.py
@@ -0,0 +1,31 @@
+# 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 93%
rename from ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/pymysql/__init__.py
rename to instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/__init__.py
index e44e08e189b..5d299505d69 100644
--- a/ext/opentelemetry-ext-pymysql/src/opentelemetry/ext/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,9 +45,9 @@
import pymysql
-from opentelemetry.ext import dbapi
-from opentelemetry.ext.pymysql.version import __version__
+from opentelemetry.instrumentation import dbapi
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.pymysql.version import __version__
class PyMySQLInstrumentor(BaseInstrumentor):
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 94%
rename from ext/opentelemetry-ext-pymysql/tests/test_pymysql_integration.py
rename to instrumentation/opentelemetry-instrumentation-pymysql/tests/test_pymysql_integration.py
index 60c060f1170..35c9f4d32b6 100644
--- a/ext/opentelemetry-ext-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,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.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-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..fef856041e8 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,12 +49,12 @@
from wrapt import ObjectProxy, wrap_function_wrapper
from opentelemetry import trace
-from opentelemetry.ext.redis.util import (
+from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.redis.util import (
_extract_conn_attributes,
_format_command_args,
)
-from opentelemetry.ext.redis.version import __version__
-from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.redis.version import __version__
from opentelemetry.instrumentation.utils import unwrap
_DEFAULT_SERVICE = "redis"
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..26d3ef4fc92
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.py
@@ -0,0 +1,31 @@
+# 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 95%
rename from ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/__init__.py
rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/__init__.py
index 05d5e625ef2..aad6dbfc07c 100644
--- a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/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,12 +47,12 @@
import wrapt
from wrapt import wrap_function_wrapper as _w
-from opentelemetry.ext.sqlalchemy.engine import (
+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/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py
similarity index 98%
rename from ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/sqlalchemy/engine.py
rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py
index 890bbc7c8d9..df80c4841c3 100644
--- a/ext/opentelemetry-ext-sqlalchemy/src/opentelemetry/ext/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/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 95%
rename from ext/opentelemetry-ext-sqlalchemy/tests/test_sqlalchemy.py
rename to instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py
index 858cc652eff..06593da94fd 100644
--- a/ext/opentelemetry-ext-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/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..67ce350fab5
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.py
@@ -0,0 +1,31 @@
+# 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 93%
rename from ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/sqlite3/__init__.py
rename to instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/__init__.py
index 3cdfd88f758..568e83f0d6a 100644
--- a/ext/opentelemetry-ext-sqlite3/src/opentelemetry/ext/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,9 +44,9 @@
import sqlite3
-from opentelemetry.ext import dbapi
-from opentelemetry.ext.sqlite3.version import __version__
+from opentelemetry.instrumentation import dbapi
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.sqlite3.version import __version__
from opentelemetry.trace import get_tracer
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 97%
rename from ext/opentelemetry-ext-sqlite3/tests/test_sqlite3.py
rename to instrumentation/opentelemetry-instrumentation-sqlite3/tests/test_sqlite3.py
index 7f4793bda3a..a4444e7d937 100644
--- a/ext/opentelemetry-ext-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/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..8528b63f600 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
@@ -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]
@@ -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 3143a4ba16af096584bf1bffbe2d673a87fecc34 Mon Sep 17 00:00:00 2001
From: MitchellDumovic
Date: Mon, 3 Aug 2020 18:53:15 -0700
Subject: [PATCH 62/79] Change default Sampler to ParentOrElse(AlwaysOn) (#960)
---
opentelemetry-sdk/CHANGELOG.md | 1 +
opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py | 2 +-
opentelemetry-sdk/tests/trace/test_trace.py | 1 +
3 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index d4b46202e50..34032424ff9 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -2,6 +2,7 @@
## Unreleased
+- Changed default Sampler to `ParentOrElse(AlwaysOn)`
- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL`
([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
- Implement Views in metrics SDK
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
index 848f571e6a8..b76ba49ad4a 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py
@@ -859,7 +859,7 @@ def use_span(
class TracerProvider(trace_api.TracerProvider):
def __init__(
self,
- sampler: sampling.Sampler = trace_api.sampling.ALWAYS_ON,
+ sampler: sampling.Sampler = trace_api.sampling.DEFAULT_ON,
resource: Resource = Resource.create_empty(),
shutdown_on_exit: bool = True,
active_span_processor: Union[
diff --git a/opentelemetry-sdk/tests/trace/test_trace.py b/opentelemetry-sdk/tests/trace/test_trace.py
index 02cc836e882..56bb9cfa574 100644
--- a/opentelemetry-sdk/tests/trace/test_trace.py
+++ b/opentelemetry-sdk/tests/trace/test_trace.py
@@ -344,6 +344,7 @@ def test_start_as_current_span_explicit(self):
trace_id=0x000000000000000000000000DEADBEEF,
span_id=0x00000000DEADBEF0,
is_remote=False,
+ trace_flags=trace_api.TraceFlags(trace_api.TraceFlags.SAMPLED),
)
self.assertEqual(trace_api.get_current_span(), trace_api.INVALID_SPAN)
From 57ca703c56ac226f42620a26afe9b2f50bb41217 Mon Sep 17 00:00:00 2001
From: Abhilash Gnan
Date: Tue, 4 Aug 2020 18:22:22 +0200
Subject: [PATCH 63/79] Add HTTP user-agent in WSGI instrumentation (#964)
---
.../src/opentelemetry/instrumentation/wsgi/__init__.py | 4 ++++
.../tests/test_wsgi_middleware.py | 8 ++++++++
2 files changed, 12 insertions(+)
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 8a2d0bec085..289016fe529 100644
--- a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/__init__.py
@@ -117,6 +117,10 @@ def collect_request_attributes(environ):
if remote_host and remote_host != remote_addr:
result["net.peer.name"] = remote_host
+ user_agent = environ.get("HTTP_USER_AGENT")
+ if user_agent is not None and len(user_agent) > 0:
+ result["http.user_agent"] = user_agent
+
setifnotnone(result, "net.peer.port", environ.get("REMOTE_PORT"))
flavor = environ.get("SERVER_PROTOCOL", "")
if flavor.upper().startswith(_HTTP_VERSION_PREFIX):
diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py b/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py
index 5734027b0aa..b06d915b532 100644
--- a/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py
+++ b/instrumentation/opentelemetry-instrumentation-wsgi/tests/test_wsgi_middleware.py
@@ -313,6 +313,14 @@ def test_request_attributes_with_full_request_uri(self):
expected.items(),
)
+ def test_http_user_agent_attribute(self):
+ self.environ["HTTP_USER_AGENT"] = "test-useragent"
+ expected = {"http.user_agent": "test-useragent"}
+ self.assertGreaterEqual(
+ otel_wsgi.collect_request_attributes(self.environ).items(),
+ expected.items(),
+ )
+
def test_response_attributes(self):
otel_wsgi.add_response_attributes(self.span, "404 Not Found", {})
expected = (
From eb8b1eaf5f13aace24b1b63e4936d38a8884c77e Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Tue, 4 Aug 2020 19:10:51 -0700
Subject: [PATCH 64/79] Rename remaining framework packages from "ext" to
"instrumentation" (#969)
---
README.md | 17 ++++--
docs/conf.py | 9 +--
.../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/examples/opentracing/README.rst | 8 +--
docs/examples/opentracing/main.py | 2 +-
docs/ext/boto/boto.rst | 7 ---
docs/getting-started.rst | 6 +-
docs/index.rst | 16 ++----
.../boto/boto.rst} | 4 +-
docs/instrumentation/botocore/botocore.rst | 7 +++
.../celery/celery.rst | 2 +-
docs/{ext => instrumentation}/grpc/grpc.rst | 2 +-
.../jinja2/jinja2.rst | 2 +-
.../opentracing_shim/opentracing_shim.rst | 2 +-
.../system_metrics/system_metrics.rst | 2 +-
eachdist.ini | 2 +-
.../exporter/datadog/__init__.py | 2 +-
.../exporter/datadog/exporter.py | 4 +-
.../tests/test_datadog_exporter.py | 4 +-
ext/opentelemetry-ext-jinja2/README.rst | 21 -------
ext/opentelemetry-ext-jinja2/setup.py | 26 ---------
.../CHANGELOG.md | 9 ---
ext/opentelemetry-ext-system-metrics/setup.py | 26 ---------
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +--
.../setup.cfg | 10 ++--
.../setup.py | 2 +-
.../instrumentation}/boto/__init__.py | 6 +-
.../instrumentation}/boto/version.py | 0
.../tests/__init__.py | 0
.../tests/conftest.py | 0
.../tests/test_boto_instrumentation.py | 2 +-
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +--
.../setup.cfg | 8 +--
.../setup.py | 7 ++-
.../instrumentation}/botocore/__init__.py | 4 +-
.../instrumentation}/botocore/version.py | 0
.../tests/__init__.py | 0
.../tests/test_botocore_instrumentation.py | 2 +-
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +--
.../setup.cfg | 6 +-
.../setup.py | 2 +-
.../instrumentation}/celery/__init__.py | 6 +-
.../instrumentation}/celery/utils.py | 0
.../instrumentation}/celery/version.py | 0
.../tests/__init__.py | 0
.../tests/test_utils.py | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 2 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +--
.../setup.cfg | 8 +--
.../setup.py | 7 ++-
.../elasticsearch/__init__.py | 4 +-
.../instrumentation}/elasticsearch/version.py | 0
.../tests/__init__.py | 0
.../tests/helpers_es2.py | 0
.../tests/helpers_es5.py | 0
.../tests/helpers_es6.py | 0
.../tests/helpers_es7.py | 0
.../tests/test_elasticsearch.py | 10 ++--
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 6 +-
.../setup.cfg | 8 +--
.../setup.py | 2 +-
.../instrumentation}/grpc/__init__.py | 13 +++--
.../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 | 24 +++++---
.../tests/test_server_interceptor.py | 17 ++++--
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 21 +++++++
.../setup.cfg | 8 +--
.../setup.py | 2 +-
.../instrumentation}/jinja2/__init__.py | 4 +-
.../instrumentation}/jinja2/version.py | 0
.../tests/__init__.py | 0
.../tests/templates/base.html | 0
.../tests/templates/template.html | 0
.../tests/test_jinja2.py | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 3 +
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 2 +-
.../setup.cfg | 2 +-
.../setup.py | 31 ++++++++++
.../opentracing_shim/__init__.py | 6 +-
.../instrumentation}/opentracing_shim/util.py | 0
.../opentracing_shim/version.py | 0
.../tests/__init__.py | 0
.../tests/test_shim.py | 8 +--
.../tests/test_util.py | 2 +-
.../tests/testbed/README.rst | 0
.../tests/testbed/__init__.py | 0
.../tests/testbed/otel_ot_shim_tracer.py | 2 +-
.../test_active_span_replacement/README.rst | 0
.../test_active_span_replacement/__init__.py | 0
.../test_asyncio.py | 0
.../test_threads.py | 0
.../testbed/test_client_server/README.rst | 0
.../testbed/test_client_server/__init__.py | 0
.../test_client_server/test_asyncio.py | 0
.../test_client_server/test_threads.py | 0
.../test_common_request_handler/README.rst | 0
.../test_common_request_handler/__init__.py | 0
.../request_handler.py | 0
.../test_asyncio.py | 0
.../test_threads.py | 0
.../testbed/test_late_span_finish/README.rst | 0
.../testbed/test_late_span_finish/__init__.py | 0
.../test_late_span_finish/test_asyncio.py | 0
.../test_late_span_finish/test_threads.py | 0
.../test_listener_per_request/README.rst | 0
.../test_listener_per_request/__init__.py | 0
.../response_listener.py | 0
.../test_listener_per_request/test_asyncio.py | 0
.../test_listener_per_request/test_threads.py | 0
.../test_multiple_callbacks/README.rst | 0
.../test_multiple_callbacks/__init__.py | 0
.../test_multiple_callbacks/test_asyncio.py | 0
.../test_multiple_callbacks/test_threads.py | 0
.../testbed/test_nested_callbacks/README.rst | 0
.../testbed/test_nested_callbacks/__init__.py | 0
.../test_nested_callbacks/test_asyncio.py | 0
.../test_nested_callbacks/test_threads.py | 0
.../test_subtask_span_propagation/README.rst | 0
.../test_subtask_span_propagation/__init__.py | 0
.../test_asyncio.py | 0
.../test_threads.py | 0
.../tests/testbed/testcase.py | 0
.../tests/testbed/utils.py | 0
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 2 +-
.../CHANGELOG.md | 12 ++++
.../LICENSE | 0
.../MANIFEST.in | 0
.../README.rst | 8 +--
.../setup.cfg | 4 +-
.../setup.py | 31 ++++++++++
.../system_metrics/__init__.py | 2 +-
.../system_metrics/version.py | 0
.../tests/__init__.py | 0
.../tests/test_system_metrics.py | 2 +-
.../instrumentation/bootstrap.py | 24 ++++----
scripts/coverage.sh | 4 +-
.../tests/asyncpg/test_asyncpg_functional.py | 0
.../tests/celery/conftest.py | 2 +-
.../tests/celery/test_celery_functional.py | 13 +++--
.../tests/check_availability.py | 0
.../tests/docker-compose.yml | 0
.../tests/mysql/test_mysql_functional.py | 0
.../test_opencensusexporter_functional.py | 0
.../tests/postgres/test_aiopg_functional.py | 0
.../tests/postgres/test_psycopg_functional.py | 0
.../tests/pymongo/test_pymongo_functional.py | 0
.../tests/pymysql/test_pymysql_functional.py | 0
.../tests/redis/test_redis_functional.py | 0
.../tests/sqlalchemy_tests}/__init__.py | 0
.../tests/sqlalchemy_tests/mixins.py | 0
.../tests/sqlalchemy_tests/test_instrument.py | 0
.../tests/sqlalchemy_tests/test_mysql.py | 0
.../tests/sqlalchemy_tests/test_postgres.py | 0
.../tests/sqlalchemy_tests/test_sqlite.py | 0
tox.ini | 56 +++++++++----------
197 files changed, 374 insertions(+), 314 deletions(-)
delete mode 100644 docs/ext/boto/boto.rst
rename docs/{ext/botocore/botocore.rst => instrumentation/boto/boto.rst} (51%)
create mode 100644 docs/instrumentation/botocore/botocore.rst
rename docs/{ext => instrumentation}/celery/celery.rst (71%)
rename docs/{ext => instrumentation}/grpc/grpc.rst (75%)
rename docs/{ext => instrumentation}/jinja2/jinja2.rst (71%)
rename docs/{ext => instrumentation}/opentracing_shim/opentracing_shim.rst (60%)
rename docs/{ext => instrumentation}/system_metrics/system_metrics.rst (70%)
delete mode 100644 ext/opentelemetry-ext-jinja2/README.rst
delete mode 100644 ext/opentelemetry-ext-jinja2/setup.py
delete mode 100644 ext/opentelemetry-ext-system-metrics/CHANGELOG.md
delete mode 100644 ext/opentelemetry-ext-system-metrics/setup.py
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/CHANGELOG.md (65%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/LICENSE (100%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/README.rst (53%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/setup.cfg (86%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-boto}/setup.py (92%)
rename {ext/opentelemetry-ext-boto/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation}/boto/__init__.py (96%)
rename {ext/opentelemetry-ext-boto/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation}/boto/version.py (100%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/tests/__init__.py (100%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/tests/conftest.py (100%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-boto}/tests/test_boto_instrumentation.py (99%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/CHANGELOG.md (64%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/LICENSE (100%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/README.rst (52%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/setup.cfg (87%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/setup.py (88%)
rename {ext/opentelemetry-ext-botocore/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation}/botocore/__init__.py (97%)
rename {ext/opentelemetry-ext-botocore/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation}/botocore/version.py (100%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/tests/__init__.py (100%)
rename {ext/opentelemetry-ext-botocore => instrumentation/opentelemetry-instrumentation-botocore}/tests/test_botocore_instrumentation.py (99%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-celery}/CHANGELOG.md (55%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-celery}/LICENSE (100%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-celery}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-celery}/README.rst (70%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-celery}/setup.cfg (90%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-celery}/setup.py (91%)
rename {ext/opentelemetry-ext-celery/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation}/celery/__init__.py (97%)
rename {ext/opentelemetry-ext-celery/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation}/celery/utils.py (100%)
rename {ext/opentelemetry-ext-celery/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation}/celery/version.py (100%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-celery}/tests/__init__.py (100%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-celery}/tests/test_utils.py (99%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/CHANGELOG.md (62%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/LICENSE (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/README.rst (55%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/setup.cfg (86%)
rename {ext/opentelemetry-ext-celery => instrumentation/opentelemetry-instrumentation-elasticsearch}/setup.py (88%)
rename {ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation}/elasticsearch/__init__.py (97%)
rename {ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation}/elasticsearch/version.py (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/tests/__init__.py (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/tests/helpers_es2.py (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/tests/helpers_es5.py (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/tests/helpers_es6.py (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/tests/helpers_es7.py (100%)
rename {ext/opentelemetry-ext-elasticsearch => instrumentation/opentelemetry-instrumentation-elasticsearch}/tests/test_elasticsearch.py (97%)
rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/CHANGELOG.md (83%)
rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/LICENSE (100%)
rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/README.rst (51%)
rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/setup.cfg (87%)
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 (93%)
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-grpc/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation}/grpc/version.py (100%)
rename {ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests => 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 (93%)
rename {ext/opentelemetry-ext-grpc => instrumentation/opentelemetry-instrumentation-grpc}/tests/test_server_interceptor.py (95%)
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/CHANGELOG.md (53%)
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/LICENSE (100%)
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/MANIFEST.in (100%)
create mode 100644 instrumentation/opentelemetry-instrumentation-jinja2/README.rst
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/setup.cfg (87%)
rename {ext/opentelemetry-ext-boto => instrumentation/opentelemetry-instrumentation-jinja2}/setup.py (91%)
rename {ext/opentelemetry-ext-jinja2/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation}/jinja2/__init__.py (96%)
rename {ext/opentelemetry-ext-jinja2/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation}/jinja2/version.py (100%)
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/tests/__init__.py (100%)
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/tests/templates/base.html (100%)
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/tests/templates/template.html (100%)
rename {ext/opentelemetry-ext-jinja2 => instrumentation/opentelemetry-instrumentation-jinja2}/tests/test_jinja2.py (99%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/CHANGELOG.md (63%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/LICENSE (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/README.rst (83%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/setup.cfg (95%)
create mode 100644 instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.py
rename {ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation}/opentracing_shim/__init__.py (99%)
rename {ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation}/opentracing_shim/util.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation}/opentracing_shim/version.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/test_shim.py (98%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/test_util.py (97%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/otel_ot_shim_tracer.py (92%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_active_span_replacement/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_active_span_replacement/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_active_span_replacement/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_active_span_replacement/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_client_server/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_client_server/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_client_server/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_client_server/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_common_request_handler/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_common_request_handler/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_common_request_handler/request_handler.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_common_request_handler/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_common_request_handler/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_late_span_finish/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_late_span_finish/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_late_span_finish/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_late_span_finish/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_listener_per_request/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_listener_per_request/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_listener_per_request/response_listener.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_listener_per_request/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_listener_per_request/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_multiple_callbacks/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_multiple_callbacks/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_multiple_callbacks/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_multiple_callbacks/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_nested_callbacks/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_nested_callbacks/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_nested_callbacks/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_nested_callbacks/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_subtask_span_propagation/README.rst (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_subtask_span_propagation/__init__.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_subtask_span_propagation/test_asyncio.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/test_subtask_span_propagation/test_threads.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/testcase.py (100%)
rename {ext/opentelemetry-ext-opentracing-shim => instrumentation/opentelemetry-instrumentation-opentracing-shim}/tests/testbed/utils.py (100%)
create mode 100644 instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md
rename {ext/opentelemetry-ext-system-metrics => instrumentation/opentelemetry-instrumentation-system-metrics}/LICENSE (100%)
rename {ext/opentelemetry-ext-system-metrics => instrumentation/opentelemetry-instrumentation-system-metrics}/MANIFEST.in (100%)
rename {ext/opentelemetry-ext-system-metrics => instrumentation/opentelemetry-instrumentation-system-metrics}/README.rst (50%)
rename {ext/opentelemetry-ext-system-metrics => instrumentation/opentelemetry-instrumentation-system-metrics}/setup.cfg (92%)
create mode 100644 instrumentation/opentelemetry-instrumentation-system-metrics/setup.py
rename {ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation}/system_metrics/__init__.py (99%)
rename {ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext => instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation}/system_metrics/version.py (100%)
rename {ext/opentelemetry-ext-system-metrics => instrumentation/opentelemetry-instrumentation-system-metrics}/tests/__init__.py (100%)
rename {ext/opentelemetry-ext-system-metrics => instrumentation/opentelemetry-instrumentation-system-metrics}/tests/test_system_metrics.py (99%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/asyncpg/test_asyncpg_functional.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/celery/conftest.py (97%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/celery/test_celery_functional.py (97%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/check_availability.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/docker-compose.yml (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/mysql/test_mysql_functional.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/opencensus/test_opencensusexporter_functional.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/postgres/test_aiopg_functional.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/postgres/test_psycopg_functional.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/pymongo/test_pymongo_functional.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/pymysql/test_pymysql_functional.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/redis/test_redis_functional.py (100%)
rename {ext/opentelemetry-ext-grpc/tests => tests/opentelemetry-docker-tests/tests/sqlalchemy_tests}/__init__.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/sqlalchemy_tests/mixins.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/sqlalchemy_tests/test_instrument.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/sqlalchemy_tests/test_mysql.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/sqlalchemy_tests/test_postgres.py (100%)
rename {ext/opentelemetry-ext-docker-tests => tests/opentelemetry-docker-tests}/tests/sqlalchemy_tests/test_sqlite.py (100%)
diff --git a/README.md b/README.md
index a402e5c73e9..cc6b7f10b66 100644
--- a/README.md
+++ b/README.md
@@ -63,12 +63,19 @@ pip install opentelemetry-sdk
```
The
-[`ext/`](https://github.com/open-telemetry/opentelemetry-python/tree/master/ext)
-directory includes OpenTelemetry integration packages, which can be installed
-separately as:
+[`instrumentation/`](https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation)
+directory includes OpenTelemetry instrumentation packages, which can be installed separately as:
```sh
-pip install opentelemetry-ext-{integration}
+pip install opentelemetry-instrumentation-{instrumentation}
+```
+
+The
+[`exporter/`](https://github.com/open-telemetry/opentelemetry-python/tree/master/exporter)
+directory includes OpenTelemetry exporter packages, which can be installed separately as:
+
+```sh
+pip install opentelemetry-exporter-{exporter}
```
To install the development versions of these packages instead, clone or fork
@@ -78,7 +85,7 @@ install](https://pip.pypa.io/en/stable/reference/pip_install/#editable-installs)
```sh
pip install -e ./opentelemetry-api
pip install -e ./opentelemetry-sdk
-pip install -e ./ext/opentelemetry-ext-{integration}
+pip install -e ./ext/opentelemetry-instrumentation-{instrumentation}
```
## Documentation
diff --git a/docs/conf.py b/docs/conf.py
index db836ea27ef..4b9753c96c4 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -37,13 +37,6 @@
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))
-]
-
instr = "../instrumentation"
instr_dirs = [
os.path.abspath("/".join(["../instrumentation", f, "src"]))
@@ -51,7 +44,7 @@
if isdir(join(instr, f))
]
-sys.path[:0] = source_dirs + exp_dirs + ext_dirs + instr_dirs
+sys.path[:0] = source_dirs + exp_dirs + instr_dirs
# -- Project information -----------------------------------------------------
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/examples/opentracing/README.rst b/docs/examples/opentracing/README.rst
index 06c767b1997..f56bd3e5fcd 100644
--- a/docs/examples/opentracing/README.rst
+++ b/docs/examples/opentracing/README.rst
@@ -1,8 +1,8 @@
OpenTracing Shim Example
==========================
-This example shows how to use the :doc:`opentelemetry-ext-opentracing-shim
-package <../../ext/opentracing_shim/opentracing_shim>`
+This example shows how to use the :doc:`opentelemetry-instrumentation-opentracing-shim
+package <../../instrumentation/opentracing_shim/opentracing_shim>`
to interact with libraries instrumented with
`opentracing-python `_.
@@ -61,7 +61,7 @@ Alternatively, you can install the Python dependencies separately:
pip install \
opentelemetry-api \
opentelemetry-sdk \
- opentelemetry-ext-jaeger \
+ opentelemetry-exporter-jaeger \
opentelemetry-opentracing-shim \
redis \
redis_opentracing
@@ -100,6 +100,6 @@ Useful links
------------
- OpenTelemetry_
-- :doc:`../../ext/opentracing_shim/opentracing_shim`
+- :doc:`../../instrumentation/opentracing_shim/opentracing_shim`
.. _OpenTelemetry: https://github.com/open-telemetry/opentelemetry-python/
diff --git a/docs/examples/opentracing/main.py b/docs/examples/opentracing/main.py
index 9ecbbba8ca4..0653ca82ece 100755
--- a/docs/examples/opentracing/main.py
+++ b/docs/examples/opentracing/main.py
@@ -2,7 +2,7 @@
from opentelemetry import trace
from opentelemetry.exporter.jaeger import JaegerSpanExporter
-from opentelemetry.ext import opentracing_shim
+from opentelemetry.instrumentation import opentracing_shim
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
from rediscache import RedisCache
diff --git a/docs/ext/boto/boto.rst b/docs/ext/boto/boto.rst
deleted file mode 100644
index 8bf40c75665..00000000000
--- a/docs/ext/boto/boto.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-OpenTelemetry Boto Integration
-==============================
-
-.. automodule:: opentelemetry.ext.boto
- :members:
- :undoc-members:
- :show-inheritance:
diff --git a/docs/getting-started.rst b/docs/getting-started.rst
index 11e3a08fecf..e9dd831e908 100644
--- a/docs/getting-started.rst
+++ b/docs/getting-started.rst
@@ -122,7 +122,7 @@ for Jaeger, but you can install that as a separate package:
.. code-block:: sh
- pip install opentelemetry-ext-jaeger
+ pip install opentelemetry-exporter-jaeger
Once installed, update your code to import the Jaeger exporter, and use that instead:
@@ -228,7 +228,7 @@ For our Python application, we will need to install an exporter specific to Prom
.. code-block:: sh
- pip install opentelemetry-ext-prometheus
+ pip install opentelemetry-exporter-prometheus
And use that instead of the `ConsoleMetricsExporter`:
@@ -289,7 +289,7 @@ Install the OpenTelemetry Collector exporter:
.. code-block:: sh
- pip install opentelemetry-ext-otcollector
+ pip install opentelemetry-instrumentation-otcollector
And execute the following script:
diff --git a/docs/index.rst b/docs/index.rst
index 3378daac070..a127bf4c42d 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -26,9 +26,11 @@ The API and SDK packages are available on PyPI, and can installed via pip:
In addition, there are several extension packages which can be installed separately as::
- pip install opentelemetry-ext-{integration}
+ pip install opentelemetry-exporter-{exporter}
+ pip install opentelemetry-instrumentation-{instrumentation}
-The extension packages can be found in :scm_web:`ext/ directory of the repository `.
+These are for exporter and instrumentation packages respectively.
+The packages can be found in :scm_web:`instrumentation/ directory of the repository `.
Extensions
----------
@@ -51,7 +53,7 @@ install
cd opentelemetry-python
pip install -e ./opentelemetry-api
pip install -e ./opentelemetry-sdk
- pip install -e ./ext/opentelemetry-ext-{integration}
+ pip install -e ./instrumentation/opentelemetry-instrumentation-{instrumentation}
.. toctree::
@@ -86,14 +88,6 @@ install
instrumentation/**
-.. toctree::
- :maxdepth: 2
- :caption: OpenTelemetry Integrations
- :name: integrations
- :glob:
-
- ext/**
-
.. toctree::
:maxdepth: 1
:caption: Examples
diff --git a/docs/ext/botocore/botocore.rst b/docs/instrumentation/boto/boto.rst
similarity index 51%
rename from docs/ext/botocore/botocore.rst
rename to docs/instrumentation/boto/boto.rst
index 43f702a9046..c438c2466ca 100644
--- a/docs/ext/botocore/botocore.rst
+++ b/docs/instrumentation/boto/boto.rst
@@ -1,7 +1,7 @@
-OpenTelemetry Botocore Integration
+OpenTelemetry Boto Instrumentation
==================================
-.. automodule:: opentelemetry.ext.botocore
+.. automodule:: opentelemetry.instrumentation.boto
:members:
:undoc-members:
:show-inheritance:
diff --git a/docs/instrumentation/botocore/botocore.rst b/docs/instrumentation/botocore/botocore.rst
new file mode 100644
index 00000000000..eb8ea6bcf76
--- /dev/null
+++ b/docs/instrumentation/botocore/botocore.rst
@@ -0,0 +1,7 @@
+OpenTelemetry Botocore Instrumentation
+======================================
+
+.. automodule:: opentelemetry.instrumentation.botocore
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/docs/ext/celery/celery.rst b/docs/instrumentation/celery/celery.rst
similarity index 71%
rename from docs/ext/celery/celery.rst
rename to docs/instrumentation/celery/celery.rst
index 125233e006f..c85f3adb59b 100644
--- a/docs/ext/celery/celery.rst
+++ b/docs/instrumentation/celery/celery.rst
@@ -1,7 +1,7 @@
OpenTelemetry Celery Instrumentation
====================================
-.. automodule:: opentelemetry.ext.celery
+.. automodule:: opentelemetry.instrumentation.celery
:members:
:undoc-members:
:show-inheritance:
diff --git a/docs/ext/grpc/grpc.rst b/docs/instrumentation/grpc/grpc.rst
similarity index 75%
rename from docs/ext/grpc/grpc.rst
rename to docs/instrumentation/grpc/grpc.rst
index 351d3bfb0d5..243f6961439 100644
--- a/docs/ext/grpc/grpc.rst
+++ b/docs/instrumentation/grpc/grpc.rst
@@ -4,7 +4,7 @@ OpenTelemetry gRPC Instrumentation
Module contents
---------------
-.. automodule:: opentelemetry.ext.grpc
+.. automodule:: opentelemetry.instrumentation.grpc
:members:
:undoc-members:
:show-inheritance:
diff --git a/docs/ext/jinja2/jinja2.rst b/docs/instrumentation/jinja2/jinja2.rst
similarity index 71%
rename from docs/ext/jinja2/jinja2.rst
rename to docs/instrumentation/jinja2/jinja2.rst
index d9b461627d5..5c7143724c4 100644
--- a/docs/ext/jinja2/jinja2.rst
+++ b/docs/instrumentation/jinja2/jinja2.rst
@@ -1,7 +1,7 @@
OpenTelemetry Jinja2 Instrumentation
====================================
-.. automodule:: opentelemetry.ext.jinja2
+.. automodule:: opentelemetry.instrumentation.jinja2
:members:
:undoc-members:
:show-inheritance:
diff --git a/docs/ext/opentracing_shim/opentracing_shim.rst b/docs/instrumentation/opentracing_shim/opentracing_shim.rst
similarity index 60%
rename from docs/ext/opentracing_shim/opentracing_shim.rst
rename to docs/instrumentation/opentracing_shim/opentracing_shim.rst
index f27974b9c07..fad4e04bbec 100644
--- a/docs/ext/opentracing_shim/opentracing_shim.rst
+++ b/docs/instrumentation/opentracing_shim/opentracing_shim.rst
@@ -1,5 +1,5 @@
OpenTracing Shim for OpenTelemetry
==================================
-.. automodule:: opentelemetry.ext.opentracing_shim
+.. automodule:: opentelemetry.instrumentation.opentracing_shim
:no-show-inheritance:
diff --git a/docs/ext/system_metrics/system_metrics.rst b/docs/instrumentation/system_metrics/system_metrics.rst
similarity index 70%
rename from docs/ext/system_metrics/system_metrics.rst
rename to docs/instrumentation/system_metrics/system_metrics.rst
index db6f9da70f4..96b39d9267e 100644
--- a/docs/ext/system_metrics/system_metrics.rst
+++ b/docs/instrumentation/system_metrics/system_metrics.rst
@@ -1,7 +1,7 @@
OpenTelemetry System Metrics Instrumentation
============================================
-.. automodule:: opentelemetry.ext.system_metrics
+.. automodule:: opentelemetry.instrumentation.system_metrics
:members:
:undoc-members:
:show-inheritance:
diff --git a/eachdist.ini b/eachdist.ini
index abf9e620aab..076c8a4a4af 100644
--- a/eachdist.ini
+++ b/eachdist.ini
@@ -10,7 +10,7 @@ sortfirst=
instrumentation/opentelemetry-instrumentation-wsgi
instrumentation/opentelemetry-instrumentation-dbapi
instrumentation/opentelemetry-instrumentation-asgi
- ext/opentelemetry-ext-botocore
+ instrumentation/opentelemetry-instrumentation-botocore
instrumentation/*
exporter/*
ext/*
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 7adde5df500..5a73c55d69f 100644
--- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py
+++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/__init__.py
@@ -21,7 +21,7 @@
::
- pip install opentelemetry-ext-datadog
+ pip install opentelemetry-exporter-datadog
Usage
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 7c94e173f74..49dab7c6866 100644
--- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py
+++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/exporter.py
@@ -37,8 +37,8 @@
"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.instrumentation.grpc": DatadogSpanTypes.GRPC,
+ "opentelemetry.instrumentation.jinja2": DatadogSpanTypes.TEMPLATE,
"opentelemetry.instrumentation.mysql": DatadogSpanTypes.SQL,
"opentelemetry.instrumentation.psycopg2": DatadogSpanTypes.SQL,
"opentelemetry.instrumentation.pymemcache": DatadogSpanTypes.CACHE,
diff --git a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py
index 4b7d2391bc0..45ce9417e1a 100644
--- a/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py
+++ b/exporter/opentelemetry-exporter-datadog/tests/test_datadog_exporter.py
@@ -294,8 +294,8 @@ def test_span_types(self):
"opentelemetry.instrumentation.dbapi",
"opentelemetry.instrumentation.django",
"opentelemetry.instrumentation.flask",
- "opentelemetry.ext.grpc",
- "opentelemetry.ext.jinja2",
+ "opentelemetry.instrumentation.grpc",
+ "opentelemetry.instrumentation.jinja2",
"opentelemetry.instrumentation.mysql",
"opentelemetry.instrumentation.psycopg2",
"opentelemetry.instrumentation.pymongo",
diff --git a/ext/opentelemetry-ext-jinja2/README.rst b/ext/opentelemetry-ext-jinja2/README.rst
deleted file mode 100644
index 09e74e21d35..00000000000
--- a/ext/opentelemetry-ext-jinja2/README.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-OpenTelemetry jinja2 integration
-================================
-
-|pypi|
-
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-jinja2.svg
- :target: https://pypi.org/project/opentelemetry-ext-jinja2/
-
-Installation
-------------
-
-::
-
- pip install opentelemetry-ext-jinja2
-
-
-References
-----------
-
-* `OpenTelemetry jinja2 integration `_
-* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-jinja2/setup.py b/ext/opentelemetry-ext-jinja2/setup.py
deleted file mode 100644
index 323c1b33530..00000000000
--- a/ext/opentelemetry-ext-jinja2/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", "jinja2", "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-system-metrics/CHANGELOG.md b/ext/opentelemetry-ext-system-metrics/CHANGELOG.md
deleted file mode 100644
index 12d51bb800c..00000000000
--- a/ext/opentelemetry-ext-system-metrics/CHANGELOG.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Changelog
-
-## Unreleased
-
-## 0.9b0
-
-Released 2020-06-10
-
-- Initial release (https://github.com/open-telemetry/opentelemetry-python/pull/652)
diff --git a/ext/opentelemetry-ext-system-metrics/setup.py b/ext/opentelemetry-ext-system-metrics/setup.py
deleted file mode 100644
index 370399094dd..00000000000
--- a/ext/opentelemetry-ext-system-metrics/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", "system_metrics", "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-asyncpg/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md
index 08464e8cd9f..530bc71da75 100644
--- a/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-asyncpg
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## Version 0.11b0
diff --git a/ext/opentelemetry-ext-boto/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-boto/CHANGELOG.md
similarity index 65%
rename from ext/opentelemetry-ext-boto/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-boto/CHANGELOG.md
index ec62b405955..a1c2e9465f1 100644
--- a/ext/opentelemetry-ext-boto/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-boto/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Change package name to opentelemetry-instrumentation-boto
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
+
## Version 0.11b0
Released 2020-07-28
diff --git a/ext/opentelemetry-ext-boto/LICENSE b/instrumentation/opentelemetry-instrumentation-boto/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-boto/LICENSE
rename to instrumentation/opentelemetry-instrumentation-boto/LICENSE
diff --git a/ext/opentelemetry-ext-boto/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-boto/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-boto/MANIFEST.in
rename to instrumentation/opentelemetry-instrumentation-boto/MANIFEST.in
diff --git a/ext/opentelemetry-ext-boto/README.rst b/instrumentation/opentelemetry-instrumentation-boto/README.rst
similarity index 53%
rename from ext/opentelemetry-ext-boto/README.rst
rename to instrumentation/opentelemetry-instrumentation-boto/README.rst
index e149ec424e0..2b40321c006 100644
--- a/ext/opentelemetry-ext-boto/README.rst
+++ b/instrumentation/opentelemetry-instrumentation-boto/README.rst
@@ -3,8 +3,8 @@ OpenTelemetry Boto Tracing
|pypi|
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-boto.svg
- :target: https://pypi.org/project/opentelemetry-ext-boto/
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-boto.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-boto/
This library allows tracing requests made by the Boto library.
@@ -13,11 +13,11 @@ Installation
::
- pip install opentelemetry-ext-boto
+ pip install opentelemetry-instrumentation-boto
References
----------
-* `OpenTelemetry Boto Tracing `_
+* `OpenTelemetry Boto Tracing `_
* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-boto/setup.cfg b/instrumentation/opentelemetry-instrumentation-boto/setup.cfg
similarity index 86%
rename from ext/opentelemetry-ext-boto/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-boto/setup.cfg
index 1c38775509c..ee47a919cdc 100644
--- a/ext/opentelemetry-ext-boto/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-boto/setup.cfg
@@ -13,13 +13,13 @@
# limitations under the License.
#
[metadata]
-name = opentelemetry-ext-boto
-description = Boto tracing for OpenTelemetry
+name = opentelemetry-instrumentation-boto
+description = OpenTelemetry Boto 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-boto
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-boto
platforms = any
license = Apache-2.0
classifiers =
@@ -43,7 +43,7 @@ install_requires =
boto ~= 2.0
opentelemetry-api == 0.12.dev0
opentelemetry-instrumentation == 0.12.dev0
- opentelemetry-ext-botocore == 0.12.dev0
+ opentelemetry-instrumentation-botocore == 0.12.dev0
[options.extras_require]
test =
@@ -56,4 +56,4 @@ where = src
[options.entry_points]
opentelemetry_instrumentor =
- django = opentelemetry.ext.boto:BotoInstrumentor
+ django = opentelemetry.instrumentation.boto:BotoInstrumentor
diff --git a/ext/opentelemetry-ext-opentracing-shim/setup.py b/instrumentation/opentelemetry-instrumentation-boto/setup.py
similarity index 92%
rename from ext/opentelemetry-ext-opentracing-shim/setup.py
rename to instrumentation/opentelemetry-instrumentation-boto/setup.py
index 5924121c431..2bd68894f33 100644
--- a/ext/opentelemetry-ext-opentracing-shim/setup.py
+++ b/instrumentation/opentelemetry-instrumentation-boto/setup.py
@@ -17,7 +17,7 @@
BASE_DIR = os.path.dirname(__file__)
VERSION_FILENAME = os.path.join(
- BASE_DIR, "src", "opentelemetry", "ext", "opentracing_shim", "version.py"
+ BASE_DIR, "src", "opentelemetry", "instrumentation", "boto", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py
similarity index 96%
rename from ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
rename to instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py
index f1f04723afa..e6a0e351e5c 100644
--- a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/__init__.py
@@ -27,7 +27,7 @@
.. code:: python
from opentelemetry import trace
- from opentelemetry.ext.boto import BotoInstrumentor
+ from opentelemetry.instrumentation.boto import BotoInstrumentor
from opentelemetry.sdk.trace import TracerProvider
import boto
@@ -50,8 +50,8 @@
from boto.connection import AWSAuthConnection, AWSQueryConnection
from wrapt import wrap_function_wrapper
-from opentelemetry.ext.boto.version import __version__
-from opentelemetry.ext.botocore import add_span_arg_tags, unwrap
+from opentelemetry.instrumentation.boto.version import __version__
+from opentelemetry.instrumentation.botocore import add_span_arg_tags, unwrap
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.sdk.trace import Resource
from opentelemetry.trace import SpanKind, get_tracer
diff --git a/ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py
similarity index 100%
rename from ext/opentelemetry-ext-boto/src/opentelemetry/ext/boto/version.py
rename to instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py
diff --git a/ext/opentelemetry-ext-boto/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-boto/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-boto/tests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-boto/tests/__init__.py
diff --git a/ext/opentelemetry-ext-boto/tests/conftest.py b/instrumentation/opentelemetry-instrumentation-boto/tests/conftest.py
similarity index 100%
rename from ext/opentelemetry-ext-boto/tests/conftest.py
rename to instrumentation/opentelemetry-instrumentation-boto/tests/conftest.py
diff --git a/ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py b/instrumentation/opentelemetry-instrumentation-boto/tests/test_boto_instrumentation.py
similarity index 99%
rename from ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py
rename to instrumentation/opentelemetry-instrumentation-boto/tests/test_boto_instrumentation.py
index 7cfbf018c6b..7ed87755018 100644
--- a/ext/opentelemetry-ext-boto/tests/test_boto_instrumentation.py
+++ b/instrumentation/opentelemetry-instrumentation-boto/tests/test_boto_instrumentation.py
@@ -26,7 +26,7 @@
mock_sts_deprecated,
)
-from opentelemetry.ext.boto import BotoInstrumentor
+from opentelemetry.instrumentation.boto import BotoInstrumentor
from opentelemetry.sdk.resources import Resource
from opentelemetry.test.test_base import TestBase
diff --git a/ext/opentelemetry-ext-botocore/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-botocore/CHANGELOG.md
similarity index 64%
rename from ext/opentelemetry-ext-botocore/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-botocore/CHANGELOG.md
index ac8d9c4a514..e89b3fddd2f 100644
--- a/ext/opentelemetry-ext-botocore/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-botocore/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Change package name to opentelemetry-instrumentation-botocore
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
+
## Version 0.11b0
Released 2020-07-28
diff --git a/ext/opentelemetry-ext-botocore/LICENSE b/instrumentation/opentelemetry-instrumentation-botocore/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-botocore/LICENSE
rename to instrumentation/opentelemetry-instrumentation-botocore/LICENSE
diff --git a/ext/opentelemetry-ext-botocore/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-botocore/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-botocore/MANIFEST.in
rename to instrumentation/opentelemetry-instrumentation-botocore/MANIFEST.in
diff --git a/ext/opentelemetry-ext-botocore/README.rst b/instrumentation/opentelemetry-instrumentation-botocore/README.rst
similarity index 52%
rename from ext/opentelemetry-ext-botocore/README.rst
rename to instrumentation/opentelemetry-instrumentation-botocore/README.rst
index 0b50819d328..4f5eb9d9aff 100644
--- a/ext/opentelemetry-ext-botocore/README.rst
+++ b/instrumentation/opentelemetry-instrumentation-botocore/README.rst
@@ -3,8 +3,8 @@ OpenTelemetry Botocore Tracing
|pypi|
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-botocore.svg
- :target: https://pypi.org/project/opentelemetry-ext-botocore/
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-botocore.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-botocore/
This library allows tracing requests made by the Botocore library.
@@ -13,11 +13,11 @@ Installation
::
- pip install opentelemetry-ext-botocore
+ pip install opentelemetry-instrumentation-botocore
References
----------
-* `OpenTelemetry Botocore Tracing `_
+* `OpenTelemetry Botocore Tracing `_
* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-botocore/setup.cfg b/instrumentation/opentelemetry-instrumentation-botocore/setup.cfg
similarity index 87%
rename from ext/opentelemetry-ext-botocore/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-botocore/setup.cfg
index 0d8b9e4ad4a..86f3e8d0a41 100644
--- a/ext/opentelemetry-ext-botocore/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-botocore/setup.cfg
@@ -13,13 +13,13 @@
# limitations under the License.
#
[metadata]
-name = opentelemetry-ext-botocore
-description = Botocore tracing for OpenTelemetry
+name = opentelemetry-instrumentation-botocore
+description = OpenTelemetry Botocore 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-botocore
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-botocore
platforms = any
license = Apache-2.0
classifiers =
@@ -54,4 +54,4 @@ where = src
[options.entry_points]
opentelemetry_instrumentor =
- django = opentelemetry.ext.botocore:BotoCoreInstrumentor
+ django = opentelemetry.instrumentation.botocore:BotoCoreInstrumentor
diff --git a/ext/opentelemetry-ext-botocore/setup.py b/instrumentation/opentelemetry-instrumentation-botocore/setup.py
similarity index 88%
rename from ext/opentelemetry-ext-botocore/setup.py
rename to instrumentation/opentelemetry-instrumentation-botocore/setup.py
index 35b47b1b00b..fd5045efaa6 100644
--- a/ext/opentelemetry-ext-botocore/setup.py
+++ b/instrumentation/opentelemetry-instrumentation-botocore/setup.py
@@ -17,7 +17,12 @@
BASE_DIR = os.path.dirname(__file__)
VERSION_FILENAME = os.path.join(
- BASE_DIR, "src", "opentelemetry", "ext", "botocore", "version.py"
+ BASE_DIR,
+ "src",
+ "opentelemetry",
+ "instrumentation",
+ "botocore",
+ "version.py",
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py
similarity index 97%
rename from ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
rename to instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py
index 70e790d9bf6..9b9b1e9a806 100644
--- a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py
@@ -28,7 +28,7 @@
.. code:: python
from opentelemetry import trace
- from opentelemetry.ext.botocore import BotocoreInstrumentor
+ from opentelemetry.instrumentation.botocore import BotocoreInstrumentor
from opentelemetry.sdk.trace import TracerProvider
import botocore
@@ -56,7 +56,7 @@
from botocore.client import BaseClient
from wrapt import ObjectProxy, wrap_function_wrapper
-from opentelemetry.ext.botocore.version import __version__
+from opentelemetry.instrumentation.botocore.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.sdk.trace import Resource
from opentelemetry.trace import SpanKind, get_tracer
diff --git a/ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py
similarity index 100%
rename from ext/opentelemetry-ext-botocore/src/opentelemetry/ext/botocore/version.py
rename to instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py
diff --git a/ext/opentelemetry-ext-botocore/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-botocore/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-botocore/tests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-botocore/tests/__init__.py
diff --git a/ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_instrumentation.py
similarity index 99%
rename from ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py
rename to instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_instrumentation.py
index e0b687ad8b6..47073478fce 100644
--- a/ext/opentelemetry-ext-botocore/tests/test_botocore_instrumentation.py
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_instrumentation.py
@@ -9,7 +9,7 @@
mock_sqs,
)
-from opentelemetry.ext.botocore import BotocoreInstrumentor
+from opentelemetry.instrumentation.botocore import BotocoreInstrumentor
from opentelemetry.sdk.resources import Resource
from opentelemetry.test.test_base import TestBase
diff --git a/ext/opentelemetry-ext-celery/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-celery/CHANGELOG.md
similarity index 55%
rename from ext/opentelemetry-ext-celery/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-celery/CHANGELOG.md
index 54990c1955c..0de1991b968 100644
--- a/ext/opentelemetry-ext-celery/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-celery/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Change package name to opentelemetry-instrumentation-celery
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
+
## Version 0.10b0
Released 2020-06-23
diff --git a/ext/opentelemetry-ext-celery/LICENSE b/instrumentation/opentelemetry-instrumentation-celery/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-celery/LICENSE
rename to instrumentation/opentelemetry-instrumentation-celery/LICENSE
diff --git a/ext/opentelemetry-ext-celery/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-celery/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-celery/MANIFEST.in
rename to instrumentation/opentelemetry-instrumentation-celery/MANIFEST.in
diff --git a/ext/opentelemetry-ext-celery/README.rst b/instrumentation/opentelemetry-instrumentation-celery/README.rst
similarity index 70%
rename from ext/opentelemetry-ext-celery/README.rst
rename to instrumentation/opentelemetry-instrumentation-celery/README.rst
index feabf6809fc..42fe6646d1c 100644
--- a/ext/opentelemetry-ext-celery/README.rst
+++ b/instrumentation/opentelemetry-instrumentation-celery/README.rst
@@ -3,8 +3,8 @@ OpenTelemetry Celery Instrumentation
|pypi|
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-celery.svg
- :target: https://pypi.org/project/opentelemetry-ext-celery/
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-celery.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-celery/
Instrumentation for Celery.
@@ -14,7 +14,7 @@ Installation
::
- pip install opentelemetry-ext-celery
+ pip install opentelemetry-instrumentation-celery
Usage
-----
@@ -29,7 +29,7 @@ Usage
.. code-block:: python
- from opentelemetry.ext.celery import CeleryInstrumentor
+ from opentelemetry.instrumentation.celery import CeleryInstrumentor
CeleryInstrumentor().instrument()
diff --git a/ext/opentelemetry-ext-celery/setup.cfg b/instrumentation/opentelemetry-instrumentation-celery/setup.cfg
similarity index 90%
rename from ext/opentelemetry-ext-celery/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-celery/setup.cfg
index 39e019e83a9..4198f15569c 100644
--- a/ext/opentelemetry-ext-celery/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-celery/setup.cfg
@@ -13,13 +13,13 @@
# limitations under the License.
#
[metadata]
-name = opentelemetry-ext-celery
+name = opentelemetry-instrumentation-celery
description = OpenTelemetry Celery 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-celery
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-celery
platforms = any
license = Apache-2.0
classifiers =
@@ -53,4 +53,4 @@ where = src
[options.entry_points]
opentelemetry_instrumentor =
- celery = opentelemetry.ext.celery:CeleryInstrumentor
+ celery = opentelemetry.instrumentation.celery:CeleryInstrumentor
diff --git a/ext/opentelemetry-ext-elasticsearch/setup.py b/instrumentation/opentelemetry-instrumentation-celery/setup.py
similarity index 91%
rename from ext/opentelemetry-ext-elasticsearch/setup.py
rename to instrumentation/opentelemetry-instrumentation-celery/setup.py
index af750c941f4..ca679306607 100644
--- a/ext/opentelemetry-ext-elasticsearch/setup.py
+++ b/instrumentation/opentelemetry-instrumentation-celery/setup.py
@@ -17,7 +17,7 @@
BASE_DIR = os.path.dirname(__file__)
VERSION_FILENAME = os.path.join(
- BASE_DIR, "src", "opentelemetry", "ext", "elasticsearch", "version.py"
+ BASE_DIR, "src", "opentelemetry", "instrumentation", "celery", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/__init__.py b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py
similarity index 97%
rename from ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/__init__.py
rename to instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py
index 9ce31f34f65..7e2551142e4 100644
--- a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/__init__.py
@@ -30,7 +30,7 @@
.. code:: python
- from opentelemetry.ext.celery import CeleryInstrumentor
+ from opentelemetry.instrumentation.celery import CeleryInstrumentor
CeleryInstrumentor().instrument()
@@ -54,8 +54,8 @@ def add(x, y):
from celery import signals # pylint: disable=no-name-in-module
from opentelemetry import trace
-from opentelemetry.ext.celery import utils
-from opentelemetry.ext.celery.version import __version__
+from opentelemetry.instrumentation.celery import utils
+from opentelemetry.instrumentation.celery.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.trace.status import Status, StatusCanonicalCode
diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/utils.py b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/utils.py
similarity index 100%
rename from ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/utils.py
rename to instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/utils.py
diff --git a/ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py
similarity index 100%
rename from ext/opentelemetry-ext-celery/src/opentelemetry/ext/celery/version.py
rename to instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py
diff --git a/ext/opentelemetry-ext-celery/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-celery/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-celery/tests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-celery/tests/__init__.py
diff --git a/ext/opentelemetry-ext-celery/tests/test_utils.py b/instrumentation/opentelemetry-instrumentation-celery/tests/test_utils.py
similarity index 99%
rename from ext/opentelemetry-ext-celery/tests/test_utils.py
rename to instrumentation/opentelemetry-instrumentation-celery/tests/test_utils.py
index b5e8163def9..0842890e89e 100644
--- a/ext/opentelemetry-ext-celery/tests/test_utils.py
+++ b/instrumentation/opentelemetry-instrumentation-celery/tests/test_utils.py
@@ -18,7 +18,7 @@
from celery import Celery
from opentelemetry import trace as trace_api
-from opentelemetry.ext.celery import utils
+from opentelemetry.instrumentation.celery import utils
from opentelemetry.sdk import trace
diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md
index c0a38d855f0..555b227db39 100644
--- a/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-dbapi
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## 0.7b1
diff --git a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-elasticsearch/CHANGELOG.md
similarity index 62%
rename from ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/CHANGELOG.md
index ede33c6646e..5579a36a625 100644
--- a/ext/opentelemetry-ext-elasticsearch/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/CHANGELOG.md
@@ -3,6 +3,8 @@
## Unreleased
- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
+- Change package name to opentelemetry-instrumentation-elasticsearch
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
## Version 0.10b0
diff --git a/ext/opentelemetry-ext-elasticsearch/LICENSE b/instrumentation/opentelemetry-instrumentation-elasticsearch/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/LICENSE
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/LICENSE
diff --git a/ext/opentelemetry-ext-elasticsearch/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-elasticsearch/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/MANIFEST.in
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/MANIFEST.in
diff --git a/ext/opentelemetry-ext-elasticsearch/README.rst b/instrumentation/opentelemetry-instrumentation-elasticsearch/README.rst
similarity index 55%
rename from ext/opentelemetry-ext-elasticsearch/README.rst
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/README.rst
index 88e9bb41af3..9f898e78358 100644
--- a/ext/opentelemetry-ext-elasticsearch/README.rst
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/README.rst
@@ -3,8 +3,8 @@ OpenTelemetry elasticsearch Integration
|pypi|
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-elasticsearch.svg
- :target: https://pypi.org/project/opentelemetry-ext-elasticsearch/
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-elasticsearch.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-elasticsearch/
This library allows tracing elasticsearch made by the
`elasticsearch `_ library.
@@ -14,10 +14,10 @@ Installation
::
- pip install opentelemetry-ext-elasticsearch
+ pip install opentelemetry-instrumentation-elasticsearch
References
----------
-* `OpenTelemetry elasticsearch Integration `_
+* `OpenTelemetry elasticsearch Integration `_
* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-elasticsearch/setup.cfg b/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.cfg
similarity index 86%
rename from ext/opentelemetry-ext-elasticsearch/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/setup.cfg
index 877f62872c5..fc5f862a2c2 100644
--- a/ext/opentelemetry-ext-elasticsearch/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.cfg
@@ -13,13 +13,13 @@
# limitations under the License.
#
[metadata]
-name = opentelemetry-ext-elasticsearch
-description = OpenTelemetry elasticsearch integration
+name = opentelemetry-instrumentation-elasticsearch
+description = OpenTelemetry elasticsearch 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-elasticsearch
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-elasticsearch
platforms = any
license = Apache-2.0
classifiers =
@@ -55,4 +55,4 @@ where = src
[options.entry_points]
opentelemetry_instrumentor =
- elasticsearch = opentelemetry.ext.elasticsearch:ElasticsearchInstrumentor
+ elasticsearch = opentelemetry.instrumentation.elasticsearch:ElasticsearchInstrumentor
diff --git a/ext/opentelemetry-ext-celery/setup.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.py
similarity index 88%
rename from ext/opentelemetry-ext-celery/setup.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/setup.py
index 40d1d7aaba9..cd7a7f10129 100644
--- a/ext/opentelemetry-ext-celery/setup.py
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.py
@@ -17,7 +17,12 @@
BASE_DIR = os.path.dirname(__file__)
VERSION_FILENAME = os.path.join(
- BASE_DIR, "src", "opentelemetry", "ext", "celery", "version.py"
+ BASE_DIR,
+ "src",
+ "opentelemetry",
+ "instrumentation",
+ "elasticsearch",
+ "version.py",
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py
similarity index 97%
rename from ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py
index 6746d1ac70a..f350a7dc280 100644
--- a/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/__init__.py
@@ -22,7 +22,7 @@
.. code-block:: python
from opentelemetry import trace
- from opentelemetry.ext.elasticsearch import ElasticSearchInstrumentor
+ from opentelemetry.instrumentation.elasticsearch import ElasticSearchInstrumentor
from opentelemetry.sdk.trace import TracerProvider
import elasticsearch
@@ -60,7 +60,7 @@
from wrapt import wrap_function_wrapper as _wrap
from opentelemetry import context, propagators, trace
-from opentelemetry.ext.elasticsearch.version import __version__
+from opentelemetry.instrumentation.elasticsearch.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/ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/src/opentelemetry/ext/elasticsearch/version.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py
diff --git a/ext/opentelemetry-ext-elasticsearch/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/tests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/tests/__init__.py
diff --git a/ext/opentelemetry-ext-elasticsearch/tests/helpers_es2.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es2.py
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/tests/helpers_es2.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es2.py
diff --git a/ext/opentelemetry-ext-elasticsearch/tests/helpers_es5.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es5.py
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/tests/helpers_es5.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es5.py
diff --git a/ext/opentelemetry-ext-elasticsearch/tests/helpers_es6.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es6.py
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/tests/helpers_es6.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es6.py
diff --git a/ext/opentelemetry-ext-elasticsearch/tests/helpers_es7.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es7.py
similarity index 100%
rename from ext/opentelemetry-ext-elasticsearch/tests/helpers_es7.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/tests/helpers_es7.py
diff --git a/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/tests/test_elasticsearch.py
similarity index 97%
rename from ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py
rename to instrumentation/opentelemetry-instrumentation-elasticsearch/tests/test_elasticsearch.py
index 3c4fe7f70f0..cc1d3147742 100644
--- a/ext/opentelemetry-ext-elasticsearch/tests/test_elasticsearch.py
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/tests/test_elasticsearch.py
@@ -22,8 +22,10 @@
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
-import opentelemetry.ext.elasticsearch
-from opentelemetry.ext.elasticsearch import ElasticsearchInstrumentor
+import opentelemetry.instrumentation.elasticsearch
+from opentelemetry.instrumentation.elasticsearch import (
+ ElasticsearchInstrumentor,
+)
from opentelemetry.test.test_base import TestBase
from opentelemetry.trace.status import StatusCanonicalCode
@@ -73,9 +75,9 @@ def test_instrumentor(self, request_mock):
span = spans_list[0]
# Check version and name in span's instrumentation info
- # self.check_span_instrumentation_info(span, opentelemetry.ext.elasticsearch)
+ # self.check_span_instrumentation_info(span, opentelemetry.instrumentation.elasticsearch)
self.check_span_instrumentation_info(
- span, opentelemetry.ext.elasticsearch
+ span, opentelemetry.instrumentation.elasticsearch
)
# check that no spans are generated after uninstrument
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..b6b28ecd9f0 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
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
+
## Version 0.11b0
Released 2020-07-28
diff --git a/ext/opentelemetry-ext-grpc/LICENSE b/instrumentation/opentelemetry-instrumentation-grpc/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-grpc/LICENSE
rename to instrumentation/opentelemetry-instrumentation-grpc/LICENSE
diff --git a/ext/opentelemetry-ext-grpc/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-grpc/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-grpc/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 51%
rename from ext/opentelemetry-ext-grpc/README.rst
rename to instrumentation/opentelemetry-instrumentation-grpc/README.rst
index 335c03614b9..176bdf1a39b 100644
--- a/ext/opentelemetry-ext-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/ext/opentelemetry-ext-grpc/setup.cfg b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
similarity index 87%
rename from ext/opentelemetry-ext-grpc/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
index a3533bdf590..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
+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 93%
rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/__init__.py
rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/__init__.py
index 1a665662818..9b6862eba0d 100644
--- a/ext/opentelemetry-ext-grpc/src/opentelemetry/ext/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,11 @@ 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/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-grpc/src/opentelemetry/ext/grpc/version.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py
similarity index 100%
rename from ext/opentelemetry-ext-grpc/src/opentelemetry/ext/grpc/version.py
rename to instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/__init__.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_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 93%
rename from ext/opentelemetry-ext-grpc/tests/test_client_interceptor.py
rename to instrumentation/opentelemetry-instrumentation-grpc/tests/test_client_interceptor.py
index a668f05ca79..458f32e0472 100644
--- a/ext/opentelemetry-ext-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,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.ext.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.ext.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.ext.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.ext.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.ext.grpc)
+ self.check_span_instrumentation_info(
+ span, opentelemetry.instrumentation.grpc
+ )
diff --git a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py
similarity index 95%
rename from ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
rename to instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py
index 0ba57a43228..a41da47ae92 100644
--- a/ext/opentelemetry-ext-grpc/tests/test_server_interceptor.py
+++ b/instrumentation/opentelemetry-instrumentation-grpc/tests/test_server_interceptor.py
@@ -20,10 +20,13 @@
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 +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.ext.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.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/ext/opentelemetry-ext-jinja2/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-jinja2/CHANGELOG.md
similarity index 53%
rename from ext/opentelemetry-ext-jinja2/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-jinja2/CHANGELOG.md
index ededf47daf9..a503fe367ea 100644
--- a/ext/opentelemetry-ext-jinja2/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Change package name to opentelemetry-instrumentation-jinja2
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
+
## 0.7b1
Released 2020-05-12
diff --git a/ext/opentelemetry-ext-jinja2/LICENSE b/instrumentation/opentelemetry-instrumentation-jinja2/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-jinja2/LICENSE
rename to instrumentation/opentelemetry-instrumentation-jinja2/LICENSE
diff --git a/ext/opentelemetry-ext-jinja2/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-jinja2/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-jinja2/MANIFEST.in
rename to instrumentation/opentelemetry-instrumentation-jinja2/MANIFEST.in
diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/README.rst b/instrumentation/opentelemetry-instrumentation-jinja2/README.rst
new file mode 100644
index 00000000000..c74faeb32e1
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/README.rst
@@ -0,0 +1,21 @@
+OpenTelemetry jinja2 integration
+================================
+
+|pypi|
+
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-jinja2.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-jinja2/
+
+Installation
+------------
+
+::
+
+ pip install opentelemetry-instrumentation-jinja2
+
+
+References
+----------
+
+* `OpenTelemetry jinja2 integration `_
+* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-jinja2/setup.cfg b/instrumentation/opentelemetry-instrumentation-jinja2/setup.cfg
similarity index 87%
rename from ext/opentelemetry-ext-jinja2/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-jinja2/setup.cfg
index fc0222a0e44..76b9b879201 100644
--- a/ext/opentelemetry-ext-jinja2/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/setup.cfg
@@ -13,13 +13,13 @@
# limitations under the License.
#
[metadata]
-name = opentelemetry-ext-jinja2
-description = OpenTelemetry jinja2 integration
+name = opentelemetry-instrumentation-jinja2
+description = OpenTelemetry jinja2 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-jinja2
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-jinja2
platforms = any
license = Apache-2.0
classifiers =
@@ -53,4 +53,4 @@ where = src
[options.entry_points]
opentelemetry_instrumentor =
- jinja2 = opentelemetry.ext.jinja2:Jinja2Instrumentor
+ jinja2 = opentelemetry.instrumentation.jinja2:Jinja2Instrumentor
diff --git a/ext/opentelemetry-ext-boto/setup.py b/instrumentation/opentelemetry-instrumentation-jinja2/setup.py
similarity index 91%
rename from ext/opentelemetry-ext-boto/setup.py
rename to instrumentation/opentelemetry-instrumentation-jinja2/setup.py
index 4c78e9b35f2..e9d484e1ebc 100644
--- a/ext/opentelemetry-ext-boto/setup.py
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/setup.py
@@ -17,7 +17,7 @@
BASE_DIR = os.path.dirname(__file__)
VERSION_FILENAME = os.path.join(
- BASE_DIR, "src", "opentelemetry", "ext", "boto", "version.py"
+ BASE_DIR, "src", "opentelemetry", "instrumentation", "jinja2", "version.py"
)
PACKAGE_INFO = {}
with open(VERSION_FILENAME) as f:
diff --git a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/__init__.py b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/__init__.py
similarity index 96%
rename from ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/__init__.py
rename to instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/__init__.py
index 06be28873b0..8ad883b279b 100644
--- a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/__init__.py
@@ -26,7 +26,7 @@
.. code-block:: python
from jinja2 import Environment, FileSystemLoader
- from opentelemetry.ext.jinja2 import Jinja2Instrumentor
+ from opentelemetry.instrumentation.jinja2 import Jinja2Instrumentor
from opentelemetry import trace
from opentelemetry.trace import TracerProvider
@@ -48,8 +48,8 @@
from wrapt import ObjectProxy
from wrapt import wrap_function_wrapper as _wrap
-from opentelemetry.ext.jinja2.version import __version__
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
+from opentelemetry.instrumentation.jinja2.version import __version__
from opentelemetry.instrumentation.utils import unwrap
from opentelemetry.trace import SpanKind, get_tracer
from opentelemetry.trace.status import Status, StatusCanonicalCode
diff --git a/ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py
similarity index 100%
rename from ext/opentelemetry-ext-jinja2/src/opentelemetry/ext/jinja2/version.py
rename to instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py
diff --git a/ext/opentelemetry-ext-jinja2/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-jinja2/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-jinja2/tests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-jinja2/tests/__init__.py
diff --git a/ext/opentelemetry-ext-jinja2/tests/templates/base.html b/instrumentation/opentelemetry-instrumentation-jinja2/tests/templates/base.html
similarity index 100%
rename from ext/opentelemetry-ext-jinja2/tests/templates/base.html
rename to instrumentation/opentelemetry-instrumentation-jinja2/tests/templates/base.html
diff --git a/ext/opentelemetry-ext-jinja2/tests/templates/template.html b/instrumentation/opentelemetry-instrumentation-jinja2/tests/templates/template.html
similarity index 100%
rename from ext/opentelemetry-ext-jinja2/tests/templates/template.html
rename to instrumentation/opentelemetry-instrumentation-jinja2/tests/templates/template.html
diff --git a/ext/opentelemetry-ext-jinja2/tests/test_jinja2.py b/instrumentation/opentelemetry-instrumentation-jinja2/tests/test_jinja2.py
similarity index 99%
rename from ext/opentelemetry-ext-jinja2/tests/test_jinja2.py
rename to instrumentation/opentelemetry-instrumentation-jinja2/tests/test_jinja2.py
index 6abfa9a836c..7f5b52c936d 100644
--- a/ext/opentelemetry-ext-jinja2/tests/test_jinja2.py
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/tests/test_jinja2.py
@@ -17,7 +17,7 @@
import jinja2
from opentelemetry import trace as trace_api
-from opentelemetry.ext.jinja2 import Jinja2Instrumentor
+from opentelemetry.instrumentation.jinja2 import Jinja2Instrumentor
from opentelemetry.test.test_base import TestBase
from opentelemetry.trace import get_tracer
diff --git a/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md
index 434a612abc3..944b34d5ad6 100644
--- a/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-mysql
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## Version 0.11b0
diff --git a/ext/opentelemetry-ext-opentracing-shim/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-opentracing-shim/CHANGELOG.md
similarity index 63%
rename from ext/opentelemetry-ext-opentracing-shim/CHANGELOG.md
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/CHANGELOG.md
index af8ddc4ae88..47bbc0ada0a 100644
--- a/ext/opentelemetry-ext-opentracing-shim/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/CHANGELOG.md
@@ -2,6 +2,9 @@
## Unreleased
+- Change reference names to opentelemetry-instrumentation-opentracing-shim
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
+
## 0.3a0
Released 2019-12-11
diff --git a/ext/opentelemetry-ext-opentracing-shim/LICENSE b/instrumentation/opentelemetry-instrumentation-opentracing-shim/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/LICENSE
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/LICENSE
diff --git a/ext/opentelemetry-ext-opentracing-shim/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-opentracing-shim/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/MANIFEST.in
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/MANIFEST.in
diff --git a/ext/opentelemetry-ext-opentracing-shim/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/README.rst
similarity index 83%
rename from ext/opentelemetry-ext-opentracing-shim/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/README.rst
index 3bba15f167e..7a8413ef59d 100644
--- a/ext/opentelemetry-ext-opentracing-shim/README.rst
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/README.rst
@@ -16,5 +16,5 @@ Installation
References
----------
-* `OpenTracing Shim for OpenTelemetry `_
+* `OpenTracing Shim for OpenTelemetry `_
* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-opentracing-shim/setup.cfg b/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.cfg
similarity index 95%
rename from ext/opentelemetry-ext-opentracing-shim/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.cfg
index f0878b82b64..1a822d49cee 100644
--- a/ext/opentelemetry-ext-opentracing-shim/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/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-ext-opentracing-shim
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-opentracing-shim
platforms = any
license = Apache-2.0
classifiers =
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.py
new file mode 100644
index 00000000000..f5d71a86b56
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.py
@@ -0,0 +1,31 @@
+# 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",
+ "opentracing_shim",
+ "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-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
similarity index 99%
rename from ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
index 8d8afca5cab..22c67c53ea2 100644
--- a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
@@ -30,7 +30,7 @@
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
- from opentelemetry.ext.opentracing_shim import create_tracer
+ from opentelemetry.instrumentation.opentracing_shim import create_tracer
# Tell OpenTelemetry which Tracer implementation to use.
trace.set_tracer_provider(TracerProvider())
@@ -93,8 +93,8 @@
from opentelemetry import propagators
from opentelemetry.context import Context
from opentelemetry.correlationcontext import get_correlation, set_correlation
-from opentelemetry.ext.opentracing_shim import util
-from opentelemetry.ext.opentracing_shim.version import __version__
+from opentelemetry.instrumentation.opentracing_shim import util
+from opentelemetry.instrumentation.opentracing_shim.version import __version__
from opentelemetry.trace import (
INVALID_SPAN_CONTEXT,
DefaultSpan,
diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/util.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/util.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/util.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/util.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/version.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/version.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/version.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/test_shim.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
similarity index 98%
rename from ext/opentelemetry-ext-opentracing-shim/tests/test_shim.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
index 635907bc90b..8b46a4bcb3b 100644
--- a/ext/opentelemetry-ext-opentracing-shim/tests/test_shim.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
@@ -22,7 +22,7 @@
import opentracing
from opentelemetry import propagators, trace
-from opentelemetry.ext.opentracing_shim import (
+from opentelemetry.instrumentation.opentracing_shim import (
SpanContextShim,
SpanShim,
create_tracer,
@@ -137,7 +137,7 @@ def test_explicit_start_time(self):
with self.shim.start_active_span("TestSpan", start_time=now) as scope:
result = util.time_seconds_from_ns(scope.span.unwrap().start_time)
# Tolerate inaccuracies of less than a microsecond. See Note:
- # https://open-telemetry.github.io/opentelemetry-python/opentelemetry.ext.opentracing_shim.html
+ # https://open-telemetry.github.io/opentelemetry-python/opentelemetry.instrumentation.opentracing_shim.html
# TODO: This seems to work consistently, but we should find out the
# biggest possible loss of precision.
self.assertAlmostEqual(result, now, places=6)
@@ -151,7 +151,7 @@ def test_explicit_end_time(self):
end_time = util.time_seconds_from_ns(span.unwrap().end_time)
# Tolerate inaccuracies of less than a microsecond. See Note:
- # https://open-telemetry.github.io/opentelemetry-python/opentelemetry.ext.opentracing_shim.html
+ # https://open-telemetry.github.io/opentelemetry-python/opentelemetry.instrumentation.opentracing_shim.html
# TODO: This seems to work consistently, but we should find out the
# biggest possible loss of precision.
self.assertAlmostEqual(end_time, now, places=6)
@@ -422,7 +422,7 @@ def test_log_kv(self):
)
self.assertEqual(span.unwrap().events[1].attributes["foo"], "bar")
# Tolerate inaccuracies of less than a microsecond. See Note:
- # https://open-telemetry.github.io/opentelemetry-python/opentelemetry.ext.opentracing_shim.html
+ # https://open-telemetry.github.io/opentelemetry-python/instrumentation/opentracing_shim/opentracing_shim.html
# TODO: This seems to work consistently, but we should find out the
# biggest possible loss of precision.
self.assertAlmostEqual(result, now, places=6)
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/test_util.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_util.py
similarity index 97%
rename from ext/opentelemetry-ext-opentracing-shim/tests/test_util.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_util.py
index cbbd4b075aa..806a8da609b 100644
--- a/ext/opentelemetry-ext-opentracing-shim/tests/test_util.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_util.py
@@ -15,7 +15,7 @@
import time
import unittest
-from opentelemetry.ext.opentracing_shim import util
+from opentelemetry.instrumentation.opentracing_shim import util
from opentelemetry.util import time_ns
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/otel_ot_shim_tracer.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/otel_ot_shim_tracer.py
similarity index 92%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/otel_ot_shim_tracer.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/otel_ot_shim_tracer.py
index b3b4271f022..c12bbfa0291 100644
--- a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/otel_ot_shim_tracer.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/otel_ot_shim_tracer.py
@@ -1,4 +1,4 @@
-import opentelemetry.ext.opentracing_shim as opentracingshim
+import opentelemetry.instrumentation.opentracing_shim as opentracingshim
from opentelemetry.sdk import trace
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
from opentelemetry.sdk.trace.export.in_memory_span_exporter import (
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_active_span_replacement/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_active_span_replacement/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_client_server/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_client_server/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/request_handler.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/request_handler.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/request_handler.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/request_handler.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_common_request_handler/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_common_request_handler/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_late_span_finish/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_late_span_finish/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/response_listener.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/response_listener.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/response_listener.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/response_listener.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_listener_per_request/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_listener_per_request/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_multiple_callbacks/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_multiple_callbacks/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_nested_callbacks/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_nested_callbacks/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/README.rst b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/README.rst
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/README.rst
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/README.rst
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/__init__.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/__init__.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_asyncio.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_asyncio.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_asyncio.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_asyncio.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_threads.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_threads.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_threads.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/test_subtask_span_propagation/test_threads.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/testcase.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/testcase.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/testcase.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/testcase.py
diff --git a/ext/opentelemetry-ext-opentracing-shim/tests/testbed/utils.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/utils.py
similarity index 100%
rename from ext/opentelemetry-ext-opentracing-shim/tests/testbed/utils.py
rename to instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/utils.py
diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md
index c997f239456..e5f81a558b7 100644
--- a/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-psycopg2
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## 0.8b0
diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md
index c549095d2ee..a01e0e2c536 100644
--- a/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-pymemcache
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## Version 0.10b0
diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md
index 59f8e35551c..a92d2b53da4 100644
--- a/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-pymongo
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## 0.7b1
diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md
index f9b59fcf7a2..9fea902d187 100644
--- a/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-pymysql
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## 0.7b1
diff --git a/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
index 79c4e6bf923..bac3153a811 100644
--- a/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-redis
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## 0.7b1
diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md
index 3022345ac72..f46080a9b99 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-sqlalchemy
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## 0.7b1
diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md
index 7804da90517..12d001bdf1c 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md
@@ -3,7 +3,7 @@
## Unreleased
- Change package name to opentelemetry-instrumentation-sqlite3
- ([#999](https://github.com/open-telemetry/opentelemetry-python/pull/999))
+ ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
## 0.8b0
diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md
new file mode 100644
index 00000000000..f752d8314d7
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md
@@ -0,0 +1,12 @@
+# Changelog
+
+## Unreleased
+
+- Change package name to opentelemetry-instrumentation-system-metrics
+ ([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
+
+## 0.9b0
+
+Released 2020-06-10
+
+- Initial release (https://github.com/open-telemetry/opentelemetry-python/pull/652)
diff --git a/ext/opentelemetry-ext-system-metrics/LICENSE b/instrumentation/opentelemetry-instrumentation-system-metrics/LICENSE
similarity index 100%
rename from ext/opentelemetry-ext-system-metrics/LICENSE
rename to instrumentation/opentelemetry-instrumentation-system-metrics/LICENSE
diff --git a/ext/opentelemetry-ext-system-metrics/MANIFEST.in b/instrumentation/opentelemetry-instrumentation-system-metrics/MANIFEST.in
similarity index 100%
rename from ext/opentelemetry-ext-system-metrics/MANIFEST.in
rename to instrumentation/opentelemetry-instrumentation-system-metrics/MANIFEST.in
diff --git a/ext/opentelemetry-ext-system-metrics/README.rst b/instrumentation/opentelemetry-instrumentation-system-metrics/README.rst
similarity index 50%
rename from ext/opentelemetry-ext-system-metrics/README.rst
rename to instrumentation/opentelemetry-instrumentation-system-metrics/README.rst
index 796f3f13f26..fc984256bf6 100644
--- a/ext/opentelemetry-ext-system-metrics/README.rst
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/README.rst
@@ -3,8 +3,8 @@ OpenTelemetry System Metrics Instrumentation
|pypi|
-.. |pypi| image:: https://badge.fury.io/py/opentelemetry-ext-system-metrics.svg
- :target: https://pypi.org/project/opentelemetry-ext-system-metrics/
+.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-system-metrics.svg
+ :target: https://pypi.org/project/opentelemetry-instrumentation-system-metrics/
Instrumentation to collect system performance metrics.
@@ -14,11 +14,11 @@ Installation
::
- pip install opentelemetry-ext-system-metrics
+ pip install opentelemetry-instrumentation-system-metrics
References
----------
-* `OpenTelemetry System Metrics Instrumentation `_
+* `OpenTelemetry System Metrics Instrumentation `_
* `OpenTelemetry Project `_
diff --git a/ext/opentelemetry-ext-system-metrics/setup.cfg b/instrumentation/opentelemetry-instrumentation-system-metrics/setup.cfg
similarity index 92%
rename from ext/opentelemetry-ext-system-metrics/setup.cfg
rename to instrumentation/opentelemetry-instrumentation-system-metrics/setup.cfg
index 08a1fe8f1c4..4b6f4f07f57 100644
--- a/ext/opentelemetry-ext-system-metrics/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/setup.cfg
@@ -13,13 +13,13 @@
# limitations under the License.
#
[metadata]
-name = opentelemetry-ext-system-metrics
+name = opentelemetry-instrumentation-system-metrics
description = OpenTelemetry System Metrics 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-system-metrics
+url = https://github.com/open-telemetry/opentelemetry-python/tree/master/instrumentation/opentelemetry-instrumentation-system-metrics
platforms = any
license = Apache-2.0
classifiers =
diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/setup.py b/instrumentation/opentelemetry-instrumentation-system-metrics/setup.py
new file mode 100644
index 00000000000..f0bbf9eff07
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/setup.py
@@ -0,0 +1,31 @@
+# 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",
+ "system_metrics",
+ "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-system-metrics/src/opentelemetry/ext/system_metrics/__init__.py b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py
similarity index 99%
rename from ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/__init__.py
rename to instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py
index 10b09795571..fcd96f8210a 100644
--- a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/__init__.py
@@ -29,7 +29,7 @@
.. code:: python
from opentelemetry import metrics
- from opentelemetry.ext.system_metrics import SystemMetrics
+ from opentelemetry.instrumentation.system_metrics import SystemMetrics
from opentelemetry.sdk.metrics import MeterProvider,
from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter
diff --git a/ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py
similarity index 100%
rename from ext/opentelemetry-ext-system-metrics/src/opentelemetry/ext/system_metrics/version.py
rename to instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py
diff --git a/ext/opentelemetry-ext-system-metrics/tests/__init__.py b/instrumentation/opentelemetry-instrumentation-system-metrics/tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-system-metrics/tests/__init__.py
rename to instrumentation/opentelemetry-instrumentation-system-metrics/tests/__init__.py
diff --git a/ext/opentelemetry-ext-system-metrics/tests/test_system_metrics.py b/instrumentation/opentelemetry-instrumentation-system-metrics/tests/test_system_metrics.py
similarity index 99%
rename from ext/opentelemetry-ext-system-metrics/tests/test_system_metrics.py
rename to instrumentation/opentelemetry-instrumentation-system-metrics/tests/test_system_metrics.py
index b2d6bab4015..b9ae662af19 100644
--- a/ext/opentelemetry-ext-system-metrics/tests/test_system_metrics.py
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/tests/test_system_metrics.py
@@ -16,7 +16,7 @@
from unittest import mock
from opentelemetry import metrics
-from opentelemetry.ext.system_metrics import SystemMetrics
+from opentelemetry.instrumentation.system_metrics import SystemMetrics
from opentelemetry.test.test_base import TestBase
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
index 7b512a84ce7..125032b95da 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py
@@ -27,16 +27,16 @@
instrumentations = {
"asgi": "opentelemetry-instrumentation-asgi>=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",
+ "boto": "opentelemetry-instrumentation-boto>=0.11b0",
+ "botocore": "opentelemetry-instrumentation-botocore>=0.11b0",
+ "celery": "opentelemetry-instrumentation-celery>=0.11b0",
"dbapi": "opentelemetry-instrumentation-dbapi>=0.8b0",
"django": "opentelemetry-instrumentation-django>=0.8b0",
- "elasticsearch": "opentelemetry-ext-elasticsearch>=0.11b0",
+ "elasticsearch": "opentelemetry-instrumentation-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",
+ "grpc": "opentelemetry-instrumentation-grpc>=0.8b0",
+ "jinja2": "opentelemetry-instrumentation-jinja2>=0.8b0",
"mysql": "opentelemetry-instrumentation-mysql>=0.8b0",
"psycopg2": "opentelemetry-instrumentation-psycopg2>=0.8b0",
"pymemcache": "opentelemetry-instrumentation-pymemcache>=0.11b0",
@@ -55,16 +55,16 @@
libraries = {
"asgi": ("opentelemetry-instrumentation-asgi",),
"asyncpg": ("opentelemetry-instrumentation-asyncpg",),
- "boto": ("opentelemetry-ext-boto",),
- "botocore": ("opentelemetry-ext-botocore",),
- "celery": ("opentelemetry-ext-celery",),
+ "boto": ("opentelemetry-instrumentation-boto",),
+ "botocore": ("opentelemetry-instrumentation-botocore",),
+ "celery": ("opentelemetry-instrumentation-celery",),
"dbapi": ("opentelemetry-instrumentation-dbapi",),
"django": ("opentelemetry-instrumentation-django",),
- "elasticsearch": ("opentelemetry-ext-elasticsearch",),
+ "elasticsearch": ("opentelemetry-instrumentation-elasticsearch",),
"fastapi": ("opentelemetry-instrumentation-fastapi",),
"flask": ("opentelemetry-instrumentation-flask",),
- "grpc": ("opentelemetry-ext-grpc",),
- "jinja2": ("opentelemetry-ext-jinja2",),
+ "grpc": ("opentelemetry-instrumentation-grpc",),
+ "jinja2": ("opentelemetry-instrumentation-jinja2",),
"mysql": ("opentelemetry-instrumentation-mysql",),
"psycopg2": ("opentelemetry-instrumentation-psycopg2",),
"pymemcache": ("opentelemetry-instrumentation-pymemcache",),
diff --git a/scripts/coverage.sh b/scripts/coverage.sh
index 830381225f4..7d3daa2af7a 100755
--- a/scripts/coverage.sh
+++ b/scripts/coverage.sh
@@ -7,7 +7,7 @@ function cov {
then
pytest \
--ignore-glob=*/setup.py \
- --ignore-glob=ext/opentelemetry-ext-opentracing-shim/tests/testbed/* \
+ --ignore-glob=instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/testbed/* \
--cov ${1} \
--cov-append \
--cov-branch \
@@ -35,7 +35,7 @@ cov exporter/opentelemetry-exporter-datadog
cov instrumentation/opentelemetry-instrumentation-flask
cov instrumentation/opentelemetry-instrumentation-requests
cov exporter/opentelemetry-exporter-jaeger
-cov ext/opentelemetry-ext-opentracing-shim
+cov instrumentation/opentelemetry-instrumentation-opentracing-shim
cov instrumentation/opentelemetry-instrumentation-wsgi
cov exporter/opentelemetry-exporter-zipkin
cov docs/examples/opentelemetry-example-app
diff --git a/ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py b/tests/opentelemetry-docker-tests/tests/asyncpg/test_asyncpg_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/asyncpg/test_asyncpg_functional.py
rename to tests/opentelemetry-docker-tests/tests/asyncpg/test_asyncpg_functional.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/celery/conftest.py b/tests/opentelemetry-docker-tests/tests/celery/conftest.py
similarity index 97%
rename from ext/opentelemetry-ext-docker-tests/tests/celery/conftest.py
rename to tests/opentelemetry-docker-tests/tests/celery/conftest.py
index 0e6976382e7..085fe3bab1e 100644
--- a/ext/opentelemetry-ext-docker-tests/tests/celery/conftest.py
+++ b/tests/opentelemetry-docker-tests/tests/celery/conftest.py
@@ -18,7 +18,7 @@
import pytest
from opentelemetry import trace as trace_api
-from opentelemetry.ext.celery import CeleryInstrumentor
+from opentelemetry.instrumentation.celery import CeleryInstrumentor
from opentelemetry.sdk.trace import TracerProvider, export
from opentelemetry.sdk.trace.export.in_memory_span_exporter import (
InMemorySpanExporter,
diff --git a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py b/tests/opentelemetry-docker-tests/tests/celery/test_celery_functional.py
similarity index 97%
rename from ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
rename to tests/opentelemetry-docker-tests/tests/celery/test_celery_functional.py
index a3967a5612a..2714c8ee033 100644
--- a/ext/opentelemetry-ext-docker-tests/tests/celery/test_celery_functional.py
+++ b/tests/opentelemetry-docker-tests/tests/celery/test_celery_functional.py
@@ -20,9 +20,9 @@
from celery import signals
from celery.exceptions import Retry
-import opentelemetry.ext.celery
+import opentelemetry.instrumentation.celery
from opentelemetry import trace as trace_api
-from opentelemetry.ext.celery import CeleryInstrumentor
+from opentelemetry.instrumentation.celery import CeleryInstrumentor
from opentelemetry.sdk import resources
from opentelemetry.sdk.trace import TracerProvider, export
from opentelemetry.trace.status import StatusCanonicalCode
@@ -51,18 +51,19 @@ def fn_task():
assert (
async_span.instrumentation_info.name
- == opentelemetry.ext.celery.__name__
+ == opentelemetry.instrumentation.celery.__name__
)
assert (
async_span.instrumentation_info.version
- == opentelemetry.ext.celery.__version__
+ == opentelemetry.instrumentation.celery.__version__
)
assert (
- run_span.instrumentation_info.name == opentelemetry.ext.celery.__name__
+ run_span.instrumentation_info.name
+ == opentelemetry.instrumentation.celery.__name__
)
assert (
run_span.instrumentation_info.version
- == opentelemetry.ext.celery.__version__
+ == opentelemetry.instrumentation.celery.__version__
)
diff --git a/ext/opentelemetry-ext-docker-tests/tests/check_availability.py b/tests/opentelemetry-docker-tests/tests/check_availability.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/check_availability.py
rename to tests/opentelemetry-docker-tests/tests/check_availability.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/docker-compose.yml b/tests/opentelemetry-docker-tests/tests/docker-compose.yml
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/docker-compose.yml
rename to tests/opentelemetry-docker-tests/tests/docker-compose.yml
diff --git a/ext/opentelemetry-ext-docker-tests/tests/mysql/test_mysql_functional.py b/tests/opentelemetry-docker-tests/tests/mysql/test_mysql_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/mysql/test_mysql_functional.py
rename to tests/opentelemetry-docker-tests/tests/mysql/test_mysql_functional.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py b/tests/opentelemetry-docker-tests/tests/opencensus/test_opencensusexporter_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/opencensus/test_opencensusexporter_functional.py
rename to tests/opentelemetry-docker-tests/tests/opencensus/test_opencensusexporter_functional.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py b/tests/opentelemetry-docker-tests/tests/postgres/test_aiopg_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/postgres/test_aiopg_functional.py
rename to tests/opentelemetry-docker-tests/tests/postgres/test_aiopg_functional.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/postgres/test_psycopg_functional.py b/tests/opentelemetry-docker-tests/tests/postgres/test_psycopg_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/postgres/test_psycopg_functional.py
rename to tests/opentelemetry-docker-tests/tests/postgres/test_psycopg_functional.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/pymongo/test_pymongo_functional.py b/tests/opentelemetry-docker-tests/tests/pymongo/test_pymongo_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/pymongo/test_pymongo_functional.py
rename to tests/opentelemetry-docker-tests/tests/pymongo/test_pymongo_functional.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/pymysql/test_pymysql_functional.py b/tests/opentelemetry-docker-tests/tests/pymysql/test_pymysql_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/pymysql/test_pymysql_functional.py
rename to tests/opentelemetry-docker-tests/tests/pymysql/test_pymysql_functional.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/redis/test_redis_functional.py b/tests/opentelemetry-docker-tests/tests/redis/test_redis_functional.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/redis/test_redis_functional.py
rename to tests/opentelemetry-docker-tests/tests/redis/test_redis_functional.py
diff --git a/ext/opentelemetry-ext-grpc/tests/__init__.py b/tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/__init__.py
similarity index 100%
rename from ext/opentelemetry-ext-grpc/tests/__init__.py
rename to tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/__init__.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/mixins.py b/tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/mixins.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/mixins.py
rename to tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/mixins.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_instrument.py b/tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_instrument.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_instrument.py
rename to tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_instrument.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_mysql.py b/tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_mysql.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_mysql.py
rename to tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_mysql.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_postgres.py b/tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_postgres.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_postgres.py
rename to tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_postgres.py
diff --git a/ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_sqlite.py b/tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_sqlite.py
similarity index 100%
rename from ext/opentelemetry-ext-docker-tests/tests/sqlalchemy_tests/test_sqlite.py
rename to tests/opentelemetry-docker-tests/tests/sqlalchemy_tests/test_sqlite.py
diff --git a/tox.ini b/tox.ini
index 8528b63f600..91024f7f3d4 100644
--- a/tox.ini
+++ b/tox.ini
@@ -36,7 +36,7 @@ envlist =
py3{5,6,7,8}-test-instrumentation-aiopg
; instrumentation-aiopg intentionally excluded from pypy3
- ; opentelemetry-ext-botocore
+ ; opentelemetry-instrumentation-botocore
py3{6,7,8}-test-instrumentation-botocore
pypy3-test-instrumentation-botocore
@@ -48,7 +48,7 @@ envlist =
py3{4,5,6,7,8}-test-instrumentation-dbapi
pypy3-test-instrumentation-dbapi
- ; opentelemetry-ext-boto
+ ; opentelemetry-instrumentation-boto
py3{5,6,7,8}-test-instrumentation-boto
pypy3-test-instrumentation-boto
@@ -74,7 +74,7 @@ envlist =
py3{6,7,8}-test-instrumentation-starlette
pypy3-test-instrumentation-starlette
- ; opentelemetry-ext-jinja2
+ ; opentelemetry-instrumentation-jinja2
py3{4,5,6,7,8}-test-instrumentation-jinja2
pypy3-test-instrumentation-jinja2
@@ -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-instrumentation-sqlalchemy
@@ -156,13 +156,13 @@ envlist =
py3{4,5,6,7,8}-test-instrumentation-redis
pypy3-test-instrumentation-redis
- ; opentelemetry-ext-celery
+ ; opentelemetry-instrumentation-celery
py3{5,6,7,8}-test-instrumentation-celery
pypy3-test-instrumentation-celery
- ; opentelemetry-ext-system-metrics
+ ; opentelemetry-instrumentation-system-metrics
py3{4,5,6,7,8}-test-instrumentation-system-metrics
- ; ext-system-metrics intentionally excluded from pypy3
+ ; instrumentation-system-metrics intentionally excluded from pypy3
; known limitation: gc.get_count won't work under pypy
lint
@@ -195,23 +195,23 @@ changedir =
test-core-proto: opentelemetry-proto/tests
test-core-instrumentation: opentelemetry-instrumentation/tests
test-core-getting-started: docs/getting_started/tests
- test-core-opentracing-shim: ext/opentelemetry-ext-opentracing-shim/tests
+ test-core-opentracing-shim: instrumentation/opentelemetry-instrumentation-opentracing-shim/tests
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: 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-boto: instrumentation/opentelemetry-instrumentation-boto/tests
+ test-instrumentation-botocore: instrumentation/opentelemetry-instrumentation-botocore/tests
+ test-instrumentation-celery: instrumentation/opentelemetry-instrumentation-celery/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
+ test-instrumentation-elasticsearch{2,5,6,7}: instrumentation/opentelemetry-instrumentation-elasticsearch/tests
test-instrumentation-fastapi: instrumentation/opentelemetry-instrumentation-fastapi/tests
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-grpc: instrumentation/opentelemetry-instrumentation-grpc/tests
+ test-instrumentation-jinja2: instrumentation/opentelemetry-instrumentation-jinja2/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
@@ -223,7 +223,7 @@ changedir =
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-system-metrics: instrumentation/opentelemetry-instrumentation-system-metrics/tests
test-instrumentation-wsgi: instrumentation/opentelemetry-instrumentation-wsgi/tests
test-exporter-jaeger: exporter/opentelemetry-exporter-jaeger/tests
@@ -241,27 +241,27 @@ commands_pre =
test: pip install {toxinidir}/opentelemetry-api {toxinidir}/opentelemetry-sdk {toxinidir}/tests/util
test-core-proto: pip install {toxinidir}/opentelemetry-proto
- ext,instrumentation: pip install {toxinidir}/opentelemetry-instrumentation
+ instrumentation: pip install {toxinidir}/opentelemetry-instrumentation
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}/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]
+ celery: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-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}/instrumentation/opentelemetry-instrumentation-wsgi
asgi,starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi
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]
+ boto: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore[test]
+ boto: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-boto[test]
flask: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-flask[test]
- botocore: pip install {toxinidir}/ext/opentelemetry-ext-botocore[test]
+ botocore: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-botocore[test]
dbapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi[test]
@@ -296,7 +296,7 @@ commands_pre =
starlette: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-starlette[test]
- jinja2: pip install {toxinidir}/ext/opentelemetry-ext-jinja2[test]
+ jinja2: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-jinja2[test]
aiohttp-client: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/instrumentation/opentelemetry-instrumentation-aiohttp-client
@@ -305,7 +305,7 @@ commands_pre =
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
+ opentracing-shim: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-opentracing-shim
datadog: pip install {toxinidir}/opentelemetry-sdk {toxinidir}/exporter/opentelemetry-exporter-datadog
@@ -313,9 +313,9 @@ commands_pre =
sqlalchemy: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy
- system-metrics: pip install {toxinidir}/ext/opentelemetry-ext-system-metrics[test]
+ system-metrics: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-system-metrics[test]
- elasticsearch{2,5,6,7}: pip install {toxinidir}/opentelemetry-instrumentation {toxinidir}/ext/opentelemetry-ext-elasticsearch[test]
+ elasticsearch{2,5,6,7}: pip install {toxinidir}/opentelemetry-instrumentation {toxinidir}/instrumentation/opentelemetry-instrumentation-elasticsearch[test]
; In order to get a healthy coverage report,
; we have to install packages in editable mode.
@@ -405,7 +405,7 @@ deps =
celery ~= 4.0, != 4.4.4
changedir =
- ext/opentelemetry-ext-docker-tests/tests
+ tests/opentelemetry-docker-tests/tests
commands_pre =
pip install -e {toxinidir}/opentelemetry-api \
@@ -413,7 +413,7 @@ commands_pre =
-e {toxinidir}/opentelemetry-instrumentation \
-e {toxinidir}/tests/util \
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-asyncpg \
- -e {toxinidir}/ext/opentelemetry-ext-celery \
+ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-celery \
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-dbapi \
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-mysql \
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-psycopg2 \
@@ -422,7 +422,7 @@ commands_pre =
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-sqlalchemy \
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-aiopg \
-e {toxinidir}/instrumentation/opentelemetry-instrumentation-redis \
- -e {toxinidir}/ext/opentelemetry-ext-system-metrics \
+ -e {toxinidir}/instrumentation/opentelemetry-instrumentation-system-metrics \
-e {toxinidir}/exporter/opentelemetry-exporter-opencensus
docker-compose up -d
python check_availability.py
From 955890092249b6050e0dc7b919038ca275dcfa30 Mon Sep 17 00:00:00 2001
From: Alec Koumjian
Date: Wed, 5 Aug 2020 11:03:07 -0400
Subject: [PATCH 65/79] instrumentation/redis: Change Redis instrument to use
SpanKind.CLIENT (#965)
---
.../CHANGELOG.md | 3 ++-
.../instrumentation/redis/__init__.py | 8 ++++++--
.../tests/test_redis.py | 14 ++++++++++++++
3 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
index bac3153a811..e7f8d248741 100644
--- a/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
@@ -2,6 +2,7 @@
## Unreleased
+- Update default SpanKind to `SpanKind.CLIENT` ([#965](https://github.com/open-telemetry/opentelemetry-python/pull/965))
- Change package name to opentelemetry-instrumentation-redis
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
@@ -9,4 +10,4 @@
Released 2020-05-12
-- Initial release
\ No newline at end of file
+- Initial release
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 fef856041e8..e2ab78b5356 100644
--- a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/__init__.py
@@ -72,7 +72,9 @@ def _set_connection_attributes(span, conn):
def _traced_execute_command(func, instance, args, kwargs):
tracer = getattr(redis, "_opentelemetry_tracer")
query = _format_command_args(args)
- with tracer.start_as_current_span(_CMD) as span:
+ with tracer.start_as_current_span(
+ _CMD, kind=trace.SpanKind.CLIENT
+ ) as span:
span.set_attribute("service", tracer.instrumentation_info.name)
span.set_attribute(_RAWCMD, query)
_set_connection_attributes(span, instance)
@@ -86,7 +88,9 @@ def _traced_execute_pipeline(func, instance, args, kwargs):
cmds = [_format_command_args(c) for c, _ in instance.command_stack]
resource = "\n".join(cmds)
- with tracer.start_as_current_span(_CMD) as span:
+ with tracer.start_as_current_span(
+ _CMD, kind=trace.SpanKind.CLIENT
+ ) as span:
span.set_attribute("service", tracer.instrumentation_info.name)
span.set_attribute(_RAWCMD, resource)
_set_connection_attributes(span, instance)
diff --git a/instrumentation/opentelemetry-instrumentation-redis/tests/test_redis.py b/instrumentation/opentelemetry-instrumentation-redis/tests/test_redis.py
index 86b2459c112..c306dca3637 100644
--- a/instrumentation/opentelemetry-instrumentation-redis/tests/test_redis.py
+++ b/instrumentation/opentelemetry-instrumentation-redis/tests/test_redis.py
@@ -17,9 +17,23 @@
from opentelemetry.instrumentation.redis import RedisInstrumentor
from opentelemetry.test.test_base import TestBase
+from opentelemetry.trace import SpanKind
class TestRedis(TestBase):
+ def test_span_properties(self):
+ redis_client = redis.Redis()
+ RedisInstrumentor().instrument(tracer_provider=self.tracer_provider)
+
+ with mock.patch.object(redis_client, "connection"):
+ redis_client.get("key")
+
+ spans = self.memory_exporter.get_finished_spans()
+ self.assertEqual(len(spans), 1)
+ span = spans[0]
+ self.assertEqual(span.name, "redis.command")
+ self.assertEqual(span.kind, SpanKind.CLIENT)
+
def test_instrument_uninstrument(self):
redis_client = redis.Redis()
RedisInstrumentor().instrument(tracer_provider=self.tracer_provider)
From 81025e1e159dc341d96a7c90df8f6e7b26e1cb90 Mon Sep 17 00:00:00 2001
From: Yusuke Tsutsumi
Date: Wed, 5 Aug 2020 09:27:09 -0700
Subject: [PATCH 66/79] docs: Add propagators section to getting started (#963)
---
docs/getting-started.rst | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/docs/getting-started.rst b/docs/getting-started.rst
index e9dd831e908..198bd0f1e31 100644
--- a/docs/getting-started.rst
+++ b/docs/getting-started.rst
@@ -174,6 +174,29 @@ Now run the above script, hit the root url (http://localhost:5000/) a few times,
python flask_example.py
+Configure Your HTTP Propagator (b3, CorrelationContext)
+-------------------------------------------------------
+
+A major feature of distributed tracing is the ability to correlate a trace across
+multiple services. However, those services need to propagate information about a
+trace from one service to the other.
+
+To enable this, OpenTelemetry has the concept of `propagators `_,
+which provide a common method to encode and decode span information from a request and response,
+respectively.
+
+By default, opentelemetry-python is configured to use the `W3C Trace Context `_
+HTTP headers for HTTP requests. This can be configured to leverage different propagators. Here's
+an example using Zipkin's `b3 propagation `_:
+
+.. code-block:: python
+
+ from opentelemetry import propagators
+ from opentelemetry.sdk.trace.propagation.b3_format import B3Format
+
+ propagators.set_global_httptextformat(B3Format())
+
+
Adding Metrics
--------------
From 2e700889e64710149b2ebdb6b0ce07d15a708425 Mon Sep 17 00:00:00 2001
From: Simon THOBY
Date: Wed, 5 Aug 2020 20:29:02 +0200
Subject: [PATCH 67/79] ext/django: accept middlewares declared as tuples
(#950)
---
.../src/opentelemetry/instrumentation/django/__init__.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
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 e0992e9a30f..d9566affc09 100644
--- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/__init__.py
@@ -51,8 +51,12 @@ def _instrument(self, **kwargs):
# https://docs.djangoproject.com/en/3.0/ref/middleware/#middleware-ordering
settings_middleware = getattr(settings, "MIDDLEWARE", [])
- settings_middleware.append(self._opentelemetry_middleware)
+ # Django allows to specify middlewares as a tuple, so we convert this tuple to a
+ # list, otherwise we wouldn't be able to call append/remove
+ if isinstance(settings_middleware, tuple):
+ settings_middleware = list(settings_middleware)
+ settings_middleware.append(self._opentelemetry_middleware)
setattr(settings, "MIDDLEWARE", settings_middleware)
def _uninstrument(self, **kwargs):
From 8b1da35bc58fa64b92ab042b0e95aac6d03e4b72 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Wed, 5 Aug 2020 13:18:33 -0600
Subject: [PATCH 68/79] opentracing-shim: Return consistent ScopeShim objects
(#922)
This uses the OpenTelemetry context management mechanism to store a
ScopeShim object in order to make active return the same object as the
one returned by start_active_span.
---
.../opentracing_shim/__init__.py | 19 +++----
.../tests/test_shim.py | 50 +++++++++++++------
2 files changed, 45 insertions(+), 24 deletions(-)
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
index 22c67c53ea2..6c76444e6ee 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
@@ -91,7 +91,7 @@
from deprecated import deprecated
from opentelemetry import propagators
-from opentelemetry.context import Context
+from opentelemetry.context import Context, attach, detach, get_value, set_value
from opentelemetry.correlationcontext import get_correlation, set_correlation
from opentelemetry.instrumentation.opentracing_shim import util
from opentelemetry.instrumentation.opentracing_shim.version import __version__
@@ -327,6 +327,7 @@ class ScopeShim(opentracing.Scope):
def __init__(self, manager, span, span_cm=None):
super().__init__(manager, span)
self._span_cm = span_cm
+ self._token = attach(set_value("scope_shim", self))
# TODO: Change type of `manager` argument to `opentracing.ScopeManager`? We
# need to get rid of `manager.tracer` for this.
@@ -382,6 +383,8 @@ def close(self):
*finish_on_close* when activating the span.
"""
+ detach(self._token)
+
if self._span_cm is not None:
# We don't have error information to pass to `__exit__()` so we
# pass `None` in all arguments. If the OpenTelemetry tracer
@@ -460,14 +463,12 @@ def active(self):
if span.get_context() == INVALID_SPAN_CONTEXT:
return None
- span_context = SpanContextShim(span.get_context())
- wrapped_span = SpanShim(self._tracer, span_context, span)
- return ScopeShim(self, span=wrapped_span)
- # TODO: The returned `ScopeShim` instance here always ends the
- # corresponding span, regardless of the `finish_on_close` value used
- # when activating the span. This is because here we return a *new*
- # `ScopeShim` rather than returning a saved instance of `ScopeShim`.
- # https://github.com/open-telemetry/opentelemetry-python/pull/211/files#r335398792
+ try:
+ return get_value("scope_shim")
+ except KeyError:
+ span_context = SpanContextShim(span.get_context())
+ wrapped_span = SpanShim(self._tracer, span_context, span)
+ return ScopeShim(self, span=wrapped_span)
@property
def tracer(self):
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
index 8b46a4bcb3b..445ce6ce161 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
@@ -63,7 +63,7 @@ def test_shim_type(self):
def test_start_active_span(self):
"""Test span creation and activation using `start_active_span()`."""
- with self.shim.start_active_span("TestSpan") as scope:
+ with self.shim.start_active_span("TestSpan0") as scope:
# Verify correct type of Scope and Span objects.
self.assertIsInstance(scope, opentracing.Scope)
self.assertIsInstance(scope.span, opentracing.Span)
@@ -91,7 +91,7 @@ def test_start_active_span(self):
def test_start_span(self):
"""Test span creation using `start_span()`."""
- with self.shim.start_span("TestSpan") as span:
+ with self.shim.start_span("TestSpan1") as span:
# Verify correct type of Span object.
self.assertIsInstance(span, opentracing.Span)
@@ -107,7 +107,7 @@ def test_start_span(self):
def test_start_span_no_contextmanager(self):
"""Test `start_span()` without a `with` statement."""
- span = self.shim.start_span("TestSpan")
+ span = self.shim.start_span("TestSpan2")
# Verify span is started.
self.assertIsNotNone(span.unwrap().start_time)
@@ -120,7 +120,7 @@ def test_start_span_no_contextmanager(self):
def test_explicit_span_finish(self):
"""Test `finish()` method on `Span` objects."""
- span = self.shim.start_span("TestSpan")
+ span = self.shim.start_span("TestSpan3")
# Verify span hasn't ended.
self.assertIsNone(span.unwrap().end_time)
@@ -134,7 +134,7 @@ def test_explicit_start_time(self):
"""Test `start_time` argument."""
now = time.time()
- with self.shim.start_active_span("TestSpan", start_time=now) as scope:
+ with self.shim.start_active_span("TestSpan4", start_time=now) as scope:
result = util.time_seconds_from_ns(scope.span.unwrap().start_time)
# Tolerate inaccuracies of less than a microsecond. See Note:
# https://open-telemetry.github.io/opentelemetry-python/opentelemetry.instrumentation.opentracing_shim.html
@@ -145,7 +145,7 @@ def test_explicit_start_time(self):
def test_explicit_end_time(self):
"""Test `end_time` argument of `finish()` method."""
- span = self.shim.start_span("TestSpan")
+ span = self.shim.start_span("TestSpan5")
now = time.time()
span.finish(now)
@@ -159,7 +159,7 @@ def test_explicit_end_time(self):
def test_explicit_span_activation(self):
"""Test manual activation and deactivation of a span."""
- span = self.shim.start_span("TestSpan")
+ span = self.shim.start_span("TestSpan6")
# Verify no span is currently active.
self.assertIsNone(self.shim.active_span)
@@ -180,7 +180,7 @@ def test_start_active_span_finish_on_close(self):
"""Test `finish_on_close` argument of `start_active_span()`."""
with self.shim.start_active_span(
- "TestSpan", finish_on_close=True
+ "TestSpan7", finish_on_close=True
) as scope:
# Verify span hasn't ended.
self.assertIsNone(scope.span.unwrap().end_time)
@@ -189,7 +189,7 @@ def test_start_active_span_finish_on_close(self):
self.assertIsNotNone(scope.span.unwrap().end_time)
with self.shim.start_active_span(
- "TestSpan", finish_on_close=False
+ "TestSpan8", finish_on_close=False
) as scope:
# Verify span hasn't ended.
self.assertIsNone(scope.span.unwrap().end_time)
@@ -202,7 +202,7 @@ def test_start_active_span_finish_on_close(self):
def test_activate_finish_on_close(self):
"""Test `finish_on_close` argument of `activate()`."""
- span = self.shim.start_span("TestSpan")
+ span = self.shim.start_span("TestSpan9")
with self.shim.scope_manager.activate(
span, finish_on_close=True
@@ -216,7 +216,7 @@ def test_activate_finish_on_close(self):
# Verify span has ended.
self.assertIsNotNone(span.unwrap().end_time)
- span = self.shim.start_span("TestSpan")
+ span = self.shim.start_span("TestSpan10")
with self.shim.scope_manager.activate(
span, finish_on_close=False
@@ -402,13 +402,13 @@ def test_tags(self):
def test_span_tracer(self):
"""Test the `tracer` property on `Span` objects."""
- with self.shim.start_active_span("TestSpan") as scope:
+ with self.shim.start_active_span("TestSpan11") as scope:
self.assertEqual(scope.span.tracer, self.shim)
def test_log_kv(self):
"""Test the `log_kv()` method on `Span` objects."""
- with self.shim.start_span("TestSpan") as span:
+ with self.shim.start_span("TestSpan12") as span:
span.log_kv({"foo": "bar"})
self.assertEqual(span.unwrap().events[0].attributes["foo"], "bar")
# Verify timestamp was generated automatically.
@@ -430,7 +430,7 @@ def test_log_kv(self):
def test_log(self):
"""Test the deprecated `log` method on `Span` objects."""
- with self.shim.start_span("TestSpan") as span:
+ with self.shim.start_span("TestSpan13") as span:
with self.assertWarns(DeprecationWarning):
span.log(event="foo", payload="bar")
@@ -441,7 +441,7 @@ def test_log(self):
def test_log_event(self):
"""Test the deprecated `log_event` method on `Span` objects."""
- with self.shim.start_span("TestSpan") as span:
+ with self.shim.start_span("TestSpan14") as span:
with self.assertWarns(DeprecationWarning):
span.log_event("foo", "bar")
@@ -557,6 +557,7 @@ def test_extract_binary(self):
self.shim.extract(opentracing.Format.BINARY, bytearray())
def test_baggage(self):
+ """Test SpanShim baggage being set and being immutable"""
span_context_shim = SpanContextShim(
trace.SpanContext(1234, 5678, is_remote=False)
@@ -572,3 +573,22 @@ def test_baggage(self):
span_shim.set_baggage_item(1, 2)
self.assertTrue(span_shim.get_baggage_item(1), 2)
+
+ def test_active(self):
+ """Test that the active property and start_active_span return the same
+ object"""
+
+ # Verify no span is currently active.
+ self.assertIsNone(self.shim.active_span)
+
+ with self.shim.start_active_span("TestSpan15") as scope:
+ # Verify span is active.
+ self.assertEqual(
+ self.shim.active_span.context.unwrap(),
+ scope.span.context.unwrap(),
+ )
+
+ self.assertIs(self.shim.scope_manager.active, scope)
+
+ # Verify no span is active.
+ self.assertIsNone(self.shim.active_span)
From 590c32cffc61762894e2ea782cfc2d00889478e3 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Wed, 5 Aug 2020 23:01:13 -0600
Subject: [PATCH 69/79] Handle B3 trace_id and span_id correctly (#934)
---
.../sdk/trace/propagation/b3_format.py | 21 ++++++++-
.../tests/trace/propagation/test_b3_format.py | 45 +++++++++++++++++++
2 files changed, 64 insertions(+), 2 deletions(-)
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py b/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py
index c1f71d4d87e..901a5772f83 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/trace/propagation/b3_format.py
@@ -13,9 +13,11 @@
# limitations under the License.
import typing
+from re import compile as re_compile
import opentelemetry.trace as trace
from opentelemetry.context import Context
+from opentelemetry.sdk.trace import generate_span_id, generate_trace_id
from opentelemetry.trace.propagation.httptextformat import (
Getter,
HTTPTextFormat,
@@ -37,6 +39,8 @@ class B3Format(HTTPTextFormat):
SAMPLED_KEY = "x-b3-sampled"
FLAGS_KEY = "x-b3-flags"
_SAMPLE_PROPAGATE_VALUES = set(["1", "True", "true", "d"])
+ _trace_id_regex = re_compile(r"[\da-fA-F]{16}|[\da-fA-F]{32}")
+ _span_id_regex = re_compile(r"[\da-fA-F]{16}")
def extract(
self,
@@ -95,6 +99,18 @@ def extract(
or flags
)
+ if (
+ self._trace_id_regex.fullmatch(trace_id) is None
+ or self._span_id_regex.fullmatch(span_id) is None
+ ):
+ trace_id = generate_trace_id()
+ span_id = generate_span_id()
+ sampled = "0"
+
+ else:
+ trace_id = int(trace_id, 16)
+ span_id = int(span_id, 16)
+
options = 0
# The b3 spec provides no defined behavior for both sample and
# flag values set. Since the setting of at least one implies
@@ -102,12 +118,13 @@ def extract(
# header is set to allow.
if sampled in self._SAMPLE_PROPAGATE_VALUES or flags == "1":
options |= trace.TraceFlags.SAMPLED
+
return trace.set_span_in_context(
trace.DefaultSpan(
trace.SpanContext(
# trace an span ids are encoded in hex, so must be converted
- trace_id=int(trace_id, 16),
- span_id=int(span_id, 16),
+ trace_id=trace_id,
+ span_id=span_id,
is_remote=True,
trace_flags=trace.TraceFlags(options),
trace_state=trace.TraceState(),
diff --git a/opentelemetry-sdk/tests/trace/propagation/test_b3_format.py b/opentelemetry-sdk/tests/trace/propagation/test_b3_format.py
index a5bd1baaa48..bc508f3fd91 100644
--- a/opentelemetry-sdk/tests/trace/propagation/test_b3_format.py
+++ b/opentelemetry-sdk/tests/trace/propagation/test_b3_format.py
@@ -13,6 +13,7 @@
# limitations under the License.
import unittest
+from unittest.mock import patch
import opentelemetry.sdk.trace as trace
import opentelemetry.sdk.trace.propagation.b3_format as b3_format
@@ -245,6 +246,50 @@ def test_missing_trace_id(self):
span_context = trace_api.get_current_span(ctx).get_context()
self.assertEqual(span_context.trace_id, trace_api.INVALID_TRACE_ID)
+ @patch("opentelemetry.sdk.trace.propagation.b3_format.generate_trace_id")
+ @patch("opentelemetry.sdk.trace.propagation.b3_format.generate_span_id")
+ def test_invalid_trace_id(
+ self, mock_generate_span_id, mock_generate_trace_id
+ ):
+ """If a trace id is invalid, generate a trace id."""
+
+ mock_generate_trace_id.configure_mock(return_value=1)
+ mock_generate_span_id.configure_mock(return_value=2)
+
+ carrier = {
+ FORMAT.TRACE_ID_KEY: "abc123",
+ FORMAT.SPAN_ID_KEY: self.serialized_span_id,
+ FORMAT.FLAGS_KEY: "1",
+ }
+
+ ctx = FORMAT.extract(get_as_list, carrier)
+ span_context = trace_api.get_current_span(ctx).get_context()
+
+ self.assertEqual(span_context.trace_id, 1)
+ self.assertEqual(span_context.span_id, 2)
+
+ @patch("opentelemetry.sdk.trace.propagation.b3_format.generate_trace_id")
+ @patch("opentelemetry.sdk.trace.propagation.b3_format.generate_span_id")
+ def test_invalid_span_id(
+ self, mock_generate_span_id, mock_generate_trace_id
+ ):
+ """If a span id is invalid, generate a trace id."""
+
+ mock_generate_trace_id.configure_mock(return_value=1)
+ mock_generate_span_id.configure_mock(return_value=2)
+
+ carrier = {
+ FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
+ FORMAT.SPAN_ID_KEY: "abc123",
+ FORMAT.FLAGS_KEY: "1",
+ }
+
+ ctx = FORMAT.extract(get_as_list, carrier)
+ span_context = trace_api.get_current_span(ctx).get_context()
+
+ self.assertEqual(span_context.trace_id, 1)
+ self.assertEqual(span_context.span_id, 2)
+
def test_missing_span_id(self):
"""If a trace id is missing, populate an invalid trace id."""
carrier = {
From 85a2f435c0d1344210c38196ed43bc1a4aba984c Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Thu, 6 Aug 2020 09:19:57 -0600
Subject: [PATCH 70/79] Stop TracerProvider from being overridden (#959)
Co-authored-by: Leighton Chen
---
opentelemetry-api/CHANGELOG.md | 2 +
.../src/opentelemetry/metrics/__init__.py | 3 +-
.../src/opentelemetry/trace/__init__.py | 72 ++++++++++---------
.../tests/metrics/test_globals.py | 4 +-
opentelemetry-api/tests/trace/test_globals.py | 6 +-
.../util/src/opentelemetry/test/test_base.py | 12 ++++
6 files changed, 61 insertions(+), 38 deletions(-)
diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md
index 2226b5d0273..a04aa8a48fb 100644
--- a/opentelemetry-api/CHANGELOG.md
+++ b/opentelemetry-api/CHANGELOG.md
@@ -4,6 +4,8 @@
- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL`
([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
+- Stop TracerProvider and MeterProvider from being overridden
+ ([#959](https://github.com/open-telemetry/opentelemetry-python/pull/959))
## Version 0.11b0
diff --git a/opentelemetry-api/src/opentelemetry/metrics/__init__.py b/opentelemetry-api/src/opentelemetry/metrics/__init__.py
index bd2e3b85735..7d279731ea1 100644
--- a/opentelemetry-api/src/opentelemetry/metrics/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/metrics/__init__.py
@@ -459,7 +459,8 @@ def set_meter_provider(meter_provider: MeterProvider) -> None:
global _METER_PROVIDER # pylint: disable=global-statement
if _METER_PROVIDER is not None:
- logger.warning("Overriding current MeterProvider")
+ logger.warning("Overriding of current MeterProvider is not allowed")
+ return
_METER_PROVIDER = meter_provider
diff --git a/opentelemetry-api/src/opentelemetry/trace/__init__.py b/opentelemetry-api/src/opentelemetry/trace/__init__.py
index ffda0a15e71..6c1bf46cc92 100644
--- a/opentelemetry-api/src/opentelemetry/trace/__init__.py
+++ b/opentelemetry-api/src/opentelemetry/trace/__init__.py
@@ -70,44 +70,13 @@
`set_tracer_provider`.
"""
-__all__ = [
- "DEFAULT_TRACE_OPTIONS",
- "DEFAULT_TRACE_STATE",
- "INVALID_SPAN",
- "INVALID_SPAN_CONTEXT",
- "INVALID_SPAN_ID",
- "INVALID_TRACE_ID",
- "DefaultSpan",
- "DefaultTracer",
- "DefaultTracerProvider",
- "LazyLink",
- "Link",
- "LinkBase",
- "ParentSpan",
- "Span",
- "SpanContext",
- "SpanKind",
- "TraceFlags",
- "TraceState",
- "TracerProvider",
- "Tracer",
- "format_span_id",
- "format_trace_id",
- "get_current_span",
- "get_tracer",
- "get_tracer_provider",
- "set_tracer_provider",
- "set_span_in_context",
-]
import abc
import enum
-import types as python_types
import typing
from contextlib import contextmanager
from logging import getLogger
-from opentelemetry.configuration import Configuration
from opentelemetry.trace.propagation import (
get_current_span,
set_span_in_context,
@@ -461,11 +430,16 @@ def get_tracer(
def set_tracer_provider(tracer_provider: TracerProvider) -> None:
- """Sets the current global :class:`~.TracerProvider` object."""
+ """Sets the current global :class:`~.TracerProvider` object.
+
+ This can only be done once, a warning will be logged if any furter attempt
+ is made.
+ """
global _TRACER_PROVIDER # pylint: disable=global-statement
if _TRACER_PROVIDER is not None:
- logger.warning("Overriding current TracerProvider")
+ logger.warning("Overriding of current TracerProvider is not allowed")
+ return
_TRACER_PROVIDER = tracer_provider
@@ -478,3 +452,35 @@ def get_tracer_provider() -> TracerProvider:
_TRACER_PROVIDER = _load_trace_provider("tracer_provider")
return _TRACER_PROVIDER
+
+
+__all__ = [
+ "DEFAULT_TRACE_OPTIONS",
+ "DEFAULT_TRACE_STATE",
+ "INVALID_SPAN",
+ "INVALID_SPAN_CONTEXT",
+ "INVALID_SPAN_ID",
+ "INVALID_TRACE_ID",
+ "DefaultSpan",
+ "DefaultTracer",
+ "DefaultTracerProvider",
+ "LazyLink",
+ "Link",
+ "LinkBase",
+ "ParentSpan",
+ "Span",
+ "SpanContext",
+ "SpanKind",
+ "TraceFlags",
+ "TraceState",
+ "TracerProvider",
+ "Tracer",
+ "format_span_id",
+ "format_trace_id",
+ "get_current_span",
+ "get_tracer",
+ "get_tracer_provider",
+ "set_tracer_provider",
+ "set_span_in_context",
+ "Status",
+]
diff --git a/opentelemetry-api/tests/metrics/test_globals.py b/opentelemetry-api/tests/metrics/test_globals.py
index 9b9cfb94d90..513dd7dd2df 100644
--- a/opentelemetry-api/tests/metrics/test_globals.py
+++ b/opentelemetry-api/tests/metrics/test_globals.py
@@ -16,8 +16,8 @@ def test_meter_provider_override_warning(self):
test.output,
[
(
- "WARNING:opentelemetry.metrics:Overriding current "
- "MeterProvider"
+ "WARNING:opentelemetry.metrics:Overriding of current "
+ "MeterProvider is not allowed"
)
],
)
diff --git a/opentelemetry-api/tests/trace/test_globals.py b/opentelemetry-api/tests/trace/test_globals.py
index 4e105eb1f3c..dc7c02e5139 100644
--- a/opentelemetry-api/tests/trace/test_globals.py
+++ b/opentelemetry-api/tests/trace/test_globals.py
@@ -25,17 +25,19 @@ def test_get_tracer(self):
def test_tracer_provider_override_warning(self):
"""trace.set_tracer_provider should throw a warning when overridden"""
trace.set_tracer_provider(TracerProvider())
+ tracer_provider = trace.get_tracer_provider()
with self.assertLogs(level=WARNING) as test:
trace.set_tracer_provider(TracerProvider())
self.assertEqual(
test.output,
[
(
- "WARNING:opentelemetry.trace:Overriding current "
- "TracerProvider"
+ "WARNING:opentelemetry.trace:Overriding of current "
+ "TracerProvider is not allowed"
)
],
)
+ self.assertIs(tracer_provider, trace.get_tracer_provider())
class TestTracer(unittest.TestCase):
diff --git a/tests/util/src/opentelemetry/test/test_base.py b/tests/util/src/opentelemetry/test/test_base.py
index 96d98cff3df..e2d99c0acf3 100644
--- a/tests/util/src/opentelemetry/test/test_base.py
+++ b/tests/util/src/opentelemetry/test/test_base.py
@@ -34,15 +34,27 @@ def setUpClass(cls):
cls.original_tracer_provider = trace_api.get_tracer_provider()
result = cls.create_tracer_provider()
cls.tracer_provider, cls.memory_exporter = result
+ # This is done because set_tracer_provider cannot override the
+ # current tracer provider.
+ trace_api._TRACER_PROVIDER = None # pylint: disable=protected-access
trace_api.set_tracer_provider(cls.tracer_provider)
cls.original_meter_provider = metrics_api.get_meter_provider()
result = cls.create_meter_provider()
cls.meter_provider, cls.memory_metrics_exporter = result
+ # This is done because set_meter_provider cannot override the
+ # current meter provider.
+ metrics_api._METER_PROVIDER = None # pylint: disable=protected-access
metrics_api.set_meter_provider(cls.meter_provider)
@classmethod
def tearDownClass(cls):
+ # This is done because set_tracer_provider cannot override the
+ # current tracer provider.
+ trace_api._TRACER_PROVIDER = None # pylint: disable=protected-access
trace_api.set_tracer_provider(cls.original_tracer_provider)
+ # This is done because set_meter_provider cannot override the
+ # current meter provider.
+ metrics_api._METER_PROVIDER = None # pylint: disable=protected-access
metrics_api.set_meter_provider(cls.original_meter_provider)
def setUp(self):
From c42c5f3b4ba0bcc46269a803239de344f8ba91be Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Thu, 6 Aug 2020 17:10:35 -0600
Subject: [PATCH 71/79] Fix grpc version to previous version (#975)
---
instrumentation/opentelemetry-instrumentation-grpc/setup.cfg | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
index 0308a229f8f..4d40278237b 100644
--- a/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
install_requires =
opentelemetry-api == 0.12.dev0
opentelemetry-sdk == 0.12.dev0
- grpcio ~= 1.27
+ grpcio == 1.30
[options.extras_require]
test =
From b3c2a0372e27eff4594891db8ad04c438e9fdf4c Mon Sep 17 00:00:00 2001
From: alrex
Date: Fri, 7 Aug 2020 14:57:04 -0700
Subject: [PATCH 72/79] fix: update default OTLP port to 55680 (#977)
---
exporter/opentelemetry-exporter-otlp/CHANGELOG.md | 2 ++
.../src/opentelemetry/exporter/otlp/__init__.py | 2 +-
.../src/opentelemetry/exporter/otlp/trace_exporter/__init__.py | 2 +-
.../tests/test_otlp_trace_exporter.py | 2 +-
4 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
index bcaa7d11811..2379a94cb3b 100644
--- a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
@@ -4,6 +4,8 @@
- Change package name to opentelemetry-exporter-otlp
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+- Update default port to 55680
+ ([#977](https://github.com/open-telemetry/opentelemetry-python/pull/977))
## Version 0.11b0
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 dca0042a68d..a078cb7ccc9 100644
--- a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py
+++ b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/__init__.py
@@ -43,7 +43,7 @@
trace.set_tracer_provider(TracerProvider(resource=resource)))
tracer = trace.get_tracer(__name__)
- otlp_exporter = OTLPSpanExporter(endpoint="localhost:55678")
+ otlp_exporter = OTLPSpanExporter(endpoint="localhost:55680")
span_processor = BatchExportSpanProcessor(otlp_exporter)
diff --git a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py
index 47a862908e3..be1419fa39c 100644
--- a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py
+++ b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/trace_exporter/__init__.py
@@ -89,7 +89,7 @@ class OTLPSpanExporter(SpanExporter):
def __init__(
self,
- endpoint="localhost:55678",
+ endpoint="localhost:55680",
credentials: ChannelCredentials = None,
metadata=None,
):
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 c7e26508b25..9058937f876 100644
--- a/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py
+++ b/exporter/opentelemetry-exporter-otlp/tests/test_otlp_trace_exporter.py
@@ -98,7 +98,7 @@ def setUp(self):
self.server = server(ThreadPoolExecutor(max_workers=10))
- self.server.add_insecure_port("[::]:55678")
+ self.server.add_insecure_port("[::]:55680")
self.server.start()
From 76b1ed0d6f4d41df0075953dcfbece72dd4bb344 Mon Sep 17 00:00:00 2001
From: alrex
Date: Wed, 12 Aug 2020 10:29:56 -0500
Subject: [PATCH 73/79] Renaming OTEL_RESOURCE env var (#973)
---
opentelemetry-sdk/CHANGELOG.md | 2 ++
.../src/opentelemetry/sdk/resources/__init__.py | 2 +-
.../tests/resources/test_resources.py | 14 +++++++-------
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index 34032424ff9..923087f4214 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -7,6 +7,8 @@
([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
- Implement Views in metrics SDK
([#596](https://github.com/open-telemetry/opentelemetry-python/pull/596))
+- Update environment variable OTEL_RESOURCE to OTEL_RESOURCE_ATTRIBUTES as per
+ the specification
## Version 0.11b0
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py
index a8e9ac65be1..d9752e3b3cb 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/resources/__init__.py
@@ -74,7 +74,7 @@ def detect(self) -> "Resource":
class OTELResourceDetector(ResourceDetector):
# pylint: disable=no-self-use
def detect(self) -> "Resource":
- env_resources_items = os.environ.get("OTEL_RESOURCE")
+ env_resources_items = os.environ.get("OTEL_RESOURCE_ATTRIBUTES")
env_resource_map = {}
if env_resources_items:
env_resource_map = {
diff --git a/opentelemetry-sdk/tests/resources/test_resources.py b/opentelemetry-sdk/tests/resources/test_resources.py
index 3aafad1cf33..84d0cf2ae59 100644
--- a/opentelemetry-sdk/tests/resources/test_resources.py
+++ b/opentelemetry-sdk/tests/resources/test_resources.py
@@ -167,36 +167,36 @@ def test_resource_detector_raise_error(self):
class TestOTELResourceDetector(unittest.TestCase):
def setUp(self) -> None:
- os.environ["OTEL_RESOURCE"] = ""
+ os.environ["OTEL_RESOURCE_ATTRIBUTES"] = ""
def tearDown(self) -> None:
- os.environ.pop("OTEL_RESOURCE")
+ os.environ.pop("OTEL_RESOURCE_ATTRIBUTES")
def test_empty(self):
detector = resources.OTELResourceDetector()
- os.environ["OTEL_RESOURCE"] = ""
+ os.environ["OTEL_RESOURCE_ATTRIBUTES"] = ""
self.assertEqual(detector.detect(), resources.Resource.create_empty())
def test_one(self):
detector = resources.OTELResourceDetector()
- os.environ["OTEL_RESOURCE"] = "k=v"
+ os.environ["OTEL_RESOURCE_ATTRIBUTES"] = "k=v"
self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
def test_one_with_whitespace(self):
detector = resources.OTELResourceDetector()
- os.environ["OTEL_RESOURCE"] = " k = v "
+ os.environ["OTEL_RESOURCE_ATTRIBUTES"] = " k = v "
self.assertEqual(detector.detect(), resources.Resource({"k": "v"}))
def test_multiple(self):
detector = resources.OTELResourceDetector()
- os.environ["OTEL_RESOURCE"] = "k=v,k2=v2"
+ os.environ["OTEL_RESOURCE_ATTRIBUTES"] = "k=v,k2=v2"
self.assertEqual(
detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
)
def test_multiple_with_whitespace(self):
detector = resources.OTELResourceDetector()
- os.environ["OTEL_RESOURCE"] = " k = v , k2 = v2 "
+ os.environ["OTEL_RESOURCE_ATTRIBUTES"] = " k = v , k2 = v2 "
self.assertEqual(
detector.detect(), resources.Resource({"k": "v", "k2": "v2"})
)
From cffc016baa53e0732a26120668554c6f5954f370 Mon Sep 17 00:00:00 2001
From: bitspradp
Date: Thu, 13 Aug 2020 18:30:18 +0100
Subject: [PATCH 74/79] Add protocol as an argument to the Jaeger exporter
constructor (#978)
---
.../opentelemetry-exporter-jaeger/CHANGELOG.md | 3 +++
.../src/opentelemetry/exporter/jaeger/__init__.py | 14 ++++++++++----
.../tests/test_jaeger_exporter.py | 5 +++++
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md
index 7b9a03d3122..48f7afd397e 100644
--- a/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md
@@ -5,6 +5,9 @@
- Change package name to opentelemetry-exporter-jaeger
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+- Thrift URL for Jaeger exporter doesn't allow HTTPS (hardcoded to HTTP)
+ ([#978] (https://github.com/open-telemetry/opentelemetry-python/pull/978))
+
## 0.8b0
Released 2020-05-27
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 993bf4f0872..afa0b2578f7 100644
--- a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py
+++ b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/__init__.py
@@ -42,6 +42,7 @@
# collector_host_name='localhost',
# collector_port=14268,
# collector_endpoint='/api/traces?format=jaeger.thrift',
+ # collector_protocol='http',
# username=xxxx, # optional
# password=xxxx, # optional
)
@@ -77,6 +78,7 @@
DEFAULT_AGENT_HOST_NAME = "localhost"
DEFAULT_AGENT_PORT = 6831
DEFAULT_COLLECTOR_ENDPOINT = "/api/traces?format=jaeger.thrift"
+DEFAULT_COLLECTOR_PROTOCOL = "http"
UDP_PACKET_MAX_LENGTH = 65000
@@ -91,10 +93,11 @@ class JaegerSpanExporter(SpanExporter):
when query for spans.
agent_host_name: The host name of the Jaeger-Agent.
agent_port: The port of the Jaeger-Agent.
- collector_host_name: The host name of the Jaeger-Collector HTTP
+ collector_host_name: The host name of the Jaeger-Collector HTTP/HTTPS
Thrift.
- collector_port: The port of the Jaeger-Collector HTTP Thrift.
- collector_endpoint: The endpoint of the Jaeger-Collector HTTP Thrift.
+ collector_port: The port of the Jaeger-Collector HTTP/HTTPS Thrift.
+ collector_endpoint: The endpoint of the Jaeger-Collector HTTP/HTTPS Thrift.
+ collector_protocol: The transfer protocol for the Jaeger-Collector(HTTP or HTTPS).
username: The user name of the Basic Auth if authentication is
required.
password: The password of the Basic Auth if authentication is
@@ -109,6 +112,7 @@ def __init__(
collector_host_name=None,
collector_port=None,
collector_endpoint=DEFAULT_COLLECTOR_ENDPOINT,
+ collector_protocol=DEFAULT_COLLECTOR_PROTOCOL,
username=None,
password=None,
):
@@ -119,6 +123,7 @@ def __init__(
self.collector_host_name = collector_host_name
self.collector_port = collector_port
self.collector_endpoint = collector_endpoint
+ self.collector_protocol = collector_protocol
self.username = username
self.password = password
self._collector = None
@@ -139,7 +144,8 @@ def collector(self):
if self.collector_host_name is None or self.collector_port is None:
return None
- thrift_url = "http://{}:{}{}".format(
+ thrift_url = "{}://{}:{}{}".format(
+ self.collector_protocol,
self.collector_host_name,
self.collector_port,
self.collector_endpoint,
diff --git a/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py b/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py
index 30b7c85826a..7b3916c5b95 100644
--- a/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py
+++ b/exporter/opentelemetry-exporter-jaeger/tests/test_jaeger_exporter.py
@@ -46,6 +46,7 @@ def test_constructor_default(self):
thrift_port = None
agent_port = 6831
collector_endpoint = "/api/traces?format=jaeger.thrift"
+ collector_protocol = "http"
exporter = jaeger_exporter.JaegerSpanExporter(service_name)
self.assertEqual(exporter.service_name, service_name)
@@ -53,6 +54,7 @@ def test_constructor_default(self):
self.assertEqual(exporter.agent_host_name, host_name)
self.assertEqual(exporter.agent_port, agent_port)
self.assertEqual(exporter.collector_port, thrift_port)
+ self.assertEqual(exporter.collector_protocol, collector_protocol)
self.assertEqual(exporter.collector_endpoint, collector_endpoint)
self.assertEqual(exporter.username, None)
self.assertEqual(exporter.password, None)
@@ -65,6 +67,7 @@ def test_constructor_explicit(self):
collector_host_name = "opentelemetry.io"
collector_port = 15875
collector_endpoint = "/myapi/traces?format=jaeger.thrift"
+ collector_protocol = "https"
agent_port = 14268
agent_host_name = "opentelemetry.io"
@@ -78,6 +81,7 @@ def test_constructor_explicit(self):
collector_host_name=collector_host_name,
collector_port=collector_port,
collector_endpoint=collector_endpoint,
+ collector_protocol="https",
agent_host_name=agent_host_name,
agent_port=agent_port,
username=username,
@@ -88,6 +92,7 @@ def test_constructor_explicit(self):
self.assertEqual(exporter.agent_port, agent_port)
self.assertEqual(exporter.collector_host_name, collector_host_name)
self.assertEqual(exporter.collector_port, collector_port)
+ self.assertEqual(exporter.collector_protocol, collector_protocol)
self.assertTrue(exporter.collector is not None)
self.assertEqual(exporter.collector.auth, auth)
# property should not construct new object
From 3efe8541c886c55a70a6505c0b0f2503f210ee8e Mon Sep 17 00:00:00 2001
From: Aaron Abbott
Date: Thu, 13 Aug 2020 15:35:38 -0400
Subject: [PATCH 75/79] OC Exporter - send start_timestamp, resource labels,
and convert labels to strings (#937)
---
.../CHANGELOG.md | 2 +
.../opencensus/metrics_exporter/__init__.py | 53 ++++++++-
.../test_otcollector_metrics_exporter.py | 111 ++++++++++++++++--
3 files changed, 155 insertions(+), 11 deletions(-)
diff --git a/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md
index c7f0cf69b5c..13924e489b3 100644
--- a/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md
@@ -4,6 +4,8 @@
- Change package name to opentelemetry-exporter-opencensus
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
+- Send start_timestamp and convert labels to strings
+ ([#937](https://github.com/open-telemetry/opentelemetry-python/pull/937))
## 0.8b0
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 e83e779df67..76986a8a59d 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
@@ -15,14 +15,16 @@
"""OpenCensus Collector Metrics Exporter."""
import logging
-from typing import Sequence
+from typing import Dict, Sequence
import grpc
+from google.protobuf.timestamp_pb2 import Timestamp
from opencensus.proto.agent.metrics.v1 import (
metrics_service_pb2,
metrics_service_pb2_grpc,
)
from opencensus.proto.metrics.v1 import metrics_pb2
+from opencensus.proto.resource.v1 import resource_pb2
import opentelemetry.exporter.opencensus.util as utils
from opentelemetry.sdk.metrics import Counter, Metric
@@ -34,6 +36,14 @@
DEFAULT_ENDPOINT = "localhost:55678"
+# In priority order. See collector impl https://bit.ly/2DvJW6y
+_OT_LABEL_PRESENCE_TO_RESOURCE_TYPE = (
+ ("container.name", "container"),
+ ("k8s.pod.name", "k8s"),
+ ("host.name", "host"),
+ ("cloud.provider", "cloud"),
+)
+
logger = logging.getLogger(__name__)
@@ -65,6 +75,8 @@ def __init__(
self.client = client
self.node = utils.get_node(service_name, host_name)
+ self.exporter_start_timestamp = Timestamp()
+ self.exporter_start_timestamp.GetCurrentTime()
def export(
self, metric_records: Sequence[MetricRecord]
@@ -89,7 +101,9 @@ def shutdown(self) -> None:
def generate_metrics_requests(
self, metrics: Sequence[MetricRecord]
) -> metrics_service_pb2.ExportMetricsServiceRequest:
- collector_metrics = translate_to_collector(metrics)
+ collector_metrics = translate_to_collector(
+ metrics, self.exporter_start_timestamp
+ )
service_request = metrics_service_pb2.ExportMetricsServiceRequest(
node=self.node, metrics=collector_metrics
)
@@ -99,6 +113,7 @@ def generate_metrics_requests(
# pylint: disable=too-many-branches
def translate_to_collector(
metric_records: Sequence[MetricRecord],
+ exporter_start_timestamp: Timestamp,
) -> Sequence[metrics_pb2.Metric]:
collector_metrics = []
for metric_record in metric_records:
@@ -109,7 +124,8 @@ def translate_to_collector(
label_keys.append(metrics_pb2.LabelKey(key=label_tuple[0]))
label_values.append(
metrics_pb2.LabelValue(
- has_value=label_tuple[1] is not None, value=label_tuple[1]
+ has_value=label_tuple[1] is not None,
+ value=str(label_tuple[1]),
)
)
@@ -121,13 +137,23 @@ def translate_to_collector(
label_keys=label_keys,
)
+ # If cumulative and stateful, explicitly set the start_timestamp to
+ # exporter start time.
+ if metric_record.instrument.meter.batcher.stateful:
+ start_timestamp = exporter_start_timestamp
+ else:
+ start_timestamp = None
+
timeseries = metrics_pb2.TimeSeries(
label_values=label_values,
points=[get_collector_point(metric_record)],
+ start_timestamp=start_timestamp,
)
collector_metrics.append(
metrics_pb2.Metric(
- metric_descriptor=metric_descriptor, timeseries=[timeseries]
+ metric_descriptor=metric_descriptor,
+ timeseries=[timeseries],
+ resource=get_resource(metric_record),
)
)
return collector_metrics
@@ -162,3 +188,22 @@ def get_collector_point(metric_record: MetricRecord) -> metrics_pb2.Point:
)
)
return point
+
+
+def get_resource(metric_record: MetricRecord) -> resource_pb2.Resource:
+ resource_labels = metric_record.instrument.meter.resource.labels
+ return resource_pb2.Resource(
+ type=infer_oc_resource_type(resource_labels),
+ labels={k: str(v) for k, v in resource_labels.items()},
+ )
+
+
+def infer_oc_resource_type(resource_labels: Dict[str, str]) -> str:
+ """Convert from OT resource labels to OC resource type"""
+ for (
+ ot_resource_key,
+ oc_resource_type,
+ ) in _OT_LABEL_PRESENCE_TO_RESOURCE_TYPE:
+ if ot_resource_key in resource_labels:
+ return oc_resource_type
+ return ""
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 1403c6c59e9..1ec1a574487 100644
--- a/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py
+++ b/exporter/opentelemetry-exporter-opencensus/tests/test_otcollector_metrics_exporter.py
@@ -32,6 +32,7 @@
MetricsExportResult,
aggregate,
)
+from opentelemetry.sdk.resources import Resource
# pylint: disable=no-member
@@ -39,9 +40,16 @@ class TestCollectorMetricsExporter(unittest.TestCase):
@classmethod
def setUpClass(cls):
# pylint: disable=protected-access
- metrics.set_meter_provider(MeterProvider())
+ cls._resource_labels = {
+ "key_with_str_value": "some string",
+ "key_with_int_val": 321,
+ "key_with_true": True,
+ }
+ metrics.set_meter_provider(
+ MeterProvider(resource=Resource(cls._resource_labels))
+ )
cls._meter = metrics.get_meter(__name__)
- cls._labels = {"environment": "staging"}
+ cls._labels = {"environment": "staging", "number": 321}
cls._key_labels = get_dict_as_key(cls._labels)
def test_constructor(self):
@@ -119,7 +127,7 @@ def test_export(self):
client=mock_client, host_name=host_name
)
test_metric = self._meter.create_metric(
- "testname", "testdesc", "unit", int, Counter,
+ "testname", "testdesc", "unit", int, Counter, self._labels.keys(),
)
record = MetricRecord(
test_metric, self._key_labels, aggregate.SumAggregator(),
@@ -142,13 +150,16 @@ def test_export(self):
def test_translate_to_collector(self):
test_metric = self._meter.create_metric(
- "testname", "testdesc", "unit", int, Counter,
+ "testname", "testdesc", "unit", int, Counter, self._labels.keys()
)
aggregator = aggregate.SumAggregator()
aggregator.update(123)
aggregator.take_checkpoint()
record = MetricRecord(test_metric, self._key_labels, aggregator,)
- output_metrics = metrics_exporter.translate_to_collector([record])
+ start_timestamp = Timestamp()
+ output_metrics = metrics_exporter.translate_to_collector(
+ [record], start_timestamp,
+ )
self.assertEqual(len(output_metrics), 1)
self.assertIsInstance(output_metrics[0], metrics_pb2.Metric)
self.assertEqual(output_metrics[0].metric_descriptor.name, "testname")
@@ -161,14 +172,44 @@ def test_translate_to_collector(self):
metrics_pb2.MetricDescriptor.CUMULATIVE_INT64,
)
self.assertEqual(
- len(output_metrics[0].metric_descriptor.label_keys), 1
+ len(output_metrics[0].metric_descriptor.label_keys), 2
)
self.assertEqual(
output_metrics[0].metric_descriptor.label_keys[0].key,
"environment",
)
+ self.assertEqual(
+ output_metrics[0].metric_descriptor.label_keys[1].key, "number",
+ )
+
+ self.assertIsNotNone(output_metrics[0].resource)
+ self.assertEqual(
+ output_metrics[0].resource.type, "",
+ )
+ self.assertEqual(
+ output_metrics[0].resource.labels["key_with_str_value"],
+ self._resource_labels["key_with_str_value"],
+ )
+ self.assertIsInstance(
+ output_metrics[0].resource.labels["key_with_int_val"], str,
+ )
+ self.assertEqual(
+ output_metrics[0].resource.labels["key_with_int_val"],
+ str(self._resource_labels["key_with_int_val"]),
+ )
+ self.assertIsInstance(
+ output_metrics[0].resource.labels["key_with_true"], str,
+ )
+ self.assertEqual(
+ output_metrics[0].resource.labels["key_with_true"],
+ str(self._resource_labels["key_with_true"]),
+ )
+
self.assertEqual(len(output_metrics[0].timeseries), 1)
- self.assertEqual(len(output_metrics[0].timeseries[0].label_values), 1)
+ self.assertEqual(len(output_metrics[0].timeseries[0].label_values), 2)
+ self.assertEqual(
+ output_metrics[0].timeseries[0].start_timestamp, start_timestamp
+ )
self.assertEqual(
output_metrics[0].timeseries[0].label_values[0].has_value, True
)
@@ -187,3 +228,59 @@ def test_translate_to_collector(self):
self.assertEqual(
output_metrics[0].timeseries[0].points[0].int64_value, 123
)
+
+ def test_infer_ot_resource_type(self):
+ # empty resource
+ self.assertEqual(metrics_exporter.infer_oc_resource_type({}), "")
+
+ # container
+ self.assertEqual(
+ metrics_exporter.infer_oc_resource_type(
+ {
+ "k8s.cluster.name": "cluster1",
+ "k8s.pod.name": "pod1",
+ "k8s.namespace.name": "namespace1",
+ "container.name": "container-name1",
+ "cloud.account.id": "proj1",
+ "cloud.zone": "zone1",
+ }
+ ),
+ "container",
+ )
+
+ # k8s pod
+ self.assertEqual(
+ metrics_exporter.infer_oc_resource_type(
+ {
+ "k8s.cluster.name": "cluster1",
+ "k8s.pod.name": "pod1",
+ "k8s.namespace.name": "namespace1",
+ "cloud.zone": "zone1",
+ }
+ ),
+ "k8s",
+ )
+
+ # host
+ self.assertEqual(
+ metrics_exporter.infer_oc_resource_type(
+ {
+ "k8s.cluster.name": "cluster1",
+ "cloud.zone": "zone1",
+ "host.name": "node1",
+ }
+ ),
+ "host",
+ )
+
+ # cloud
+ self.assertEqual(
+ metrics_exporter.infer_oc_resource_type(
+ {
+ "cloud.provider": "gcp",
+ "host.id": "inst1",
+ "cloud.zone": "zone1",
+ }
+ ),
+ "cloud",
+ )
From e8f7b6ff684318730a64d1f330653d52919c99d6 Mon Sep 17 00:00:00 2001
From: Connor Adams
Date: Thu, 13 Aug 2020 22:13:36 -0400
Subject: [PATCH 76/79] views: properly hash config dict, don't copy aggregator
when stateful (#967)
---
.../sdk/metrics/export/batcher.py | 28 +++--
.../src/opentelemetry/sdk/util/__init__.py | 11 +-
opentelemetry-sdk/tests/metrics/test_view.py | 114 +++++++++++++++++-
3 files changed, 138 insertions(+), 15 deletions(-)
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py
index 79b27674c0a..1c1858ebbae 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/export/batcher.py
@@ -61,6 +61,7 @@ def process(self, record) -> None:
"""Stores record information to be ready for exporting."""
# Checkpoints the current aggregator value to be collected for export
aggregator = record.aggregator
+ aggregator.take_checkpoint()
# The uniqueness of a batch record is defined by a specific metric
# using an aggregator type with a specific set of labels.
@@ -72,19 +73,20 @@ def process(self, record) -> None:
get_dict_as_key(aggregator.config),
record.labels,
)
+
batch_value = self._batch_map.get(key)
+
if batch_value:
- if batch_value != aggregator:
- aggregator.take_checkpoint()
- batch_value.merge(aggregator)
- else:
- aggregator.take_checkpoint()
-
- if self.stateful:
- # if stateful batcher, create a copy of the aggregator and update
- # it with the current checkpointed value for long-term storage
- aggregator = record.aggregator.__class__(
- config=record.aggregator.config
- )
- aggregator.merge(record.aggregator)
+ # Update the stored checkpointed value if exists. The call to merge
+ # here combines only identical records (same key).
+ batch_value.merge(aggregator)
+ return
+
+ # create a copy of the aggregator and update
+ # it with the current checkpointed value for long-term storage
+ aggregator = record.aggregator.__class__(
+ config=record.aggregator.config
+ )
+ aggregator.merge(record.aggregator)
+
self._batch_map[key] = aggregator
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py
index 2e0d2e85a8e..09d7283cab7 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/util/__init__.py
@@ -33,7 +33,16 @@ def ns_to_iso_str(nanoseconds):
def get_dict_as_key(labels):
"""Converts a dict to be used as a unique key"""
- return tuple(sorted(labels.items()))
+ return tuple(
+ sorted(
+ map(
+ lambda kv: (kv[0], tuple(kv[1]))
+ if isinstance(kv[1], list)
+ else kv,
+ labels.items(),
+ )
+ )
+ )
class BoundedList(Sequence):
diff --git a/opentelemetry-sdk/tests/metrics/test_view.py b/opentelemetry-sdk/tests/metrics/test_view.py
index 7dd7571d38e..0de6b227317 100644
--- a/opentelemetry-sdk/tests/metrics/test_view.py
+++ b/opentelemetry-sdk/tests/metrics/test_view.py
@@ -16,9 +16,10 @@
from unittest import mock
from opentelemetry.sdk import metrics
-from opentelemetry.sdk.metrics import Counter, view
+from opentelemetry.sdk.metrics import Counter, ValueRecorder, view
from opentelemetry.sdk.metrics.export import aggregate
from opentelemetry.sdk.metrics.export.aggregate import (
+ HistogramAggregator,
MinMaxSumCountAggregator,
SumAggregator,
)
@@ -185,6 +186,117 @@ def test_multiple_views(self):
self.assertTrue((label2, 5) in sum_set)
+class TestHistogramView(unittest.TestCase):
+ def test_histogram_stateful(self):
+ meter = metrics.MeterProvider(stateful=True).get_meter(__name__)
+ exporter = InMemoryMetricsExporter()
+ controller = PushController(meter, exporter, 30)
+
+ requests_size = meter.create_metric(
+ name="requests_size",
+ description="size of requests",
+ unit="1",
+ value_type=int,
+ metric_type=ValueRecorder,
+ )
+
+ size_view = View(
+ requests_size,
+ HistogramAggregator,
+ aggregator_config={"bounds": [20, 40, 60, 80, 100]},
+ label_keys=["environment"],
+ view_config=ViewConfig.LABEL_KEYS,
+ )
+
+ meter.register_view(size_view)
+
+ # Since this is using the HistogramAggregator, the bucket counts will be reflected
+ # with each record
+ requests_size.record(25, {"environment": "staging", "test": "value"})
+ requests_size.record(1, {"environment": "staging", "test": "value2"})
+ requests_size.record(200, {"environment": "staging", "test": "value3"})
+
+ controller.tick()
+
+ metrics_list = exporter.get_exported_metrics()
+ self.assertEqual(len(metrics_list), 1)
+ checkpoint = metrics_list[0].aggregator.checkpoint
+ self.assertEqual(
+ tuple(checkpoint.items()),
+ ((20, 1), (40, 1), (60, 0), (80, 0), (100, 0), (">", 1)),
+ )
+ exporter.clear()
+
+ requests_size.record(25, {"environment": "staging", "test": "value"})
+ requests_size.record(1, {"environment": "staging", "test": "value2"})
+ requests_size.record(200, {"environment": "staging", "test": "value3"})
+
+ controller.tick()
+
+ metrics_list = exporter.get_exported_metrics()
+ self.assertEqual(len(metrics_list), 1)
+ checkpoint = metrics_list[0].aggregator.checkpoint
+ self.assertEqual(
+ tuple(checkpoint.items()),
+ ((20, 2), (40, 2), (60, 0), (80, 0), (100, 0), (">", 2)),
+ )
+
+ def test_histogram_stateless(self):
+ # Use the meter type provided by the SDK package
+ meter = metrics.MeterProvider(stateful=False).get_meter(__name__)
+ exporter = InMemoryMetricsExporter()
+ controller = PushController(meter, exporter, 30)
+
+ requests_size = meter.create_metric(
+ name="requests_size",
+ description="size of requests",
+ unit="1",
+ value_type=int,
+ metric_type=ValueRecorder,
+ )
+
+ size_view = View(
+ requests_size,
+ HistogramAggregator,
+ aggregator_config={"bounds": [20, 40, 60, 80, 100]},
+ label_keys=["environment"],
+ view_config=ViewConfig.LABEL_KEYS,
+ )
+
+ meter.register_view(size_view)
+
+ # Since this is using the HistogramAggregator, the bucket counts will be reflected
+ # with each record
+ requests_size.record(25, {"environment": "staging", "test": "value"})
+ requests_size.record(1, {"environment": "staging", "test": "value2"})
+ requests_size.record(200, {"environment": "staging", "test": "value3"})
+
+ controller.tick()
+
+ metrics_list = exporter.get_exported_metrics()
+ self.assertEqual(len(metrics_list), 1)
+ checkpoint = metrics_list[0].aggregator.checkpoint
+ self.assertEqual(
+ tuple(checkpoint.items()),
+ ((20, 1), (40, 1), (60, 0), (80, 0), (100, 0), (">", 1)),
+ )
+ exporter.clear()
+
+ requests_size.record(25, {"environment": "staging", "test": "value"})
+ requests_size.record(1, {"environment": "staging", "test": "value2"})
+ requests_size.record(200, {"environment": "staging", "test": "value3"})
+
+ controller.tick()
+
+ metrics_list = exporter.get_exported_metrics()
+ self.assertEqual(len(metrics_list), 1)
+ checkpoint = metrics_list[0].aggregator.checkpoint
+ self.assertEqual(
+ tuple(checkpoint.items()),
+ ((20, 1), (40, 1), (60, 0), (80, 0), (100, 0), (">", 1)),
+ )
+
+
class DummyMetric(metrics.Metric):
# pylint: disable=W0231
def __init__(self):
From 3341a8eb049cfc0348a5144d2188c68ee009087c Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Fri, 14 Aug 2020 09:24:58 -0600
Subject: [PATCH 77/79] instrumentation/opentracing-shim: Preserve parent-child
relationship between OpenTelemetry and OpenTracing spans (#924)
---
.../opentracing_shim/__init__.py | 5 ++++
.../tests/test_shim.py | 29 ++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
index 6c76444e6ee..dd05feecff2 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
@@ -570,6 +570,11 @@ def start_active_span(
:class:`ScopeManagerShim`.
"""
+ current_span = get_current_span()
+
+ if child_of is None and current_span is not INVALID_SPAN_CONTEXT:
+ child_of = SpanShim(None, None, current_span)
+
span = self.start_span(
operation_name=operation_name,
child_of=child_of,
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
index 445ce6ce161..c880913a877 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/tests/test_shim.py
@@ -557,7 +557,6 @@ def test_extract_binary(self):
self.shim.extract(opentracing.Format.BINARY, bytearray())
def test_baggage(self):
- """Test SpanShim baggage being set and being immutable"""
span_context_shim = SpanContextShim(
trace.SpanContext(1234, 5678, is_remote=False)
@@ -592,3 +591,31 @@ def test_active(self):
# Verify no span is active.
self.assertIsNone(self.shim.active_span)
+
+ def test_mixed_mode(self):
+ """Test that span parent-child relationship is kept between
+ OpenTelemetry and the OpenTracing shim"""
+
+ span_shim = self.shim.start_span("TestSpan16")
+
+ with self.shim.scope_manager.activate(span_shim, finish_on_close=True):
+
+ with (
+ TracerProvider()
+ .get_tracer(__name__)
+ .start_as_current_span("abc")
+ ) as opentelemetry_span:
+
+ self.assertIs(
+ span_shim.unwrap().context, opentelemetry_span.parent,
+ )
+
+ with (
+ TracerProvider().get_tracer(__name__).start_as_current_span("abc")
+ ) as opentelemetry_span:
+
+ with self.shim.start_active_span("TestSpan17") as scope:
+
+ self.assertIs(
+ scope.span.unwrap().parent, opentelemetry_span.context,
+ )
From 2bc7d35ee10eb9e5c4e03cc28472321f4f822509 Mon Sep 17 00:00:00 2001
From: Diego Hurtado
Date: Fri, 14 Aug 2020 10:47:12 -0600
Subject: [PATCH 78/79] Revisit OpenTracing Shim docs (#925)
Co-authored-by: Yusuke Tsutsumi
---
.../opentracing_shim/__init__.py | 308 ++++++++++--------
1 file changed, 164 insertions(+), 144 deletions(-)
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
index dd05feecff2..90d7f0a30cb 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/__init__.py
@@ -32,7 +32,7 @@
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.instrumentation.opentracing_shim import create_tracer
- # Tell OpenTelemetry which Tracer implementation to use.
+ # Define which OpenTelemetry Tracer provider implementation to use.
trace.set_tracer_provider(TracerProvider())
# Create an OpenTelemetry Tracer.
@@ -86,27 +86,39 @@
# pylint:disable=no-member
import logging
+from typing import Optional, TypeVar, Union
-import opentracing
from deprecated import deprecated
+from opentracing import (
+ Format,
+ Scope,
+ ScopeManager,
+ Span,
+ SpanContext,
+ Tracer,
+ UnsupportedFormatException,
+)
from opentelemetry import propagators
from opentelemetry.context import Context, attach, detach, get_value, set_value
from opentelemetry.correlationcontext import get_correlation, set_correlation
from opentelemetry.instrumentation.opentracing_shim import util
from opentelemetry.instrumentation.opentracing_shim.version import __version__
+from opentelemetry.trace import INVALID_SPAN_CONTEXT, DefaultSpan, Link
+from opentelemetry.trace import SpanContext as OtelSpanContext
+from opentelemetry.trace import Tracer as OtelTracer
from opentelemetry.trace import (
- INVALID_SPAN_CONTEXT,
- DefaultSpan,
- Link,
+ TracerProvider,
get_current_span,
set_span_in_context,
)
+from opentelemetry.util.types import Attributes
+ValueT = TypeVar("ValueT", int, float, bool, str)
logger = logging.getLogger(__name__)
-def create_tracer(otel_tracer_provider):
+def create_tracer(otel_tracer_provider: TracerProvider) -> "TracerShim":
"""Creates a :class:`TracerShim` object from the provided OpenTelemetry
:class:`opentelemetry.trace.TracerProvider`.
@@ -114,10 +126,9 @@ def create_tracer(otel_tracer_provider):
:class:`opentracing.Tracer` using OpenTelemetry under the hood.
Args:
- otel_tracer_provider: A :class:`opentelemetry.trace.TracerProvider` to be
- used for constructing the :class:`TracerShim`. A tracer from this
- source will be used to perform the actual tracing when user code is
- instrumented using the OpenTracing API.
+ otel_tracer_provider: A tracer from this provider will be used to
+ perform the actual tracing when user code is instrumented using the
+ OpenTracing API.
Returns:
The created :class:`TracerShim`.
@@ -126,7 +137,7 @@ def create_tracer(otel_tracer_provider):
return TracerShim(otel_tracer_provider.get_tracer(__name__, __version__))
-class SpanContextShim(opentracing.SpanContext):
+class SpanContextShim(SpanContext):
"""Implements :class:`opentracing.SpanContext` by wrapping a
:class:`opentelemetry.trace.SpanContext` object.
@@ -135,12 +146,12 @@ class SpanContextShim(opentracing.SpanContext):
constructing the :class:`SpanContextShim`.
"""
- def __init__(self, otel_context):
+ def __init__(self, otel_context: OtelSpanContext):
self._otel_context = otel_context
# Context is being used here since it must be immutable.
self._baggage = Context()
- def unwrap(self):
+ def unwrap(self) -> OtelSpanContext:
"""Returns the wrapped :class:`opentelemetry.trace.SpanContext`
object.
@@ -152,15 +163,14 @@ def unwrap(self):
return self._otel_context
@property
- def baggage(self):
- """Implements the ``baggage`` property from the base class."""
+ def baggage(self) -> Context:
+ """Returns the ``baggage`` associated with this object"""
return self._baggage
-class SpanShim(opentracing.Span):
- """Implements :class:`opentracing.Span` by wrapping a
- :class:`opentelemetry.trace.Span` object.
+class SpanShim(Span):
+ """Wraps a :class:`opentelemetry.trace.Span` object.
Args:
tracer: The :class:`opentracing.Tracer` that created this `SpanShim`.
@@ -169,7 +179,7 @@ class SpanShim(opentracing.Span):
span: A :class:`opentelemetry.trace.Span` to wrap.
"""
- def __init__(self, tracer, context, span):
+ def __init__(self, tracer, context: SpanContextShim, span):
super().__init__(tracer, context)
self._otel_span = span
@@ -183,10 +193,12 @@ def unwrap(self):
return self._otel_span
- def set_operation_name(self, operation_name):
- """Implements the ``set_operation_name()`` method from the base class.
+ def set_operation_name(self, operation_name: str) -> "SpanShim":
+ """Updates the name of the wrapped OpenTelemetry span.
- Updates the name of the wrapped OpenTelemetry span.
+ Args:
+ operation_name: The new name to be used for the underlying
+ :class:`opentelemetry.trace.Span` object.
Returns:
Returns this :class:`SpanShim` instance to allow call chaining.
@@ -195,10 +207,8 @@ def set_operation_name(self, operation_name):
self._otel_span.update_name(operation_name)
return self
- def finish(self, finish_time=None):
- """Implements the ``finish()`` method from the base class.
-
- Ends the OpenTelemetry span wrapped by this :class:`SpanShim`.
+ def finish(self, finish_time: float = None):
+ """Ends the OpenTelemetry span wrapped by this :class:`SpanShim`.
If *finish_time* is provided, the time value is converted to the
OpenTelemetry time format (number of nanoseconds since the epoch,
@@ -208,9 +218,9 @@ def finish(self, finish_time=None):
when ending the span.
Args:
- finish_time(:obj:`float`, optional): An explicit finish time
- expressed as the number of seconds since the epoch as returned
- by :func:`time.time()`. Defaults to `None`.
+ finish_time: A value that represents the finish time expressed as
+ the number of seconds since the epoch as returned by
+ :func:`time.time()`.
"""
end_time = finish_time
@@ -218,15 +228,12 @@ def finish(self, finish_time=None):
end_time = util.time_seconds_to_ns(finish_time)
self._otel_span.end(end_time=end_time)
- def set_tag(self, key, value):
- """Implements the ``set_tag()`` method from the base class.
-
- Sets an OpenTelemetry attribute on the wrapped OpenTelemetry span.
+ def set_tag(self, key: str, value: ValueT) -> "SpanShim":
+ """Sets an OpenTelemetry attribute on the wrapped OpenTelemetry span.
Args:
- key(:obj:`str`): A tag key.
- value: A tag value. Can be one of :obj:`str`, :obj:`bool`,
- :obj:`int`, :obj:`float`
+ key: A tag key.
+ value: A tag value.
Returns:
Returns this :class:`SpanShim` instance to allow call chaining.
@@ -235,20 +242,23 @@ def set_tag(self, key, value):
self._otel_span.set_attribute(key, value)
return self
- def log_kv(self, key_values, timestamp=None):
- """Implements the ``log_kv()`` method from the base class.
-
- Logs an event for the wrapped OpenTelemetry span.
+ def log_kv(
+ self, key_values: Attributes, timestamp: float = None
+ ) -> "SpanShim":
+ """Logs an event for the wrapped OpenTelemetry span.
Note:
The OpenTracing API defines the values of *key_values* to be of any
type. However, the OpenTelemetry API requires that the values be
- one of :obj:`str`, :obj:`bool`, :obj:`float`. Therefore, only these
- types are supported as values.
+ any one of the types defined in
+ ``opentelemetry.trace.util.Attributes`` therefore, only these types
+ are supported as values.
Args:
- key_values(:obj:`dict`): A dict with :obj:`str` keys and values of
- type :obj:`str`, :obj:`bool` or :obj:`float`.
+ key_values: A dictionary as specified in
+ ``opentelemetry.trace.util.Attributes``.
+ timestamp: Timestamp of the OpenTelemetry event, will be generated
+ automatically if omitted.
Returns:
Returns this :class:`SpanShim` instance to allow call chaining.
@@ -271,20 +281,32 @@ def log(self, **kwargs):
def log_event(self, event, payload=None):
super().log_event(event, payload=payload)
- def set_baggage_item(self, key, value):
- """Implements the ``set_baggage_item`` method from the base class."""
+ def set_baggage_item(self, key: str, value: str):
+ """Stores a Baggage item in the span as a key/value
+ pair.
+
+ Args:
+ key: A tag key.
+ value: A tag value.
+ """
# pylint: disable=protected-access
self._context._baggage = set_correlation(
key, value, context=self._context._baggage
)
- def get_baggage_item(self, key):
- """Implements the ``get_baggage_item`` method from the base class."""
+ def get_baggage_item(self, key: str) -> Optional[object]:
+ """Retrieves value of the baggage item with the given key.
+
+ Args:
+ key: A tag key.
+ Returns:
+ Returns this :class:`SpanShim` instance to allow call chaining.
+ """
# pylint: disable=protected-access
return get_correlation(key, context=self._context._baggage)
-class ScopeShim(opentracing.Scope):
+class ScopeShim(Scope):
"""A `ScopeShim` wraps the OpenTelemetry functionality related to span
activation/deactivation while using OpenTracing :class:`opentracing.Scope`
objects for presentation.
@@ -313,18 +335,16 @@ class ScopeShim(opentracing.Scope):
manager: The :class:`ScopeManagerShim` that created this
:class:`ScopeShim`.
span: The :class:`SpanShim` this :class:`ScopeShim` controls.
- span_cm(:class:`contextlib.AbstractContextManager`, optional): A
- Python context manager which yields an OpenTelemetry
+ span_cm: A Python context manager which yields an OpenTelemetry
`opentelemetry.trace.Span` from its ``__enter__()`` method. Used
by :meth:`from_context_manager` to store the context manager as
an attribute so that it can later be closed by calling its
``__exit__()`` method. Defaults to `None`.
-
- TODO: Is :class:`contextlib.AbstractContextManager` the correct
- type for *span_cm*?
"""
- def __init__(self, manager, span, span_cm=None):
+ def __init__(
+ self, manager: "ScopeManagerShim", span: SpanShim, span_cm=None
+ ):
super().__init__(manager, span)
self._span_cm = span_cm
self._token = attach(set_value("scope_shim", self))
@@ -332,7 +352,7 @@ def __init__(self, manager, span, span_cm=None):
# TODO: Change type of `manager` argument to `opentracing.ScopeManager`? We
# need to get rid of `manager.tracer` for this.
@classmethod
- def from_context_manager(cls, manager, span_cm):
+ def from_context_manager(cls, manager: "ScopeManagerShim", span_cm):
"""Constructs a :class:`ScopeShim` from an OpenTelemetry
`opentelemetry.trace.Span` context
manager.
@@ -363,10 +383,8 @@ def from_context_manager(cls, manager, span_cm):
return cls(manager, span, span_cm)
def close(self):
- """Implements the `close()` method from :class:`opentracing.Scope`.
-
- Closes the `ScopeShim`. If the `ScopeShim` was created from a context
- manager, calling this method sets the active span in the
+ """Closes the `ScopeShim`. If the `ScopeShim` was created from a
+ context manager, calling this method sets the active span in the
OpenTelemetry tracer back to the span which was active before this
`ScopeShim` was created. In addition, if the span represented by this
`ScopeShim` was activated with the *finish_on_close* argument set to
@@ -396,7 +414,7 @@ def close(self):
self._span.unwrap().end()
-class ScopeManagerShim(opentracing.ScopeManager):
+class ScopeManagerShim(ScopeManager):
"""Implements :class:`opentracing.ScopeManager` by setting and getting the
active `opentelemetry.trace.Span` in the OpenTelemetry tracer.
@@ -412,17 +430,15 @@ class ScopeManagerShim(opentracing.ScopeManager):
span state.
"""
- def __init__(self, tracer):
+ def __init__(self, tracer: "TracerShim"):
# The only thing the ``__init__()``` method on the base class does is
# initialize `self._noop_span` and `self._noop_scope` with no-op
# objects. Therefore, it doesn't seem useful to call it.
# pylint: disable=super-init-not-called
self._tracer = tracer
- def activate(self, span, finish_on_close):
- """Implements the ``activate()`` method from the base class.
-
- Activates a :class:`SpanShim` and returns a :class:`ScopeShim` which
+ def activate(self, span: SpanShim, finish_on_close: bool) -> "ScopeShim":
+ """Activates a :class:`SpanShim` and returns a :class:`ScopeShim` which
represents the active span.
Args:
@@ -441,11 +457,9 @@ def activate(self, span, finish_on_close):
return ScopeShim.from_context_manager(self, span_cm=span_cm)
@property
- def active(self):
- """Implements the ``active`` property from the base class.
-
- Returns a :class:`ScopeShim` object representing the currently-active
- span in the OpenTelemetry tracer.
+ def active(self) -> "ScopeShim":
+ """Returns a :class:`ScopeShim` object representing the
+ currently-active span in the OpenTelemetry tracer.
Returns:
A :class:`ScopeShim` representing the active span in the
@@ -471,7 +485,7 @@ def active(self):
return ScopeShim(self, span=wrapped_span)
@property
- def tracer(self):
+ def tracer(self) -> "TracerShim":
"""Returns the :class:`TracerShim` reference used by this
:class:`ScopeManagerShim` for setting and getting the active span from
the OpenTelemetry tracer.
@@ -489,9 +503,8 @@ def tracer(self):
return self._tracer
-class TracerShim(opentracing.Tracer):
- """Implements :class:`opentracing.Tracer` by wrapping a
- :class:`opentelemetry.trace.Tracer` object.
+class TracerShim(Tracer):
+ """Wraps a :class:`opentelemetry.trace.Tracer` object.
This wrapper class allows using an OpenTelemetry tracer as if it were an
OpenTracing tracer. It exposes the same methods as an "ordinary"
@@ -507,12 +520,12 @@ class TracerShim(opentracing.Tracer):
tracer will be invoked by the shim to create actual spans.
"""
- def __init__(self, tracer):
+ def __init__(self, tracer: OtelTracer):
super().__init__(scope_manager=ScopeManagerShim(self))
self._otel_tracer = tracer
self._supported_formats = (
- opentracing.Format.TEXT_MAP,
- opentracing.Format.HTTP_HEADERS,
+ Format.TEXT_MAP,
+ Format.HTTP_HEADERS,
)
def unwrap(self):
@@ -527,43 +540,34 @@ def unwrap(self):
def start_active_span(
self,
- operation_name,
- child_of=None,
- references=None,
- tags=None,
- start_time=None,
- ignore_active_span=False,
- finish_on_close=True,
- ):
- """Implements the ``start_active_span()`` method from the base class.
-
- Starts and activates a span. In terms of functionality, this method
+ operation_name: str,
+ child_of: Union[SpanShim, SpanContextShim] = None,
+ references: list = None,
+ tags: Attributes = None,
+ start_time: float = None,
+ ignore_active_span: bool = False,
+ finish_on_close: bool = True,
+ ) -> "ScopeShim":
+ """Starts and activates a span. In terms of functionality, this method
behaves exactly like the same method on a "regular" OpenTracing tracer.
See :meth:`opentracing.Tracer.start_active_span` for more details.
Args:
- operation_name(:obj:`str`): Name of the operation represented by
+ operation_name: Name of the operation represented by
the new span from the perspective of the current service.
- child_of(:class:`SpanShim` or :class:`SpanContextShim`, optional):
- A :class:`SpanShim` or :class:`SpanContextShim` representing
- the parent in a "child of" reference. If specified, the
- *references* parameter must be omitted. Defaults to `None`.
- references(:obj:`list`, optional): A list of
- :class:`opentracing.Reference` objects that identify one or
- more parents of type :class:`SpanContextShim`. Defaults to
- `None`.
- tags(:obj:`dict`, optional): A dictionary of tags. The keys must be
- of type :obj:`str`. The values may be one of :obj:`str`,
- :obj:`bool`, :obj:`int`, :obj:`float`. Defaults to `None`.
- start_time(:obj:`float`, optional): An explicit start time
- expressed as the number of seconds since the epoch as returned
- by :func:`time.time()`. Defaults to `None`.
- ignore_active_span(:obj:`bool`, optional): Ignore the
- currently-active span in the OpenTelemetry tracer and make the
- created span the root span of a new trace. Defaults to `False`.
- finish_on_close(:obj:`bool`, optional): Determines whether the
- created span should end automatically when closing the returned
- :class:`ScopeShim`. Defaults to `True`.
+ child_of: A :class:`SpanShim` or :class:`SpanContextShim`
+ representing the parent in a "child of" reference. If
+ specified, the *references* parameter must be omitted.
+ references: A list of :class:`opentracing.Reference` objects that
+ identify one or more parents of type :class:`SpanContextShim`.
+ tags: A dictionary of tags.
+ start_time: An explicit start time expressed as the number of
+ seconds since the epoch as returned by :func:`time.time()`.
+ ignore_active_span: Ignore the currently-active span in the
+ OpenTelemetry tracer and make the created span the root span of
+ a new trace.
+ finish_on_close: Determines whether the created span should end
+ automatically when closing the returned :class:`ScopeShim`.
Returns:
A :class:`ScopeShim` that is already activated by the
@@ -587,13 +591,13 @@ def start_active_span(
def start_span(
self,
- operation_name=None,
- child_of=None,
- references=None,
- tags=None,
- start_time=None,
- ignore_active_span=False,
- ):
+ operation_name: str = None,
+ child_of: Union[SpanShim, SpanContextShim] = None,
+ references: list = None,
+ tags: Attributes = None,
+ start_time: float = None,
+ ignore_active_span: bool = False,
+ ) -> SpanShim:
"""Implements the ``start_span()`` method from the base class.
Starts a span. In terms of functionality, this method behaves exactly
@@ -601,25 +605,19 @@ def start_span(
:meth:`opentracing.Tracer.start_span` for more details.
Args:
- operation_name(:obj:`str`): Name of the operation represented by
- the new span from the perspective of the current service.
- child_of(:class:`SpanShim` or :class:`SpanContextShim`, optional):
- A :class:`SpanShim` or :class:`SpanContextShim` representing
- the parent in a "child of" reference. If specified, the
- *references* parameter must be omitted. Defaults to `None`.
- references(:obj:`list`, optional): A list of
- :class:`opentracing.Reference` objects that identify one or
- more parents of type :class:`SpanContextShim`. Defaults to
- `None`.
- tags(:obj:`dict`, optional): A dictionary of tags. The keys must be
- of type :obj:`str`. The values may be one of :obj:`str`,
- :obj:`bool`, :obj:`int`, :obj:`float`. Defaults to `None`.
- start_time(:obj:`float`, optional): An explicit start time
- expressed as the number of seconds since the epoch as returned
- by :func:`time.time()`. Defaults to `None`.
- ignore_active_span(:obj:`bool`, optional): Ignore the
- currently-active span in the OpenTelemetry tracer and make the
- created span the root span of a new trace. Defaults to `False`.
+ operation_name: Name of the operation represented by the new span
+ from the perspective of the current service.
+ child_of: A :class:`SpanShim` or :class:`SpanContextShim`
+ representing the parent in a "child of" reference. If
+ specified, the *references* parameter must be omitted.
+ references: A list of :class:`opentracing.Reference` objects that
+ identify one or more parents of type :class:`SpanContextShim`.
+ tags: A dictionary of tags.
+ start_time: An explicit start time expressed as the number of
+ seconds since the epoch as returned by :func:`time.time()`.
+ ignore_active_span: Ignore the currently-active span in the
+ OpenTelemetry tracer and make the created span the root span of
+ a new trace.
Returns:
An already-started :class:`SpanShim` instance.
@@ -656,10 +654,19 @@ def start_span(
context = SpanContextShim(span.get_context())
return SpanShim(self, context, span)
- def inject(self, span_context, format, carrier):
- """Implements the ``inject`` method from the base class."""
+ def inject(self, span_context, format: object, carrier: object):
+ """Injects ``span_context`` into ``carrier``.
+
+ See base class for more details.
+
+ Args:
+ span_context: The ``opentracing.SpanContext`` to inject.
+ format: a Python object instance that represents a given
+ carrier format. `format` may be of any type, and `format`
+ equality is defined by Python ``==`` operator.
+ carrier: the format-specific carrier object to inject into
+ """
- # TODO: Finish documentation.
# pylint: disable=redefined-builtin
# This implementation does not perform the injecting by itself but
# uses the configured propagators in opentelemetry.propagators.
@@ -667,24 +674,37 @@ def inject(self, span_context, format, carrier):
# opentelemetry-python.
if format not in self._supported_formats:
- raise opentracing.UnsupportedFormatException
+ raise UnsupportedFormatException
propagator = propagators.get_global_httptextformat()
ctx = set_span_in_context(DefaultSpan(span_context.unwrap()))
propagator.inject(type(carrier).__setitem__, carrier, context=ctx)
- def extract(self, format, carrier):
- """Implements the ``extract`` method from the base class."""
+ def extract(self, format: object, carrier: object):
+ """Returns an ``opentracing.SpanContext`` instance extracted from a
+ ``carrier``.
+
+ See base class for more details.
+
+ Args:
+ format: a Python object instance that represents a given
+ carrier format. ``format`` may be of any type, and ``format``
+ equality is defined by python ``==`` operator.
+ carrier: the format-specific carrier object to extract from
+
+ Returns:
+ An ``opentracing.SpanContext`` extracted from ``carrier`` or
+ ``None`` if no such ``SpanContext`` could be found.
+ """
- # TODO: Finish documentation.
# pylint: disable=redefined-builtin
# This implementation does not perform the extracing by itself but
# uses the configured propagators in opentelemetry.propagators.
# TODO: Support Format.BINARY once it is supported in
# opentelemetry-python.
if format not in self._supported_formats:
- raise opentracing.UnsupportedFormatException
+ raise UnsupportedFormatException
def get_as_list(dict_object, key):
value = dict_object.get(key)
From 47229e94f4a56987e5100e8767df38b15ca0009d Mon Sep 17 00:00:00 2001
From: Leighton Chen
Date: Sat, 15 Aug 2020 18:06:27 -0700
Subject: [PATCH 79/79] chore: 0.13.dev0 version update (#991)
---
docs/examples/opentelemetry-example-app/setup.cfg | 8 ++++----
.../src/opentelemetry_example_app/version.py | 2 +-
exporter/opentelemetry-exporter-datadog/CHANGELOG.md | 4 ++++
exporter/opentelemetry-exporter-datadog/setup.cfg | 4 ++--
.../src/opentelemetry/exporter/datadog/version.py | 2 +-
exporter/opentelemetry-exporter-jaeger/CHANGELOG.md | 4 ++++
exporter/opentelemetry-exporter-jaeger/setup.cfg | 4 ++--
.../src/opentelemetry/exporter/jaeger/version.py | 2 +-
exporter/opentelemetry-exporter-opencensus/CHANGELOG.md | 4 ++++
exporter/opentelemetry-exporter-opencensus/setup.cfg | 4 ++--
.../src/opentelemetry/exporter/opencensus/version.py | 2 +-
exporter/opentelemetry-exporter-otlp/CHANGELOG.md | 4 ++++
exporter/opentelemetry-exporter-otlp/setup.cfg | 6 +++---
.../src/opentelemetry/exporter/otlp/version.py | 2 +-
exporter/opentelemetry-exporter-prometheus/CHANGELOG.md | 4 ++++
exporter/opentelemetry-exporter-prometheus/setup.cfg | 4 ++--
.../src/opentelemetry/exporter/prometheus/version.py | 2 +-
exporter/opentelemetry-exporter-zipkin/CHANGELOG.md | 4 ++++
exporter/opentelemetry-exporter-zipkin/setup.cfg | 4 ++--
.../src/opentelemetry/exporter/zipkin/version.py | 2 +-
.../CHANGELOG.md | 4 ++++
.../setup.cfg | 2 +-
.../instrumentation/aiohttp_client/version.py | 2 +-
.../opentelemetry-instrumentation-aiopg/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/aiopg/version.py | 2 +-
.../opentelemetry-instrumentation-asgi/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-asgi/setup.cfg | 4 ++--
.../src/opentelemetry/instrumentation/asgi/version.py | 2 +-
.../opentelemetry-instrumentation-asyncpg/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-asyncpg/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/asyncpg/version.py | 2 +-
.../opentelemetry-instrumentation-boto/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-boto/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/boto/version.py | 2 +-
.../opentelemetry-instrumentation-botocore/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-botocore/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/botocore/version.py | 2 +-
.../opentelemetry-instrumentation-celery/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-celery/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/celery/version.py | 2 +-
.../opentelemetry-instrumentation-dbapi/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-dbapi/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/dbapi/version.py | 2 +-
.../opentelemetry-instrumentation-django/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-django/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/django/version.py | 2 +-
.../CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-elasticsearch/setup.cfg | 6 +++---
.../instrumentation/elasticsearch/version.py | 2 +-
.../opentelemetry-instrumentation-fastapi/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/fastapi/version.py | 2 +-
.../opentelemetry-instrumentation-flask/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-flask/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/flask/version.py | 2 +-
.../opentelemetry-instrumentation-grpc/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-grpc/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/grpc/version.py | 2 +-
.../opentelemetry-instrumentation-jinja2/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-jinja2/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/jinja2/version.py | 2 +-
.../opentelemetry-instrumentation-mysql/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-mysql/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/mysql/version.py | 2 +-
.../CHANGELOG.md | 4 ++++
.../setup.cfg | 4 ++--
.../instrumentation/opentracing_shim/version.py | 2 +-
.../opentelemetry-instrumentation-psycopg2/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-psycopg2/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/psycopg2/version.py | 2 +-
.../opentelemetry-instrumentation-pymemcache/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-pymemcache/setup.cfg | 6 +++---
.../opentelemetry/instrumentation/pymemcache/version.py | 2 +-
.../opentelemetry-instrumentation-pymongo/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-pymongo/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/pymongo/version.py | 2 +-
.../opentelemetry-instrumentation-pymysql/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-pymysql/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/pymysql/version.py | 2 +-
.../opentelemetry-instrumentation-pyramid/CHANGELOG.md | 5 +++++
.../opentelemetry-instrumentation-pyramid/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/pyramid/version.py | 2 +-
.../opentelemetry-instrumentation-redis/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-redis/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/redis/version.py | 2 +-
.../opentelemetry-instrumentation-requests/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-requests/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/requests/version.py | 2 +-
.../opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-sqlalchemy/setup.cfg | 6 +++---
.../opentelemetry/instrumentation/sqlalchemy/version.py | 2 +-
.../opentelemetry-instrumentation-sqlite3/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-sqlite3/setup.cfg | 8 ++++----
.../src/opentelemetry/instrumentation/sqlite3/version.py | 2 +-
.../opentelemetry-instrumentation-starlette/setup.cfg | 6 +++---
.../opentelemetry/instrumentation/starlette/version.py | 2 +-
.../CHANGELOG.md | 4 ++++
.../setup.cfg | 4 ++--
.../instrumentation/system_metrics/version.py | 2 +-
.../opentelemetry-instrumentation-wsgi/CHANGELOG.md | 4 ++++
.../opentelemetry-instrumentation-wsgi/setup.cfg | 6 +++---
.../src/opentelemetry/instrumentation/wsgi/version.py | 2 +-
opentelemetry-api/CHANGELOG.md | 4 ++++
opentelemetry-api/src/opentelemetry/version.py | 2 +-
opentelemetry-instrumentation/setup.cfg | 2 +-
.../src/opentelemetry/instrumentation/version.py | 2 +-
opentelemetry-proto/src/opentelemetry/proto/version.py | 2 +-
opentelemetry-sdk/CHANGELOG.md | 4 ++++
opentelemetry-sdk/setup.cfg | 2 +-
opentelemetry-sdk/src/opentelemetry/sdk/version.py | 2 +-
scripts/build.sh | 2 +-
tests/util/src/opentelemetry/test/version.py | 2 +-
111 files changed, 283 insertions(+), 150 deletions(-)
diff --git a/docs/examples/opentelemetry-example-app/setup.cfg b/docs/examples/opentelemetry-example-app/setup.cfg
index e77fbae3765..b38efb59394 100644
--- a/docs/examples/opentelemetry-example-app/setup.cfg
+++ b/docs/examples/opentelemetry-example-app/setup.cfg
@@ -43,10 +43,10 @@ zip_safe = False
include_package_data = True
install_requires =
typing; python_version<'3.5'
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
- opentelemetry-instrumentation-requests == 0.12.dev0
- opentelemetry-instrumentation-flask == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
+ opentelemetry-instrumentation-requests == 0.13dev0
+ opentelemetry-instrumentation-flask == 0.13dev0
flask
requests
protobuf~=3.11
diff --git a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
+++ b/docs/examples/opentelemetry-example-app/src/opentelemetry_example_app/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/exporter/opentelemetry-exporter-datadog/CHANGELOG.md b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md
index d15d5a4b5d1..728c0810901 100644
--- a/exporter/opentelemetry-exporter-datadog/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-datadog/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-exporter-datadog
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
diff --git a/exporter/opentelemetry-exporter-datadog/setup.cfg b/exporter/opentelemetry-exporter-datadog/setup.cfg
index 266abe9e0ba..8975f250975 100644
--- a/exporter/opentelemetry-exporter-datadog/setup.cfg
+++ b/exporter/opentelemetry-exporter-datadog/setup.cfg
@@ -40,8 +40,8 @@ package_dir=
packages=find_namespace:
install_requires =
ddtrace>=0.34.0
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
[options.packages.find]
where = src
diff --git a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py
+++ b/exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md
index 48f7afd397e..ffb185bbecd 100644
--- a/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-jaeger/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-exporter-jaeger
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
diff --git a/exporter/opentelemetry-exporter-jaeger/setup.cfg b/exporter/opentelemetry-exporter-jaeger/setup.cfg
index b660e8ec1c1..28d97005fe5 100644
--- a/exporter/opentelemetry-exporter-jaeger/setup.cfg
+++ b/exporter/opentelemetry-exporter-jaeger/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
thrift >= 0.10.0
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
[options.packages.find]
where = src
diff --git a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py
index 4a2d033215f..db7a75909bd 100644
--- a/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py
+++ b/exporter/opentelemetry-exporter-jaeger/src/opentelemetry/exporter/jaeger/version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md
index 13924e489b3..efa456f0ca8 100644
--- a/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-opencensus/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-exporter-opencensus
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
- Send start_timestamp and convert labels to strings
diff --git a/exporter/opentelemetry-exporter-opencensus/setup.cfg b/exporter/opentelemetry-exporter-opencensus/setup.cfg
index 64b4b4a2286..6ac4b5b9cd6 100644
--- a/exporter/opentelemetry-exporter-opencensus/setup.cfg
+++ b/exporter/opentelemetry-exporter-opencensus/setup.cfg
@@ -42,8 +42,8 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
opencensus-proto >= 0.1.0, < 1.0.0
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
protobuf >= 3.8.0
[options.packages.find]
diff --git a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py
+++ b/exporter/opentelemetry-exporter-opencensus/src/opentelemetry/exporter/opencensus/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
index 2379a94cb3b..24eb8bcf580 100644
--- a/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-otlp/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-exporter-otlp
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
- Update default port to 55680
diff --git a/exporter/opentelemetry-exporter-otlp/setup.cfg b/exporter/opentelemetry-exporter-otlp/setup.cfg
index 262ac02008b..3a6ca8f957d 100644
--- a/exporter/opentelemetry-exporter-otlp/setup.cfg
+++ b/exporter/opentelemetry-exporter-otlp/setup.cfg
@@ -41,9 +41,9 @@ packages=find_namespace:
install_requires =
grpcio >= 1.0.0, < 2.0.0
googleapis-common-protos ~= 1.52.0
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
- opentelemetry-proto == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
+ opentelemetry-proto == 0.13dev0
backoff ~= 1.10.0
[options.extras_require]
diff --git a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py
+++ b/exporter/opentelemetry-exporter-otlp/src/opentelemetry/exporter/otlp/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md
index 5c978d394d4..563756856d8 100644
--- a/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-prometheus/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-exporter-prometheus
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
diff --git a/exporter/opentelemetry-exporter-prometheus/setup.cfg b/exporter/opentelemetry-exporter-prometheus/setup.cfg
index 94359e9641c..107e4d9891e 100644
--- a/exporter/opentelemetry-exporter-prometheus/setup.cfg
+++ b/exporter/opentelemetry-exporter-prometheus/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
prometheus_client >= 0.5.0, < 1.0.0
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
[options.packages.find]
where = src
diff --git a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py
+++ b/exporter/opentelemetry-exporter-prometheus/src/opentelemetry/exporter/prometheus/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md
index 1063d35cf53..56678833143 100644
--- a/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md
+++ b/exporter/opentelemetry-exporter-zipkin/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-exporter-zipkin
([#953](https://github.com/open-telemetry/opentelemetry-python/pull/953))
- Add proper length zero padding to hex strings of traceId, spanId, parentId sent on the wire, for compatibility with jaeger-collector
diff --git a/exporter/opentelemetry-exporter-zipkin/setup.cfg b/exporter/opentelemetry-exporter-zipkin/setup.cfg
index f1246813e38..0b802a9348f 100644
--- a/exporter/opentelemetry-exporter-zipkin/setup.cfg
+++ b/exporter/opentelemetry-exporter-zipkin/setup.cfg
@@ -41,8 +41,8 @@ package_dir=
packages=find_namespace:
install_requires =
requests ~= 2.7
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
[options.packages.find]
where = src
diff --git a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py
+++ b/exporter/opentelemetry-exporter-zipkin/src/opentelemetry/exporter/zipkin/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md
index d7dce5f65cf..cdbc621d31b 100644
--- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-aiohttp-client
([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.cfg b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.cfg
index 318721ba64e..557b8d9a087 100644
--- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.cfg
@@ -40,7 +40,7 @@ package_dir=
packages=find_namespace:
install_requires =
opentelemetry-api >= 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-instrumentation == 0.13dev0
aiohttp ~= 3.0
[options.packages.find]
diff --git a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py
index 8d947df443a..1a40cfa0f1a 100644
--- a/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py
+++ b/instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg
index 58c9b38496c..f7e89a248cb 100644
--- a/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-aiopg/setup.cfg
@@ -39,15 +39,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-dbapi == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-dbapi == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
aiopg >= 0.13.0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
+++ b/instrumentation/opentelemetry-instrumentation-aiopg/src/opentelemetry/instrumentation/aiopg/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md
index 7f2812bd05b..686b8cf830a 100644
--- a/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-asgi/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-asgi
([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
diff --git a/instrumentation/opentelemetry-instrumentation-asgi/setup.cfg b/instrumentation/opentelemetry-instrumentation-asgi/setup.cfg
index fdd1f813fbc..533a636d517 100644
--- a/instrumentation/opentelemetry-instrumentation-asgi/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-asgi/setup.cfg
@@ -39,8 +39,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
asgiref ~= 3.0
[options.extras_require]
diff --git a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py
+++ b/instrumentation/opentelemetry-instrumentation-asgi/src/opentelemetry/instrumentation/asgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md
index 530bc71da75..56f261c9b54 100644
--- a/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-asyncpg/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-asyncpg
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/setup.cfg b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.cfg
index 1cc707df1c0..2f267b3f493 100644
--- a/instrumentation/opentelemetry-instrumentation-asyncpg/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-asyncpg/setup.cfg
@@ -39,13 +39,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
asyncpg >= 0.12.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py
+++ b/instrumentation/opentelemetry-instrumentation-asyncpg/src/opentelemetry/instrumentation/asyncpg/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-boto/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-boto/CHANGELOG.md
index a1c2e9465f1..35bd5d6027c 100644
--- a/instrumentation/opentelemetry-instrumentation-boto/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-boto/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-boto
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-boto/setup.cfg b/instrumentation/opentelemetry-instrumentation-boto/setup.cfg
index ee47a919cdc..0bf6820702b 100644
--- a/instrumentation/opentelemetry-instrumentation-boto/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-boto/setup.cfg
@@ -41,15 +41,15 @@ package_dir=
packages=find_namespace:
install_requires =
boto ~= 2.0
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
- opentelemetry-instrumentation-botocore == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
+ opentelemetry-instrumentation-botocore == 0.13dev0
[options.extras_require]
test =
boto~=2.0
moto~=1.0
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py
+++ b/instrumentation/opentelemetry-instrumentation-boto/src/opentelemetry/instrumentation/boto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-botocore/CHANGELOG.md
index e89b3fddd2f..128729e21d6 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-botocore/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-botocore
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/setup.cfg b/instrumentation/opentelemetry-instrumentation-botocore/setup.cfg
index 86f3e8d0a41..bad58662ea3 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-botocore/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
botocore ~= 1.0
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
[options.extras_require]
test =
moto ~= 1.0
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py
+++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-celery/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-celery/CHANGELOG.md
index 0de1991b968..e164a89134b 100644
--- a/instrumentation/opentelemetry-instrumentation-celery/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-celery/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-celery
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-celery/setup.cfg b/instrumentation/opentelemetry-instrumentation-celery/setup.cfg
index 4198f15569c..5b027f6fe33 100644
--- a/instrumentation/opentelemetry-instrumentation-celery/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-celery/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
celery ~= 4.0
[options.extras_require]
test =
pytest
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py
+++ b/instrumentation/opentelemetry-instrumentation-celery/src/opentelemetry/instrumentation/celery/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md
index 555b227db39..bdb9236acbb 100644
--- a/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-dbapi/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-dbapi
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/setup.cfg b/instrumentation/opentelemetry-instrumentation-dbapi/setup.cfg
index 29044f3ba61..2c786593435 100644
--- a/instrumentation/opentelemetry-instrumentation-dbapi/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-dbapi/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py
+++ b/instrumentation/opentelemetry-instrumentation-dbapi/src/opentelemetry/instrumentation/dbapi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md
index ae682630db6..3e4e42e55bd 100644
--- a/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-django/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-django
([#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))
diff --git a/instrumentation/opentelemetry-instrumentation-django/setup.cfg b/instrumentation/opentelemetry-instrumentation-django/setup.cfg
index b2ccaf22b81..eb53010b62e 100644
--- a/instrumentation/opentelemetry-instrumentation-django/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-django/setup.cfg
@@ -41,13 +41,13 @@ package_dir=
packages=find_namespace:
install_requires =
django >= 1.10
- opentelemetry-instrumentation-wsgi == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
- opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation-wsgi == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
+ opentelemetry-api == 0.13dev0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py
+++ b/instrumentation/opentelemetry-instrumentation-django/src/opentelemetry/instrumentation/django/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-elasticsearch/CHANGELOG.md
index 5579a36a625..daa52ff3ec1 100644
--- a/instrumentation/opentelemetry-instrumentation-elasticsearch/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL` ([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
- Change package name to opentelemetry-instrumentation-elasticsearch
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.cfg b/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.cfg
index fc5f862a2c2..0640edce122 100644
--- a/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
wrapt >= 1.0.0, < 2.0.0
elasticsearch >= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
elasticsearch-dsl >= 2.0
[options.packages.find]
diff --git a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py
+++ b/instrumentation/opentelemetry-instrumentation-elasticsearch/src/opentelemetry/instrumentation/elasticsearch/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg b/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg
index f4c64744f84..514b2a37546 100644
--- a/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-fastapi/setup.cfg
@@ -38,8 +38,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-asgi == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-asgi == 0.13dev0
[options.entry_points]
opentelemetry_instrumentor =
@@ -47,7 +47,7 @@ opentelemetry_instrumentor =
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
fastapi ~= 0.58.1
requests ~= 2.23.0 # needed for testclient
diff --git a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
+++ b/instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md
index 156cf9db317..989e06730dd 100644
--- a/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-flask/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-flask
([#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))
diff --git a/instrumentation/opentelemetry-instrumentation-flask/setup.cfg b/instrumentation/opentelemetry-instrumentation-flask/setup.cfg
index 281a11249dc..e08d20e2158 100644
--- a/instrumentation/opentelemetry-instrumentation-flask/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-flask/setup.cfg
@@ -41,14 +41,14 @@ package_dir=
packages=find_namespace:
install_requires =
flask ~= 1.0
- opentelemetry-instrumentation-wsgi == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
- opentelemetry-api == 0.12.dev0
+ opentelemetry-instrumentation-wsgi == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
+ opentelemetry-api == 0.13dev0
[options.extras_require]
test =
flask~=1.0
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py
+++ b/instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md
index b6b28ecd9f0..ced6b9c345e 100644
--- a/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-grpc/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-grpc
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
index 4d40278237b..590cb5e9cf2 100644
--- a/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-grpc/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
grpcio == 1.30
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-test == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
protobuf == 3.12.2
[options.packages.find]
diff --git a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py
+++ b/instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-jinja2/CHANGELOG.md
index a503fe367ea..79a4aba1ae9 100644
--- a/instrumentation/opentelemetry-instrumentation-jinja2/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-jinja2
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/setup.cfg b/instrumentation/opentelemetry-instrumentation-jinja2/setup.cfg
index 76b9b879201..026dba36e71 100644
--- a/instrumentation/opentelemetry-instrumentation-jinja2/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/setup.cfg
@@ -39,14 +39,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
jinja2~=2.7
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py
+++ b/instrumentation/opentelemetry-instrumentation-jinja2/src/opentelemetry/instrumentation/jinja2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md
index 944b34d5ad6..8912788b2f0 100644
--- a/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-mysql/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-mysql
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-mysql/setup.cfg b/instrumentation/opentelemetry-instrumentation-mysql/setup.cfg
index 2242709dab9..aed70b99f12 100644
--- a/instrumentation/opentelemetry-instrumentation-mysql/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-mysql/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-dbapi == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-dbapi == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
mysql-connector-python ~= 8.0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py
+++ b/instrumentation/opentelemetry-instrumentation-mysql/src/opentelemetry/instrumentation/mysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-opentracing-shim/CHANGELOG.md
index 47bbc0ada0a..36bfb122f6e 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change reference names to opentelemetry-instrumentation-opentracing-shim
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.cfg b/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.cfg
index 1a822d49cee..2e0e57bb30d 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/setup.cfg
@@ -42,11 +42,11 @@ packages=find_namespace:
install_requires =
Deprecated >= 1.2.6
opentracing ~= 2.0
- opentelemetry-api == 0.12.dev0
+ opentelemetry-api == 0.13dev0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
opentracing ~= 2.2.0
[options.packages.find]
diff --git a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/version.py b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/version.py
+++ b/instrumentation/opentelemetry-instrumentation-opentracing-shim/src/opentelemetry/instrumentation/opentracing_shim/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md
index e5f81a558b7..3ee8fa7f3e0 100644
--- a/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-psycopg2/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-psycopg2
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/setup.cfg b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.cfg
index c20693a96c9..f0948b17c63 100644
--- a/instrumentation/opentelemetry-instrumentation-psycopg2/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-psycopg2/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-dbapi == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-dbapi == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
psycopg2-binary >= 2.7.3.1
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py
+++ b/instrumentation/opentelemetry-instrumentation-psycopg2/src/opentelemetry/instrumentation/psycopg2/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md
index a01e0e2c536..5e05b3d45f6 100644
--- a/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-pymemcache/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-pymemcache
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/setup.cfg b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.cfg
index aff71c8245c..dd27b8901a2 100644
--- a/instrumentation/opentelemetry-instrumentation-pymemcache/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-pymemcache/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
pymemcache ~= 1.3
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py
+++ b/instrumentation/opentelemetry-instrumentation-pymemcache/src/opentelemetry/instrumentation/pymemcache/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md
index a92d2b53da4..23ea58f0b18 100644
--- a/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-pymongo/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-pymongo
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/setup.cfg b/instrumentation/opentelemetry-instrumentation-pymongo/setup.cfg
index a480f05d6f4..d5302d95111 100644
--- a/instrumentation/opentelemetry-instrumentation-pymongo/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-pymongo/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
pymongo ~= 3.1
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py
+++ b/instrumentation/opentelemetry-instrumentation-pymongo/src/opentelemetry/instrumentation/pymongo/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md
index 9fea902d187..7a9cee91bfc 100644
--- a/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-pymysql/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-pymysql
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/setup.cfg b/instrumentation/opentelemetry-instrumentation-pymysql/setup.cfg
index b00276c9d20..ec491fd4cc7 100644
--- a/instrumentation/opentelemetry-instrumentation-pymysql/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-pymysql/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-dbapi == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-dbapi == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
PyMySQL ~= 0.9.3
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py
+++ b/instrumentation/opentelemetry-instrumentation-pymysql/src/opentelemetry/instrumentation/pymysql/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-pyramid/CHANGELOG.md
index 2e20d5a0bdf..d4f6601fcb6 100644
--- a/instrumentation/opentelemetry-instrumentation-pyramid/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-pyramid/CHANGELOG.md
@@ -2,6 +2,11 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
+- Change package name to opentelemetry-instrumentation-pyramid ([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
- 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-pyramid/setup.cfg b/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg
index 7f23f27ca5a..2546682691b 100644
--- a/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-pyramid/setup.cfg
@@ -41,15 +41,15 @@ package_dir=
packages=find_namespace:
install_requires =
pyramid >= 1.7
- opentelemetry-instrumentation == 0.12.dev0
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-wsgi == 0.12.dev0
+ opentelemetry-instrumentation == 0.13dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-wsgi == 0.13dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
werkzeug == 0.16.1
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py
+++ b/instrumentation/opentelemetry-instrumentation-pyramid/src/opentelemetry/instrumentation/pyramid/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
index e7f8d248741..72508d7b1fc 100644
--- a/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-redis/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Update default SpanKind to `SpanKind.CLIENT` ([#965](https://github.com/open-telemetry/opentelemetry-python/pull/965))
- Change package name to opentelemetry-instrumentation-redis
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-redis/setup.cfg b/instrumentation/opentelemetry-instrumentation-redis/setup.cfg
index 27793a5bed6..9e1562104e0 100644
--- a/instrumentation/opentelemetry-instrumentation-redis/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-redis/setup.cfg
@@ -40,15 +40,15 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
redis >= 2.6
wrapt >= 1.12.1
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-test == 0.13dev0
+ opentelemetry-sdk == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py
+++ b/instrumentation/opentelemetry-instrumentation-redis/src/opentelemetry/instrumentation/redis/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md
index dda179d918a..179f0f68771 100644
--- a/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-requests/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-requests
([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
diff --git a/instrumentation/opentelemetry-instrumentation-requests/setup.cfg b/instrumentation/opentelemetry-instrumentation-requests/setup.cfg
index 77205b5816d..ece5013173b 100644
--- a/instrumentation/opentelemetry-instrumentation-requests/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-requests/setup.cfg
@@ -40,13 +40,13 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
requests ~= 2.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
httpretty ~= 1.0
[options.packages.find]
diff --git a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py
+++ b/instrumentation/opentelemetry-instrumentation-requests/src/opentelemetry/instrumentation/requests/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md
index f46080a9b99..d64d247d21d 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-sqlalchemy
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.cfg b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.cfg
index e10a684d653..bed8f6209c4 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
wrapt >= 1.11.2
sqlalchemy
[options.extras_require]
test =
- opentelemetry-sdk == 0.12.dev0
+ opentelemetry-sdk == 0.13dev0
pytest
[options.packages.find]
diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py
+++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md
index 12d001bdf1c..08071b15221 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-sqlite3/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-sqlite3
([#966](https://github.com/open-telemetry/opentelemetry-python/pull/966))
diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/setup.cfg b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.cfg
index 841c8d3b17f..a13fb57ea34 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlite3/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-sqlite3/setup.cfg
@@ -40,14 +40,14 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-dbapi == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-dbapi == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
wrapt >= 1.0.0, < 2.0.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py
+++ b/instrumentation/opentelemetry-instrumentation-sqlite3/src/opentelemetry/instrumentation/sqlite3/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg b/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg
index 905f4992e48..c94d76c88cf 100644
--- a/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-starlette/setup.cfg
@@ -38,8 +38,8 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation-asgi == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation-asgi == 0.13dev0
[options.entry_points]
opentelemetry_instrumentor =
@@ -47,7 +47,7 @@ opentelemetry_instrumentor =
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
starlette ~= 0.13.0
requests ~= 2.23.0 # needed for testclient
diff --git a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
+++ b/instrumentation/opentelemetry-instrumentation-starlette/src/opentelemetry/instrumentation/starlette/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md
index f752d8314d7..4bd1389ccc2 100644
--- a/instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-system-metrics
([#969](https://github.com/open-telemetry/opentelemetry-python/pull/969))
diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/setup.cfg b/instrumentation/opentelemetry-instrumentation-system-metrics/setup.cfg
index 4b6f4f07f57..4a93873ce19 100644
--- a/instrumentation/opentelemetry-instrumentation-system-metrics/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
+ opentelemetry-api == 0.13dev0
psutil ~= 5.7.0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py
+++ b/instrumentation/opentelemetry-instrumentation-system-metrics/src/opentelemetry/instrumentation/system_metrics/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md b/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md
index 6f1085b8bb4..50b3afedfdf 100644
--- a/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md
+++ b/instrumentation/opentelemetry-instrumentation-wsgi/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Change package name to opentelemetry-instrumentation-wsgi
([#961](https://github.com/open-telemetry/opentelemetry-python/pull/961))
diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/setup.cfg b/instrumentation/opentelemetry-instrumentation-wsgi/setup.cfg
index b48d61dc849..789f81ba8dc 100644
--- a/instrumentation/opentelemetry-instrumentation-wsgi/setup.cfg
+++ b/instrumentation/opentelemetry-instrumentation-wsgi/setup.cfg
@@ -40,12 +40,12 @@ package_dir=
=src
packages=find_namespace:
install_requires =
- opentelemetry-api == 0.12.dev0
- opentelemetry-instrumentation == 0.12.dev0
+ opentelemetry-api == 0.13dev0
+ opentelemetry-instrumentation == 0.13dev0
[options.extras_require]
test =
- opentelemetry-test == 0.12.dev0
+ opentelemetry-test == 0.13dev0
[options.packages.find]
where = src
diff --git a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py
+++ b/instrumentation/opentelemetry-instrumentation-wsgi/src/opentelemetry/instrumentation/wsgi/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/opentelemetry-api/CHANGELOG.md b/opentelemetry-api/CHANGELOG.md
index a04aa8a48fb..2defb0a59a0 100644
--- a/opentelemetry-api/CHANGELOG.md
+++ b/opentelemetry-api/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL`
([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
- Stop TracerProvider and MeterProvider from being overridden
diff --git a/opentelemetry-api/src/opentelemetry/version.py b/opentelemetry-api/src/opentelemetry/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/opentelemetry-api/src/opentelemetry/version.py
+++ b/opentelemetry-api/src/opentelemetry/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/opentelemetry-instrumentation/setup.cfg b/opentelemetry-instrumentation/setup.cfg
index 4dee7c3cf83..78973ab1278 100644
--- a/opentelemetry-instrumentation/setup.cfg
+++ b/opentelemetry-instrumentation/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.12.dev0
+ opentelemetry-api == 0.13dev0
wrapt >= 1.0.0, < 2.0.0
[options.packages.find]
diff --git a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
+++ b/opentelemetry-instrumentation/src/opentelemetry/instrumentation/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/opentelemetry-proto/src/opentelemetry/proto/version.py b/opentelemetry-proto/src/opentelemetry/proto/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/opentelemetry-proto/src/opentelemetry/proto/version.py
+++ b/opentelemetry-proto/src/opentelemetry/proto/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md
index 923087f4214..a5fe59878bd 100644
--- a/opentelemetry-sdk/CHANGELOG.md
+++ b/opentelemetry-sdk/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+## Version 0.12b0
+
+Released 2020-08-14
+
- Changed default Sampler to `ParentOrElse(AlwaysOn)`
- Update environment variable names, prefix changed from `OPENTELEMETRY` to `OTEL`
([#904](https://github.com/open-telemetry/opentelemetry-python/pull/904))
diff --git a/opentelemetry-sdk/setup.cfg b/opentelemetry-sdk/setup.cfg
index 6ea60117a1f..821c7dd785c 100644
--- a/opentelemetry-sdk/setup.cfg
+++ b/opentelemetry-sdk/setup.cfg
@@ -42,7 +42,7 @@ packages=find_namespace:
zip_safe = False
include_package_data = True
install_requires =
- opentelemetry-api == 0.12.dev0
+ opentelemetry-api == 0.13dev0
[options.packages.find]
where = src
diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/version.py b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
index 780a92b6a1b..9cc445d09e1 100644
--- a/opentelemetry-sdk/src/opentelemetry/sdk/version.py
+++ b/opentelemetry-sdk/src/opentelemetry/sdk/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"
diff --git a/scripts/build.sh b/scripts/build.sh
index 056998ebc11..0dec4a27ba3 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/*/ instrumentation/*/ ; do
+ for d in opentelemetry-api/ opentelemetry-sdk/ opentelemetry-instrumentation/ opentelemetry-proto/ exporter/*/ instrumentation/*/ ; do
(
echo "building $d"
cd "$d"
diff --git a/tests/util/src/opentelemetry/test/version.py b/tests/util/src/opentelemetry/test/version.py
index 1ad7bc603eb..70efafb1a08 100644
--- a/tests/util/src/opentelemetry/test/version.py
+++ b/tests/util/src/opentelemetry/test/version.py
@@ -1 +1 @@
-__version__ = "0.12.dev0"
+__version__ = "0.13dev0"