scout-apm 3.3.0__cp38-cp38-musllinux_1_2_i686.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. scout_apm/__init__.py +0 -0
  2. scout_apm/api/__init__.py +197 -0
  3. scout_apm/async_/__init__.py +1 -0
  4. scout_apm/async_/api.py +41 -0
  5. scout_apm/async_/instruments/__init__.py +0 -0
  6. scout_apm/async_/instruments/jinja2.py +13 -0
  7. scout_apm/async_/starlette.py +101 -0
  8. scout_apm/bottle.py +86 -0
  9. scout_apm/celery.py +153 -0
  10. scout_apm/compat.py +104 -0
  11. scout_apm/core/__init__.py +99 -0
  12. scout_apm/core/_objtrace.cpython-38-i386-linux-gnu.so +0 -0
  13. scout_apm/core/agent/__init__.py +0 -0
  14. scout_apm/core/agent/commands.py +250 -0
  15. scout_apm/core/agent/manager.py +319 -0
  16. scout_apm/core/agent/socket.py +211 -0
  17. scout_apm/core/backtrace.py +116 -0
  18. scout_apm/core/cli/__init__.py +0 -0
  19. scout_apm/core/cli/core_agent_manager.py +32 -0
  20. scout_apm/core/config.py +404 -0
  21. scout_apm/core/context.py +140 -0
  22. scout_apm/core/error.py +95 -0
  23. scout_apm/core/error_service.py +167 -0
  24. scout_apm/core/metadata.py +66 -0
  25. scout_apm/core/n_plus_one_tracker.py +41 -0
  26. scout_apm/core/objtrace.py +24 -0
  27. scout_apm/core/platform_detection.py +66 -0
  28. scout_apm/core/queue_time.py +99 -0
  29. scout_apm/core/sampler.py +149 -0
  30. scout_apm/core/samplers/__init__.py +0 -0
  31. scout_apm/core/samplers/cpu.py +76 -0
  32. scout_apm/core/samplers/memory.py +23 -0
  33. scout_apm/core/samplers/thread.py +41 -0
  34. scout_apm/core/stacktracer.py +30 -0
  35. scout_apm/core/threading.py +56 -0
  36. scout_apm/core/tracked_request.py +328 -0
  37. scout_apm/core/web_requests.py +167 -0
  38. scout_apm/django/__init__.py +7 -0
  39. scout_apm/django/apps.py +137 -0
  40. scout_apm/django/instruments/__init__.py +0 -0
  41. scout_apm/django/instruments/huey.py +30 -0
  42. scout_apm/django/instruments/sql.py +140 -0
  43. scout_apm/django/instruments/template.py +35 -0
  44. scout_apm/django/middleware.py +211 -0
  45. scout_apm/django/request.py +144 -0
  46. scout_apm/dramatiq.py +42 -0
  47. scout_apm/falcon.py +142 -0
  48. scout_apm/flask/__init__.py +118 -0
  49. scout_apm/flask/sqlalchemy.py +28 -0
  50. scout_apm/huey.py +54 -0
  51. scout_apm/hug.py +40 -0
  52. scout_apm/instruments/__init__.py +21 -0
  53. scout_apm/instruments/elasticsearch.py +263 -0
  54. scout_apm/instruments/jinja2.py +127 -0
  55. scout_apm/instruments/pymongo.py +105 -0
  56. scout_apm/instruments/redis.py +77 -0
  57. scout_apm/instruments/urllib3.py +80 -0
  58. scout_apm/rq.py +85 -0
  59. scout_apm/sqlalchemy.py +38 -0
  60. scout_apm-3.3.0.dist-info/LICENSE +21 -0
  61. scout_apm-3.3.0.dist-info/METADATA +82 -0
  62. scout_apm-3.3.0.dist-info/RECORD +65 -0
  63. scout_apm-3.3.0.dist-info/WHEEL +5 -0
  64. scout_apm-3.3.0.dist-info/entry_points.txt +2 -0
  65. scout_apm-3.3.0.dist-info/top_level.txt +1 -0
scout_apm/rq.py ADDED
@@ -0,0 +1,85 @@
1
+ # coding=utf-8
2
+
3
+ import datetime as dt
4
+ import logging
5
+
6
+ import wrapt
7
+ from rq import SimpleWorker as RqSimpleWorker
8
+ from rq import Worker as RqWorker
9
+ from rq.job import Job
10
+ from rq.worker import HerokuWorker as RqHerokuWorker
11
+
12
+ import scout_apm.core
13
+ from scout_apm.core.tracked_request import TrackedRequest
14
+
15
+ install_attempted = False
16
+ installed = None
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ def ensure_scout_installed():
22
+ global install_attempted, installed
23
+
24
+ if not install_attempted:
25
+ install_attempted = True
26
+ installed = scout_apm.core.install()
27
+
28
+
29
+ class WorkerMixin(object):
30
+ def __init__(self, *args, **kwargs):
31
+ global installed
32
+ ensure_scout_installed()
33
+ if installed:
34
+ ensure_job_instrumented()
35
+ super(WorkerMixin, self).__init__(*args, **kwargs)
36
+
37
+
38
+ class Worker(WorkerMixin, RqWorker):
39
+ pass
40
+
41
+
42
+ class SimpleWorker(WorkerMixin, RqSimpleWorker):
43
+ pass
44
+
45
+
46
+ class HerokuWorker(WorkerMixin, RqHerokuWorker):
47
+ pass
48
+
49
+
50
+ job_instrumented = False
51
+
52
+
53
+ def ensure_job_instrumented():
54
+ global job_instrumented
55
+ if job_instrumented:
56
+ return
57
+ job_instrumented = True
58
+ Job.perform = wrap_perform(Job.perform)
59
+
60
+
61
+ @wrapt.decorator
62
+ def wrap_perform(wrapped, instance, args, kwargs):
63
+ global installed
64
+ if not installed:
65
+ return wrapped(*args, **kwargs)
66
+
67
+ tracked_request = TrackedRequest.instance()
68
+ tracked_request.is_real_request = True
69
+ tracked_request.tag("task_id", instance.get_id())
70
+ tracked_request.tag("queue", instance.origin)
71
+ # rq strips tzinfo from enqueued_at during serde in at least some cases
72
+ # internally everything uses UTC naive datetimes, so we operate on that
73
+ # assumption here.
74
+ if instance.enqueued_at.tzinfo is None:
75
+ queued_at = instance.enqueued_at.replace(tzinfo=dt.timezone.utc)
76
+ queue_time = (dt.datetime.now(dt.timezone.utc) - queued_at).total_seconds()
77
+ tracked_request.tag("queue_time", queue_time)
78
+ operation = "Job/{}".format(instance.func_name)
79
+ tracked_request.operation = operation
80
+ with tracked_request.span(operation=operation):
81
+ try:
82
+ return wrapped(*args, **kwargs)
83
+ except Exception:
84
+ tracked_request.tag("error", "true")
85
+ raise
@@ -0,0 +1,38 @@
1
+ # coding=utf-8
2
+
3
+ from sqlalchemy import event
4
+
5
+ from scout_apm.core.tracked_request import TrackedRequest
6
+
7
+
8
+ def before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
9
+ if executemany:
10
+ operation = "SQL/Many"
11
+ else:
12
+ operation = "SQL/Query"
13
+ tracked_request = TrackedRequest.instance()
14
+ span = tracked_request.start_span(operation=operation)
15
+ span.tag("db.statement", statement)
16
+
17
+
18
+ def after_cursor_execute(conn, cursor, statement, parameters, context, executemany):
19
+ tracked_request = TrackedRequest.instance()
20
+ span = tracked_request.current_span()
21
+ if span is not None:
22
+ if tracked_request.n_plus_one_tracker.should_capture_backtrace(
23
+ sql=statement,
24
+ duration=span.duration(),
25
+ count=(1 if not executemany else len(parameters)),
26
+ ):
27
+ span.capture_backtrace()
28
+ tracked_request.stop_span()
29
+
30
+
31
+ def instrument_sqlalchemy(engine):
32
+ # We can get in the situation where we double-instrument the cursor. Avoid
33
+ # it by setting a flag and checking it before adding these listeners
34
+ if getattr(engine, "_scout_instrumented", False):
35
+ return
36
+ event.listen(engine, "before_cursor_execute", before_cursor_execute)
37
+ event.listen(engine, "after_cursor_execute", after_cursor_execute)
38
+ engine._scout_instrumented = True
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018-2019 Zimuth, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,82 @@
1
+ Metadata-Version: 2.1
2
+ Name: scout_apm
3
+ Version: 3.3.0
4
+ Summary: Scout Application Performance Monitoring Agent
5
+ Home-page: https://github.com/scoutapp/scout_apm_python
6
+ Author: Scout
7
+ Author-email: support@scoutapm.com
8
+ License: MIT
9
+ Project-URL: Documentation, https://docs.scoutapm.com/#python-agent
10
+ Project-URL: Changelog, https://github.com/scoutapp/scout_apm_python/blob/master/CHANGELOG.md
11
+ Keywords: apm,performance monitoring,development
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Framework :: Bottle
14
+ Classifier: Framework :: Django
15
+ Classifier: Framework :: Django :: 3.2
16
+ Classifier: Framework :: Django :: 4.0
17
+ Classifier: Framework :: Django :: 4.1
18
+ Classifier: Framework :: Django :: 4.2
19
+ Classifier: Framework :: Flask
20
+ Classifier: Intended Audience :: Developers
21
+ Classifier: Topic :: System :: Monitoring
22
+ Classifier: License :: OSI Approved :: MIT License
23
+ Classifier: Operating System :: MacOS
24
+ Classifier: Operating System :: POSIX
25
+ Classifier: Operating System :: POSIX :: Linux
26
+ Classifier: Programming Language :: Python :: 3.8
27
+ Classifier: Programming Language :: Python :: 3.9
28
+ Classifier: Programming Language :: Python :: 3.10
29
+ Classifier: Programming Language :: Python :: 3.11
30
+ Classifier: Programming Language :: Python :: 3.12
31
+ Requires-Python: >=3.8, <4
32
+ Description-Content-Type: text/markdown
33
+ License-File: LICENSE
34
+ Requires-Dist: asgiref
35
+ Requires-Dist: psutil>=5
36
+ Requires-Dist: urllib3~=2.2.0
37
+ Requires-Dist: certifi
38
+ Requires-Dist: wrapt<2.0,>=1.10
39
+
40
+ # Scout Python APM Agent
41
+
42
+ [![GitHub Actions](https://github.com/scoutapp/scout_apm_python/workflows/CI/badge.svg?branch=master)](https://github.com/scoutapp/scout_apm_python/actions?workflow=CI)
43
+ [![PyPI](https://img.shields.io/pypi/v/scout-apm.svg)](https://pypi.python.org/pypi/scout-apm)
44
+ [![Documentation](https://img.shields.io/badge/docs-read%20online-green.svg)](https://docs.scoutapm.com/#python-agent)
45
+ [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)
46
+
47
+ Monitor the performance of Python Django apps, Flask apps, and Celery workers with Scout's [Python APM Agent](https://www.scoutapm.com). Detailed performance metrics and transaction traces are collected once the `scout-apm` package is installed and configured.
48
+
49
+ ## Requirements
50
+
51
+ Python 3.8+.
52
+ For legacy Python versions, including 2.7 and 3.4+, pin scout-apm to <=2.26.1.
53
+
54
+ Scout APM has integrations for the following frameworks:
55
+
56
+ * Bottle 0.12+
57
+ * Celery 3.1+
58
+ * Django 3.2+
59
+ * Dramatiq 1.0+
60
+ * Falcon 2.0+
61
+ * Flask 0.10+
62
+ * Huey 2.0+
63
+ * Hug 2.5.1+
64
+ * RQ 1.0+
65
+ * Starlette 0.12+
66
+
67
+ For other frameworks, you can use the agent's instrumentation API.
68
+
69
+ To use Scout, you'll need to
70
+ [sign up for an account](https://scoutapm.com/users/sign_up) or use
71
+ [our Heroku Addon](https://devcenter.heroku.com/articles/scout).
72
+
73
+ ## Documentation
74
+
75
+ For full installation instructions, including information on configuring Scout
76
+ via environment variables and troubleshooting, see our
77
+ [Python docs](https://scoutapm.com/docs/python).
78
+
79
+ ## Support
80
+
81
+ Please email us at support@scoutapm.com or [create a GitHub
82
+ issue](https://github.com/scoutapp/scout_apm_python/issues/).
@@ -0,0 +1,65 @@
1
+ scout_apm-3.3.0.dist-info/entry_points.txt,sha256=eiVubJRHQCFcJ1fqH_2myVIOlt9xx32sKTRtWs9xWjk,82
2
+ scout_apm-3.3.0.dist-info/RECORD,,
3
+ scout_apm-3.3.0.dist-info/METADATA,sha256=biZi_IvzkhsIOTKKdyc5wXQVuN0yWGQPTjSHjvZzztI,3133
4
+ scout_apm-3.3.0.dist-info/WHEEL,sha256=8mXPuDV2qXc-RHUE1QhrdRfnaZNRa8DXsrwOEvbOqtY,108
5
+ scout_apm-3.3.0.dist-info/top_level.txt,sha256=tXGCTyC-E-TraDQng0CvkawiUZU-h4kkhe-5avNfnTw,10
6
+ scout_apm-3.3.0.dist-info/LICENSE,sha256=IL2YQsmIcNnRK09t7_ELMSBMdyrMWIJpBOCAhZ9IMCU,1084
7
+ scout_apm/rq.py,sha256=afjakKsiNLXgwPMrBB-o8brMPptEuaIfQZ5Cu70ak1w,2249
8
+ scout_apm/compat.py,sha256=kTG20OAM8SkbVQZS_-bd_bn4F0BjpsfGoxfCk7kyYCI,2496
9
+ scout_apm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ scout_apm/sqlalchemy.py,sha256=MKhRJwiJvJDRR4hQA2W8FG2YMueDFXNOmXbP9sQGVqM,1358
11
+ scout_apm/celery.py,sha256=zzM5wn9ScaFk-7YizntSOG8I2WEzEc-crSYZ7_AJjxA,4729
12
+ scout_apm/hug.py,sha256=tSo8r6oFNFoqF3T7lVXi1CxmrRkOX8DiDJrks58dHyw,1387
13
+ scout_apm/falcon.py,sha256=5Ll4RQRz8v_nB_A3cx65I1UQ2hxgWaU1uCsAtkbg4F0,5357
14
+ scout_apm/dramatiq.py,sha256=N0VxvprOeXSAmmvE7nmZ5ul1rMuJQC-eEzerwGTC7yc,1424
15
+ scout_apm/bottle.py,sha256=jWBUXgW4-sOiUbr9HYimO5Ryd9dvNVZa5Rb611jxxNI,2934
16
+ scout_apm/huey.py,sha256=XjQNVfO8Z14iu1t9qqv-ZRn_3HqfuQv5t1ZYhlRZ17Y,1752
17
+ scout_apm/async_/starlette.py,sha256=aFnc1XTXC4ug9llYX9dDeiElXQIb6QgA8gq3N_g9-Ew,3812
18
+ scout_apm/async_/__init__.py,sha256=eoZ6GfifbqhMLNzjlqRDVil-yyBkOmVN9ujSgJWNBlY,15
19
+ scout_apm/async_/api.py,sha256=K8Sh5IiVO-PnJNRzErAQulNxuFcQoMR8-a2-P0IMAZo,1116
20
+ scout_apm/async_/instruments/jinja2.py,sha256=pYrLigxeSgEAWmzWxqh5zCa86TkZQ9A1S7W8uTXE3C8,374
21
+ scout_apm/async_/instruments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ scout_apm/api/__init__.py,sha256=dx6qEJ-xMsWc4E4bvgoxSo5k7vrCELLApJvOoyLWSpA,5660
23
+ scout_apm/django/middleware.py,sha256=fE-bon42PigKZ5SXVxDBHOyPwBmWzZNmzqILKZqM72I,7761
24
+ scout_apm/django/apps.py,sha256=aUQlZG8qQFCi0-vFeU0fmnpI60n3nvpXRWBAjdgG5GA,5260
25
+ scout_apm/django/__init__.py,sha256=RQdhc6VLBlJsiWLVb8yggtaY2pMla1j6YP4yrKPAYgk,207
26
+ scout_apm/django/request.py,sha256=bswpkpJIKO5oFm3OiBRwgXhtZFKx6pbgzGNCLrF8qz0,4853
27
+ scout_apm/django/instruments/template.py,sha256=zr_xlfgEbHoIItAFLbMEc0I4jj4sU8BW5IXMPNMqOI0,963
28
+ scout_apm/django/instruments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ scout_apm/django/instruments/sql.py,sha256=8_n7oUHtrAc7miWrk_k8CLhc9KzS6W0iUbmZJFN-S6g,4227
30
+ scout_apm/django/instruments/huey.py,sha256=tRvBg5wr76W_aGpLfVpaDnLcTpR8jdhGMFOz3Xl580s,653
31
+ scout_apm/flask/__init__.py,sha256=Rt5D7c_NifqIG4cGGh7oo4XmekXacUlZda1WidECodU,4306
32
+ scout_apm/flask/sqlalchemy.py,sha256=HwoYvN0c4LZ9_spCkvVE8gcBJyHFRJCgndFVFKwCzao,757
33
+ scout_apm/core/error.py,sha256=EQ1e1wV9K2vkHXXRzoZxIPW89CF-ce7c8wYTI2b3ajM,3237
34
+ scout_apm/core/tracked_request.py,sha256=zCtv5hWoZ-Cy3yPM0UUaFQkVEyPHTt_BfLXC4FzBv7s,10394
35
+ scout_apm/core/n_plus_one_tracker.py,sha256=hE3YEVEe45Oygq8lR_6ftPRdCab6WYjnN8HeY8wLPL8,978
36
+ scout_apm/core/context.py,sha256=9qpFGKAGIqyer1NqAhBmU8DuVTf-4_doUFSC55vfDm4,4220
37
+ scout_apm/core/queue_time.py,sha256=KA1tsQ8K4kNYSXTfWS-RulTQ41Bhs2-HmqJwIkVxgcc,3199
38
+ scout_apm/core/_objtrace.cpython-38-i386-linux-gnu.so,sha256=S7-MCtCp9eYgMDUZmOiV5epN5Z_IMqnbB9CZx9kO0PY,27692
39
+ scout_apm/core/objtrace.py,sha256=F7L0V2QBzXYUEFfqon3adXkrA9UQJgmWCFprJo-l01I,463
40
+ scout_apm/core/threading.py,sha256=i_e3Zbqcq-yIDkipcTKCGJwmqGzpiYffl6IK88ylC-g,1624
41
+ scout_apm/core/backtrace.py,sha256=x2owyERxWdomJBz4leN3wHsf_P393864UUXW4uFrQtc,3495
42
+ scout_apm/core/__init__.py,sha256=SnXENrNGgE8_ontzysrZdrARLTsBDz7hXD50zludFbM,2944
43
+ scout_apm/core/error_service.py,sha256=QKyFGgjc_Ihm8ONv7j0hkPgtBu30U3poyfAD40BJ7jQ,5359
44
+ scout_apm/core/sampler.py,sha256=NZKX2RAnvOfsHY6EN47qaRmKOCoL04slNG1k91n8n_I,5105
45
+ scout_apm/core/platform_detection.py,sha256=gWgZNfcnjy97HzDTz-Q2F6xzrch7eVQtTGp2KqcdMEk,1777
46
+ scout_apm/core/web_requests.py,sha256=DD6xDdDZOfxCmpOTvXEJY3JLQ0n4Zw9SmlSfnN4xC3w,5680
47
+ scout_apm/core/stacktracer.py,sha256=loNFpOwFtTvf6XsCxari4iFJ8Pe4rZrLmoU691ZuV1M,900
48
+ scout_apm/core/metadata.py,sha256=huqY2c5vPrQSMZykxQzrSyYYiw8s9E_OIm_ABW9ZzzM,2284
49
+ scout_apm/core/config.py,sha256=TuKWfz3T1rYhRLyJm9ewVBZcRlz3YjkFRBX1YJlVHg8,11868
50
+ scout_apm/core/samplers/cpu.py,sha256=X0bpFks18cR61pbf69ptyKE0CtnUmBJUJXSRQ_S2IdM,2522
51
+ scout_apm/core/samplers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ scout_apm/core/samplers/memory.py,sha256=D1py5gmf5GISq6_5HNnwI3HU2EunXaQ2HzqVKRwp5no,444
53
+ scout_apm/core/samplers/thread.py,sha256=P0s7T99EpYbbkekZnlCJQ787G8g1NnNbZjn8CLtDdUg,1342
54
+ scout_apm/core/cli/core_agent_manager.py,sha256=iOZhpXCnKZriJznCc2LD7eDXKqmc98zsYtDIrj3tXlU,813
55
+ scout_apm/core/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
+ scout_apm/core/agent/commands.py,sha256=Ze4CKBHstpSk5OOzr1sNT84XFY2U9hLUGqfpDBSqhtY,7147
57
+ scout_apm/core/agent/manager.py,sha256=Vm6JfjRJW9YGQabWeZ5VXuWC7g8P_qBok1NjP6Oqoh4,10385
58
+ scout_apm/core/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ scout_apm/core/agent/socket.py,sha256=GR0tfElZNxiCRCwtvHiqLU_37GIcz_ABQ3B7Jh-XeP8,6777
60
+ scout_apm/instruments/elasticsearch.py,sha256=xkkV1wHCd6clAFX7sMMrU75mfxXkKwN0i43aWPZg3is,8272
61
+ scout_apm/instruments/jinja2.py,sha256=a2-u9klcZQdkCJaylc55a4KGi3tHaNlbMXQr1PW3zI0,3662
62
+ scout_apm/instruments/redis.py,sha256=nrkt35bNI172yDzHmpcXFc972QDxLdOkdvh2gWkcz08,2190
63
+ scout_apm/instruments/pymongo.py,sha256=wVqA59ciH6LvOH3VRmMZG067U6qypoA6QzLtWp0IdAM,2538
64
+ scout_apm/instruments/__init__.py,sha256=X76KWdu2jgDdeJtg5DOC6rYPaq0ZXkhjiftxcsem3hI,631
65
+ scout_apm/instruments/urllib3.py,sha256=riwzKX-sgj9kCbN8E5gvtBlyWPAae8bMvi-JgMuGO_w,2219
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (75.3.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp38-cp38-musllinux_1_2_i686
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ core-agent-manager = scout_apm.core.cli.core_agent_manager:main
@@ -0,0 +1 @@
1
+ scout_apm