scout-apm 3.3.0__cp311-cp311-musllinux_1_2_x86_64.whl

Sign up to get free protection for your applications and to get access to all the features.
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-311-x86_64-linux-musl.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 +94 -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,94 @@
1
+ Metadata-Version: 2.2
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
+ Dynamic: author
40
+ Dynamic: author-email
41
+ Dynamic: classifier
42
+ Dynamic: description
43
+ Dynamic: description-content-type
44
+ Dynamic: home-page
45
+ Dynamic: keywords
46
+ Dynamic: license
47
+ Dynamic: project-url
48
+ Dynamic: requires-dist
49
+ Dynamic: requires-python
50
+ Dynamic: summary
51
+
52
+ # Scout Python APM Agent
53
+
54
+ [![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)
55
+ [![PyPI](https://img.shields.io/pypi/v/scout-apm.svg)](https://pypi.python.org/pypi/scout-apm)
56
+ [![Documentation](https://img.shields.io/badge/docs-read%20online-green.svg)](https://docs.scoutapm.com/#python-agent)
57
+ [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)
58
+
59
+ 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.
60
+
61
+ ## Requirements
62
+
63
+ Python 3.8+.
64
+ For legacy Python versions, including 2.7 and 3.4+, pin scout-apm to <=2.26.1.
65
+
66
+ Scout APM has integrations for the following frameworks:
67
+
68
+ * Bottle 0.12+
69
+ * Celery 3.1+
70
+ * Django 3.2+
71
+ * Dramatiq 1.0+
72
+ * Falcon 2.0+
73
+ * Flask 0.10+
74
+ * Huey 2.0+
75
+ * Hug 2.5.1+
76
+ * RQ 1.0+
77
+ * Starlette 0.12+
78
+
79
+ For other frameworks, you can use the agent's instrumentation API.
80
+
81
+ To use Scout, you'll need to
82
+ [sign up for an account](https://scoutapm.com/users/sign_up) or use
83
+ [our Heroku Addon](https://devcenter.heroku.com/articles/scout).
84
+
85
+ ## Documentation
86
+
87
+ For full installation instructions, including information on configuring Scout
88
+ via environment variables and troubleshooting, see our
89
+ [Python docs](https://scoutapm.com/docs/python).
90
+
91
+ ## Support
92
+
93
+ Please email us at support@scoutapm.com or [create a GitHub
94
+ 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=us-cfey-lzP4bYukYOSb9VuI88IgE8pla3szPXPyYY0,3386
4
+ scout_apm-3.3.0.dist-info/WHEEL,sha256=bazm_2wUv8r3ZdI3EFF1W8XzzfWWNf0Zi3x2NpmmA_0,112
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.py,sha256=F7L0V2QBzXYUEFfqon3adXkrA9UQJgmWCFprJo-l01I,463
39
+ scout_apm/core/threading.py,sha256=i_e3Zbqcq-yIDkipcTKCGJwmqGzpiYffl6IK88ylC-g,1624
40
+ scout_apm/core/backtrace.py,sha256=x2owyERxWdomJBz4leN3wHsf_P393864UUXW4uFrQtc,3495
41
+ scout_apm/core/__init__.py,sha256=SnXENrNGgE8_ontzysrZdrARLTsBDz7hXD50zludFbM,2944
42
+ scout_apm/core/error_service.py,sha256=QKyFGgjc_Ihm8ONv7j0hkPgtBu30U3poyfAD40BJ7jQ,5359
43
+ scout_apm/core/sampler.py,sha256=NZKX2RAnvOfsHY6EN47qaRmKOCoL04slNG1k91n8n_I,5105
44
+ scout_apm/core/platform_detection.py,sha256=gWgZNfcnjy97HzDTz-Q2F6xzrch7eVQtTGp2KqcdMEk,1777
45
+ scout_apm/core/web_requests.py,sha256=DD6xDdDZOfxCmpOTvXEJY3JLQ0n4Zw9SmlSfnN4xC3w,5680
46
+ scout_apm/core/stacktracer.py,sha256=loNFpOwFtTvf6XsCxari4iFJ8Pe4rZrLmoU691ZuV1M,900
47
+ scout_apm/core/metadata.py,sha256=huqY2c5vPrQSMZykxQzrSyYYiw8s9E_OIm_ABW9ZzzM,2284
48
+ scout_apm/core/_objtrace.cpython-311-x86_64-linux-musl.so,sha256=nX_gfN3DCJqFMtrUOlc4Yycz2mQrEEeHE98rL7_4rJE,29976
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.8.0)
3
+ Root-Is-Purelib: false
4
+ Tag: cp311-cp311-musllinux_1_2_x86_64
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