Skip to content

Commit 20fdd23

Browse files
author
alrex
authored
Merge branch 'main' into issue_321
2 parents 11c9c88 + ca8eac6 commit 20fdd23

File tree

125 files changed

+1428
-499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

125 files changed

+1428
-499
lines changed

Diff for: .github/workflows/close-stale-issues.yml

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: "Close stale issues"
2+
on:
3+
schedule:
4+
- cron: "12 3 * * *" # arbitrary time not to DDOS GitHub
5+
6+
jobs:
7+
stale:
8+
runs-on: ubuntu-latest
9+
steps:
10+
- uses: actions/stale@v3
11+
with:
12+
repo-token: ${{ secrets.GITHUB_TOKEN }}
13+
stale-issue-message: 'This issue was marked stale due to lack of activity. It will be closed in 30 days.'
14+
close-issue-message: 'Closed as inactive. Feel free to reopen if this issue needs resolving.'
15+
exempt-issue-labels: 'feature-request'
16+
stale-issue-label: 'backlog'
17+
days-before-stale: 30
18+
days-before-close: 60

Diff for: .github/workflows/test.yml

+2-12
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@ on:
66
- 'release/*'
77
pull_request:
88
env:
9-
CORE_REPO_SHA: d3694fc520f8542b232fd1065133286f4591dcec
9+
CORE_REPO_SHA: 94bf80f3870bceefa72d9a61353eaf5d7dd30993
1010

1111
jobs:
1212
build:
1313
env:
1414
# We use these variables to convert between tox and GHA version literals
15-
py35: 3.5
1615
py36: 3.6
1716
py37: 3.7
1817
py38: 3.8
@@ -22,18 +21,9 @@ jobs:
2221
strategy:
2322
fail-fast: false # ensures the entire test matrix is run, even if one permutation fails
2423
matrix:
25-
python-version: [ py35, py36, py37, py38, pypy3 ]
24+
python-version: [ py36, py37, py38, pypy3 ]
2625
package: ["instrumentation", "exporter", "sdkextension", "propagator"]
2726
os: [ ubuntu-latest ]
28-
include:
29-
# py35-instrumentation segfaults on 18.04 so we instead run on 20.04
30-
- python-version: py35
31-
package: instrumentation
32-
os: ubuntu-20.04
33-
exclude:
34-
- os: ubuntu-latest
35-
python-version: py35
36-
package: instrumentation
3727
steps:
3828
- name: Checkout Contrib Repo @ SHA - ${{ github.sha }}
3929
uses: actions/checkout@v2

Diff for: CHANGELOG.md

+36-4
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,23 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7-
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python-contrib/compare/v0.18b0...HEAD)
8-
- Updated instrumentations to use `opentelemetry.trace.use_span` instead of `Tracer.use_span()`
9-
([#364](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/364))
7+
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python-contrib/compare/v0.19b0...HEAD)
8+
9+
### Changed
10+
- Restrict DataDog exporter's `ddtrace` dependency to known working versions.
11+
([#400](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/400))
12+
- GRPC instrumentation now correctly injects trace context into outgoing requests.
13+
([#392](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/39))
14+
- Publish `opentelemetry-propagator-ot-trace` package as a part of the release process
15+
([#387](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/387))
16+
- Update redis instrumentation to follow semantic conventions
17+
([#403](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/403))
18+
19+
### Added
20+
- `opentelemetry-instrumentation-urllib3` Add urllib3 instrumentation
21+
([#299](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/299))
22+
23+
## [0.19b0](https://github.com/open-telemetry/opentelemetry-python-contrib/releases/tag/v0.19b0) - 2021-03-26
1024

1125
- Implement context methods for `_InterceptorChannel`
1226
([#363](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/363))
@@ -16,6 +30,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1630
([#350](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/350))
1731
- `opentelemetry-exporter-datadog` Fix warning when DatadogFormat encounters a request with
1832
no DD_ORIGIN headers ([#368](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/368)).
33+
- `opentelemetry-instrumentation-aiopg` Fix multiple nested spans when
34+
`aiopg.pool` is used
35+
([#336](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/381)).
36+
- Updated instrumentations to use `opentelemetry.trace.use_span` instead of `Tracer.use_span()`
37+
([#364](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/364))
38+
- `opentelemetry-propagator-ot-trace` Do not throw an exception when headers are not present
39+
([#378](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/378))
40+
- `opentelemetry-instrumentation-wsgi` Reimplement `keys` method to return actual keys from the carrier instead of an empty list.
41+
([#379](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/379))
42+
- `opentelemetry-instrumentation-sqlalchemy` Fix multithreading issues in recording spans from SQLAlchemy
43+
([#315](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/315))
44+
- Make getters and setters optional
45+
([#372](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/372))
46+
47+
### Removed
48+
- Removing support for Python 3.5
49+
([#374](https://github.com/open-telemetry/opentelemetry-python/pull/374))
1950

2051
## [0.18b0](https://github.com/open-telemetry/opentelemetry-python-contrib/releases/tag/v0.18b0) - 2021-02-16
2152

@@ -77,6 +108,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77108
([#273](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/273))
78109

79110
### Changed
111+
- Fix broken links to project ([#413](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/413))
80112
- `opentelemetry-instrumentation-asgi`, `opentelemetry-instrumentation-wsgi` Return `None` for `CarrierGetter` if key not found
81113
([#233](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/233))
82114
- `opentelemetry-instrumentation-grpc` Comply with updated spec, rework tests
@@ -142,7 +174,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
142174
- `opentelemetry-instrumentation-botocore` Make botocore instrumentation check if instrumentation has been suppressed
143175
([#182](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/182))
144176
- `opentelemetry-instrumentation-botocore` Botocore SpanKind as CLIENT and modify existing traced attributes
145-
([#150])(https://github.com/open-telemetry/opentelemetry-python-contrib/pull/150)
177+
([#150](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/150))
146178
- `opentelemetry-instrumentation-dbapi` Update dbapi and its dependant instrumentations to follow semantic conventions
147179
([#195](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/195))
148180
- `opentelemetry-instrumentation-dbapi` Stop capturing query parameters by default

Diff for: README.md

-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ Approvers ([@open-telemetry/python-approvers](https://github.com/orgs/open-telem
8282
- [Diego Hurtado](https://github.com/ocelotl)
8383
- [Hector Hernandez](https://github.com/hectorhdzg), Microsoft
8484
- [Owais Lone](https://github.com/owais), Splunk
85-
- [Yusuke Tsutsumi](https://github.com/toumorokoshi), Google
8685

8786
*Find more about the approver role in [community repository](https://github.com/open-telemetry/community/blob/main/community-membership.md#approver).*
8887

Diff for: _template/setup.cfg

+2-3
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,18 @@ classifiers =
3434
License :: OSI Approved :: Apache Software License
3535
Programming Language :: Python
3636
Programming Language :: Python :: 3
37-
Programming Language :: Python :: 3.5
3837
Programming Language :: Python :: 3.6
3938
Programming Language :: Python :: 3.7
4039
Programming Language :: Python :: 3.8
4140

4241
[options]
43-
python_requires = >=3.5
42+
python_requires = >=3.6
4443
package_dir=
4544
=src
4645
packages=find_namespace:
4746

4847
install_requires =
49-
opentelemetry-api == 1.0.0.dev0
48+
opentelemetry-api == 1.0.1.dev0
5049

5150
[options.extras_require]
5251
test =

Diff for: _template/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
__version__ = "0.19.dev0"
15+
__version__ = "0.20.dev0"

Diff for: docs/instrumentation/urllib3/urllib3.rst

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
OpenTelemetry urllib3 Instrumentation
2+
============================================
3+
4+
.. automodule:: opentelemetry.instrumentation.urllib3
5+
:members:
6+
:undoc-members:
7+
:show-inheritance:

Diff for: docs/nitpick-exceptions.ini

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
[default]
22
class_references=
33
; TODO: Understand why sphinx is not able to find this local class
4+
opentelemetry.propagators.textmap.CarrierT
5+
opentelemetry.propagators.textmap.Setter
6+
opentelemetry.propagators.textmap.Getter
47
opentelemetry.propagators.textmap.TextMapPropagator
58
; - AwsXRayFormat
6-
opentelemetry.propagators.textmap.DictGetter
9+
opentelemetry.propagators.textmap.DefaultGetter
710
; API
811
opentelemetry.propagators.textmap.Getter
912
; - DatadogFormat
1013
; - AWSXRayFormat
1114
opentelemetry.sdk.trace.id_generator.IdGenerator
1215
; - AwsXRayIdGenerator
13-
TextMapPropagatorT
16+
TextMapPropagator
17+
CarrierT
18+
Setter
19+
Getter
1420
; - AwsXRayFormat.extract
1521

1622
anys=
@@ -29,3 +35,4 @@ anys=
2935
; Instrumentation
3036
BaseInstrumentor
3137
; - instrumentation.*
38+
Setter

Diff for: exporter/opentelemetry-exporter-datadog/setup.cfg

+4-5
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,19 @@ classifiers =
2828
License :: OSI Approved :: Apache Software License
2929
Programming Language :: Python
3030
Programming Language :: Python :: 3
31-
Programming Language :: Python :: 3.5
3231
Programming Language :: Python :: 3.6
3332
Programming Language :: Python :: 3.7
3433
Programming Language :: Python :: 3.8
3534

3635
[options]
37-
python_requires = >=3.5
36+
python_requires = >=3.6
3837
package_dir=
3938
=src
4039
packages=find_namespace:
4140
install_requires =
42-
ddtrace>=0.34.0
43-
opentelemetry-api == 1.0.0.dev0
44-
opentelemetry-sdk == 1.0.0.dev0
41+
ddtrace>=0.34.0,<0.47.0
42+
opentelemetry-api == 1.0.1.dev0
43+
opentelemetry-sdk == 1.0.1.dev0
4544

4645
[options.packages.find]
4746
where = src

Diff for: exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/propagator.py

+13-11
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
from opentelemetry.context import Context
1919
from opentelemetry.exporter.datadog import constants
2020
from opentelemetry.propagators.textmap import (
21+
CarrierT,
2122
Getter,
2223
Setter,
2324
TextMapPropagator,
24-
TextMapPropagatorT,
25+
default_getter,
26+
default_setter,
2527
)
2628
from opentelemetry.trace import get_current_span, set_span_in_context
2729

@@ -36,9 +38,9 @@ class DatadogFormat(TextMapPropagator):
3638

3739
def extract(
3840
self,
39-
getter: Getter[TextMapPropagatorT],
40-
carrier: TextMapPropagatorT,
41+
carrier: CarrierT,
4142
context: typing.Optional[Context] = None,
43+
getter: Getter = default_getter,
4244
) -> Context:
4345
trace_id = extract_first_element(
4446
getter.get(carrier, self.TRACE_ID_KEY)
@@ -81,28 +83,28 @@ def extract(
8183

8284
def inject(
8385
self,
84-
set_in_carrier: Setter[TextMapPropagatorT],
85-
carrier: TextMapPropagatorT,
86+
carrier: CarrierT,
8687
context: typing.Optional[Context] = None,
88+
setter: Setter = default_setter,
8789
) -> None:
8890
span = get_current_span(context)
8991
span_context = span.get_span_context()
9092
if span_context == trace.INVALID_SPAN_CONTEXT:
9193
return
9294
sampled = (trace.TraceFlags.SAMPLED & span.context.trace_flags) != 0
93-
set_in_carrier(
95+
setter.set(
9496
carrier, self.TRACE_ID_KEY, format_trace_id(span.context.trace_id),
9597
)
96-
set_in_carrier(
98+
setter.set(
9799
carrier, self.PARENT_ID_KEY, format_span_id(span.context.span_id)
98100
)
99-
set_in_carrier(
101+
setter.set(
100102
carrier,
101103
self.SAMPLING_PRIORITY_KEY,
102104
str(constants.AUTO_KEEP if sampled else constants.AUTO_REJECT),
103105
)
104106
if constants.DD_ORIGIN in span.context.trace_state:
105-
set_in_carrier(
107+
setter.set(
106108
carrier,
107109
self.ORIGIN_KEY,
108110
span.context.trace_state[constants.DD_ORIGIN],
@@ -134,8 +136,8 @@ def format_span_id(span_id: int) -> str:
134136

135137

136138
def extract_first_element(
137-
items: typing.Iterable[TextMapPropagatorT],
138-
) -> typing.Optional[TextMapPropagatorT]:
139+
items: typing.Iterable[CarrierT],
140+
) -> typing.Optional[CarrierT]:
139141
if items is None:
140142
return None
141143
return next(iter(items), None)

Diff for: exporter/opentelemetry-exporter-datadog/src/opentelemetry/exporter/datadog/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
__version__ = "0.19.dev0"
15+
__version__ = "0.20.dev0"

Diff for: exporter/opentelemetry-exporter-datadog/tests/test_datadog_format.py

+7-13
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,12 @@
1717

1818
from opentelemetry import trace as trace_api
1919
from opentelemetry.exporter.datadog import constants, propagator
20-
from opentelemetry.propagators.textmap import DictGetter
2120
from opentelemetry.sdk import trace
2221
from opentelemetry.sdk.trace.id_generator import RandomIdGenerator
2322
from opentelemetry.trace import get_current_span, set_span_in_context
2423

2524
FORMAT = propagator.DatadogFormat()
2625

27-
carrier_getter = DictGetter()
28-
2926

3027
class TestDatadogFormat(unittest.TestCase):
3128
@classmethod
@@ -45,7 +42,6 @@ def test_malformed_headers(self):
4542
malformed_parent_id_key = FORMAT.PARENT_ID_KEY + "-x"
4643
context = get_current_span(
4744
FORMAT.extract(
48-
carrier_getter,
4945
{
5046
malformed_trace_id_key: self.serialized_trace_id,
5147
malformed_parent_id_key: self.serialized_parent_id,
@@ -63,7 +59,7 @@ def test_missing_trace_id(self):
6359
FORMAT.PARENT_ID_KEY: self.serialized_parent_id,
6460
}
6561

66-
ctx = FORMAT.extract(carrier_getter, carrier)
62+
ctx = FORMAT.extract(carrier)
6763
span_context = get_current_span(ctx).get_span_context()
6864
self.assertEqual(span_context.trace_id, trace_api.INVALID_TRACE_ID)
6965

@@ -73,15 +69,14 @@ def test_missing_parent_id(self):
7369
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
7470
}
7571

76-
ctx = FORMAT.extract(carrier_getter, carrier)
72+
ctx = FORMAT.extract(carrier)
7773
span_context = get_current_span(ctx).get_span_context()
7874
self.assertEqual(span_context.span_id, trace_api.INVALID_SPAN_ID)
7975

8076
def test_context_propagation(self):
8177
"""Test the propagation of Datadog headers."""
8278
parent_span_context = get_current_span(
8379
FORMAT.extract(
84-
carrier_getter,
8580
{
8681
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
8782
FORMAT.PARENT_ID_KEY: self.serialized_parent_id,
@@ -118,7 +113,7 @@ def test_context_propagation(self):
118113

119114
child_carrier = {}
120115
child_context = set_span_in_context(child)
121-
FORMAT.inject(dict.__setitem__, child_carrier, context=child_context)
116+
FORMAT.inject(child_carrier, context=child_context)
122117

123118
self.assertEqual(
124119
child_carrier[FORMAT.TRACE_ID_KEY], self.serialized_trace_id
@@ -138,7 +133,6 @@ def test_sampling_priority_auto_reject(self):
138133
"""Test sampling priority rejected."""
139134
parent_span_context = get_current_span(
140135
FORMAT.extract(
141-
carrier_getter,
142136
{
143137
FORMAT.TRACE_ID_KEY: self.serialized_trace_id,
144138
FORMAT.PARENT_ID_KEY: self.serialized_parent_id,
@@ -165,7 +159,7 @@ def test_sampling_priority_auto_reject(self):
165159

166160
child_carrier = {}
167161
child_context = set_span_in_context(child)
168-
FORMAT.inject(dict.__setitem__, child_carrier, context=child_context)
162+
FORMAT.inject(child_carrier, context=child_context)
169163

170164
self.assertEqual(
171165
child_carrier[FORMAT.SAMPLING_PRIORITY_KEY],
@@ -178,7 +172,7 @@ def test_fields(self, mock_get_current_span):
178172

179173
tracer = trace.TracerProvider().get_tracer("sdk_tracer_provider")
180174

181-
mock_set_in_carrier = Mock()
175+
mock_setter = Mock()
182176

183177
mock_get_current_span.configure_mock(
184178
**{
@@ -195,11 +189,11 @@ def test_fields(self, mock_get_current_span):
195189

196190
with tracer.start_as_current_span("parent"):
197191
with tracer.start_as_current_span("child"):
198-
FORMAT.inject(mock_set_in_carrier, {})
192+
FORMAT.inject({}, setter=mock_setter)
199193

200194
inject_fields = set()
201195

202-
for call in mock_set_in_carrier.mock_calls:
196+
for call in mock_setter.mock_calls:
203197
inject_fields.add(call[1][1])
204198

205199
self.assertEqual(FORMAT.fields, inject_fields)

0 commit comments

Comments
 (0)