Skip to content

v0.3.0

Latest

Choose a tag to compare

@bburda bburda released this 27 Feb 17:03
· 51 commits to main since this release

Highlights

Gateway plugin framework

ros2_medkit now supports runtime-loaded C++ plugins for extending the gateway with custom endpoints and capabilities. Plugins are shared libraries (.so) loaded at startup, with full lifecycle management, API versioning, and access to gateway internals via PluginContext. The first built-in plugin type is UpdateProvider for software updates. (#237)

Software updates endpoints

8 new REST endpoints under /api/v1/{entity}/updates implement the SOVD software update lifecycle - from listing available campaigns through installation to activation. The update logic is fully delegated to plugins, so any backend (OTA server, local repo, custom protocol) can be integrated without touching gateway code. (#231, #237)

SSE-based periodic data subscriptions

Clients can now subscribe to entity data streams via Server-Sent Events at /api/v1/{entity}/data/{resource}/subscriptions, receiving periodic samples without polling. Each subscription runs independently with configurable intervals. (#223)

Multi-distro CI: Humble, Jazzy, and Rolling

The entire workspace now builds and passes tests on ROS 2 Humble, Jazzy, and Rolling. This required a compatibility shim for ament_target_dependencies (deprecated on Rolling), GenericClient backport for Humble, and fixes for GCC 11, older rosbag2, and DDS behavior differences. (#219, #242)

Rate limiting

New token-bucket rate limiting middleware protects the gateway from request floods. Limits are configurable per-endpoint group (data, operations, faults, config, discovery, bulk_data) with separate burst and sustained rate settings. (#220)

Dedicated integration test package

All integration tests and demo nodes have been extracted into a standalone ros2_medkit_integration_tests package with a shared ros2_medkit_test_utils library, GatewayTestCase base class, and structured test categories (features, scenarios). (#227)


What's Changed

Features

  • Gateway plugin framework with dynamic C++ plugin loading by @bburda in #237
  • Software updates plugin system with 8 SOVD endpoints by @bburda in #231
  • SSE-based periodic data subscriptions by @bburda in #223
  • Bulk data upload and delete endpoints by @bburda in #216
  • Token-bucket rate limiting middleware by @eclipse0922 in #220
  • Global DELETE /api/v1/faults endpoint by @mfaferek93 in #228
  • Return HEALED/PREPASSED faults via status filter by @mfaferek93 in #218

Bug Fixes & Improvements

  • Accurate HIGHEST_SEVERITY reassignment and stale fault_to_cluster_ cleanup by @eclipse0922 in #221
  • Clean up pending_clusters_ when fault cleared before min_count by @eclipse0922 in #211
  • Reduce lock contention in ConfigurationManager by @eclipse0922 in #194
  • Cache component topic map to avoid per-request graph rebuild by @eclipse0922 in #212
  • Add missing ament_index_cpp dependency to package.xml by @eclipse0922 in #191
  • Require cpp-httplib >= 0.14 in pkg-config check by @bburda in #230

Testing

CI & Build

  • Multi-distro CI support for ROS 2 Humble, Jazzy, and Rolling by @bburda in #219
  • Migrate ament_target_dependencies to compat shim for Rolling by @bburda in #242
  • Standardize include guards to #pragma once by @eclipse0922 in #192
  • Use foreach loop for CMake coverage flags by @eclipse0922 in #193

Docs

New Contributors

Full Changelog: 0.2.0...0.3.0