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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file shopcloud_django_instrumenting-1.4.0.tar.gz
.
File metadata
- Download URL: shopcloud_django_instrumenting-1.4.0.tar.gz
- Upload date:
- Size: 5.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e6a04d4fbcbc271c73c19b36aa7f140248f99822597d72e332de54445dff69d |
|
MD5 | 24d337526c218ff2524715c8f6e46e5e |
|
BLAKE2b-256 | 829a7e29f807fd167539d313af663bf9ba8ee0d7b721a0b63a93968ce3142187 |
File details
Details for the file shopcloud_django_instrumenting-1.4.0-py3-none-any.whl
.
File metadata
- Download URL: shopcloud_django_instrumenting-1.4.0-py3-none-any.whl
- Upload date:
- Size: 5.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e574757d34520e13d2e1a413b7aee3eeb1bec2cfd0de5b266a18654496ab35ae |
|
MD5 | c6f64fae59f40d5bcbddee2592b7468b |
|
BLAKE2b-256 | 42d232fc138517c51a5a06096341d22ef82e53f2a05573377815ee417ec01dc1 |