Instrument new Elasticsearch methods
open_point_in_time(). (PR #602)
The release now includes binary wheels for Linux ARM and Python 3.9.
- Support hex timestamp in Amazon headers (PR #598)
- Fix a socket resource leak when downloading the core agent. (PR #609)
- Fix Starlette with ASGI apps that are class instances (Issue #596)
- Support Python 3.9. (PR #583)
- Moved core agent on Linux to default to the musl version, rather than try detect whether to use the musl or GNU libc version. (PR #585)
- Added a cast to string of query parameters, to work around cases where
application code changes them to non-strings. Fixes a possible exception:
AttributeError: 'int' object has no attribute 'encode'in
- Changed default agent connection to use TCP rather than a unix socket. By
default the agent will be run on 127.0.0.1, port 6590. This should resolve
a number of connection issues. To continue using a socket connection,
core_agent_socket_path. (Issue #553)
- Tested with Django 3.1. No compatibility changes were required, but this is the first release to be tagged as supporting it.
- Fixed validation check on length of key. (Issue #563)
- Update Core Agent to version 1.3.0, fixing several bugs and opening the ability to run with only a TCP socket. (Issue #567)
- On Django, only track the current user ID if
request.userwas accessed by application code. This stops a
Vary: Cookieheader being injected due to session data access. (Issue #544)
- Always convert
collect_remote_ipto boolean. (Issue #542)
- Extended RQ integration with
HerokuWorkerclass for use in the RQ Heroku pattern. (Issue #529)
- Added the
SCOUT_COLLECT_REMOTE_IPsetting which can be set to
Falseto disable storing user IP addresses in Scout traces. (Issue #535)
- Don't log the Scout key during startup. (Issue #297)
- Fix crash when scanning packages that have a Name or Version that is
None. (Issue #522)
- Update Core Agent to version 1.2.9, fixing several bugs. (Issue #516)
- Support Django's
BASE_DIRsetting being a
pathlib.Path, as the default template in Django 3.1 will set. (Issue #503)
- Instrument new Elasticsearch methods
get_script_languages(). (PR #507)
- Prevent output from the core agent when starting it. (Issue #510)
- Added config value
SCOUT_SHUTDOWN_MESSAGE_ENABLEDwhich can be set to "false" to disable the shutdown message "Scout draining N events..."that was added in version 2.11.0. (Issue #498)
socket_pathto have the
core_agent_prefix. This is to clarify that they apply only to the core agent process. The old names continue to work as aliases. (Issue #497)
- Improved some log messages and levels around instrumentation. (Issue #502)
- Added ability to read configuration from your Celery app. This can help share
configuration between Django and Celery. Pass your application as
appto have the configuration copied:
scout_apm.celery.install(app=app). (Issue #477)
- Added maximum span limit of 1500. This prevents memory exhaustion when tracing long running tasks as Scout no longer tries to record everything. (Issue #472)
- Made installation of the objtrace C extension optional, so that if it fails due to your C compiler being old, Scout can still install. (Issue #488)
- Removed warning for setting the
SCOUT_LOG_LEVELsetting, since this is set by default by the Heroku add-on. (Issue #486)
- Improve Falcon integration: tracing is automatically disabled if installation fails, track middleware, and support class-based responders. (PR #453, PR #460)
- Add Hug integration. (PR #460)
- Limit size of recorded tracebacks to reduce memory usage. (PR #476)
- Scout now flushes any queued commands to the core agent at shutdown, with a
shutdown_timeout_seconds, defaulting to 2 seconds. This ensures that all traces are recorded, rather than lost, especially useful for single-run background commands. (Issue # 473)
- Move from requests to underlying urllib3 for downloads to reduce dependency footprint. (PR #480)
- Retry downloading the core agent a few times, and use a timeout to prevent startup hangs. (PR #480)
- Moved some user-facing warnings, such as for deprecated features, from
warnings, so they can be caught during testing. (PR #468)
- Fix Jinja2 asynchronous rendering instrumentation for Jinja2 2.11.0+. (PR #462)
- Stop patching
scripts_painless_context(), because it has been removed in version 7.5.1. (Issue #454)
- Fix for
elasticsearchversion 7.5.1's change of positional argument order. (Issue #456)
- Use Python 3.8's standard library
importlib.metadata.distributions()to determine package versions, rather than
pkg_resources. The backport package
importlib_metadatais required on older Python versions. (PR #430)
- Add CherryPy integration. (PR #431)
- Add tracking for missing PyMongo Collection methods. (PR #436)
- Add tracking for missing Elasticsearch client methods. (PR #438)
- Remove the "name" context tag from Flask requests - it only duplicated the request name. (PR #432)
Update Core Agent to version 1.2.6, fixing several bugs:
- Improve SQL statement names in Timeline Traces
- Standardize on a
language_versionkey in metadata
- Autoclose spans that are still running when a Request completes
- Fix recording of path for unicode query parameters on Python 2.7. (PR #419)
- Add RQ integration. (PR #375)
- Track 5XX responses as errors from all web frameworks. (Issue #383)
- Track Flask's request preprocessors as a span
PreprocessRequest. (PR #390)
- Track Jinja2 asynchronous template rendering. (PR #398)
- Add Django-Huey integration. (PR #401)
- Track better names for Django REST Framework
ViewSets. (PR #380)
- Always capture SQL tracebacks for
executemanyqueries going over the built-in count threshold. (PR #409)
- Don't capture internal traceback function's frame in tracebacks. (PR #410)
- Fixed memory allocation tracking, which has been broken since a refactor in version 2.7.0.
- Move all decorators to the
wraptlibrary which is more transparent. (PR #324)
- Move context tracking to be async-compatble with
Local. (PR #349)
- Add Starlette integration for Python 3.6+. (PR #349)
- Add Huey integration. (PR #367)
- Track SQL Alchemy
executemanycalls as multi-queries. (PR #340)
- Track Elasticsearch index name when it's not passed as a keyword argument. (PR #348)
- Increase core agent socket timeout to reduce reconnections. (PR #247)
- Fix the
django.core.urlresolverson Django 1.11. (PR #359)
- Correctly disable Bottle if the agent fails to launch. (PR #364)
- Python 3.8 testing and PyPI trove classifier - no code changes were required so older versions should work too. (PR #263)
- Capture better operation names for Django Tastypie resources, e.g.
myapp.api.UserResource.get_list. (PR #332)
scout_apm.api.install()signature to not take
*args, **kwargsbut just
configas a keyword argument. (PR #304)
- Rewrite background samplers thread to avoid some rare race conditions. (PR #307)
- Fix warning emitted from using deprecated 'warn' method (PR #283).
- Improve warning message for deprecated
log_levelconfiguration option (PR #288).
- Track errors on Pyramid (PR #298).
- Don't start on Windows which is currently not supported (request support on Issue #101) (PR #299).
log_levelconfiguration option is deprecated. Please use the new name
core_agent_log_levelinstead (PR #273).
- Change default "path" tag on web requests to capture query parameters as
well. This can be disabled by setting the config value
"path"(PR #268, PR #269).
- Track the
urlconfon Django, for multi-domain support (PR #276).
- Track request queue time from the
X-Amzn-Trace-Idheader, which is sent by AWS ALB's (PR #279).
- Updated Core Agent version to 1.2.4 to support new features (PR #280).
- Fix Bottle path tagging to use path from URL rather than controller name (PR #267).
- Support the
hostnamesetting (PR #251).
- Support timeline trace view (PR #252).
- Add API function
- Updated Core Agent version to 1.2.0 to support new features (PR #253).
- Use the same default socket name that the core agent uses when launched alone
scout-agent.sock) (PR #240).
- Fix CPU statistics to work when the CPU count cannot be determined (PR #245).
- Improved logging for debugging customer problems (PR #234).
- Fixed Flask to not monitor requests when
SCOUT_MONITORis set to
- Fixed Django to stop monitoring requests when
SCOUT_MONITORis set to
Falseduring runtime (PR #236).
- Add Dramatiq integration (PR #223).
- Add Nameko integration (PR #212).
- Track Celery task
queuetags (PR #205).
- Track Celery task time in queue with context tag
- Track Celery task ID with context tag
task_id, and parent task's ID (for chains, chords, etc.) with context tag
- Improve Django admin views' traced names. Before all admin classes' traces
would be merged by function name such as
django.contrib.admin.options.changelist_view. Now traces appear per admin class, for example
- Updated Core Agent version to 1.1.11. This fixes the
- Use Django's native DB instrumentation on Django 2.0+, rather than monkey patching the database cursor. (PR #218).
- Fix tracking of path on Flask. (PR #221).
- Close file descriptors when launching the core agent process. This fixes a bug where uwsgi's HTTP ports would be held by the it on Python 2.7. (PR #219).
- Track user IP on Flask (PR #190).
- Make user IP tracking on Bottle and Pyramid use the same algorithm as other
integrations, checking for the
client-ipheader (PR #192, PR #195).
- Add support to Bottle, Falcon, Flask and Pyramid integrations for tracking request queue timing (PR #199, PR #201).
- Track path and user IP on Django < 1.10 (PR #190).
- Fix the undocumented
core-agent-managerCLI command (PR #202).
- Consistently track view responses on Django between different versions (PR #203).
- Avoid unbalanced request tracking in certain cases on Django < 1.10 (PR #203).
- Clarified contents of public API by moving some stuff out of it and setting
- Add support to Django integration for tracking request queue timing from the
value of the
- Add Falcon integration
- Tested on Django 2.2
- Added PyPI Trove classifiers for frameworks
- Track usernames on Django < 1.10
- Stop warnings from using deprecated method
- Track some missed requests on Flask such as automatic
- Fix 'ignore' functionality on Django < 1.10
- Add 'scm_subdirectory' config option (PR #155)
- Fixed Elasticsearch integration for queries passing 'index' to
elasticsearch-pyas a list (PR #156)
- Fixes "Registering with app" log message not using configured logger (PR #154)
- Add platform triple to config (PR #151)
core_agent_permissionsconfiguration option. (PR #147)
- Remove unused dependency on PyYAML (PR #146)
- Python 2.7 support
- Ability to 'ignore' requests via configuration option and
- Updated Core Agent version to support Database Addon
- Multi threading lock fix in ThreadLocalSingleton (#127)
- Update Core Agent
- Enable Memory Bloat and Allocation tracking.
- More reliable socket communication with Core Agent (#126)
- settings.BASE_DIR is optional in Django (#123)
- Fix issue when
MIDDLEWARE_CLASSESare both defined in Django 1.x apps (PR #122)
- Fix issue detecting
MIDDLEWARE_CLASSESin Django apps (#119)
- Packaging changes only
- Track object allocations for every span (Objtrace module)
- Track RSS increase during a TrackedRequest.
- Compatibility with old style Django middleware/settings
- Alpine Linux support (Musl based distro) (#108, PR #110)
- Configuration not integrated into derived values (#112)
- Flask Instruments: init_app captures app variable (#104)
- Look up 'user_ip' context from request headers (PR #90)
- Improved locking/sync around CoreAgentSocket (#91)
- DO not collect backtraces on Controller or Middleware layers (#88)
- Better Elasticsearch naming (#84)
- Flask transactions that throw exceptions don't appear (#29)
- Log configuration options to DEBUG on install
- Add Context, Config, and install() to scout_apm.api
- Instrumentation API marks TrackedRequest as real request
- Spans can ignore children (#85)
- Determine Application Root
- Deploy Detection
- Additional Instruments:
- Instrumentation API
- Python 3.7 compatibility.
- Python 3.7 makes 'async' a reserved word.
- Remove python 2.7 from supported versions in setup.py while we work to ensure 2.7 compatibility.
- Typo in sqlalchemy for NPlusOneCallSet capture (#73)
- Tuple as logging argument for tagging logger (#74)
- Pyramid Support (#58)
- Bottle Support (#64)
- Deploy Tracking Support (#65)
- N+1 Backtrace Capture (#62)
- A few fixes for 2.7 support
- Custom instrumentation with a Context Manager or Decorator (#50)
- Enhanced Test Coverage (#53)
- In error conditions that cause unfinished spans, don't raise exceptions (#52)
- Several Python 2.7 Incompatibilities (#56, #57)
- Handle Flask OPTIONS requests (#41)
- Fix incorrect default argument to cursor.execute (#42)
- Remove debugging message for spans that could raise an error
- Prevent span mismatch from raising on
- Log INFO message if SCOUT_MONITOR is false
- Except OSError instead of ConnectionRefusedError (python 2.7 compatibility)
- Fix CLI command module import
- Basic Celery support
- Capture Tracebacks on spans over 500ms
- Register as Python with APM (previously was not noted explicitly)
- Fix CLI commands
- Capture the current user's username correctly when using custom User model
- Catch IOError when reading core-agent's manifest.json (#24)
- Reworked Django instrumentation (#19)
- Initial Flask Support (#18)
- Initial SQLAlchemy Support (#18)
- Add Request Context Support (#17)
- Correct the default
- Clearer archive download name
- Fix mismatched archive download location
Initial public release
- Django View, Template and SQL instrumentation
- Periodic CPU & Memory Readings
- Automatic management of "core agent" binary.
- Configuration settable via ENV, or Django's settings.py