Metadata-Version: 2.3
Name: django-cavalry
Version: 0.5.0
Summary: Performance tracer middleware for Django
Project-URL: Homepage, https://github.com/valohai/django-cavalry
Author: Valohai
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.8
Requires-Dist: django>=2.0
Provides-Extra: dev
Requires-Dist: pytest-cov; extra == 'dev'
Requires-Dist: pytest-django>=3.7.0; extra == 'dev'
Requires-Dist: pytest>=3.0.0; extra == 'dev'
Requires-Dist: requests-mock; extra == 'dev'
Provides-Extra: poster
Requires-Dist: requests; extra == 'poster'
Description-Content-Type: text/markdown

# django-cavalry

A Performance Tracer!

![CircleCI](https://img.shields.io/github/workflow/status/valohai/django-cavalry/build)
![Codecov](https://img.shields.io/codecov/c/github/valohai/django-cavalry.svg)
![PyPI](https://img.shields.io/pypi/v/django-cavalry.svg)
![MIT License](https://img.shields.io/github/license/valohai/django-cavalry.svg)

## Setup

- Add `'cavalry.middleware.cavalry'` to your middleware.
- Add `CAVALRY_ENABLED = bool(DEBUG)` (or similar~) to your settings.

## Settings – General

### `CAVALRY_ENABLED`

(boolean, default False)

Master switch for the middleware.

This is toggleable during runtime. That is, it does not
wholesale disable the middleware forever via the `MiddlewareNotUsed` mechanism.

### `CAVALRY_PROBABILITY`

(float, default 1)

Probability (0..1) for a request to be traced; useful in production.

### `CAVALRY_DB_RECORD_STACKS`

(boolean, default True)

Whether or not database stack traces should be recorded.
Recording stack traces naturally has a performance impact.

## Settings – Posting

The `requests` library must be available for posting to work.

You can install it by hand, or by using the `[poster]` extra while installing Cavalry.

### `CAVALRY_ELASTICSEARCH_URL_TEMPLATE`

(string)

An URL template for posting payloads to Elasticsearch.
`{curly-braced}` segments are interpolated using Python syntax.
All fields in the payload are available, plus `{ymd}` is the `YYYY-MM-DD` of the current time.
If falsy, no Elasticsearch posting is attempted.

An useful default might be `'http://localhost:9200/my-app-{ymd}/item'`. This is easily ingestible by Kibana.

### `CAVALRY_THREADED_POST`

(boolean, default False)

Whether or not to execute posting in another thread.

Enabling this has a positive performance impact in that formatting and submitting data to Elasticsearch data
will not tie up request handling.

On the flipside, though, if the worker process dies before posting is complete, the trace is lost.

Also, if you're running on uWSGI, make sure `enable-threads` is set.

### `CAVALRY_POST_STACKS`

(boolean, default True)

Whether or not post stack traces.

Not posting stack traces makes the ES payloads smaller.

## Runtime

When

* running in `DEBUG`, or
* when you're a superuser, or
* if `request._cavalry_can_inject_stats` is truthy (e.g. via a middleware of your own design)
  * Note that this may, especially in conjunction with `_cavalry_stacks`, reveal sensitive information.
    Be very diligent with that middleware.

Cavalry injects a small perf bar into each rendered HTML page,
as well as a script segment that outputs SQL queries into the dev console.

By default, stack traces are not printed for the SQL queries;
add the `_cavalry_stacks` query parameter to have them printed too.
