Skip to content

Commit dfd8215

Browse files
committed
Simplify bootstrap and generate code
- We now automatically generate bootstrap_gen.py file from the list of instrumentations present in the source tree. - Bootstrap command now uses consumes this auto-generated list instead of keeping it's own local copy. - We no longer uninstall packages before installing them as instrumentation package no longer specify libraries as dependencies so the edge cases are no longer there. - We no longer try to install an incompatible version or force upgrade/downgrade an installed version. This used to leave systems in broken states which should happen no more.
1 parent 4a8b32b commit dfd8215

File tree

43 files changed

+1293
-210
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

+1293
-210
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
*.egg
99
*.egg-info
1010
dist
11+
dist-info
1112
build
1213
eggs
1314
parts

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.2.0-0.21b0...HEAD)
88

99
### Changed
10+
- `opentelemetry-bootstrap` is not more robust and less likley to leave systems in a
11+
broken state.
12+
([#514](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/514))
1013
- `opentelemetry-instrumentation-asgi` Set the response status code on the server span
1114
([#478](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/478))
1215
- `opentelemetry-instrumentation-tornado` Fixed cases where description was used with non-

CONTRIBUTING.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ Below is a checklist of things to be mindful of when implementing a new instrume
170170
- Extends from [BaseInstrumentor](https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/opentelemetry-instrumentation/src/opentelemetry/instrumentation/instrumentor.py#L26)
171171
- Supports auto-instrumentation
172172
- Add an entry point (ex. https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/instrumentation/opentelemetry-instrumentation-requests/setup.cfg#L56)
173-
- Add instrumentation package to `bootstrap.py` (https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/opentelemetry-instrumentation/src/opentelemetry/instrumentation/bootstrap.py#L37)
173+
- Run `python scripts/setup.py` followed by `python scripts/generate_instrumentation_bootstrap.py` after adding a new instrumentation package.
174174
- Functionality that is common amongst other instrumentation and can be abstracted [here](https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/opentelemetry-instrumentation/src/opentelemetry/instrumentation)
175175
- Request/response [hooks](https://github.com/open-telemetry/opentelemetry-python-contrib/issues/408) for http instrumentations
176176
- `suppress_instrumentation` functionality

dev-requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
astor~=0.8.1
12
pylint~=2.6
23
flake8~=3.7
34
isort~=5.6

instrumentation/opentelemetry-instrumentation-aiohttp-client/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -66,6 +68,32 @@
6668

6769
extras_require["test"] = test_deps
6870

71+
72+
class JSONMetadataCommand(distutils.cmd.Command):
73+
74+
description = (
75+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
76+
"auto-generate code in other places",
77+
)
78+
user_options = []
79+
80+
def initialize_options(self):
81+
pass
82+
83+
def finalize_options(self):
84+
pass
85+
86+
def run(self):
87+
metadata = {
88+
"name": config["metadata"]["name"],
89+
"version": PACKAGE_INFO["__version__"],
90+
"instruments": PACKAGE_INFO["_instruments"],
91+
}
92+
print(json.dumps(metadata))
93+
94+
6995
setuptools.setup(
70-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
96+
cmdclass={"meta": JSONMetadataCommand},
97+
version=PACKAGE_INFO["__version__"],
98+
extras_require=extras_require,
7199
)

instrumentation/opentelemetry-instrumentation-aiopg/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -56,6 +58,32 @@
5658

5759
extras_require["test"] = test_deps
5860

61+
62+
class JSONMetadataCommand(distutils.cmd.Command):
63+
64+
description = (
65+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
66+
"auto-generate code in other places",
67+
)
68+
user_options = []
69+
70+
def initialize_options(self):
71+
pass
72+
73+
def finalize_options(self):
74+
pass
75+
76+
def run(self):
77+
metadata = {
78+
"name": config["metadata"]["name"],
79+
"version": PACKAGE_INFO["__version__"],
80+
"instruments": PACKAGE_INFO["_instruments"],
81+
}
82+
print(json.dumps(metadata))
83+
84+
5985
setuptools.setup(
60-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
86+
cmdclass={"meta": JSONMetadataCommand},
87+
version=PACKAGE_INFO["__version__"],
88+
extras_require=extras_require,
6189
)

instrumentation/opentelemetry-instrumentation-asgi/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -56,6 +58,32 @@
5658

5759
extras_require["test"] = test_deps
5860

61+
62+
class JSONMetadataCommand(distutils.cmd.Command):
63+
64+
description = (
65+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
66+
"auto-generate code in other places",
67+
)
68+
user_options = []
69+
70+
def initialize_options(self):
71+
pass
72+
73+
def finalize_options(self):
74+
pass
75+
76+
def run(self):
77+
metadata = {
78+
"name": config["metadata"]["name"],
79+
"version": PACKAGE_INFO["__version__"],
80+
"instruments": PACKAGE_INFO["_instruments"],
81+
}
82+
print(json.dumps(metadata))
83+
84+
5985
setuptools.setup(
60-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
86+
cmdclass={"meta": JSONMetadataCommand},
87+
version=PACKAGE_INFO["__version__"],
88+
extras_require=extras_require,
6189
)

instrumentation/opentelemetry-instrumentation-asyncpg/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -66,6 +68,32 @@
6668

6769
extras_require["test"] = test_deps
6870

71+
72+
class JSONMetadataCommand(distutils.cmd.Command):
73+
74+
description = (
75+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
76+
"auto-generate code in other places",
77+
)
78+
user_options = []
79+
80+
def initialize_options(self):
81+
pass
82+
83+
def finalize_options(self):
84+
pass
85+
86+
def run(self):
87+
metadata = {
88+
"name": config["metadata"]["name"],
89+
"version": PACKAGE_INFO["__version__"],
90+
"instruments": PACKAGE_INFO["_instruments"],
91+
}
92+
print(json.dumps(metadata))
93+
94+
6995
setuptools.setup(
70-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
96+
cmdclass={"meta": JSONMetadataCommand},
97+
version=PACKAGE_INFO["__version__"],
98+
extras_require=extras_require,
7199
)

instrumentation/opentelemetry-instrumentation-boto/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -56,6 +58,32 @@
5658

5759
extras_require["test"] = test_deps
5860

61+
62+
class JSONMetadataCommand(distutils.cmd.Command):
63+
64+
description = (
65+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
66+
"auto-generate code in other places",
67+
)
68+
user_options = []
69+
70+
def initialize_options(self):
71+
pass
72+
73+
def finalize_options(self):
74+
pass
75+
76+
def run(self):
77+
metadata = {
78+
"name": config["metadata"]["name"],
79+
"version": PACKAGE_INFO["__version__"],
80+
"instruments": PACKAGE_INFO["_instruments"],
81+
}
82+
print(json.dumps(metadata))
83+
84+
5985
setuptools.setup(
60-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
86+
cmdclass={"meta": JSONMetadataCommand},
87+
version=PACKAGE_INFO["__version__"],
88+
extras_require=extras_require,
6189
)

instrumentation/opentelemetry-instrumentation-botocore/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -66,6 +68,32 @@
6668

6769
extras_require["test"] = test_deps
6870

71+
72+
class JSONMetadataCommand(distutils.cmd.Command):
73+
74+
description = (
75+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
76+
"auto-generate code in other places",
77+
)
78+
user_options = []
79+
80+
def initialize_options(self):
81+
pass
82+
83+
def finalize_options(self):
84+
pass
85+
86+
def run(self):
87+
metadata = {
88+
"name": config["metadata"]["name"],
89+
"version": PACKAGE_INFO["__version__"],
90+
"instruments": PACKAGE_INFO["_instruments"],
91+
}
92+
print(json.dumps(metadata))
93+
94+
6995
setuptools.setup(
70-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
96+
cmdclass={"meta": JSONMetadataCommand},
97+
version=PACKAGE_INFO["__version__"],
98+
extras_require=extras_require,
7199
)

instrumentation/opentelemetry-instrumentation-celery/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -56,6 +58,32 @@
5658

5759
extras_require["test"] = test_deps
5860

61+
62+
class JSONMetadataCommand(distutils.cmd.Command):
63+
64+
description = (
65+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
66+
"auto-generate code in other places",
67+
)
68+
user_options = []
69+
70+
def initialize_options(self):
71+
pass
72+
73+
def finalize_options(self):
74+
pass
75+
76+
def run(self):
77+
metadata = {
78+
"name": config["metadata"]["name"],
79+
"version": PACKAGE_INFO["__version__"],
80+
"instruments": PACKAGE_INFO["_instruments"],
81+
}
82+
print(json.dumps(metadata))
83+
84+
5985
setuptools.setup(
60-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
86+
cmdclass={"meta": JSONMetadataCommand},
87+
version=PACKAGE_INFO["__version__"],
88+
extras_require=extras_require,
6189
)

instrumentation/opentelemetry-instrumentation-dbapi/setup.py

+29-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# RUN `python scripts/generate_setup.py` TO REGENERATE.
1818

1919

20+
import distutils.cmd
21+
import json
2022
import os
2123
from configparser import ConfigParser
2224

@@ -56,6 +58,32 @@
5658

5759
extras_require["test"] = test_deps
5860

61+
62+
class JSONMetadataCommand(distutils.cmd.Command):
63+
64+
description = (
65+
"print out package metadata as JSON. This is used by OpenTelemetry dev scripts to ",
66+
"auto-generate code in other places",
67+
)
68+
user_options = []
69+
70+
def initialize_options(self):
71+
pass
72+
73+
def finalize_options(self):
74+
pass
75+
76+
def run(self):
77+
metadata = {
78+
"name": config["metadata"]["name"],
79+
"version": PACKAGE_INFO["__version__"],
80+
"instruments": PACKAGE_INFO["_instruments"],
81+
}
82+
print(json.dumps(metadata))
83+
84+
5985
setuptools.setup(
60-
version=PACKAGE_INFO["__version__"], extras_require=extras_require
86+
cmdclass={"meta": JSONMetadataCommand},
87+
version=PACKAGE_INFO["__version__"],
88+
extras_require=extras_require,
6189
)

0 commit comments

Comments
 (0)