Skip to main content

Requests time tracker from being captured by proxy (e.g. nginx) till being executed by wsgi handler

Project description

Queue time tracker

Reads time when request was processed by nginx & send time spent in queue before it was handled by wsgi.
Designed mostly for autoscaling. Instance cpu is not trustworthy enough, sometimes there can be external bottlenecks, so even if instance cpu is fine, application can hang in queue between nginx(for example) and gunicorn or another wsgi processor.

Configuration

  1. Add header with request timestamp.

    nginx:

    proxy_set_header X-RequestTime $msec;
    
  2. Read header value & send metric value

Django application

  1. Configure django settings:
    • QUEUE_TIME_TRACKER_NOTIFY_EVERY_SECONDS = 10
    • QUEUE_TIME_TRACKER_HEADER = 'HTTP_X_REQUESTTIME'
    • QUEUE_TIME_TRACKER_CACHE_NAME = 'default'
    • QUEUE_TIME_TRACKER_CACHE_KEY_PREFIX = 'foobar'
    • QUEUE_TIME_TRACKER_CLOUDWATCH_NAMESPACE = 'FooBar Web'
    • QUEUE_TIME_TRACKER_CLOUDWATCH_ACCESS_KEY = 'AK****A'
    • QUEUE_TIME_TRACKER_CLOUDWATCH_SECRET_KEY = 'so******BS'
    • QUEUE_TIME_TRACKER_CLOUDWATCH_REGION = 'us-west-1'
  2. Wrap wsgi application with time tracker:
from request_time_tracker.django_wsgi import CloudWatchQueueTimeTracker

application = get_wsgi_application()

application = CloudWatchQueueTimeTracker(application)

Non-django application

  1. Wrap wsgi application with time tracker. Example:
from functools import partial
from request_time_tracker.trackers.cache.redis import RedisCacheQueueTimeTracker
from request_time_tracker.notifiers.cloudwatch import CloudWatchNotifier

tracker = partial(
    RedisCacheQueueTimeTracker, 
    queue_time_header_name='HTTP_X_REQUESTTIME',
    redis_url='redis://localhost:6379/0',
    notifier=CloudWatchNotifier(
        namespace='FooBar Web',
        aws_access_key='AK****A',
        aws_secret_key='so******BS',
        aws_region='us-west-1',
    ),
)

wsgi_application = tracker(wsgi_application)

Cloudwatch role policy:

{
    “Version”: “2012-10-17",
    “Statement”: [
        {
            “Sid”: “VisualEditor0”,
            “Effect”: “Allow”,
            “Action”: [“cloudwatch:PutMetricData”],
            “Resource”: “*”
        }
    ]
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

request-time-tracker-0.0.7.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

request_time_tracker-0.0.7-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file request-time-tracker-0.0.7.tar.gz.

File metadata

  • Download URL: request-time-tracker-0.0.7.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for request-time-tracker-0.0.7.tar.gz
Algorithm Hash digest
SHA256 f21de6ba61008030c4a6e554142fa8f0f5b2f512dfc678fe5bb343dc0a33a7e3
MD5 d3012080ac1b458c73433c5901fcd059
BLAKE2b-256 2545a86a985f8c1e3cb63fe3f456e23f49e57e0a50a44a23544686436b6adec5

See more details on using hashes here.

File details

Details for the file request_time_tracker-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: request_time_tracker-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for request_time_tracker-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 0206ec9fd4c7739f03fdbf639c471701b93c7e8e514a05313ba50c94310a07b2
MD5 dca8c79d3f7f894097acee9d6c589ba8
BLAKE2b-256 d73d206d677a33dbbd1cf2d11c52feb009daf7764952dfef292fea89f2a2b310

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page