diff --git a/score/launch_manager/src/daemon/src/alive_monitor/BUILD b/score/launch_manager/src/daemon/src/alive_monitor/BUILD index 2ceef92c7..90c1c2bbb 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/BUILD +++ b/score/launch_manager/src/daemon/src/alive_monitor/BUILD @@ -27,7 +27,7 @@ cc_library( strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", visibility = ["//score:__subpackages__"], deps = [ - "//score/launch_manager/src/daemon/src/supervision_control_client:isupervision_factory", + "//score/launch_manager/src/daemon/src/alive_monitor:isupervision_factory", ], ) @@ -43,3 +43,50 @@ cc_library( "@googletest//:gtest_main", ], ) + +cc_library( + name = "ialive_supervision_handle", + hdrs = ["ialive_supervision_handle.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], +) + +cc_library( + name = "isupervision_factory", + hdrs = ["isupervision_factory.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], + deps = [ + "//score/launch_manager/src/daemon/src/alive_monitor/details/ifexm:supervision_handle", + "//score/launch_manager/src/daemon/src/common:identifier_hash", + "//score/launch_manager/src/daemon/src/configuration:component_config", + ], +) + +cc_library( + name = "mock_alive_supervision_handle", + testonly = True, + hdrs = ["mock_alive_supervision_handle.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], + deps = [ + ":ialive_supervision_handle", + "@googletest//:gtest_main", + ], +) + +cc_library( + name = "mock_supervision_factory", + testonly = True, + hdrs = ["mock_supervision_factory.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor", + visibility = ["//score:__subpackages__"], + deps = [ + ":isupervision_factory", + "@googletest//:gtest_main", + ], +) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp b/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp index 43579897e..98534f482 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/IAliveMonitor.hpp @@ -13,7 +13,7 @@ #ifndef SAF_DAEMON_ALIVE_MONITOR_HPP_INCLUDED #define SAF_DAEMON_ALIVE_MONITOR_HPP_INCLUDED -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" namespace score::mw::lifecycle::internal::saf::daemon { @@ -26,11 +26,11 @@ class IAliveMonitor /// @brief Start the monitor thread /// @warning Not valid if @c init() failed - virtual void start() = 0; + virtual void startMonitoring() = 0; /// @brief Stop the monitor thread /// @warning Not valid if @c init() failed - virtual void stop() = 0; + virtual void stopMonitoring() = 0; /// @brief Returns an interface for components to register their alive supervision /// @warning Not valid if @c init() failed diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp index b8101db5f..7f4146190 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.cpp @@ -61,14 +61,14 @@ bool AliveMonitorImpl::init() noexcept return false; } -void AliveMonitorImpl::start() noexcept +void AliveMonitorImpl::startMonitoring() noexcept { alive_monitor_thread_ = std::thread([this]() { threadFn(stop_thread_); }); } -void AliveMonitorImpl::stop() noexcept +void AliveMonitorImpl::stopMonitoring() noexcept { stop_thread_.store(true); if (alive_monitor_thread_.joinable()) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp index 4c7c44208..bfc0c713e 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/AliveMonitorImpl.hpp @@ -48,10 +48,10 @@ class AliveMonitorImpl : public IAliveMonitor const std::size_t supervised_components); /// @brief @see IAliveMonitor definition - void start() noexcept override; + void startMonitoring() noexcept override; /// @brief @see IAliveMonitor definition - void stop() noexcept override; + void stopMonitoring() noexcept override; /// @brief @see IAliveMonitor definition [[nodiscard]] ISupervisionFactory& getSupervisionFactory() const noexcept override; diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD index c29b9df3a..2014d0723 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/BUILD @@ -51,6 +51,7 @@ cc_library( deps = [ ":phm_daemon_config", ":sw_cluster_handler", + "//score/launch_manager/src/daemon/src/alive_monitor:isupervision_factory", "//score/launch_manager/src/daemon/src/alive_monitor/details/common:einitcode", "//score/launch_manager/src/daemon/src/alive_monitor/details/factory:flat_cfg_factory", "//score/launch_manager/src/daemon/src/alive_monitor/details/ifappl:monitor_if_daemon", @@ -60,7 +61,6 @@ cc_library( "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:cycle_timer", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:timers_os_clock", "//score/launch_manager/src/daemon/src/common:log", - "//score/launch_manager/src/daemon/src/supervision_control_client:isupervision_factory", ], ) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp index 58f0e2e02..b3b86e2a7 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/daemon/PhmDaemon.hpp @@ -26,8 +26,8 @@ #include "score/mw/launch_manager/alive_monitor/details/timers/CycleTimeValidator.hpp" #include "score/mw/launch_manager/alive_monitor/details/timers/CycleTimer.hpp" #include "score/mw/launch_manager/alive_monitor/details/timers/TimeConversion.hpp" +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" #include "score/mw/launch_manager/configuration/config.hpp" -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" namespace score::mw::lifecycle::internal::saf::daemon { diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD index 2999e2fef..0ab3f030b 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/BUILD @@ -11,6 +11,7 @@ # SPDX-License-Identifier: Apache-2.0 # ******************************************************************************* load("@rules_cc//cc:defs.bzl", "cc_library") +load("//tests/utils/bazel:unit_test.bzl", "lm_cc_test") cc_library( name = "observable_event", @@ -20,9 +21,9 @@ cc_library( strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm", visibility = ["//score/launch_manager/src/daemon/src/alive_monitor:__subpackages__"], deps = [ + ":supervision_event", "//score/launch_manager/src/daemon/src/alive_monitor/details/common:observer", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:timers_os_clock", - "//score/launch_manager/src/daemon/src/supervision_control_client:supervision_event", ], ) @@ -35,10 +36,46 @@ cc_library( visibility = ["//score/launch_manager/src/daemon/src/alive_monitor:__subpackages__"], deps = [ ":observable_event", + ":supervision_event", "//score/launch_manager:error_event", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:time_conversion", "//score/launch_manager/src/daemon/src/alive_monitor/details/timers:timers_os_clock", "//score/launch_manager/src/daemon/src/common:log", - "//score/launch_manager/src/daemon/src/supervision_control_client:supervision_event", + ], +) + +cc_library( + name = "supervision_event", + hdrs = ["supervision_event.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor/details/ifexm", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm", + visibility = ["//score:__subpackages__"], + deps = [ + "//externals/ipc_dropin", + "//score/launch_manager/src/daemon/src/common:identifier_hash", + ], +) + +cc_library( + name = "supervision_handle", + hdrs = ["supervision_handle.hpp"], + include_prefix = "score/mw/launch_manager/alive_monitor/details/ifexm", + strip_include_prefix = "/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm", + visibility = ["//score/launch_manager/src/daemon/src/alive_monitor:__subpackages__"], + deps = [ + ":supervision_event", + "//score/launch_manager/src/daemon/src/alive_monitor:ialive_supervision_handle", + "//score/launch_manager/src/daemon/src/common:alive_interface_path", + "//score/launch_manager/src/daemon/src/common:identifier_hash", + "//score/launch_manager/src/daemon/src/common:log", + ], +) + +lm_cc_test( + name = "supervision_control_client_ut", + srcs = ["supervision_control_client_ut.cpp"], + deps = [ + ":supervision_handle", + "@googletest//:gtest_main", ], ) diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp index 36d2dcfae..27178ad80 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEvent.hpp @@ -18,7 +18,7 @@ #include "score/mw/launch_manager/alive_monitor/details/timers/Timers_OsClock.hpp" #include -#include "score/mw/launch_manager/supervision_control_client/supervision_event.hpp" +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_event.hpp" namespace score::mw::lifecycle::internal::saf::ifexm { diff --git a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp index 6b47e339d..50958598b 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/ObservableEventReader.hpp @@ -17,8 +17,8 @@ #include #include "score/mw/launch_manager/alive_monitor/details/ifexm/ObservableEvent.hpp" +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_event.hpp" #include "score/mw/launch_manager/alive_monitor/details/timers/Timers_OsClock.hpp" -#include "score/mw/launch_manager/supervision_control_client/supervision_event.hpp" #include "score/result/result.h" diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_control_client_ut.cpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_control_client_ut.cpp similarity index 98% rename from score/launch_manager/src/daemon/src/supervision_control_client/supervision_control_client_ut.cpp rename to score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_control_client_ut.cpp index 410101d9f..d572f0a7f 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_control_client_ut.cpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_control_client_ut.cpp @@ -10,7 +10,7 @@ * * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ -#include "score/mw/launch_manager/supervision_control_client/supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_handle.hpp" #include #include diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_event.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_event.hpp similarity index 100% rename from score/launch_manager/src/daemon/src/supervision_control_client/supervision_event.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_event.hpp diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp similarity index 83% rename from score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp index 9b465e43e..7c585f96d 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/details/ifexm/supervision_handle.hpp @@ -13,10 +13,12 @@ #ifndef SUPERVISION_HANDLE_HPP_INCLUDED #define SUPERVISION_HANDLE_HPP_INCLUDED +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_event.hpp" +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" +#include "score/mw/launch_manager/common/alive_interface_path.hpp" #include "score/mw/launch_manager/common/identifier_hash.hpp" #include "score/mw/launch_manager/common/log.hpp" -#include "score/mw/launch_manager/supervision_control_client/ialive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/supervision_event.hpp" + #include namespace score @@ -37,7 +39,7 @@ class SupervisionHandle : public IAliveSupervisionHandle /// @param process_id Identifier of the process being supervised. /// @param buffer Buffer to push supervision events to. explicit SupervisionHandle(IdentifierHash process_id, std::shared_ptr buffer) - : process_id_(process_id), buffer_(buffer) + : process_id_(process_id), buffer_(buffer), ipc_path_(std::move(internal::aliveInterfacePath(process_id_))) { } @@ -53,6 +55,12 @@ class SupervisionHandle : public IAliveSupervisionHandle return queueSupervisionEvent({process_id_, SupervisionEventType::kDeactivation, time}); } + /// @brief Get the name of the IPC file alive indications are sent to. + std::string_view getConnectionId() const noexcept override + { + return ipc_path_; + } + private: /// @brief Attempts to push a supervision event so that the alive monitor can be informed about it. /// @param[in] f_event The SupervisionEvent to be queued @@ -74,6 +82,8 @@ class SupervisionHandle : public IAliveSupervisionHandle const IdentifierHash process_id_; /// @brief Buffer to push supervision events to std::shared_ptr buffer_; + /// @brief IPC path for alive indications + std::string ipc_path_; }; } // namespace mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp similarity index 88% rename from score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp index da11c98e2..49e24b7ea 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/ialive_supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/ialive_supervision_handle.hpp @@ -14,6 +14,7 @@ #define IALIVE_SUPERVISION_HANDLE_HPP_INCLUDED #include +#include namespace score::mw::lifecycle { @@ -30,6 +31,9 @@ class IAliveSupervisionHandle /// @brief Request that the calling process stops supervision at @param time virtual bool deactivateSupervision(timespec time) noexcept = 0; + + /// @brief Get the name of the IPC file alive indications are sent to. + virtual std::string_view getConnectionId() const noexcept = 0; }; } // namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/isupervision_factory.hpp b/score/launch_manager/src/daemon/src/alive_monitor/isupervision_factory.hpp similarity index 95% rename from score/launch_manager/src/daemon/src/supervision_control_client/isupervision_factory.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/isupervision_factory.hpp index 38b941eae..5fc850fee 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/isupervision_factory.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/isupervision_factory.hpp @@ -16,9 +16,9 @@ #include #include +#include "score/mw/launch_manager/alive_monitor/details/ifexm/supervision_handle.hpp" #include "score/mw/launch_manager/common/identifier_hash.hpp" #include "score/mw/launch_manager/configuration/component_config.hpp" -#include "score/mw/launch_manager/supervision_control_client/supervision_handle.hpp" namespace score { diff --git a/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp index a405d0e32..100fdde89 100644 --- a/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_monitor.hpp @@ -22,8 +22,8 @@ namespace score::mw::lifecycle::internal::saf::daemon class MockAliveMonitor : public IAliveMonitor { public: - MOCK_METHOD(void, start, (), (override)); - MOCK_METHOD(void, stop, (), (override)); + MOCK_METHOD(void, startMonitoring, (), (override)); + MOCK_METHOD(void, stopMonitoring, (), (override)); MOCK_METHOD(ISupervisionFactory&, getSupervisionFactory, (), (const, override)); MOCK_METHOD(bool, init, (), (noexcept, override)); }; diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp similarity index 86% rename from score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp index 0afb5b829..4d1e3f3e4 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/mock_alive_supervision_handle.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_alive_supervision_handle.hpp @@ -13,7 +13,7 @@ #ifndef MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED #define MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED -#include "score/mw/launch_manager/supervision_control_client/ialive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" #include namespace score::mw::lifecycle @@ -24,6 +24,7 @@ class MockAliveSupervisionHandle : public IAliveSupervisionHandle public: MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); }; } // namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp new file mode 100644 index 000000000..4d1e3f3e4 --- /dev/null +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_event_publisher.hpp @@ -0,0 +1,32 @@ +/******************************************************************************** + * Copyright (c) 2026 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Apache License Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + ********************************************************************************/ +#ifndef MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED +#define MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED + +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" +#include + +namespace score::mw::lifecycle +{ + +class MockAliveSupervisionHandle : public IAliveSupervisionHandle +{ + public: + MOCK_METHOD(bool, activateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(bool, deactivateSupervision, (timespec time), (override, noexcept)); + MOCK_METHOD(std::string_view, getConnectionId, (), (const, override, noexcept)); +}; + +} // namespace score::mw::lifecycle + +#endif // MOCK_ALIVE_SUPERVISION_HANDLE_HPP_INCLUDED diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/mock_supervision_factory.hpp b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_factory.hpp similarity index 92% rename from score/launch_manager/src/daemon/src/supervision_control_client/mock_supervision_factory.hpp rename to score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_factory.hpp index 4bb704bed..61bea7766 100644 --- a/score/launch_manager/src/daemon/src/supervision_control_client/mock_supervision_factory.hpp +++ b/score/launch_manager/src/daemon/src/alive_monitor/mock_supervision_factory.hpp @@ -14,7 +14,7 @@ #ifndef MOCK_SUPERVISION_FACTORY_HPP_INCLUDED #define MOCK_SUPERVISION_FACTORY_HPP_INCLUDED -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" #include namespace score::mw::lifecycle diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD index 36f43800d..7d508bb63 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/BUILD @@ -144,9 +144,9 @@ cc_library( visibility = ["//score/launch_manager/src/daemon/src/process_group_manager:__pkg__"], deps = [ ":safe_process_map", + "//score/launch_manager/src/daemon/src/alive_monitor:isupervision_factory", "//score/launch_manager/src/daemon/src/osal:ifile_waiter", "//score/launch_manager/src/daemon/src/process_group_manager:iprocess", - "//score/launch_manager/src/daemon/src/supervision_control_client:isupervision_factory", ], ) @@ -161,7 +161,7 @@ cc_library( ":icomponent", ":process_handling", ":safe_process_map", - "//score/launch_manager/src/daemon/src/common:alive_interface_path", + "//score/launch_manager/src/daemon/src/alive_monitor:ialive_supervision_handle", "//score/launch_manager/src/daemon/src/configuration:component_config", "//score/launch_manager/src/daemon/src/control:control_client_channel", "//score/launch_manager/src/daemon/src/osal:ifile_waiter", @@ -169,7 +169,6 @@ cc_library( "//score/launch_manager/src/daemon/src/osal:semaphore", "//score/launch_manager/src/daemon/src/process_group_manager:iprocess", "//score/launch_manager/src/daemon/src/process_group_manager:process_state", - "//score/launch_manager/src/daemon/src/supervision_control_client:ialive_supervision_handle", "@score_baselibs//score/language/futurecpp", ], ) @@ -180,10 +179,10 @@ lm_cc_test( deps = [ ":process_info_node", ":safe_process_map", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_supervision_handle", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory", "//score/launch_manager/src/daemon/src/osal:mock_ifile_waiter", "//score/launch_manager/src/daemon/src/process_group_manager:mock_iprocess", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_alive_supervision_handle", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_supervision_factory", "@googletest//:gtest_main", ], ) @@ -233,10 +232,10 @@ lm_cc_test( srcs = ["graph_UT.cpp"], deps = [ ":graph", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_supervision_handle", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory", "//score/launch_manager/src/daemon/src/configuration:config", "//score/launch_manager/src/daemon/src/process_group_manager:mock_iprocess", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_alive_supervision_handle", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_supervision_factory", "@googletest//:gtest_main", ], ) @@ -355,11 +354,11 @@ lm_cc_test( srcs = ["process_group_manager_UT.cpp"], deps = [ "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_monitor", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_alive_supervision_handle", + "//score/launch_manager/src/daemon/src/alive_monitor:mock_supervision_factory", "//score/launch_manager/src/daemon/src/configuration:config", "//score/launch_manager/src/daemon/src/process_group_manager", "//score/launch_manager/src/daemon/src/recovery_client:mock_recovery_client", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_alive_supervision_handle", - "//score/launch_manager/src/daemon/src/supervision_control_client:mock_supervision_factory", "//score/launch_manager/src/daemon/src/watchdog:mock_i_watchdog_if", "@googletest//:gtest_main", ], diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp index e95f0a0fc..a04936615 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/graph_UT.cpp @@ -20,11 +20,11 @@ #include #include +#include "score/mw/launch_manager/alive_monitor/mock_alive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_supervision_factory.hpp" #include "score/mw/launch_manager/configuration/config.hpp" #include "score/mw/launch_manager/process_group_manager/details/graph.hpp" #include "score/mw/launch_manager/process_group_manager/mock_iprocess.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_alive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_supervision_factory.hpp" namespace score::mw::lifecycle::internal { diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp index fe98b9b5c..2e76a971b 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_group_manager_UT.cpp @@ -14,9 +14,9 @@ #include "score/mw/launch_manager/process_group_manager/process_group_manager.hpp" #include "score/mw/launch_manager/alive_monitor/mock_alive_monitor.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_alive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_supervision_factory.hpp" #include "score/mw/launch_manager/recovery_client/mock_irecovery_client.h" -#include "score/mw/launch_manager/supervision_control_client/mock_alive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_supervision_factory.hpp" #include "score/mw/launch_manager/watchdog/mock_IWatchdogIf.hpp" #include @@ -117,7 +117,7 @@ class ProcessGroupManagerWatchdogTest : public Test void expectNormalStartup() { EXPECT_CALL(*alive_monitor_, init()).WillOnce(Return(true)); - EXPECT_CALL(*alive_monitor_, start()); + EXPECT_CALL(*alive_monitor_, startMonitoring()); EXPECT_CALL(*watchdog_, init(_, _)).WillOnce(Return(true)); EXPECT_CALL(*watchdog_, enable()).WillOnce(Return(true)); } @@ -180,7 +180,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogMethods InSequence sequence; expectNormalStartup(); EXPECT_CALL(*watchdog_, disable()).Times(1); - EXPECT_CALL(*alive_monitor_, stop()).Times(1); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(1); // When auto initialize_result = process_group_manager_->initialize(); @@ -199,7 +199,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogService }); // Called in deinitialize() after run() returns EXPECT_CALL(*watchdog_, disable()).Times(1); - EXPECT_CALL(*alive_monitor_, stop()).Times(1); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(1); // When ASSERT_TRUE(process_group_manager_->initialize()); @@ -223,7 +223,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogFired_W process_group_manager_->cancel(); }); EXPECT_CALL(*watchdog_, disable()).Times(1); - EXPECT_CALL(*alive_monitor_, stop()).Times(1); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(1); // When ASSERT_TRUE(process_group_manager_->initialize()); @@ -250,7 +250,7 @@ TEST_F(ProcessGroupManagerWatchdogTest, GivenMinimalConfig_ExpectWatchdogDisable // We are explicitly calling deinitialize() in this test for readability, // so disable() and stop() are expected to be called twice: once in deinitialize() and once in TearDown(). EXPECT_CALL(*watchdog_, disable()).Times(2); - EXPECT_CALL(*alive_monitor_, stop()).Times(2); + EXPECT_CALL(*alive_monitor_, stopMonitoring()).Times(2); // When ASSERT_TRUE(process_group_manager_->initialize()); diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp index ce3e552c6..5f5326609 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_handling.hpp @@ -14,10 +14,10 @@ #ifndef _INCLUDED_PROCESSHANDLING_ #define _INCLUDED_PROCESSHANDLING_ +#include "score/mw/launch_manager/alive_monitor/isupervision_factory.hpp" #include "score/mw/launch_manager/osal/ifile_waiter.hpp" #include "score/mw/launch_manager/process_group_manager/details/safe_process_map.hpp" #include "score/mw/launch_manager/process_group_manager/iprocess.hpp" -#include "score/mw/launch_manager/supervision_control_client/isupervision_factory.hpp" #include namespace score::mw::lifecycle::internal diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp index c7e78a668..4c3aacab1 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.cpp @@ -13,7 +13,6 @@ #include "process_info_node.hpp" #include "score/launch_manager/src/daemon/src/configuration/component_config.hpp" -#include "score/mw/launch_manager/common/alive_interface_path.hpp" #include "score/mw/launch_manager/common/log.hpp" #include "score/mw/launch_manager/osal/ifile_waiter.hpp" #include "score/mw/launch_manager/osal/ipc_comms.hpp" @@ -49,9 +48,6 @@ ProcessInfoNode::ProcessInfoNode(configuration::ComponentConfig&& config, Proces LM_LOG_DEBUG() << "Setting up alive supervision for" << identifier_; - config_.deployment_config.environmental_variables.add( - "LCM_ALIVE_INTERFACE_PATH", aliveInterfacePath(identifier_)); - supervision_handle_ = process_handling_.supervision_factory.constructSupervision( identifier_, uid, app_profile.alive_supervision.value()); @@ -63,6 +59,9 @@ ProcessInfoNode::ProcessInfoNode(configuration::ComponentConfig&& config, Proces { LM_LOG_DEBUG() << "Successfully set up alive supervision for" << identifier_; } + + config_.deployment_config.environmental_variables.add( + "LCM_ALIVE_INTERFACE_PATH", supervision_handle_->getConnectionId()); } } @@ -112,11 +111,6 @@ IComponent::RequestResult ProcessInfoNode::tryReportSuccess() { reached_ready_.store(true); - if (auto time = getTimeForAliveState()) - { - supervision_handle_->activateSupervision(time.value()); - } - return {RequestState::kSuccess}; } return {IComponent::RequestState::kWaiting}; @@ -530,6 +524,13 @@ IComponent::RequestResult ProcessInfoNode::activate(score::cpp::stop_token stop_ return tryReportSuccess(); } auto res = startProcess(std::move(stop_token)); + if (res.has_value()) + { + if (auto time = getTimeForAliveState()) + { + supervision_handle_->activateSupervision(time.value()); + } + } return res; } diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp index ef746e568..b13407650 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node.hpp @@ -15,13 +15,13 @@ #define _INCLUDED_PROCESSINFONODE_ #include "score/launch_manager/src/daemon/src/configuration/component_config.hpp" +#include "score/mw/launch_manager/alive_monitor/ialive_supervision_handle.hpp" #include "score/mw/launch_manager/configuration/component_config.hpp" #include "score/mw/launch_manager/control/control_client_channel.hpp" #include "score/mw/launch_manager/process_group_manager/details/icomponent.hpp" #include "score/mw/launch_manager/process_group_manager/details/process_handling.hpp" #include "score/mw/launch_manager/process_group_manager/details/safe_process_map.hpp" #include "score/mw/launch_manager/process_group_manager/process_state.hpp" -#include "score/mw/launch_manager/supervision_control_client/ialive_supervision_handle.hpp" #include #include #include diff --git a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp index a8d9202c6..940effaa7 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/details/process_info_node_UT.cpp @@ -11,12 +11,12 @@ * SPDX-License-Identifier: Apache-2.0 ********************************************************************************/ +#include "score/mw/launch_manager/alive_monitor/mock_alive_supervision_handle.hpp" +#include "score/mw/launch_manager/alive_monitor/mock_supervision_factory.hpp" #include "score/mw/launch_manager/osal/mock_ifile_waiter.hpp" #include "score/mw/launch_manager/process_group_manager/details/process_info_node.hpp" #include "score/mw/launch_manager/process_group_manager/details/safe_process_map.hpp" #include "score/mw/launch_manager/process_group_manager/mock_iprocess.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_alive_supervision_handle.hpp" -#include "score/mw/launch_manager/supervision_control_client/mock_supervision_factory.hpp" #include #include #include diff --git a/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp b/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp index e0272242d..306c40e09 100644 --- a/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp +++ b/score/launch_manager/src/daemon/src/process_group_manager/process_group_manager.cpp @@ -104,7 +104,7 @@ bool ProcessGroupManager::initialize() LM_LOG_DEBUG() << "Process Group initialization done"; - alive_monitor_->start(); + alive_monitor_->startMonitoring(); // Watchdog config may not be available if no watchdog is configured if (watchdog_config_.has_value()) @@ -133,7 +133,7 @@ void ProcessGroupManager::deinitialize() event_queue_->stop(); } os_handler_.reset(); - alive_monitor_->stop(); + alive_monitor_->stopMonitoring(); // Join the worker threads before destroying the process groups: a worker may // still be (de)activating a ProcessInfoNode owned by a graph, so tearing the diff --git a/score/launch_manager/src/daemon/src/supervision_control_client/BUILD b/score/launch_manager/src/daemon/src/supervision_control_client/BUILD deleted file mode 100644 index 4ee93a681..000000000 --- a/score/launch_manager/src/daemon/src/supervision_control_client/BUILD +++ /dev/null @@ -1,96 +0,0 @@ -# ******************************************************************************* -# Copyright (c) 2026 Contributors to the Eclipse Foundation -# -# See the NOTICE file(s) distributed with this work for additional -# information regarding copyright ownership. -# -# This program and the accompanying materials are made available under the -# terms of the Apache License Version 2.0 which is available at -# https://www.apache.org/licenses/LICENSE-2.0 -# -# SPDX-License-Identifier: Apache-2.0 -# ******************************************************************************* -load("@rules_cc//cc:defs.bzl", "cc_library") -load("//tests/utils/bazel:unit_test.bzl", "lm_cc_test") - -cc_library( - name = "supervision_event", - hdrs = ["supervision_event.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - "//externals/ipc_dropin", - "//score/launch_manager/src/daemon/src/common:identifier_hash", - ], -) - -cc_library( - name = "ialive_supervision_handle", - hdrs = ["ialive_supervision_handle.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], -) - -cc_library( - name = "supervision_handle", - hdrs = ["supervision_handle.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":ialive_supervision_handle", - ":supervision_event", - "//score/launch_manager/src/daemon/src/common:identifier_hash", - "//score/launch_manager/src/daemon/src/common:log", - ], -) - -cc_library( - name = "isupervision_factory", - hdrs = ["isupervision_factory.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":supervision_handle", - "//score/launch_manager/src/daemon/src/common:identifier_hash", - "//score/launch_manager/src/daemon/src/configuration:component_config", - ], -) - -cc_library( - name = "mock_alive_supervision_handle", - testonly = True, - hdrs = ["mock_alive_supervision_handle.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":ialive_supervision_handle", - "@googletest//:gtest_main", - ], -) - -cc_library( - name = "mock_supervision_factory", - testonly = True, - hdrs = ["mock_supervision_factory.hpp"], - include_prefix = "score/mw/launch_manager/supervision_control_client", - strip_include_prefix = "/score/launch_manager/src/daemon/src/supervision_control_client", - visibility = ["//score:__subpackages__"], - deps = [ - ":isupervision_factory", - "@googletest//:gtest_main", - ], -) - -lm_cc_test( - name = "supervision_control_client_ut", - srcs = ["supervision_control_client_ut.cpp"], - deps = [ - ":supervision_handle", - "@googletest//:gtest_main", - ], -)