.. _record_server:
Record Server
=============
The rsb recordserver consists of an ``rsbag record`` process that stores component
communication data from all scopes in the apartment (with some `Exceptions`_).
As a base component, the server is running 24/7 and awaits recording commands. Its
main purpose is to start recording whenever it is needed. Currently, the recording
is triggered only by the :ref:`auto_recording` component but in principle it can also
be used to record study data for example.
.. warning:: Currently (with rsb <0.13), the record server **crashes** after a certain amount
of **events**. Make sure to restart it from time to time.
Related resources
-----------------
Component repository:
- Browse component repository: `rsbag `_.
- ``git clone --recursive https://code.cor-lab.org/git/rsbag.git``
System startup:
- The coordination can be found in ``lsp-csra-base.sh`` on the ``default`` tab.
- The component script is called ``component_rsb_recordserver``
Related projects:
- Component :ref:`auto_recording`
- Browse repository `rsb `_.
Interfaces
-----------------
The component can be controlled via method invokation only. Recording can be
started (and stopped/resumed multiple times) after a file has been successfully
opened. If the recording has been stopped, the file should be closed again.
=========================================== ===================== ==================
Scope (Local Server) + Method Argument Type Return Type
=========================================== ===================== ==================
``/logger/rsbag/all/open()`` String: filename void
``/logger/rsbag/all/start()`` void void
``/logger/rsbag/all/isstarted()`` void bool: recording?
``/logger/rsbag/all/stop()`` void void
``/logger/rsbag/all/close()`` void void
=========================================== ===================== ==================
Exceptions
----------
**Not** recorded are raw audio and video packets. Apart from most raw video data
being excluded from the main spread ring (see e.g. :ref:`hookah`, :ref:`rgbdgrabber`)
and therefore not reorded, a filter is applied additionally. In particular, it
consists of the following scopes:
.. code-block:: common-lisp
'and :children #.(list (rsb.filter:filter (quote (:and
((:not (:scope :scope "/citec/csra/home/kitchen/video")))
((:not (:scope :scope "/citec/csra/home/hallway/entrance/video")))
((:not (:scope :scope "/citec/csra/home/kitchen/assistance/asc7/audio/in")))
((:not (:scope :scope "/citec/csra/home/living/lounge/asc9/audio/in/default")))
((:not (:scope :scope "/citec/csra/home/hallway/entrance/asc10/audio/in/default")))
))))'
Examples
--------------
Record a temporary file:
.. code-block:: bash
tools0.12 call '/logger/rsbag/all/open("/tmp/tmprecord.tide")'
tools0.12 call '/logger/rsbag/all/start()'
# actions that you want to record
tools0.12 call '/logger/rsbag/all/stop()'
tools0.12 call '/logger/rsbag/all/close()'