Debugging¶
Debugging Guillotina will be slightly different from other web application that are not asyncio but Guillotina provides some nice integration to help you out.
X-Debug header¶
Any any request, you can provide the header X-Debug:1
and
Guillotina will output debugging headers in the response
about timing, number of queries and cache hit/miss stats.
-
GET
/
(db)/
(container)¶ Retrieves serialization of resource
- Permission: guillotina.ViewContent
- Context: guillotina.interfaces.content.IResource
http
GET /db/container HTTP/1.1 Accept: application/json Authorization: Basic cm9vdDpyb290 X-Debug: 1
curl
curl -i http://nohost/db/container -H 'Accept: application/json' -H 'X-Debug: 1' --user root:root
httpie
http http://nohost/db/container Accept:application/json X-Debug:1 -a root:root
response
HTTP/1.1 200 OK Content-Type: application/json XG-Cache-hits: 0 XG-Cache-misses: 0 XG-Cache-stored: 0 XG-Num-Queries: 0 XG-Timing-0-start: 0.00429 XG-Timing-1-traversed: 0.16522 XG-Timing-2-beforeauthentication: 0.00215 XG-Timing-3-authentication: 0.39291 XG-Timing-4-viewfound: 0.11563 XG-Timing-5-authorization: 0.32139 XG-Timing-6-viewrender: 0.02027 XG-Timing-7-viewrendered: 0.48804 XG-Timing-8-renderer: 0.05293 XG-Timing-9-headers: 0.01383 XG-Timing-Total: 1.57666 XG-Total-Cache-hits: 0 XG-Total-Cache-misses: 0 XG-Total-Cache-stored: 0 { "@id": "http://localhost/db/container", "@type": "Container", "@name": "container", "@uid": "40f70cd0f2f541608e010e6dfe1ef72e", "@static_behaviors": [], "parent": {}, "is_folderish": true, "creation_date": "2022-12-12T14:49:11.721468+00:00", "modification_date": "2022-12-12T14:49:11.721468+00:00", "type_name": "Container", "title": "container", "uuid": "40f70cd0f2f541608e010e6dfe1ef72e", "__behaviors__": [], "items": [], "length": 0 }
Query Parameters: - include (string) – (required)
- omit (string) – (required)
Status Codes: - 200 OK – Resource data
- 401 Unauthorized – You are not authorized to perform the operation
- 404 Not Found – The resource does not exist
GDEBUG¶
On startup, you can also provide the environment variable GDEBUG=true
.
This will provide detailed query statistics with the X-Debug:1
.
Additionally, you can provide GDEBUG_SUBSCRIBERS
to get detailed timings
logged for event subscribers.
aiomonitor¶
Guillotina also provides integration with the aiomonitor
python module.
This module allows you to attach to a running python with asyncio
to inspect the active tasks running.
First, install aiomonitor:
pip install aiomonitor
Then, run guillotina with --monitor
:
g serve --monitor
Finally, connect to it:
python -m aiomonitor.cli
Jupyter¶
Guillotina also works with Jupyter notebooks. Load the example notebook in the Guillotina repository to see an example of how to get started.