Skip to content

Commit 0f1b149

Browse files
committed
POC instrumentation loader
1 parent cad261e commit 0f1b149

File tree

1 file changed

+25
-6
lines changed
  • opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation

1 file changed

+25
-6
lines changed

Diff for: opentelemetry-instrumentation/src/opentelemetry/instrumentation/auto_instrumentation/sitecustomize.py

+25-6
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS,
2525
)
2626

27+
2728
logger = getLogger(__file__)
2829

2930

@@ -40,20 +41,38 @@ def _load_distros():
4041

4142

4243
def _load_instrumentors():
44+
instrumentation_loader = _default_instrumentation_loader
45+
for loader in iter_entry_points("opentelemetry_instrumentation_loader"):
46+
logger.debug("loading instrumentations with %s", loader.name)
47+
instrumentation_loader = loader.load()
48+
break
49+
4350
package_to_exclude = environ.get(OTEL_PYTHON_DISABLED_INSTRUMENTATIONS, [])
4451
if isinstance(package_to_exclude, str):
4552
package_to_exclude = package_to_exclude.split(",")
4653
# to handle users entering "requests , flask" or "requests, flask" with spaces
4754
package_to_exclude = [x.strip() for x in package_to_exclude]
4855

56+
entry_points = []
4957
for entry_point in iter_entry_points("opentelemetry_instrumentor"):
58+
if entry_point.name in package_to_exclude:
59+
logger.debug(
60+
"Instrumentation skipped for library %s", entry_point.name
61+
)
62+
continue
63+
entry_points.append(entry_point)
64+
65+
instrumentation_loader(entry_points)
66+
67+
68+
def _default_instrumentation_loader(entry_points):
69+
for entry_point in entry_points:
5070
try:
51-
if entry_point.name in package_to_exclude:
52-
logger.debug(
53-
"Instrumentation skipped for library %s", entry_point.name
54-
)
55-
continue
56-
entry_point.load()().instrument() # type: ignore
71+
# custom loaders can inspect entry_point and
72+
# skip loading, load a replacement/fork,
73+
# pass additional parameters to constructor
74+
# or instrument(), etc
75+
entry_point.load()().instrument()
5776
logger.debug("Instrumented %s", entry_point.name)
5877
except Exception as exc: # pylint: disable=broad-except
5978
logger.exception("Instrumenting of %s failed", entry_point.name)

0 commit comments

Comments
 (0)