.. _mcumgr_smp_group_2:

Statistics management
#####################

Statistics management allows to obtain data gathered by Statistics subsystem
of Zephyr, enabled with :kconfig:option:`CONFIG_STATS`.

Statistics management group defines commands:

.. table::
    :align: center

    +-------------------+-----------------------------------------------+
    | ``Command ID``    | Command description                           |
    +===================+===============================================+
    | ``0``             | Group data                                    |
    +-------------------+-----------------------------------------------+
    | ``1``             | List groups                                   |
    +-------------------+-----------------------------------------------+

Statistics: group data
**********************

The command is used to obtain data for group specified by a name.
The name is one of group names as registered, with
:c:macro:`STATS_INIT_AND_REG` macro or :c:func:`stats_init_and_reg` function
call, within module that gathers the statistics.

Statistics: group data request
==============================

Statistics group data request header:

.. table::
    :align: center

    +--------+--------------+----------------+
    | ``OP`` | ``Group ID`` | ``Command ID`` |
    +========+==============+================+
    | ``0``  | ``2``        |  ``0``         |
    +--------+--------------+----------------+

CBOR data of request:

.. code-block:: none

    {
        (str)"name" :  (str)
    }

where:

.. table::
    :align: center

    +-----------------------+---------------------------------------------------+
    | "name"                | is group name                                     |
    +-----------------------+---------------------------------------------------+

Statistics: group data response
===============================

Statistics group data response header:

.. table::
    :align: center

    +--------+--------------+----------------+
    | ``OP`` | ``Group ID`` | ``Command ID`` |
    +========+==============+================+
    | ``1``  | ``2``        |  ``0``         |
    +--------+--------------+----------------+

CBOR data of successful response:

.. code-block:: none

    {
        (str)"name"     : (str)
        (str)"fields"   : {
            (str)<entry_name> : (uint)
            ...
        }
    }

In case of error the CBOR data takes the form:

.. code-block:: none

    {
        (str)"rc"       : (int)
    }

where:

.. table::
    :align: center

    +-----------------------+---------------------------------------------------+
    | "name"                | this is name of group the response contains data  |
    |                       | for                                               |
    +-----------------------+---------------------------------------------------+
    | "fields"              | this is map of entries within groups that consists|
    |                       | of pairs where entry name is mapped to value it   |
    |                       | represents in statistics                          |
    +-----------------------+---------------------------------------------------+
    | <entry_name>          | single entry to value mapping; value is hardcoded |
    |                       | to unsigned integer type, in a CBOR meaning       |
    +-----------------------+---------------------------------------------------+
    | "rc"                  | :c:enum:`mcumgr_err_t`                            |
    |                       | only appears if non-zero (error condition).       |
    +-----------------------+---------------------------------------------------+

Statistics: list of groups
**************************

The command is used to obtain list of groups of statistics that are gathered
on a device. This is a list of names as given to groups with
:c:macro:`STATS_INIT_AND_REG` macro or :c:func:`stats_init_and_reg` function
calls, within module that gathers the statistics; this means that this command
may be considered optional as it is known during compilation what groups will
be included into build and listing them is not needed prior to issuing a query.

Statistics: list of groups request
==================================

Statistics group list request header:

.. table::
    :align: center

    +--------+--------------+----------------+
    | ``OP`` | ``Group ID`` | ``Command ID`` |
    +========+==============+================+
    | ``0``  | ``2``        |  ``1``         |
    +--------+--------------+----------------+

The command sends an empty CBOR map as data.

Statistics: list of groups response
===================================

Statistics group list request header:

.. table::
    :align: center

    +--------+--------------+----------------+
    | ``OP`` | ``Group ID`` | ``Command ID`` |
    +========+==============+================+
    | ``1``  | ``2``        |  ``1``         |
    +--------+--------------+----------------+

CBOR data of successful response:

.. code-block:: none

    {
        (str)"stat_list" :  [
            (str)<stat_group_name>, ...
        ]
    }

In case of error the CBOR data takes the form:

.. code-block:: none

    {
        (str)"rc"       : (int)
    }

where:

.. table::
    :align: center

    +-----------------------+---------------------------------------------------+
    | "stat_list"           | array of strings representing group names; this   |
    |                       | array may be empty if there are no groups         |
    +-----------------------+---------------------------------------------------+
    | "rc"                  | :c:enum:`mcumgr_err_t`                            |
    |                       | only appears if non-zero (error condition).       |
    +-----------------------+---------------------------------------------------+
