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-Length: 444
Content-Type: application/json
XG-Cache-hits: 0
XG-Cache-misses: 0
XG-Cache-stored: 0
XG-Error: Could not get stats
XG-Num-Queries: 0
XG-Timing-0-start: 0.27442
XG-Timing-1-traversed: 0.30661
XG-Timing-2-beforeauthentication: 0.00191
XG-Timing-3-authentication: 0.55361
XG-Timing-4-viewfound: 0.17262
XG-Timing-5-authorization: 0.42248
XG-Timing-6-viewrender: 0.02646
XG-Timing-7-viewrendered: 0.63443
XG-Timing-8-renderer: 0.10490
XG-Timing-9-headers: 0.01454
XG-Timing-Total: 2.51198
XG-Total-Cache-hits: 0
XG-Total-Cache-misses: 0
XG-Total-Cache-stored: 0

{
    "@id": "http://127.0.0.1:36763/db/container",
    "@type": "Container",
    "@name": "container",
    "@uid": "60f66818977a41e2939f18ef0acbce97",
    "@static_behaviors": [],
    "parent": {},
    "is_folderish": true,
    "creation_date": "2019-11-13T21:07:32.644136+00:00",
    "modification_date": "2019-11-13T21:07:32.644136+00:00",
    "type_name": "Container",
    "title": "container",
    "uuid": "60f66818977a41e2939f18ef0acbce97",
    "__behaviors__": [],
    "items": [],
    "length": 0
}
Query Parameters:
 
  • include (string) – (required)
  • omit (string) – (required)
Status Codes:

GDEBUG

On startup, you can also provide the environment variable GDEBUG=true. This will provide detailed query statistics with the X-Debug:1.

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 server --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.