- Support Error Monitoring. See integration docs. (PR #651)
- Deprecate
backtrace.capture
in favor ofbacktrace.capture_backtrace
- Setup metadata keywords now contains an array of strings.
- Remove non-project paths from traces. (Issue #416)
- Removed parsing queue time from Amazon ALB header, X-Amzn-Trace-Id. The time portion of the header only has the truncated seconds which appears as about 500ms for queue time constantly. (Issue #631)
- Added Celery's
priority
delivery info to the set of tags. - Changed max spans reached log level from warning to debug. (Issue #653)
- Improved debug logging for requests. It now includes some summary information about the request. (Issue #654)
- Set
TrackedRequest.tags("error", "true")
when Celery tasks fail. (Issue #649)
- Tested with Django 3.2. Only define
default_app_config
when using a version of Django earlier than 3.2. - Support instrumentation and transaction decorators for asynchronous
functions via
@instrument.async_
,@WebTransaction.async_
and@BackgroundTransaction.async_
. (PR #633)
- Exclude python library paths from backtraces. (PR #514)
- Preserve tracked request across asyncio tasks. (PR #469)
-
Instrument new Elasticsearch methods
close_point_in_time()
andopen_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'
inscout.core.web_requests
.
- 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,
configure
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.user
was accessed by application code. This stops aVary: Cookie
header being injected due to session data access. (Issue #544)
- Always convert
collect_remote_ip
to boolean. (Issue #542)
- Extended RQ integration with
HerokuWorker
class for use in the RQ Heroku pattern. (Issue #529) - Added the
collect_remote_ip
/SCOUT_COLLECT_REMOTE_IP
setting which can be set toFalse
to 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_DIR
setting being apathlib.Path
, as the default template in Django 3.1 will set. (Issue #503) - Instrument new Elasticsearch methods
get_script_context()
andget_script_languages()
. (PR #507) - Prevent output from the core agent when starting it. (Issue #510)
- Added config value
shutdown_message_enabled
/SCOUT_SHUTDOWN_MESSAGE_ENABLED
which can be set to "false" to disable the shutdown message "Scout draining N events..."that was added in version 2.11.0. (Issue #498) - Renamed
config_file
,log_file
, andsocket_path
to have thecore_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
app
to 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_LEVEL
setting, 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
configurable timeout
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
logging
towarnings
, so they can be caught during testing. (PR #468) - Fix Jinja2 asynchronous rendering instrumentation for Jinja2 2.11.0+. (PR #462)
- Stop patching
elasticsearch
'sscripts_painless_context()
, because it has been removed in version 7.5.1. (Issue #454) - Fix for
elasticsearch
version 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 thanpkg_resources
. The backport packageimportlib_metadata
is 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_version
key in metadata - Autoclose spans that are still running when a Request completes
(PR #415)
- 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
ViewSet
s. (PR #380) - Always capture SQL tracebacks for
executemany
queries 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
wrapt
library which is more transparent. (PR #324) - Move context tracking to be async-compatble with
asgiref
'sLocal
. (PR #349) - Add Starlette integration for Python 3.6+. (PR #349)
- Add Huey integration. (PR #367)
- Track SQL Alchemy
executemany
calls 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
RemovedInDjango20Warning
fordjango.core.urlresolvers
on 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)
- Change
scout_apm.api.install()
signature to not take*args, **kwargs
but justconfig
as 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_level
configuration 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).
- The
log_level
configuration option is deprecated. Please use the new namecore_agent_log_level
instead (PR #273).
- Change default "path" tag on web requests to capture query parameters as
well. This can be disabled by setting the config value
uri_reporting
to"path"
(PR #268, PR #269). - Track the
urlconf
on Django, for multi-domain support (PR #276). - Track request queue time from the
X-Amzn-Trace-Id
header, 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
hostname
setting (PR #251). - Support timeline trace view (PR #252).
- Add API function
rename_transaction()
(PR #129). - 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
(
core-agent.sock
->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_MONITOR
is set toFalse
(PR #235). - Fixed Django to stop monitoring requests when
SCOUT_MONITOR
is set toFalse
during runtime (PR #236).
- Add Dramatiq integration (PR #223).
- Add Nameko integration (PR #212).
- Track Celery task
is_eager
,exchange
,routing_key
andqueue
tags (PR #205). - Track Celery task time in queue with context tag
queue_time
(PR #206). - Track Celery task ID with context tag
task_id
, and parent task's ID (for chains, chords, etc.) with context tagparent_task_id
(PR #227). - 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 exampledjango.contrib.auth.admin.UserAdmin.changelist_view
(PR #226).
- Updated Core Agent version to 1.1.11. This fixes the
scm_subdirectory
configuration option.
- 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-ip
header (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-manager
CLI 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
scout_apm.api.__all__
(PR #204).
- Add support to Django integration for tracking request queue timing from the
value of the
X-Queue-Start
orX-Request-Start
header - 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
logger.warn
- Track some missed requests on Flask such as automatic
OPTIONS
responses
- Fix 'ignore' functionality on Django < 1.10
- Add 'scm_subdirectory' config option (PR #155)
- Fixed Elasticsearch integration for queries passing 'index' to
elasticsearch-py
as a list (PR #156) - Fixes "Registering with app" log message not using configured logger (PR #154)
- Add platform triple to config (PR #151)
- Adds
core_agent_permissions
configuration option. (PR #147)
- Remove unused dependency on PyYAML (PR #146)
- Python 2.7 support
- Ability to 'ignore' requests via configuration option and
scout_apm.api
(PR #144)
- 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
andMIDDLEWARE_CLASSES
are both defined in Django 1.x apps (PR #122)
- Fix issue detecting
MIDDLEWARE_CLASSES
in 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:
- PyMongo
- UrlLib3
- Redis
- Elasticsearch
- Jinja2
- 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
stop_span
- 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
socket_path
- 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