From 346fbdf8578f1748b64707e4a3b4da10b10d5477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Luis=20Bueno=20L=C3=B3pez?= <69244257+JLBuenoLopez-eProsima@users.noreply.github.com> Date: Wed, 28 Apr 2021 10:53:12 +0200 Subject: [PATCH] Statistics module documentation (#262) * Update Statistics QoS documentation (#253) * Refs #10991: update statistics QoS documentation. Signed-off-by: JLBuenoLopez-eProsima * Refs #10991: add reference to the constants of the recommended QoS Signed-off-by: JLBuenoLopez-eProsima * Refs #10991: update property name Signed-off-by: JLBuenoLopez-eProsima * Refs #10991: apply review suggestions Signed-off-by: JLBuenoLopez-eProsima * Fast DDS Statistics Module DataWriters auto enabling (#247) * Refs #10714: environment variable and statistics datawriters auto enabling Signed-off-by: JLBuenoLopez-eProsima * Refs #10714: document fastdds.statistics PropertyPolicyQos Signed-off-by: JLBuenoLopez-eProsima * Refs #10714: automatically enabled statistics datawriters use recommended QoS Signed-off-by: JLBuenoLopez-eProsima * Refs #10714: update with implemented statistics topics Signed-off-by: JLBuenoLopez-eProsima * Refs #10714: apply review suggestions Signed-off-by: JLBuenoLopez-eProsima * Refs #10714: include use case as per reviewer suggestion Signed-off-by: JLBuenoLopez-eProsima * Refs #10714: apply review suggestions Signed-off-by: JLBuenoLopez-eProsima * Refs #10714: apply review suggestions Signed-off-by: JLBuenoLopez-eProsima --- code/DDSCodeTester.cpp | 56 ++++++++++ code/XMLTester.xml | 16 +++ docs/02-formalia/titlepage.rst | 3 + docs/03-exports/aliases-api.include | 5 + docs/fastdds/env_vars/env_vars.rst | 38 +++++++ .../non_consolidated_qos.rst | 36 +++++- .../dds_layer/domainParticipant.rst | 103 ++++++++++++++++-- docs/fastdds/statistics/dds_layer/qos.rst | 9 ++ .../statistics/dds_layer/topic_names.rst | 30 +++++ .../statistics_module/statistics_module.rst | 51 +++++++++ docs/fastdds/use_cases/use_cases.rst | 5 + 11 files changed, 341 insertions(+), 11 deletions(-) create mode 100644 docs/fastdds/use_cases/statistics_module/statistics_module.rst diff --git a/code/DDSCodeTester.cpp b/code/DDSCodeTester.cpp index a8c4139cf..ab2f1c145 100644 --- a/code/DDSCodeTester.cpp +++ b/code/DDSCodeTester.cpp @@ -33,6 +33,11 @@ #include #include #include + +#include +#include +#include + #include #include @@ -525,6 +530,57 @@ void dds_domain_examples() "myLogFile.log"); //!-- } + { + // FASTDDS_STATISTICS_MODULE + DomainParticipantQos pqos; + + // Activate Fast DDS Statistics module + pqos.properties().properties().emplace_back("fastdds.statistics", + "HISTORY_LATENCY_TOPIC;ACKNACK_COUNT_TOPIC;DISCOVERY_TOPIC;PHYSICAL_DATA_TOPIC"); + //!-- + } + { + // ENABLE_DISABLE_STATISTICS_DATAWRITER + // Create a DomainParticipant + DomainParticipant* participant = + DomainParticipantFactory::get_instance()->create_participant(0, PARTICIPANT_QOS_DEFAULT); + if (nullptr == participant) + { + // Error + return; + } + + // Obtain pointer to child class + eprosima::fastdds::statistics::dds::DomainParticipant* statistics_participant = + eprosima::fastdds::statistics::dds::DomainParticipant::narrow(participant); + + // Enable statistics DataWriter + if (statistics_participant->enable_statistics_datawriter(eprosima::fastdds::statistics::GAP_COUNT_TOPIC, + eprosima::fastdds::statistics::dds::STATISTICS_DATAWRITER_QOS) != ReturnCode_t::RETCODE_OK); + { + // Error + return; + } + + // Use the DomainParticipant to communicate + // (...) + + // Disable statistics DataWriter + if (statistics_participant->disable_statistics_datawriter(eprosima::fastdds::statistics::GAP_COUNT_TOPIC) != + ReturnCode_t::RETCODE_OK) + { + // Error + return; + } + + // Delete DomainParticipant + if (DomainParticipantFactory::get_instance()->delete_participant(participant) != ReturnCode_t::RETCODE_OK) + { + // Error + return; + } + //!-- + } { // PULL_MODE_DATAWRITER diff --git a/code/XMLTester.xml b/code/XMLTester.xml index 1d3d29a59..1dedd01c9 100644 --- a/code/XMLTester.xml +++ b/code/XMLTester.xml @@ -2933,6 +2933,22 @@ <--> +FASTDDS_STATISTICS_MODULE<--> + + + + + + + fastdds.statistics + HISTORY_LATENCY_TOPIC;ACKNACK_COUNT_TOPIC;DISCOVERY_TOPIC;PHYSICAL_DATA_TOPIC + + + + + +<--> + <--> diff --git a/docs/02-formalia/titlepage.rst b/docs/02-formalia/titlepage.rst index 1c8dbafce..eed9fc085 100644 --- a/docs/02-formalia/titlepage.rst +++ b/docs/02-formalia/titlepage.rst @@ -117,6 +117,9 @@ Main Features pluggable security at three levels: authentication of remote participants, access control of entities and encryption of data. +* :ref:`Statistics Module. ` *eProsima Fast DDS* can be configured to gather and provide information + about the data being exchanged by the user application. + * **Throughput controllers.** We support user-configurable throughput controllers, that can be used to limit the amount of data to be sent under certain conditions. diff --git a/docs/03-exports/aliases-api.include b/docs/03-exports/aliases-api.include index 0d551302d..f37de8b19 100644 --- a/docs/03-exports/aliases-api.include +++ b/docs/03-exports/aliases-api.include @@ -190,9 +190,11 @@ .. |SubscriberQos::SubscriberQos-api| replace:: :cpp:func:`SubscriberQos()` .. |Subscribers-api| replace:: :cpp:class:`Subscribers ` .. |Topic-api| replace:: :cpp:class:`Topic ` +.. |Topics-api| replace:: :cpp:class:`Topics ` .. |Topic::set_qos-api| replace:: :cpp:func:`Topic::set_qos()` .. |Topic::get_inconsistent_topic_status-api| replace:: :cpp:func:`get_inconsistent_topic_status()` .. |TopicDataType-api| replace:: :cpp:class:`TopicDataType` +.. |TopicDataTypes-api| replace:: :cpp:class:`TopicDataTypes` .. |TopicDataType::getKey-api| replace:: :cpp:func:`getKey()` .. |TopicDataType::is_bounded-api| replace:: :cpp:func:`is_bounded()` .. |TopicDataType::m_isGetKeyDefined-api| replace:: :cpp:member:`m_isGetKeyDefined` @@ -778,5 +780,8 @@ .. |disable_statistics_datawriter| replace:: :cpp:func:`disable_statistics_datawriter() ` .. |statistics_narrow| replace:: :cpp:func:`narrow() ` +.. |STATISTICS_DATAREADER_QOS-api| replace:: :cpp:member:`STATISTICS_DATAREADER_QOS ` +.. |STATISTICS_DATAWRITER_QOS-api| replace:: :cpp:member:`STATISTICS_DATAWRITER_QOS ` + .. |RTPSMessageGroup| replace:: :cpp:class:`RTPSMessageGroup ` .. |MessageReceiver| replace:: :cpp:class:`MessageReceiver ` diff --git a/docs/fastdds/env_vars/env_vars.rst b/docs/fastdds/env_vars/env_vars.rst index 6f5967954..95f24330b 100644 --- a/docs/fastdds/env_vars/env_vars.rst +++ b/docs/fastdds/env_vars/env_vars.rst @@ -108,3 +108,41 @@ The following example shows how to set the address of two remote discovery serve The *server*'s GUID prefixes generated by the CLI comply with the following schema: ``44.53..5f.45.50.52.4f.53.49.4d.41``. This prefix schema has been chosen for its ASCII translation: ``DS_EPROSIMA``. + +.. _env_vars_fastdds_statistics: + +``FASTDDS_STATISTICS`` +---------------------- + +.. warning:: + The environment variable is only used in the case where the CMake option `FASTDDS_STATISTICS` has been enabled. + In any other case, the environment variable has no effect. + Please, refer to :ref:`cmake_options` for more information. + +Setting this variable configures the :ref:`DomainParticipant` to enable the statistics +DataWriters which topics are contained in the list set in this environment variable. +The elements of the list should be separated by semicolons and match the +:ref:`statistics topic name aliases`. + +For example, to enable the statistics DataWriters that report the latency measurements, the environment variable should +be set as follows: + + +----------------------------------------------------------------------------+ + | **Linux** | + +----------------------------------------------------------------------------+ + | .. code-block:: bash | + | | + | export FASTDDS_STATISTICS=HISTORY_LATENCY_TOPIC;NETWORK_LATENCY_TOPIC | + +----------------------------------------------------------------------------+ + | **Windows** | + +----------------------------------------------------------------------------+ + | .. code-block:: bash | + | | + | set FASTDDS_STATISTICS=HISTORY_LATENCY_TOPIC;NETWORK_LATENCY_TOPIC | + +----------------------------------------------------------------------------+ + +.. important:: + This environment variable can be used together with the XML profiles + (for more information please refer to :ref:`auto_enabling_statistics_datawriters`). + The statistics DataWriters that will be enabled is the union between the ones specified in the XML file (if loaded) + and the ones stated in the environment variable (if set). diff --git a/docs/fastdds/property_policies/non_consolidated_qos.rst b/docs/fastdds/property_policies/non_consolidated_qos.rst index f4475bb7d..04109bffe 100644 --- a/docs/fastdds/property_policies/non_consolidated_qos.rst +++ b/docs/fastdds/property_policies/non_consolidated_qos.rst @@ -79,8 +79,40 @@ Unique network flows QoS Policy .. warning:: This section is still under work. +.. _property_policies_statistics: + Statistics Module Settings ^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. warning:: - This section is still under work. +Fast DDS Statistics Module uses the :ref:`propertypolicyqos` to indicate the statistics DataWriters that are enabled +automatically (see :ref:`auto_enabling_statistics_datawriters`). +In this case, the property value is a semicolon separated list containing the +:ref:`statistics topic name aliases` of those DataWriters that the user wants to enable. + +.. list-table:: + :header-rows: 1 + :align: left + + * - PropertyPolicyQos name + - PropertyPolicyQos value + - Default value + * - ``"fastdds.statistics"`` + - Semicolon separated list of :ref:`statistics topic name aliases` + - ``""`` + ++----------------------------------------------------------------------------------------------------------------------+ +| **C++** | ++----------------------------------------------------------------------------------------------------------------------+ +| .. literalinclude:: /../code/DDSCodeTester.cpp | +| :language: c++ | +| :start-after: // FASTDDS_STATISTICS_MODULE | +| :end-before: //!-- | +| :dedent: 8 | ++----------------------------------------------------------------------------------------------------------------------+ +| **XML** | ++----------------------------------------------------------------------------------------------------------------------+ +| .. literalinclude:: /../code/XMLTester.xml | +| :language: xml | +| :start-after: FASTDDS_STATISTICS_MODULE<--> | +| :end-before: <--> | ++----------------------------------------------------------------------------------------------------------------------+ diff --git a/docs/fastdds/statistics/dds_layer/domainParticipant.rst b/docs/fastdds/statistics/dds_layer/domainParticipant.rst index 1e0b0dab5..79de21652 100644 --- a/docs/fastdds/statistics/dds_layer/domainParticipant.rst +++ b/docs/fastdds/statistics/dds_layer/domainParticipant.rst @@ -15,9 +15,6 @@ For this purpose, *Fast DDS Statistics module* exposes an extended DDS |Statisti Enable statistics DataWriters ----------------------------- -.. warning:: - This method will be implemented in future releases. For the moment it always returns ``RETCODE_UNSUPPORTED``. - Statistics DataWriters are enabled using the method |enable_statistics_datawriter|. This method requires as parameters: @@ -27,9 +24,6 @@ This method requires as parameters: Disable statistics DataWriters ------------------------------ -.. warning:: - This method will be implemented in future releases. For the moment it always returns ``RETCODE_UNSUPPORTED``. - Statistics DataWriters are disabled using the method |disable_statistics_datawriter|. This method requires as parameter: @@ -38,11 +32,102 @@ This method requires as parameter: Obtain pointer to the extended |StatisticsDomainParticipant-api| class ---------------------------------------------------------------------- -.. warning:: - This method will be implemented in future releases. For the moment it always returns ``nullptr``. - The |DomainParticipant-api| is created using the |DomainParticipantFactory::create_participant-api| provided by the |DomainParticipantFactory-api|. This method returns a pointer to the DDS standard DomainParticipant created. In order to obtain the pointer to the child |StatisticsDomainParticipant-api| which extends the DDS API, the ``static`` method |statistics_narrow| is provided. + +The following example shows how to use the Statistics module extended DDS API: + +.. literalinclude:: /../code/DDSCodeTester.cpp + :language: c++ + :start-after: // ENABLE_DISABLE_STATISTICS_DATAWRITER + :end-before: //!-- + :dedent: 8 + +.. _auto_enabling_statistics_datawriters: + +Automatically enabling statistics DataWriters +--------------------------------------------- + +The statistics DataWriters can be directly enabled using the |DomainParticipantQos| +|DomainParticipantQos::properties-api| ``fastdds.statistics``. +The value of this property is a semicolon separated list containing the +:ref:`statistics topic name aliases` of those DataWriters that the user wants to enable. +The property can be set either programmatically or loading an XML file. +If the property is set in both ways, the priority would depend on the API and the QoS profile provided: + +* XML settings have priority if |DomainParticipantFactory::create_participant_with_profile-api| is called with a valid + participant profile. + +* XML settings also have priority if |DomainParticipantFactory::create_participant-api| is called using + |PARTICIPANT_QOS_DEFAULT-api| and a participant profile exists in the XML file with the ``is_default_profile`` option + set to ``true`` (:ref:`domainparticipantattributes`). + +* The property set programmatically is used only when |DomainParticipantFactory::create_participant-api| is called with + the specific QoS. + +Another way of enabling statistics DataWriters, compatible with the previous one, is setting the +:ref:`env_vars_fastdds_statistics` environment variable. +The statistics DataWriters that will be enabled when the |DomainParticipant-api| is enabled would be the union between +those specified in the |DomainParticipantQos::properties-api| ``fastdds.statistics`` and those included with the +environment variable. + +The following examples show how to use all the previous methods: + ++----------------------------------------------------------------------------------------------------------------------+ +| **C++** | ++----------------------------------------------------------------------------------------------------------------------+ +| .. literalinclude:: /../code/DDSCodeTester.cpp | +| :language: c++ | +| :start-after: // FASTDDS_STATISTICS_MODULE | +| :end-before: //!-- | +| :dedent: 8 | ++----------------------------------------------------------------------------------------------------------------------+ +| **XML** | ++----------------------------------------------------------------------------------------------------------------------+ +| .. literalinclude:: /../code/XMLTester.xml | +| :language: xml | +| :start-after: FASTDDS_STATISTICS_MODULE<--> | +| :end-before: <--> | ++----------------------------------------------------------------------------------------------------------------------+ +| **Environment Variable Linux** | ++----------------------------------------------------------------------------------------------------------------------+ +| .. code-block:: bash | +| | +| export FASTDDS_STATISTICS=HISTORY_LATENCY_TOPIC;ACKNACK_COUNT_TOPIC;DISCOVERY_TOPIC;PHYSICAL_DATA_TOPIC | ++----------------------------------------------------------------------------------------------------------------------+ +| **Environment Variable Windows** | ++----------------------------------------------------------------------------------------------------------------------+ +| .. code-block:: bash | +| | +| set FASTDDS_STATISTICS=HISTORY_LATENCY_TOPIC;ACKNACK_COUNT_TOPIC;DISCOVERY_TOPIC;PHYSICAL_DATA_TOPIC | ++----------------------------------------------------------------------------------------------------------------------+ + +Be aware that automatically enabling the statistics DataWriters using all these methods implies using the recommended +QoS profile |STATISTICS_DATAWRITER_QOS-api|. For more information, please refer to :ref:`statistics_datawriter_qos`. + +.. warning:: + Currently, the following :ref:`statistics topics ` have not been implemented yet. They will + be available in future releases: + + * |HISTORY_LATENCY_TOPIC| + + * |NETWORK_LATENCY_TOPIC| + + * |PUBLICATION_THROUGHPUT_TOPIC| + + * |SUBSCRIPTION_THROUGHPUT_TOPIC| + + * |RTPS_LOST_TOPIC| + + * |RESENT_DATAS_TOPIC| + + * |SAMPLE_DATAS_TOPIC| + + * |PDP_PACKETS_TOPIC| + + * |EDP_PACKETS_TOPIC| + + * |PHYSICAL_DATA_TOPIC| diff --git a/docs/fastdds/statistics/dds_layer/qos.rst b/docs/fastdds/statistics/dds_layer/qos.rst index 4a480d1bc..a95d32ab4 100644 --- a/docs/fastdds/statistics/dds_layer/qos.rst +++ b/docs/fastdds/statistics/dds_layer/qos.rst @@ -19,6 +19,12 @@ Statistics DataWriter recommended QoS ------------------------------------- The following table shows the recommended |DataWriterQos-api| profile for enabling the statistics DataWriters. +This profile enables the ``pull mode`` :ref:`operating mode ` on the statistics DataWriters. +This entails that the DataWriters will only send information upon the reception of acknack submessages sent by the +monitoring DataReader. +This QoS profile is always used when the statistics DataWriters are +:ref:`auto-enabled `. +The recommended profile can be accessed through the constant |STATISTICS_DATAWRITER_QOS-api|. .. list-table:: :header-rows: 1 @@ -36,11 +42,14 @@ The following table shows the recommended |DataWriterQos-api| profile for enabli - |KEEP_LAST_HISTORY_QOS-api| * - |history_depth-api| - 100 + * - |PropertyPolicyQos-api| name = value + - ``"fastdds.push_mode"`` = ``"false"`` Statistics DataReader recommended QoS ------------------------------------- The following table shows the recommended |DataReaderQos-api| profile for creating the monitoring DataReaders. +The recommended profile can be accessed through constant |STATISTICS_DATAREADER_QOS-api|. .. list-table:: :header-rows: 1 diff --git a/docs/fastdds/statistics/dds_layer/topic_names.rst b/docs/fastdds/statistics/dds_layer/topic_names.rst index 0de3e6241..d1a882df2 100644 --- a/docs/fastdds/statistics/dds_layer/topic_names.rst +++ b/docs/fastdds/statistics/dds_layer/topic_names.rst @@ -60,6 +60,9 @@ Specifically, the measured latency corresponds to the time spent between the ins DataWriter's history and the time when the sample is added to the DataReader's history and the notification is issued to the corresponding user's callback. +.. warning:: + This statistics topic is not yet implemented. + |NETWORK_LATENCY_TOPIC| ----------------------- @@ -69,6 +72,9 @@ This measurement provides information about the transport layer latency. The measured latency corresponds to the time spent between the message being written in the |RTPSMessageGroup| until the message being received in the |MessageReceiver|. +.. warning:: + This statistics topic is not yet implemented. + |PUBLICATION_THROUGHPUT_TOPIC| ------------------------------ @@ -76,6 +82,9 @@ The ``_fastdds_statistics_publication_throughput`` statistics topic collects the each DataWriter. This measurement provides information about the publication's throughput. +.. warning:: + This statistics topic is not yet implemented. + |SUBSCRIPTION_THROUGHPUT_TOPIC| ------------------------------- @@ -83,6 +92,9 @@ The ``_fastdds_statistics_subscription_throughput`` statistics topic collects th by each DataReader. This measurement provides information about the subscription's throughput. +.. warning:: + This statistics topic is not yet implemented. + |RTPS_SENT_TOPIC| ----------------- @@ -95,6 +107,9 @@ from each DDS entity to each locator. The ``_fastdds_statistics_rtps_lost`` statistics topic collects the number of RTPS packets and bytes that are being lost in the transport layer (dropped somewhere in between) in the communication between each DDS entity and locator. +.. warning:: + This statistics topic is not yet implemented. + |HEARTBEAT_COUNT_TOPIC| ----------------------- @@ -147,6 +162,9 @@ fragments (in case that the message size is large enough to require RTPS fragmen resend by each user's DataWriter. This topic does not apply to builtin (related to :ref:`discovery`) and statistics DataWriters. +.. warning:: + This statistics topic is not yet implemented. + |SAMPLE_DATAS_TOPIC| -------------------- @@ -155,6 +173,9 @@ in case that the message size is large enough to require RTPS fragmentation) tha DataWriter to completely deliver a single sample. This topic does not apply to builtin (related to :ref:`discovery`) and statistics DataWriters. +.. warning:: + This statistics topic is not yet implemented. + |PDP_PACKETS_TOPIC| ------------------- @@ -163,6 +184,9 @@ transmitted by each DDS |DomainParticipant-api|. PDP packets are the data messages exchanged during the PDP discovery phase (see :ref:`disc_phases` for more information). +.. warning:: + This statistics topic is not yet implemented. + |EDP_PACKETS_TOPIC| ------------------- @@ -171,6 +195,9 @@ transmitted by each DDS |DomainParticipant-api|. EDP packets are the data messages exchanged during the EDP discovery phase (see :ref:`disc_phases` for more information). +.. warning:: + This statistics topic is not yet implemented. + |DISCOVERY_TOPIC| ----------------- @@ -183,3 +210,6 @@ module*). The ``_fastdds_statistics_physical_data`` statistics topic reports the host, user and process where the *Fast DDS Statistics module* is running. + +.. warning:: + This statistics topic is not yet implemented. diff --git a/docs/fastdds/use_cases/statistics_module/statistics_module.rst b/docs/fastdds/use_cases/statistics_module/statistics_module.rst new file mode 100644 index 000000000..06ba5ada7 --- /dev/null +++ b/docs/fastdds/use_cases/statistics_module/statistics_module.rst @@ -0,0 +1,51 @@ +.. include:: ../../../03-exports/aliases-api.include + +.. _statistics_module: + +Statistics module +================= + +*eProsima Fast DDS* :ref:`statistics` allows the user to monitor the data being exchanged by its application. +In order to use this module, the user must enable it in the monitored application, and create another application that +receives the data being published by the statistics DataWriters. +The user can also use for the latter the +`eProsima Fast DDS Statistics Backend `_ which already +implements the collection and aggregation of the data coming from the statistics topics. + +.. contents:: + :local: + :backlinks: none + :depth: 1 + +Enable Statistics module +------------------------ + +The Statistics module has to be enabled both at build and runtime. +On the one hand, :ref:`CMake option ` ``FASTDDS_STATISTICS`` must be enabled when building the library. +On the other hand, the desired statistics DataWriters should be enabled using the :ref:`statistics_dds_layer`. + +The statistics DataWriters can be enabled automatically using the :ref:`propertypolicyqos` ``fastdds.statistics`` and +the :ref:`env_vars_fastdds_statistics` environment variable. +They can also be enabled manually following the next example: + +.. literalinclude:: /../code/DDSCodeTester.cpp + :language: c++ + :start-after: // ENABLE_DISABLE_STATISTICS_DATAWRITER + :end-before: //!-- + :dedent: 8 + +Create monitoring application +----------------------------- + +Once the monitored application is publishing the collected data within the statistics topics enabled by the user, +another application should be configured to subscribe to those topics. +This application is a DDS standard application where the statistics DataReaders should be created. +In order to create these statistics DataReaders, the user should follow the next steps: + +* Using the `statistics IDL `_ + provided in the public API, generate the |TopicDataTypes-api| with :ref:`Fast DDS-Gen `. + +* Create the |DomainParticipant-api| and register the |TopicDataTypes-api| and the corresponding statistics + |Topics-api|. + +* Create the statistics DataReaders using the corresponding statistics topic. diff --git a/docs/fastdds/use_cases/use_cases.rst b/docs/fastdds/use_cases/use_cases.rst index f0c17bc13..dbdb25175 100644 --- a/docs/fastdds/use_cases/use_cases.rst +++ b/docs/fastdds/use_cases/use_cases.rst @@ -67,6 +67,10 @@ with distributed systems: This use case illustrates the APIs that allow for the request of unique network flows, and for the identification of those in use. ++ :ref:`statistics_module`. + This use case explains how to enable the Statistics module within the monitored application, and how to create a + statistics monitoring application. + + :ref:`ros2`. Since *Fast DDS* is the default middleware implementation in the `OSRF`_ `Robot Operation System 2 (ROS 2)`_, this documentation includes a whole independent section to show the use of the library in ROS 2, @@ -83,3 +87,4 @@ with distributed systems: /fastdds/use_cases/reduce_memory/reduce_memory.rst /fastdds/use_cases/zero_copy/zero_copy.rst /fastdds/use_cases/unique_network_flows/unique_network_flows.rst + /fastdds/use_cases/statistics_module/statistics_module.rst