Skip to content

Commit 68e909b

Browse files
ocelotlmauriciovasquezbernalc24t
authored
Add a configuration manager (#466)
Fixes #123 This basically removes loader.py (uses entry points instead) and all the calls for set_preferred_implementation* in order to cleanly separate user code from configuration. It introduces a configuration manager that can have configuration set by a configuration file or environment variables that override the former configuration method. Co-authored-by: Mauricio Vásquez <[email protected]> Co-authored-by: Chris Kleinknecht <[email protected]>
1 parent 3654a86 commit 68e909b

File tree

36 files changed

+343
-541
lines changed

36 files changed

+343
-541
lines changed

docs/api/api.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@ OpenTelemetry Python API
99
context
1010
metrics
1111
trace
12-
util.loader

docs/api/util.loader.rst

Lines changed: 0 additions & 4 deletions
This file was deleted.

docs/examples/basic_tracer/tracer.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,16 @@
4545
print("Using ConsoleSpanExporter")
4646
exporter = ConsoleSpanExporter()
4747

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-
48+
trace.set_tracer_provider(TracerProvider())
5249
# We tell OpenTelemetry who it is that is creating spans. In this case, we have
5350
# no real name (no setup.py), so we make one up. If we had a version, we would
5451
# also specify it here.
5552
tracer = trace.get_tracer(__name__)
5653

5754
# SpanExporter receives the spans and send them to the target location.
5855
span_processor = BatchExportSpanProcessor(exporter)
56+
trace.get_tracer_provider().add_span_processor(span_processor)
5957

60-
trace.tracer_provider().add_span_processor(span_processor)
6158
with tracer.start_as_current_span("foo"):
6259
with tracer.start_as_current_span("bar"):
6360
with tracer.start_as_current_span("baz"):

docs/examples/http/server.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,17 @@
3939
else:
4040
exporter = ConsoleSpanExporter()
4141

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())
4542
tracer = trace.get_tracer(__name__)
4643

4744
# SpanExporter receives the spans and send them to the target location.
4845
span_processor = BatchExportSpanProcessor(exporter)
49-
trace.tracer_provider().add_span_processor(span_processor)
46+
trace.set_tracer_provider(TracerProvider())
47+
trace.get_tracer_provider().add_span_processor(span_processor)
5048

5149
# Integrations are the glue that binds the OpenTelemetry API and the
5250
# frameworks and libraries that are used together, automatically creating
5351
# Spans and propagating context as appropriate.
54-
http_requests.enable(trace.tracer_provider())
52+
http_requests.enable(trace.get_tracer_provider())
5553
app = flask.Flask(__name__)
5654
app.wsgi_app = OpenTelemetryMiddleware(app.wsgi_app)
5755

docs/examples/http/tracer_client.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,8 @@
3737
else:
3838
exporter = ConsoleSpanExporter()
3939

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()
40+
trace.set_tracer_provider(TracerProvider())
41+
tracer_provider = trace.get_tracer_provider()
4442

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

docs/examples/metrics/observer_example.py

Lines changed: 1 addition & 2 deletions
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

docs/examples/metrics/prometheus.py

Lines changed: 1 addition & 2 deletions
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"

docs/examples/metrics/record.py

Lines changed: 1 addition & 4 deletions
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

docs/examples/metrics/simple_example.py

Lines changed: 1 addition & 2 deletions
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

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

Lines changed: 1 addition & 8 deletions
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

0 commit comments

Comments
 (0)