[doc] document new debug channels mechanism
authorLaurent Peuch <cortex@worlddomination.be>
Tue, 10 Dec 2019 23:50:24 +0100
changeset 12818 3954554f5b48
parent 12817 91bb2f0fbadd
child 12819 053329493511
[doc] document new debug channels mechanism
doc/book/devrepo/debug_channels.rst
doc/book/devrepo/index.rst
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/book/devrepo/debug_channels.rst	Tue Dec 10 23:50:24 2019 +0100
@@ -0,0 +1,123 @@
+.. -*- coding: utf-8 -*-
+
+.. _debug_channels:
+
+Debug Channels
+==============
+
+In *CubicWeb* 3.27 a new debug channels mechanism has been added to help build
+the pyramid debug toolbar custom panels. It isn't meant to do regular CW
+development but can be used for tools building (like the custom panel) if desired.
+
+The API is really simple to use and is used like this:
+
+.. code-block:: python
+
+    from cubicweb.debug import subscribe_to_debug_channel, unsubscribe_to_debug_channel
+
+
+    # the callback will only receive one argument which is a python dict
+    # containing debug information
+    def example_debug_callback(message):
+        print(message)
+
+
+    # "channel" must be one of: controller, rql, sql, vreg, registry_decisions
+    subscribe_to_debug_channel(channel, example_debug_callback)
+
+    # when it is not needed anymore (and to avoid dandling references)
+    unsubscribe_to_debug_channel(channel, example_debug_callback)
+
+Channels documentation
+----------------------
+
+The list of sent messages by channels:
+
+Controller
+~~~~~~~~~~
+
+**This debug message will only be sent in a pyramid context**.
+Emitted for each request.
+
+.. code-block:: python
+
+    {
+        "kind": ctrlid,
+        "request": request_object,
+        "path": request_object.path,
+        "controller": controller,
+        "config": repo_configuration,
+    }
+
+RQL
+~~~
+
+Emitted for each query.
+
+.. code-block:: python
+
+    {
+        "rql": rql_as_a_string,
+        # arguments used to format the query
+        "args": args,
+        # used to link rql and sql queries
+        "rql_query_tracing_token": rql_query_tracing_token,
+        "callstack": python_call_stack,
+        "time": time_taken_in_ms_by_the_query,
+        "result": the_result_as_python_data,
+        "description": description_object,
+    }
+
+SQL
+~~~
+
+Emitted for each query. Be advised that a SQL query generated by a RQL query
+will be emitted before the corresponding RQL query.
+
+.. code-block:: python
+
+    {
+        "sql": sql_as_a_string,
+        # arguments used to format the query
+        "args": args,
+        "rollback": True|False,
+        "callstack": "".join(traceback.format_stack()[:-1]),
+        # used to link rql and sql queries
+        "rql_query_tracing_token": rql_query_tracing_token,
+        "time": time_taken_in_ms_by_the_query,
+    }
+
+vreg
+~~~~
+
+**This debug message will only be sent in a pyramid context**.
+Emitted for each request.
+
+.. code-block:: python
+
+    {
+        "vreg": vreg,
+    }
+
+registry_decisions
+~~~~~~~~~~~~~~~~~~
+
+This is emitted each time a decision is taken in a registry.
+
+.. code-block:: python
+
+    {
+        "all_objects": [],
+        "end_score": int,
+        "winners": [],
+        "winner": obj or None,
+        "registry": obj,
+        "args": args,
+        "kwargs": kwargs,
+    }
+
+API Reference
+=============
+
+.. autofunction:: cubicweb.debug.subscribe_to_debug_channel
+.. autofunction:: cubicweb.debug.unsubscribe_to_debug_channel
--- a/doc/book/devrepo/index.rst	Tue Dec 17 21:20:46 2019 +0100
+++ b/doc/book/devrepo/index.rst	Tue Dec 10 23:50:24 2019 +0100
@@ -23,3 +23,4 @@
    profiling.rst
    fti.rst
    dataimport
+   debug_channels