Skip to content

Useful django apps or utils for large scale projects

License

Notifications You must be signed in to change notification settings

KleeTaurus/django-patchy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Django Patchy

PyPI version

Useful django app and utils to develop large-scale web app

Requirements

  • Python (2.7)
  • Django (1.8, 1.9)

Installation

Install using pip...

pip install djangopatchy

Middlewares

LongRequestMiddleware

Let's add a middleware to calculate the time elapse for each request

  1. Add a middleware at the top:
MIDDLEWARE_CLASSES = (
    'patchy.middleware.LongRequestMiddleware',
    ...
)
  1. Add logger handler with pathcy.middleware:

Example:

'patchy.middleware': {
    'handlers': ['sentry'],
    'level': 'ERROR',
    'propagate': True
}
  1. Set the timeout threshold in settings(default to 1 second):
PATCHY_LONG_REQUEST_TIMEOUT = 2  # set the timeout to 2 seconds

Results:

  • For each web request, it has a header variable X-ELAPSED in seconds to indicate the time elapse.
X-ELAPSED: 0.005 # it means the request costs 5 ms
  • If it exceeds the PATCHY_LONG_REQUEST_TIMEOUT a error log message will be sent.
  1. Add some urls to ignore list(optional), regular expression is supported.
PATCHY_LONG_REQUEST_IGNORE_URLS = [
    r'^/_admin/.*$',
]

Utilities

long_sql_execute_wrapper

Let us rewrite the CursorWrapper.execute to calculate the sql process time

  1. Add the python snippets in the djangoproject/__init__.py
# rewrite the sql operation method
from django.db.backends import utils
from patchy.utils import long_sql_execute_wrapper
utils.CursorWrapper.execute = long_sql_execute_wrapper
  1. Add logger handler with pathcy.utils:

Example:

'patchy.utils': {
    'handlers': ['sentry'],
    'level': 'ERROR',
    'propagate': True
}
  1. Set the timeout threshold in settings(default to 0.05 seond, which is 50 miliseconds):
PATCHY_LONG_SQL_TIMEOUT = 0.01  # set the timeout to 10 miliseconds

Result:

  • If the sql operation exceeds the PATCHY_LONG_SQL_TIMEOUT a error log message will be sent.
  1. no_sql_monitoring

no_sql_monitoring is a decorator for wrapping code to skip sql monitoring.

from patchy.utils import no_sql_monitoring

@no_sql_monitoring
def transaction_status(request, transaction_no):
    transaction = Transaction.objects.get(transaction_no=transaction_no)

    return ResponseBuilder.build_success_json_response(
        msg='查询订单成功',
        data={
            'transaction_no': transaction_no,
            'transaction_status': transaction.transaction_status
    })

About

Useful django apps or utils for large scale projects

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%