Skip to main content

Django tool for instrumenting

Project description

Instrumenting

install

  • install with your favorite Python package manager
pip3 install shopcloud-django-instrumenting

LogRequestMiddleware

add additional Information from request in AppEngine to Log

usage

add to MIDDLEWARE in django-app settings.py:

MIDDLEWARE = [
    ...
    'shopcloud_django_instrumenting.middleware.LogRequestMiddleware',
]

tracing

from shopcloud_django_instrumenting import tracing

tr = tracing.Tracer('name_of_service', 'name_of_operation')
with tr.start_span('event.processing') as span:
    pass

data = tr.close()

error management

A special layer on top of the API is the error boundary within the with blocks of spans. This layer catches exceptions and prints them. The pattern here is to catch all runtime errors and return a 422 status, indicating that an unexpected error has occurred, not a validation error. If you need to return validation data to the user, you must return a Result object on your own.

@action(detail=True, methods=["post"], url_path="my-action")
def my_action(self, request, pk):
    tr = tracing.DjangoAPITracer(request)

    serializer = serializers.ProductSyncSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)

    with tr.start_span('proceed') as span:
        raise Exception('something unhandle')

    trace_data = tr.close()
    return Response({
        'trace': trace_data,
    }, status=status.HTTP_201_CREATED if tr.is_success else status.HTTP_422_UNPROCESSABLE_ENTITY)

Another pattern to note is that every with block should contain a repeatable operation. You can create structures where you can run blocks side by side and only repeat some of them. However, be careful: while the with block catches exceptions, it may not guarantee that all variables are set.

tr = tracing.DjangoAPITracer(request)

is_a_success = False
is_b_success = False
is_c_success = False

with tr.start_span('A') as span_a:
    is_a_success = False

with tr.start_span('B') as span_b:
    is_b_success = True

with tr.start_span('C') as span_c:
    if is_a_success:
        pass

develop

$ pytest
$ pip3 install coverage
# shell report
$ coverage run -m pytest  && coverage report --show-missing
# html report
$ coverage run -m pytest  && coverage html
$ cd htmlcov
$ python3 -m http.server

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

shopcloud_django_instrumenting-1.4.0.tar.gz (5.4 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file shopcloud_django_instrumenting-1.4.0.tar.gz.

File metadata

File hashes

Hashes for shopcloud_django_instrumenting-1.4.0.tar.gz
Algorithm Hash digest
SHA256 4e6a04d4fbcbc271c73c19b36aa7f140248f99822597d72e332de54445dff69d
MD5 24d337526c218ff2524715c8f6e46e5e
BLAKE2b-256 829a7e29f807fd167539d313af663bf9ba8ee0d7b721a0b63a93968ce3142187

See more details on using hashes here.

File details

Details for the file shopcloud_django_instrumenting-1.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for shopcloud_django_instrumenting-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e574757d34520e13d2e1a413b7aee3eeb1bec2cfd0de5b266a18654496ab35ae
MD5 c6f64fae59f40d5bcbddee2592b7468b
BLAKE2b-256 42d232fc138517c51a5a06096341d22ef82e53f2a05573377815ee417ec01dc1

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