[rtags] Allow to 'derive' rtags
Since some releases, rtags (structure underlying uicfg) have selector and may be
copied using something like:
new_rtags = deepcopy(original_rtags)
new_rtags.__module__ = __name__
new_rtags.__select__ = custom_selector
The problem is that starting from that, both rtags wil diverge and changes in
original_rtags won't be considered, while we usually want to set a few specific
rules only in new_rtags. To fix this problem, this cset introduces the notion of
"derivated/parent" rtag, eg:
new_rtags = original_rtags.derive(__name__, custom_selector)
Beside easier copying, when using the above method changes in original_rtags
which are not overriden by new_rtags will be considered since it only hold its
specific rules but look among its parent chain for non-found keys.
Along the way, flake8 unittest_rtags.
Closes #16164880
.. _profiling:
Profiling
=========
Profiling of requests by the pyramid debug toolbar can be a little restrictive
when a specific url needs thin profiling that includes the whole pyramid
dispatch.
Pyramid CubicWeb provides facilities to profile requests as a
:func:`wsgi middleware <cubicweb.pyramid.profile.wsgi_profile>`, and a few
views that facilitate profiling of basic features.
The views and the wsgi middleware are activated when the 'profile' option is
given. This can be done on the command line
(:option:`cubicweb-ctl pyramid --profile`) or in the :ref:`pyramid_settings`.
Views
-----
The following routes and corresponding views are provided when profiling is on:
- ``/_profile/ping``: Reply 'ping' without doing anything else. See also
:func:`cubicweb.pyramid.profile.ping`.
- ``/_profile/cnx``: Reply 'ping' after getting a cnx. See also
:func:`cubicweb.pyramid.profile.cnx`.
Typical Usage
-------------
Let's say we want to measure the cost of having a ``cnx``.
- Start the application with profile enabled:
.. code-block:: console
$ cubicweb-ctl pyramid --no-daemon --profile --profile-dump-every 100
- Use 'ab' or any other http benchmark tool to throw a lot of requests:
.. code-block:: console
$ ab -c 1 -n 100 http://localhost:8080/_profile/cnx
- Analyse the results. I personnaly fancy SnakeViz_:
.. code-block:: console
$ snakeviz program.prof
.. _SnakeViz: http://jiffyclub.github.io/snakeviz/