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 @@ license
- - Build Status + + Build Status Beta

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"