Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
09ff8f2
refactor(gateway): relocate operation result types into core/operations
bburda Apr 29, 2026
fc08fb9
refactor(gateway): relocate parameter result types into core/configur…
bburda Apr 29, 2026
7e0ed42
refactor(gateway): relocate FaultResult into core/faults
bburda Apr 29, 2026
ca50ae1
feat(gateway): introduce neutral Transport interfaces under core/tran…
bburda Apr 29, 2026
d4f10e4
refactor(gateway): route DataAccessManager through TopicTransport ada…
bburda Apr 29, 2026
f6ff5e0
refactor(gateway): route OperationManager through Service/Action tran…
bburda Apr 29, 2026
dd6a41d
refactor(gateway): route ConfigurationManager through ParameterTransport
bburda Apr 29, 2026
4428d63
refactor(gateway): route FaultManager through FaultServiceTransport
bburda Apr 29, 2026
661f680
refactor(gateway): route LogManager through LogSource adapter
bburda Apr 29, 2026
3fc24a2
refactor(gateway): route TriggerManager through TopicSubscriptionTran…
bburda Apr 29, 2026
ef5de6b
refactor(gateway): convert runtime discovery to IntrospectionProvider
bburda Apr 29, 2026
bf092c2
refactor: relocate TypeIntrospection to ros2_medkit_serialization
bburda Apr 29, 2026
19bb754
refactor(gateway): drive discovery refresh from rclcpp graph events
bburda Apr 29, 2026
caa3f59
fix(gateway): only sweep orphan triggers on the backstop refresh
bburda Apr 29, 2026
d706736
fix(opcua): bump test_opcua_plugin TIMEOUT to 240s
bburda Apr 29, 2026
fe74498
docs(gateway): refresh design index for managers-in-core layout
bburda Apr 29, 2026
0c4882f
fix(gateway): resolve clang-tidy findings on touched files
bburda Apr 29, 2026
4e0eec1
fix(gateway): pass goal by const-reference in goal-callback lambda
bburda Apr 29, 2026
0d2489f
fix(scripts): suppress clean-file output in clang-tidy-diff pre-push …
bburda May 10, 2026
efd9e3e
fix(graph_provider/test): Rule of Five on LocalHttpServer + drop redu…
bburda May 10, 2026
b6a4fce
fix(gateway/test): drop shadow + single-char find in test_trigger_man…
bburda May 10, 2026
5ffa96b
fix(docs/design): join wrapped bullet to clear docutils Unexpected in…
bburda May 10, 2026
38e44d6
test(operation_handlers): re-seed cache after action goal + suppress …
bburda May 10, 2026
4b0a810
fix(gateway): self-review findings on transport adapters + design index
bburda May 11, 2026
e51fac7
fix(gateway): cancel in-flight peer HTTP calls during shutdown
bburda May 11, 2026
138b2c8
fix(gateway): drop racy health-client stop from PeerClient::shutdown
bburda May 11, 2026
91ada10
fix(gateway): register health-check client with active set for shutdo…
bburda May 11, 2026
800fd74
test(tsan): suppress cpp-httplib stop() unlock-mismatch warning
bburda May 11, 2026
7c6b1d7
fix(gateway): cap health-check timeouts at 1s for fast shutdown drain
bburda May 11, 2026
4aa1826
fix(gateway): implementation hardening across managers, transports, docs
bburda May 12, 2026
1b19bae
fix(gateway): honour transport contracts on log restart and service/a…
bburda May 12, 2026
77cd6f4
refactor(gateway): remove backwards-compat shim headers
bburda May 12, 2026
f26107b
fix(gateway): correct severity labels, observability gaps, contract d…
bburda May 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions docs/config/server.rst
Original file line number Diff line number Diff line change
Expand Up @@ -255,10 +255,14 @@ Performance Tuning
- Description
* - ``refresh_interval_ms``
- int
- ``10000``
- Cache refresh interval. How often to discover ROS 2 nodes. Range: 100-60000 (0.1s-60s).

Lower values provide faster updates but increase CPU usage.
- ``30000``
- Safety-backstop refresh interval (ms). Primary discovery is graph-event
driven (polled every 100 ms); this timer forces a full refresh only if
a graph event is missed. Range: 100-60000 (0.1s-60s).

Lower values shorten the worst-case recovery window if a graph event is missed
but increase idle CPU. The default rarely fires on a stable graph because the
graph-event poll handles node up/down events directly.

Bulk Data Storage
-----------------
Expand Down
9 changes: 7 additions & 2 deletions docs/troubleshooting.rst
Original file line number Diff line number Diff line change
Expand Up @@ -197,11 +197,16 @@ Optimize with:

**High CPU usage**

Reduce cache refresh rate:
Discovery is graph-event driven (polled every 100 ms), so a stable graph
already incurs near-zero refresh overhead. On a graph with frequent node
churn that does not need to be reflected immediately, raise the safety-backstop
interval above the default ``30000`` to reduce the worst-case forced refresh
rate:

.. code-block:: yaml

refresh_interval_ms: 30000 # 30 seconds instead of default 10s
refresh_interval_ms: 60000 # Raise from default 30s if recovery from a
# missed graph event can tolerate longer delay.

FAQ
---
Expand Down
22 changes: 11 additions & 11 deletions docs/tutorials/plugin-system.rst
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ Writing a Plugin

.. code-block:: cpp

#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/update_provider.hpp"

using namespace ros2_medkit_gateway;
Expand Down Expand Up @@ -179,8 +179,8 @@ A self-contained plugin implementing UpdateProvider (copy-paste starting point):
.. code-block:: cpp

// my_ota_plugin.cpp
#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/update_provider.hpp"

#include <nlohmann/json.hpp>
Expand Down Expand Up @@ -512,8 +512,8 @@ subscribes to ``/ros2_medkit/discovery``, stores incoming

.. code-block:: cpp

#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"

using namespace ros2_medkit_gateway;

Expand Down Expand Up @@ -584,7 +584,7 @@ execute, and control executions:

.. code-block:: cpp

#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/providers/script_provider.hpp"

using namespace ros2_medkit_gateway;
Expand Down Expand Up @@ -701,10 +701,10 @@ via ``DataProvider``. OperationProvider and FaultProvider follow the same patter

.. code-block:: cpp

#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/providers/data_provider.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"
#include "ros2_medkit_gateway/core/providers/data_provider.hpp"

using namespace ros2_medkit_gateway;

Expand Down
6 changes: 3 additions & 3 deletions scripts/check_no_naked_subscriptions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ ALLOWED_DIRS_PATTERN="(${GATEWAY_ROOT}/src/ros2_common/|${GATEWAY_ROOT}/include/
ALLOWED_LEGACY_FILES=(
"${GATEWAY_ROOT}/src/http/handlers/sse_fault_handler.cpp" # faults provider follow-up
"${GATEWAY_ROOT}/src/trigger_fault_subscriber.cpp" # faults provider follow-up
"${GATEWAY_ROOT}/src/trigger_topic_subscriber.cpp" # data_stream provider follow-up
"${GATEWAY_ROOT}/src/operation_manager.cpp" # operations provider follow-up
"${GATEWAY_ROOT}/src/log_manager.cpp" # logs provider follow-up
"${GATEWAY_ROOT}/src/ros2/trigger_topic_subscriber.cpp" # adapter for TopicSubscriptionTransport (rclcpp boundary)
"${GATEWAY_ROOT}/src/ros2/transports/ros2_action_transport.cpp" # operations provider follow-up
"${GATEWAY_ROOT}/src/ros2/transports/ros2_log_source.cpp" # /rosout adapter (LogSource port)
"${FAULT_MANAGER_ROOT}/src/snapshot_capture.cpp" # uses LockedSubscriptionGuard (in-place serialisation)
"${FAULT_MANAGER_ROOT}/include/ros2_medkit_fault_manager/snapshot_capture.hpp" # comment references the guarded API
"${FAULT_MANAGER_ROOT}/src/rosbag_capture.cpp" # bag-recorder spawns its own node + executor, no shared rcl hash map
Expand Down
13 changes: 11 additions & 2 deletions scripts/clang-tidy-diff.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,19 @@ for file in "$@"; do
ABS_FILE="$(realpath "$file" 2>/dev/null || echo "$file")"
fi

echo "clang-tidy: $file"
if ! clang-tidy -p "$(dirname "$COMPILE_DB")" --config-file="$CLANG_TIDY_CONFIG" "$ABS_FILE"; then
# Capture output: clang-tidy emits a "X warnings generated. Suppressed Y"
# summary plus source snippets on stderr even when every diagnostic is
# suppressed. Replaying that for every clean file overflows pre-commit's
# output buffer (BlockingIOError on sys.stdout.buffer.write). Keep stdout
# silent for clean runs and only print the captured output on failure.
output=$(clang-tidy -p "$(dirname "$COMPILE_DB")" --quiet --config-file="$CLANG_TIDY_CONFIG" "$ABS_FILE" 2>&1) || rc=$?
rc=${rc:-0}
if [ "$rc" -ne 0 ]; then
echo "clang-tidy: $file"
echo "$output"
ERRORS=$((ERRORS + 1))
fi
unset rc
done

if [ "$ERRORS" -gt 0 ]; then
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

#include "ros2_medkit_beacon_common/beacon_hint_store.hpp"
#include "ros2_medkit_beacon_common/beacon_types.hpp"
#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"

namespace ros2_medkit_beacon {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_context.hpp"
#include "ros2_medkit_gateway/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/ros_plugin_context.hpp"
#include "ros2_medkit_linux_introspection/cgroup_reader.hpp"
#include "ros2_medkit_linux_introspection/container_utils.hpp"
#include "ros2_medkit_linux_introspection/plugin_config.hpp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_context.hpp"
#include "ros2_medkit_gateway/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/ros_plugin_context.hpp"
#include "ros2_medkit_linux_introspection/plugin_config.hpp"
#include "ros2_medkit_linux_introspection/proc_reader.hpp"
#include "ros2_medkit_linux_introspection/procfs_utils.hpp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.

#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_context.hpp"
#include "ros2_medkit_gateway/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/ros_plugin_context.hpp"
#include "ros2_medkit_linux_introspection/plugin_config.hpp"
#include "ros2_medkit_linux_introspection/proc_reader.hpp"
#include "ros2_medkit_linux_introspection/systemd_utils.hpp"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@
#include "ros2_medkit_beacon_common/beacon_hint_store.hpp"
#include "ros2_medkit_beacon_common/beacon_types.hpp"
#include "ros2_medkit_beacon_common/beacon_validator.hpp"
#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_context.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/ros_plugin_context.hpp"
#include "ros2_medkit_param_beacon/parameter_client_interface.hpp"

class ParameterBeaconPlugin : public ros2_medkit_gateway::GatewayPlugin,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <nlohmann/json.hpp>
#include <rclcpp/rclcpp.hpp>

#include "ros2_medkit_gateway/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_http_types.hpp"
#include "ros2_medkit_param_beacon/param_beacon_plugin.hpp"

using ros2_medkit_beacon::BeaconHint;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@
#include "ros2_medkit_beacon_common/beacon_hint_store.hpp"
#include "ros2_medkit_beacon_common/beacon_types.hpp"
#include "ros2_medkit_beacon_common/beacon_validator.hpp"
#include "ros2_medkit_gateway/discovery/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/plugins/plugin_context.hpp"
#include "ros2_medkit_gateway/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/plugins/gateway_plugin.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_types.hpp"
#include "ros2_medkit_gateway/core/providers/introspection_provider.hpp"
#include "ros2_medkit_gateway/plugins/ros_plugin_context.hpp"

// Simple token bucket for rate limiting.
// Thread safety: on_beacon() is called from the DDS callback thread,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include <nlohmann/json.hpp>
#include <rclcpp/rclcpp.hpp>

#include "ros2_medkit_gateway/plugins/plugin_http_types.hpp"
#include "ros2_medkit_gateway/core/plugins/plugin_http_types.hpp"
#include "ros2_medkit_topic_beacon/topic_beacon_plugin.hpp"

using ros2_medkit_beacon::BeaconHint;
Expand Down
Loading
Loading