scout-apm 3.3.0__cp313-cp313-macosx_10_13_x86_64.whl
Sign up to get free protection for your applications and to get access to all the features.
- scout_apm/__init__.py +0 -0
- scout_apm/api/__init__.py +197 -0
- scout_apm/async_/__init__.py +1 -0
- scout_apm/async_/api.py +41 -0
- scout_apm/async_/instruments/__init__.py +0 -0
- scout_apm/async_/instruments/jinja2.py +13 -0
- scout_apm/async_/starlette.py +101 -0
- scout_apm/bottle.py +86 -0
- scout_apm/celery.py +153 -0
- scout_apm/compat.py +104 -0
- scout_apm/core/__init__.py +99 -0
- scout_apm/core/_objtrace.cpython-313-darwin.so +0 -0
- scout_apm/core/agent/__init__.py +0 -0
- scout_apm/core/agent/commands.py +250 -0
- scout_apm/core/agent/manager.py +319 -0
- scout_apm/core/agent/socket.py +211 -0
- scout_apm/core/backtrace.py +116 -0
- scout_apm/core/cli/__init__.py +0 -0
- scout_apm/core/cli/core_agent_manager.py +32 -0
- scout_apm/core/config.py +404 -0
- scout_apm/core/context.py +140 -0
- scout_apm/core/error.py +95 -0
- scout_apm/core/error_service.py +167 -0
- scout_apm/core/metadata.py +66 -0
- scout_apm/core/n_plus_one_tracker.py +41 -0
- scout_apm/core/objtrace.py +24 -0
- scout_apm/core/platform_detection.py +66 -0
- scout_apm/core/queue_time.py +99 -0
- scout_apm/core/sampler.py +149 -0
- scout_apm/core/samplers/__init__.py +0 -0
- scout_apm/core/samplers/cpu.py +76 -0
- scout_apm/core/samplers/memory.py +23 -0
- scout_apm/core/samplers/thread.py +41 -0
- scout_apm/core/stacktracer.py +30 -0
- scout_apm/core/threading.py +56 -0
- scout_apm/core/tracked_request.py +328 -0
- scout_apm/core/web_requests.py +167 -0
- scout_apm/django/__init__.py +7 -0
- scout_apm/django/apps.py +137 -0
- scout_apm/django/instruments/__init__.py +0 -0
- scout_apm/django/instruments/huey.py +30 -0
- scout_apm/django/instruments/sql.py +140 -0
- scout_apm/django/instruments/template.py +35 -0
- scout_apm/django/middleware.py +211 -0
- scout_apm/django/request.py +144 -0
- scout_apm/dramatiq.py +42 -0
- scout_apm/falcon.py +142 -0
- scout_apm/flask/__init__.py +118 -0
- scout_apm/flask/sqlalchemy.py +28 -0
- scout_apm/huey.py +54 -0
- scout_apm/hug.py +40 -0
- scout_apm/instruments/__init__.py +21 -0
- scout_apm/instruments/elasticsearch.py +263 -0
- scout_apm/instruments/jinja2.py +127 -0
- scout_apm/instruments/pymongo.py +105 -0
- scout_apm/instruments/redis.py +77 -0
- scout_apm/instruments/urllib3.py +80 -0
- scout_apm/rq.py +85 -0
- scout_apm/sqlalchemy.py +38 -0
- scout_apm-3.3.0.dist-info/LICENSE +21 -0
- scout_apm-3.3.0.dist-info/METADATA +94 -0
- scout_apm-3.3.0.dist-info/RECORD +65 -0
- scout_apm-3.3.0.dist-info/WHEEL +5 -0
- scout_apm-3.3.0.dist-info/entry_points.txt +2 -0
- 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
|
scout_apm/sqlalchemy.py
ADDED
@@ -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/huey.py,sha256=XjQNVfO8Z14iu1t9qqv-ZRn_3HqfuQv5t1ZYhlRZ17Y,1752
|
2
|
+
scout_apm/compat.py,sha256=kTG20OAM8SkbVQZS_-bd_bn4F0BjpsfGoxfCk7kyYCI,2496
|
3
|
+
scout_apm/dramatiq.py,sha256=N0VxvprOeXSAmmvE7nmZ5ul1rMuJQC-eEzerwGTC7yc,1424
|
4
|
+
scout_apm/hug.py,sha256=tSo8r6oFNFoqF3T7lVXi1CxmrRkOX8DiDJrks58dHyw,1387
|
5
|
+
scout_apm/rq.py,sha256=afjakKsiNLXgwPMrBB-o8brMPptEuaIfQZ5Cu70ak1w,2249
|
6
|
+
scout_apm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
scout_apm/sqlalchemy.py,sha256=MKhRJwiJvJDRR4hQA2W8FG2YMueDFXNOmXbP9sQGVqM,1358
|
8
|
+
scout_apm/celery.py,sha256=zzM5wn9ScaFk-7YizntSOG8I2WEzEc-crSYZ7_AJjxA,4729
|
9
|
+
scout_apm/bottle.py,sha256=jWBUXgW4-sOiUbr9HYimO5Ryd9dvNVZa5Rb611jxxNI,2934
|
10
|
+
scout_apm/falcon.py,sha256=5Ll4RQRz8v_nB_A3cx65I1UQ2hxgWaU1uCsAtkbg4F0,5357
|
11
|
+
scout_apm/flask/__init__.py,sha256=Rt5D7c_NifqIG4cGGh7oo4XmekXacUlZda1WidECodU,4306
|
12
|
+
scout_apm/flask/sqlalchemy.py,sha256=HwoYvN0c4LZ9_spCkvVE8gcBJyHFRJCgndFVFKwCzao,757
|
13
|
+
scout_apm/core/tracked_request.py,sha256=zCtv5hWoZ-Cy3yPM0UUaFQkVEyPHTt_BfLXC4FzBv7s,10394
|
14
|
+
scout_apm/core/queue_time.py,sha256=KA1tsQ8K4kNYSXTfWS-RulTQ41Bhs2-HmqJwIkVxgcc,3199
|
15
|
+
scout_apm/core/config.py,sha256=TuKWfz3T1rYhRLyJm9ewVBZcRlz3YjkFRBX1YJlVHg8,11868
|
16
|
+
scout_apm/core/metadata.py,sha256=huqY2c5vPrQSMZykxQzrSyYYiw8s9E_OIm_ABW9ZzzM,2284
|
17
|
+
scout_apm/core/error.py,sha256=EQ1e1wV9K2vkHXXRzoZxIPW89CF-ce7c8wYTI2b3ajM,3237
|
18
|
+
scout_apm/core/_objtrace.cpython-313-darwin.so,sha256=niIhuBjZJK3pOMqlcr03ek1eCqF4CoxuMBaXoTeVfQc,35288
|
19
|
+
scout_apm/core/n_plus_one_tracker.py,sha256=hE3YEVEe45Oygq8lR_6ftPRdCab6WYjnN8HeY8wLPL8,978
|
20
|
+
scout_apm/core/__init__.py,sha256=SnXENrNGgE8_ontzysrZdrARLTsBDz7hXD50zludFbM,2944
|
21
|
+
scout_apm/core/threading.py,sha256=i_e3Zbqcq-yIDkipcTKCGJwmqGzpiYffl6IK88ylC-g,1624
|
22
|
+
scout_apm/core/context.py,sha256=9qpFGKAGIqyer1NqAhBmU8DuVTf-4_doUFSC55vfDm4,4220
|
23
|
+
scout_apm/core/objtrace.py,sha256=F7L0V2QBzXYUEFfqon3adXkrA9UQJgmWCFprJo-l01I,463
|
24
|
+
scout_apm/core/web_requests.py,sha256=DD6xDdDZOfxCmpOTvXEJY3JLQ0n4Zw9SmlSfnN4xC3w,5680
|
25
|
+
scout_apm/core/platform_detection.py,sha256=gWgZNfcnjy97HzDTz-Q2F6xzrch7eVQtTGp2KqcdMEk,1777
|
26
|
+
scout_apm/core/stacktracer.py,sha256=loNFpOwFtTvf6XsCxari4iFJ8Pe4rZrLmoU691ZuV1M,900
|
27
|
+
scout_apm/core/sampler.py,sha256=NZKX2RAnvOfsHY6EN47qaRmKOCoL04slNG1k91n8n_I,5105
|
28
|
+
scout_apm/core/backtrace.py,sha256=x2owyERxWdomJBz4leN3wHsf_P393864UUXW4uFrQtc,3495
|
29
|
+
scout_apm/core/error_service.py,sha256=QKyFGgjc_Ihm8ONv7j0hkPgtBu30U3poyfAD40BJ7jQ,5359
|
30
|
+
scout_apm/core/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
31
|
+
scout_apm/core/agent/socket.py,sha256=GR0tfElZNxiCRCwtvHiqLU_37GIcz_ABQ3B7Jh-XeP8,6777
|
32
|
+
scout_apm/core/agent/commands.py,sha256=Ze4CKBHstpSk5OOzr1sNT84XFY2U9hLUGqfpDBSqhtY,7147
|
33
|
+
scout_apm/core/agent/manager.py,sha256=Vm6JfjRJW9YGQabWeZ5VXuWC7g8P_qBok1NjP6Oqoh4,10385
|
34
|
+
scout_apm/core/cli/core_agent_manager.py,sha256=iOZhpXCnKZriJznCc2LD7eDXKqmc98zsYtDIrj3tXlU,813
|
35
|
+
scout_apm/core/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
|
+
scout_apm/core/samplers/thread.py,sha256=P0s7T99EpYbbkekZnlCJQ787G8g1NnNbZjn8CLtDdUg,1342
|
37
|
+
scout_apm/core/samplers/memory.py,sha256=D1py5gmf5GISq6_5HNnwI3HU2EunXaQ2HzqVKRwp5no,444
|
38
|
+
scout_apm/core/samplers/cpu.py,sha256=X0bpFks18cR61pbf69ptyKE0CtnUmBJUJXSRQ_S2IdM,2522
|
39
|
+
scout_apm/core/samplers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
|
+
scout_apm/instruments/elasticsearch.py,sha256=xkkV1wHCd6clAFX7sMMrU75mfxXkKwN0i43aWPZg3is,8272
|
41
|
+
scout_apm/instruments/urllib3.py,sha256=riwzKX-sgj9kCbN8E5gvtBlyWPAae8bMvi-JgMuGO_w,2219
|
42
|
+
scout_apm/instruments/jinja2.py,sha256=a2-u9klcZQdkCJaylc55a4KGi3tHaNlbMXQr1PW3zI0,3662
|
43
|
+
scout_apm/instruments/__init__.py,sha256=X76KWdu2jgDdeJtg5DOC6rYPaq0ZXkhjiftxcsem3hI,631
|
44
|
+
scout_apm/instruments/pymongo.py,sha256=wVqA59ciH6LvOH3VRmMZG067U6qypoA6QzLtWp0IdAM,2538
|
45
|
+
scout_apm/instruments/redis.py,sha256=nrkt35bNI172yDzHmpcXFc972QDxLdOkdvh2gWkcz08,2190
|
46
|
+
scout_apm/api/__init__.py,sha256=dx6qEJ-xMsWc4E4bvgoxSo5k7vrCELLApJvOoyLWSpA,5660
|
47
|
+
scout_apm/async_/starlette.py,sha256=aFnc1XTXC4ug9llYX9dDeiElXQIb6QgA8gq3N_g9-Ew,3812
|
48
|
+
scout_apm/async_/__init__.py,sha256=eoZ6GfifbqhMLNzjlqRDVil-yyBkOmVN9ujSgJWNBlY,15
|
49
|
+
scout_apm/async_/api.py,sha256=K8Sh5IiVO-PnJNRzErAQulNxuFcQoMR8-a2-P0IMAZo,1116
|
50
|
+
scout_apm/async_/instruments/jinja2.py,sha256=pYrLigxeSgEAWmzWxqh5zCa86TkZQ9A1S7W8uTXE3C8,374
|
51
|
+
scout_apm/async_/instruments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
52
|
+
scout_apm/django/request.py,sha256=bswpkpJIKO5oFm3OiBRwgXhtZFKx6pbgzGNCLrF8qz0,4853
|
53
|
+
scout_apm/django/__init__.py,sha256=RQdhc6VLBlJsiWLVb8yggtaY2pMla1j6YP4yrKPAYgk,207
|
54
|
+
scout_apm/django/apps.py,sha256=aUQlZG8qQFCi0-vFeU0fmnpI60n3nvpXRWBAjdgG5GA,5260
|
55
|
+
scout_apm/django/middleware.py,sha256=fE-bon42PigKZ5SXVxDBHOyPwBmWzZNmzqILKZqM72I,7761
|
56
|
+
scout_apm/django/instruments/huey.py,sha256=tRvBg5wr76W_aGpLfVpaDnLcTpR8jdhGMFOz3Xl580s,653
|
57
|
+
scout_apm/django/instruments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
|
+
scout_apm/django/instruments/template.py,sha256=zr_xlfgEbHoIItAFLbMEc0I4jj4sU8BW5IXMPNMqOI0,963
|
59
|
+
scout_apm/django/instruments/sql.py,sha256=8_n7oUHtrAc7miWrk_k8CLhc9KzS6W0iUbmZJFN-S6g,4227
|
60
|
+
scout_apm-3.3.0.dist-info/RECORD,,
|
61
|
+
scout_apm-3.3.0.dist-info/LICENSE,sha256=IL2YQsmIcNnRK09t7_ELMSBMdyrMWIJpBOCAhZ9IMCU,1084
|
62
|
+
scout_apm-3.3.0.dist-info/WHEEL,sha256=G8F0KbXEwNoZTEDqa2OrDrazxPoGwLc-jb314NelGoA,111
|
63
|
+
scout_apm-3.3.0.dist-info/entry_points.txt,sha256=eiVubJRHQCFcJ1fqH_2myVIOlt9xx32sKTRtWs9xWjk,82
|
64
|
+
scout_apm-3.3.0.dist-info/top_level.txt,sha256=tXGCTyC-E-TraDQng0CvkawiUZU-h4kkhe-5avNfnTw,10
|
65
|
+
scout_apm-3.3.0.dist-info/METADATA,sha256=us-cfey-lzP4bYukYOSb9VuI88IgE8pla3szPXPyYY0,3386
|
@@ -0,0 +1 @@
|
|
1
|
+
scout_apm
|