Skip to content

Commit 3354416

Browse files
committed
Add configuration manager
1 parent 888bed9 commit 3354416

File tree

43 files changed

+477
-526
lines changed

Some content is hidden

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

43 files changed

+477
-526
lines changed

docs/index.rst

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ and integration packages.
1818
opentelemetry.context
1919
opentelemetry.metrics
2020
opentelemetry.trace
21-
opentelemetry.util.loader
2221

2322
.. toctree::
2423
:maxdepth: 1

docs/opentelemetry.util.loader.rst

-4
This file was deleted.
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright 2020, OpenTelemetry Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from os import environ
16+
17+
18+
def pytest_sessionstart(session): # pylint: disable=unused-argument
19+
environ["OPENTELEMETRY_PYTHON_TRACER_PROVIDER"] = "sdk_tracer_provider"
20+
environ["OPENTELEMETRY_PYTHON_METER_PROVIDER"] = "sdk_meter_provider"
21+
22+
23+
def pytest_sessionfinish(session): # pylint: disable=unused-argument
24+
environ.pop("OPENTELEMETRY_PYTHON_TRACER_PROVIDER")
25+
environ.pop("OPENTELEMETRY_PYTHON_METER_PROVIDER")

examples/basic_tracer/tracer.py

+1-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import os
1818

1919
from opentelemetry import trace
20-
from opentelemetry.sdk.trace import TracerProvider
2120
from opentelemetry.sdk.trace.export import (
2221
BatchExportSpanProcessor,
2322
ConsoleSpanExporter,
@@ -45,10 +44,6 @@
4544
print("Using ConsoleSpanExporter")
4645
exporter = ConsoleSpanExporter()
4746

48-
# The preferred tracer implementation must be set, as the opentelemetry-api
49-
# defines the interface with a no-op implementation.
50-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
51-
5247
# We tell OpenTelemetry who it is that is creating spans. In this case, we have
5348
# no real name (no setup.py), so we make one up. If we had a version, we would
5449
# also specify it here.
@@ -57,7 +52,7 @@
5752
# SpanExporter receives the spans and send them to the target location.
5853
span_processor = BatchExportSpanProcessor(exporter)
5954

60-
trace.tracer_provider().add_span_processor(span_processor)
55+
trace.get_tracer_provider().add_span_processor(span_processor)
6156
with tracer.start_as_current_span("foo"):
6257
with tracer.start_as_current_span("bar"):
6358
with tracer.start_as_current_span("baz"):

examples/http/server.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
from opentelemetry import trace
2323
from opentelemetry.ext import http_requests
2424
from opentelemetry.ext.wsgi import OpenTelemetryMiddleware
25-
from opentelemetry.sdk.trace import TracerProvider
2625
from opentelemetry.sdk.trace.export import (
2726
BatchExportSpanProcessor,
2827
ConsoleSpanExporter,
@@ -39,19 +38,16 @@
3938
else:
4039
exporter = ConsoleSpanExporter()
4140

42-
# The preferred tracer implementation must be set, as the opentelemetry-api
43-
# defines the interface with a no-op implementation.
44-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
4541
tracer = trace.get_tracer(__name__)
4642

4743
# SpanExporter receives the spans and send them to the target location.
4844
span_processor = BatchExportSpanProcessor(exporter)
49-
trace.tracer_provider().add_span_processor(span_processor)
45+
trace.get_tracer_provider().add_span_processor(span_processor)
5046

5147
# Integrations are the glue that binds the OpenTelemetry API and the
5248
# frameworks and libraries that are used together, automatically creating
5349
# Spans and propagating context as appropriate.
54-
http_requests.enable(trace.tracer_provider())
50+
http_requests.enable(trace.get_tracer_provider())
5551
app = flask.Flask(__name__)
5652
app.wsgi_app = OpenTelemetryMiddleware(app.wsgi_app)
5753

examples/http/tests/conftest.py

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright 2020, OpenTelemetry Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from os import environ
16+
17+
18+
def pytest_sessionstart(session): # pylint: disable=unused-argument
19+
environ["OPENTELEMETRY_PYTHON_TRACER_PROVIDER"] = "sdk_tracer_provider"
20+
environ["OPENTELEMETRY_PYTHON_METER_PROVIDER"] = "sdk_meter_provider"
21+
22+
23+
def pytest_sessionfinish(session): # pylint: disable=unused-argument
24+
environ.pop("OPENTELEMETRY_PYTHON_TRACER_PROVIDER")
25+
environ.pop("OPENTELEMETRY_PYTHON_METER_PROVIDER")

examples/http/tests/test_http.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919

2020

2121
class TestHttpExample(unittest.TestCase):
22-
@classmethod
23-
def setup_class(cls):
22+
def setUp(self):
2423
dirpath = os.path.dirname(os.path.realpath(__file__))
2524
server_script = "{}/../server.py".format(dirpath)
26-
cls.server = subprocess.Popen([sys.executable, server_script])
25+
self.server = subprocess.Popen([sys.executable, server_script])
2726
sleep(1)
2827

2928
def test_http(self):
@@ -34,6 +33,5 @@ def test_http(self):
3433
).decode()
3534
self.assertIn('name="/"', output)
3635

37-
@classmethod
38-
def teardown_class(cls):
39-
cls.server.terminate()
36+
def tearDown(self):
37+
self.server.terminate()

examples/http/tracer_client.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
from opentelemetry import trace
2222
from opentelemetry.ext import http_requests
23-
from opentelemetry.sdk.trace import TracerProvider
2423
from opentelemetry.sdk.trace.export import (
2524
BatchExportSpanProcessor,
2625
ConsoleSpanExporter,
@@ -37,10 +36,7 @@
3736
else:
3837
exporter = ConsoleSpanExporter()
3938

40-
# The preferred tracer implementation must be set, as the opentelemetry-api
41-
# defines the interface with a no-op implementation.
42-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
43-
tracer_provider = trace.tracer_provider()
39+
tracer_provider = trace.get_tracer_provider()
4440

4541
# SpanExporter receives the spans and send them to the target location.
4642
span_processor = BatchExportSpanProcessor(exporter)

examples/metrics/observer_example.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,14 @@
1919
import psutil
2020

2121
from opentelemetry import metrics
22-
from opentelemetry.sdk.metrics import LabelSet, MeterProvider
22+
from opentelemetry.sdk.metrics import LabelSet
2323
from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter
2424
from opentelemetry.sdk.metrics.export.batcher import UngroupedBatcher
2525
from opentelemetry.sdk.metrics.export.controller import PushController
2626

2727
# Configure a stateful batcher
2828
batcher = UngroupedBatcher(stateful=True)
2929

30-
metrics.set_preferred_meter_provider_implementation(lambda _: MeterProvider())
3130
meter = metrics.get_meter(__name__)
3231

3332
# Exporter to export metrics to the console

examples/metrics/prometheus.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,13 @@
2121

2222
from opentelemetry import metrics
2323
from opentelemetry.ext.prometheus import PrometheusMetricsExporter
24-
from opentelemetry.sdk.metrics import Counter, MeterProvider
24+
from opentelemetry.sdk.metrics import Counter
2525
from opentelemetry.sdk.metrics.export.controller import PushController
2626

2727
# Start Prometheus client
2828
start_http_server(port=8000, addr="localhost")
2929

3030
# Meter is responsible for creating and recording metrics
31-
metrics.set_preferred_meter_provider_implementation(lambda _: MeterProvider())
3231
meter = metrics.get_meter(__name__)
3332
# exporter to export metrics to Prometheus
3433
prefix = "MyAppPrefix"

examples/metrics/record.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@
1919
import time
2020

2121
from opentelemetry import metrics
22-
from opentelemetry.sdk.metrics import Counter, MeterProvider
22+
from opentelemetry.sdk.metrics import Counter
2323
from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter
2424
from opentelemetry.sdk.metrics.export.controller import PushController
2525

26-
# The preferred tracer implementation must be set, as the opentelemetry-api
27-
# defines the interface with a no-op implementation.
28-
metrics.set_preferred_meter_provider_implementation(lambda _: MeterProvider())
2926
# Meter is responsible for creating and recording metrics
3027
meter = metrics.get_meter(__name__)
3128
# exporter to export metrics to the console

examples/metrics/simple_example.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import time
2424

2525
from opentelemetry import metrics
26-
from opentelemetry.sdk.metrics import Counter, Measure, MeterProvider
26+
from opentelemetry.sdk.metrics import Counter, Measure
2727
from opentelemetry.sdk.metrics.export import ConsoleMetricsExporter
2828
from opentelemetry.sdk.metrics.export.controller import PushController
2929

@@ -44,7 +44,6 @@ def usage(argv):
4444
sys.exit(1)
4545

4646
# Meter is responsible for creating and recording metrics
47-
metrics.set_preferred_meter_provider_implementation(lambda _: MeterProvider())
4847

4948
# Meter's namespace corresponds to the string passed as the first argument Pass
5049
# in True/False to indicate whether the batcher is stateful. True indicates the

examples/opentelemetry-example-app/src/opentelemetry_example_app/flask_example.py

+1-8
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import opentelemetry.ext.http_requests
2424
from opentelemetry import trace
2525
from opentelemetry.ext.flask import instrument_app
26-
from opentelemetry.sdk.trace import TracerProvider
2726

2827

2928
def configure_opentelemetry(flask_app: flask.Flask):
@@ -42,20 +41,14 @@ def configure_opentelemetry(flask_app: flask.Flask):
4241
"""
4342
# Start by configuring all objects required to ensure
4443
# a complete end to end workflow.
45-
# The preferred implementation of these objects must be set,
46-
# as the opentelemetry-api defines the interface with a no-op
47-
# implementation.
48-
trace.set_preferred_tracer_provider_implementation(
49-
lambda _: TracerProvider()
50-
)
5144

5245
# Next, we need to configure how the values that are used by
5346
# traces and metrics are propagated (such as what specific headers
5447
# carry this value).
5548
# Integrations are the glue that binds the OpenTelemetry API
5649
# and the frameworks and libraries that are used together, automatically
5750
# creating Spans and propagating context as appropriate.
58-
opentelemetry.ext.http_requests.enable(trace.tracer_provider())
51+
opentelemetry.ext.http_requests.enable(trace.get_tracer_provider())
5952
instrument_app(flask_app)
6053

6154

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright 2020, OpenTelemetry Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from os import environ
16+
17+
18+
def pytest_sessionstart(session): # pylint: disable=unused-argument
19+
environ["OPENTELEMETRY_PYTHON_TRACER_PROVIDER"] = "sdk_tracer_provider"
20+
environ["OPENTELEMETRY_PYTHON_METER_PROVIDER"] = "sdk_meter_provider"
21+
22+
23+
def pytest_sessionfinish(session): # pylint: disable=unused-argument
24+
environ.pop("OPENTELEMETRY_PYTHON_TRACER_PROVIDER")
25+
environ.pop("OPENTELEMETRY_PYTHON_METER_PROVIDER")

examples/opentracing/main.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
from opentelemetry import trace
44
from opentelemetry.ext import opentracing_shim
55
from opentelemetry.ext.jaeger import JaegerSpanExporter
6-
from opentelemetry.sdk.trace import TracerProvider
76
from opentelemetry.sdk.trace.export import SimpleExportSpanProcessor
87
from rediscache import RedisCache
98

10-
# Configure the tracer using the default implementation
11-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
12-
tracer_provider = trace.tracer_provider()
9+
tracer_provider = trace.get_tracer_provider()
1310

1411
# Configure the tracer to export traces to Jaeger
1512
jaeger_exporter = JaegerSpanExporter(

ext/opentelemetry-ext-dbapi/README.rst

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ Usage
1414
from opentelemetry.trace import tracer_provider
1515
from opentelemetry.ext.dbapi import trace_integration
1616
17-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
1817
tracer = trace.get_tracer(__name__)
1918
# Ex: mysql.connector
2019
trace_integration(tracer_provider(), mysql.connector, "connect", "mysql")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Copyright 2020, OpenTelemetry Authors
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from os import environ
16+
17+
18+
def pytest_sessionstart(session): # pylint: disable=unused-argument
19+
environ["OPENTELEMETRY_PYTHON_TRACER_PROVIDER"] = "sdk_tracer_provider"
20+
environ["OPENTELEMETRY_PYTHON_METER_PROVIDER"] = "sdk_meter_provider"
21+
22+
23+
def pytest_sessionfinish(session): # pylint: disable=unused-argument
24+
environ.pop("OPENTELEMETRY_PYTHON_TRACER_PROVIDER")
25+
environ.pop("OPENTELEMETRY_PYTHON_METER_PROVIDER")

ext/opentelemetry-ext-jaeger/README.rst

-2
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,8 @@ gRPC is still not supported by this implementation.
3232
3333
from opentelemetry import trace
3434
from opentelemetry.ext import jaeger
35-
from opentelemetry.sdk.trace import TracerProvider
3635
from opentelemetry.sdk.trace.export import BatchExportSpanProcessor
3736
38-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
3937
tracer = trace.get_tracer(__name__)
4038
4139
# create a JaegerSpanExporter

ext/opentelemetry-ext-jaeger/examples/jaeger_exporter_example.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
from opentelemetry import trace
44
from opentelemetry.ext import jaeger
5-
from opentelemetry.sdk.trace import TracerProvider
65
from opentelemetry.sdk.trace.export import BatchExportSpanProcessor
76

8-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
97
tracer = trace.get_tracer(__name__)
108

119
# create a JaegerSpanExporter
@@ -26,7 +24,7 @@
2624
span_processor = BatchExportSpanProcessor(jaeger_exporter)
2725

2826
# add to the tracer factory
29-
trace.tracer_provider().add_span_processor(span_processor)
27+
trace.get_tracer_provider().add_span_processor(span_processor)
3028

3129
# create some spans for testing
3230
with tracer.start_as_current_span("foo") as foo:

ext/opentelemetry-ext-opentracing-shim/src/opentelemetry/ext/opentracing_shim/__init__.py

-4
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,8 @@
2929
import time
3030
3131
from opentelemetry import trace
32-
from opentelemetry.sdk.trace import TracerProvider
3332
from opentelemetry.ext.opentracing_shim import create_tracer
3433
35-
# Tell OpenTelemetry which Tracer implementation to use.
36-
trace.set_preferred_tracer_provider_implementation(lambda T: TracerProvider())
37-
3834
# Create an OpenTelemetry Tracer.
3935
otel_tracer = trace.get_tracer(__name__)
4036

0 commit comments

Comments
 (0)