RTC Toolkit 4.0.2
Loading...
Searching...
No Matches
rtcSupervisor.hpp
Go to the documentation of this file.
1
13#ifndef RTCTK_RTCSUPERVISOR_RTCSUPERVISOR_HPP
14#define RTCTK_RTCSUPERVISOR_RTCSUPERVISOR_HPP
15
24
30
31#include <map>
32#include <mutex>
33#include <string>
34
35namespace rtctk::rtcSupervisor {
36
37using namespace rtctk::componentFramework;
38
40
42public:
44
45 RtcSupervisor(const std::string& comp_name, ServiceContainer& services);
46 virtual ~RtcSupervisor();
47
48 void ActivityStarting(StopToken st) override;
49 void ActivityInitialising(StopToken st) override;
50 void ActivityEnabling(StopToken st) override;
51 void ActivityDisabling(StopToken st) override;
52
53 void ActivityUpdating(StopToken st, JsonPayload const& args) override;
54 bool GuardUpdatingAllowed(JsonPayload const& args) override;
55
56 std::string ActionGetStatus() override;
57
61 void ActionSetDeferredModes(JsonPayload const& args) override;
62 void ActivitySettingModes(StopToken st, JsonPayload const& args) override;
63 bool GuardSettingModesAllowed(JsonPayload const& args) override;
64
65 void ActivityWritingBack(StopToken st, JsonPayload const& args) override;
66 bool GuardWritingBackAllowed(JsonPayload const& args) override;
67
68protected:
72 std::vector<std::unique_ptr<RtcObjectIf>> MakeRtcObjects();
73
77 std::vector<elt::mal::Uri> GetPubSubUris();
78
84 void MonitorCycle() noexcept;
85
91 void OnStateEventReceived(const double timestamp,
92 const std::string& name,
93 const std::string& state) noexcept;
94
98 void SetError(const std::string& desc, bool state = true);
99
103 void ResetError();
104
108 void SetStatus(const std::string& status);
109
113 std::string GetStatus();
114
118 void LoadStaticConfig();
119
123 void LoadDynamicConfig();
124
125 log4cplus::Logger& m_logger;
126
127 // component identity
128 const std::string m_name;
129
130 // access to services
135
138
139 // Object Config constructed from list of deployed objects.
140 std::vector<std::unique_ptr<RtcObjectIf>> m_objects;
142
143 // DataPointPaths for confiugration datapoints
148
149 // DataPointPaths for monitoring datapoints
153
154 // Local state variables
159
160 // mutex to control access on m_status, m_error and m_who_in_error from different threads
161 std::mutex m_status_mutex;
162
163 // currently evaluated global status
164 std::string m_status;
165 std::optional<bool> m_error;
166 std::string m_who_in_error;
167
168 // stores deferred modes that may be set via command before initialising
169 std::map<std::string, std::string> m_deferred_modes;
170
171 // these access class variables, therefore they must be destroyed first, otherwise coredump!!
172
173 // used for system status estimation
175
176 // used for periodic component monitoring
177 std::unique_ptr<RtcMonitor> m_monitor_thread;
178
179 // used to get state-changed notifications from all components
181};
182
183} // namespace rtctk::rtcSupervisor
184
185#endif // RTCTK_RTCSUPERVISOR_RTCSUPERVISOR_HPP
This class provides a wrapper for a data point path.
Definition: dataPointPath.hpp:73
Base interface for all OLDB adapters.
Definition: oldbIf.hpp:26
Base interface for all Persistent Configuration Repository adapters.
Definition: persistentRepoIf.hpp:25
A utility class used to populate the Runtime Configuration Repository.
Definition: populateConfig.hpp:47
Base interface for all Runtime Configuration Repository adapters.
Definition: runtimeRepoIf.hpp:28
Container class that holds services of any type.
Definition: serviceContainer.hpp:39
Class that implements a very basic service discovery mechanism.
Definition: serviceDiscovery.hpp:33
Class used to subscribe to state-changed-topic using MAL.
Definition: stateSubscriber.hpp:40
Definition: rtcMonitor.hpp:27
Class used to control multiple RtcObjects.
Definition: rtcObjectController.hpp:44
Interface class for RtcObject.
Definition: rtcObject.hpp:69
Definition: rtcSupervisor.hpp:41
void LoadStaticConfig()
Retrievs static configuration from the Runtime Configuration Repository.
Definition: rtcSupervisor.cpp:535
void ActivityEnabling(StopToken st) override
Definition: rtcSupervisor.cpp:220
bool GuardUpdatingAllowed(JsonPayload const &args) override
Definition: rtcSupervisor.cpp:291
JsonPayload ActionGetDeferredModes() override
Action is used for mode inspection and executed in the state machine thread.
Definition: rtcSupervisor.cpp:326
void ActivityDisabling(StopToken st) override
Definition: rtcSupervisor.cpp:238
void ResetError()
Resets and publishes error flag and error info.
Definition: rtcSupervisor.cpp:500
void ActivityUpdating(StopToken st, JsonPayload const &args) override
Definition: rtcSupervisor.cpp:268
PersistentRepoIf & m_psr
Definition: rtcSupervisor.hpp:131
std::mutex m_status_mutex
Definition: rtcSupervisor.hpp:161
DataPointPath m_dp_path_init_alone
Definition: rtcSupervisor.hpp:144
RuntimeRepoIf & m_rtr
Definition: rtcSupervisor.hpp:132
DataPointPath m_dp_path_enable_alone
Definition: rtcSupervisor.hpp:145
bool GuardWritingBackAllowed(JsonPayload const &args) override
Determines if writeback is possible at this time with the provided argument.
Definition: rtcSupervisor.cpp:377
StatusPublisher m_status_publisher
Definition: rtcSupervisor.hpp:136
bool m_update_alone
Definition: rtcSupervisor.hpp:158
std::vector< std::unique_ptr< RtcObjectIf > > MakeRtcObjects()
Constructs RtcObjects, called during Initialisation.
Definition: rtcSupervisor.cpp:387
DataPointPath m_dp_path_disable_alone
Definition: rtcSupervisor.hpp:146
bool GuardSettingModesAllowed(JsonPayload const &args) override
Determines if set mode is possible at this time with the provided argument.
Definition: rtcSupervisor.cpp:362
bool m_init_alone
Definition: rtcSupervisor.hpp:155
void SetStatus(const std::string &status)
Sets and publishes overall system status.
Definition: rtcSupervisor.cpp:504
bool m_enable_alone
Definition: rtcSupervisor.hpp:156
const std::string m_name
Definition: rtcSupervisor.hpp:128
void SetError(const std::string &desc, bool state=true)
Sets and publishes error flag and error info.
Definition: rtcSupervisor.cpp:462
std::vector< std::unique_ptr< RtcObjectIf > > m_objects
Definition: rtcSupervisor.hpp:140
log4cplus::Logger & m_logger
Definition: rtcSupervisor.hpp:125
JsonPayload ActionGetAvailableModes() override
Action is used for mode inspection and executed in the state machine thread.
Definition: rtcSupervisor.cpp:313
std::string m_status
Definition: rtcSupervisor.hpp:164
void ActivityInitialising(StopToken st) override
Definition: rtcSupervisor.cpp:110
std::string GetStatus()
Returns the overall system status.
Definition: rtcSupervisor.cpp:526
void ActivityWritingBack(StopToken st, JsonPayload const &args) override
Activity executed in its own thread that performs the writeback.
Definition: rtcSupervisor.cpp:372
void MonitorCycle() noexcept
Performs one cycle of async monitoring of the components.
Definition: rtcSupervisor.cpp:434
std::unique_ptr< RtcObjectController > m_object_controller
Definition: rtcSupervisor.hpp:141
void ActivityStarting(StopToken st) override
Definition: rtcSupervisor.cpp:77
bool m_disable_alone
Definition: rtcSupervisor.hpp:157
std::string m_who_in_error
Definition: rtcSupervisor.hpp:166
JsonPayload ActionGetActiveModes() override
Action is used for mode inspection and executed in the state machine thread.
Definition: rtcSupervisor.cpp:322
OldbIf & m_oldb
Definition: rtcSupervisor.hpp:133
std::string ActionGetStatus() override
Action is used for system status inspection and is executed in the state machine thread.
Definition: rtcSupervisor.cpp:260
DataPointPath m_dp_path_error_who
Definition: rtcSupervisor.hpp:152
DataPointPath m_dp_path_update_alone
Definition: rtcSupervisor.hpp:147
std::unique_ptr< RtcMonitor > m_monitor_thread
Definition: rtcSupervisor.hpp:177
ServiceDiscovery & m_service_discovery
Definition: rtcSupervisor.hpp:134
void ActivitySettingModes(StopToken st, JsonPayload const &args) override
Activity executed in its own thread that performs the mode setting.
Definition: rtcSupervisor.cpp:338
void ActionSetDeferredModes(JsonPayload const &args) override
Action is executed in the state machine thread and it performs deferred mode setting.
Definition: rtcSupervisor.cpp:330
DataPointPath m_dp_path_error
Definition: rtcSupervisor.hpp:151
PopulateConfig m_popcfg
Definition: rtcSupervisor.hpp:137
std::unique_ptr< StatusEstimator > m_status_estimator
Definition: rtcSupervisor.hpp:174
void OnStateEventReceived(const double timestamp, const std::string &name, const std::string &state) noexcept
Called on State Event subscription.
Definition: rtcSupervisor.cpp:449
std::vector< elt::mal::Uri > GetPubSubUris()
Gets Pub/Sub URIs of superivsord compoonents.
Definition: rtcSupervisor.cpp:419
std::unique_ptr< StateSubscriber > m_state_subscriber
Definition: rtcSupervisor.hpp:180
std::map< std::string, std::string > m_deferred_modes
Definition: rtcSupervisor.hpp:169
virtual ~RtcSupervisor()
Definition: rtcSupervisor.cpp:65
DataPointPath m_dp_path_status
Definition: rtcSupervisor.hpp:150
std::optional< bool > m_error
Definition: rtcSupervisor.hpp:165
void LoadDynamicConfig()
Retrievs static configuration from the Runtime Configuration Repository.
Definition: rtcSupervisor.cpp:544
Class for system status estimation.
Definition: statusEstimator.hpp:74
Class used to publish status-changed-topic using MAL.
Definition: statusPublisher.hpp:36
Business logic interface for Supervisory mixin.
Definition: supervisory.hpp:220
Definition: commandReplier.cpp:22
nlohmann::json JsonPayload
Type requirements:
Definition: jsonPayload.hpp:25
rad::StopToken StopToken
Definition: stopToken.hpp:20
Definition: rtcSupervisor.cpp:21
Supervisory< RtcComponent > Super
Definition: rtcSupervisor.hpp:39
Header file for OldbIf, which defines the API for OldbAdapters.
Header file for PersistentRepoIf, which defines the API for PersistentRepoAdapter.
Header file for PopulateConfig used for populating the Runtime Configuration Repository.
Holds monitor thread for async ping of supervised objects.
Handles communication with many supervised RtcComponents.
Lifecycle Extension that makes an RTC Component 'Runnable'.
Header file for RuntimeRepoIf, which defines the API for RuntimeRepoAdapters.
A container that can hold any type of service.
Class that implements a very basic service discover mechanism.
Subscribes to stdif state topic via MAL.
System status estimation.
Publishes the stdif status topic via MAL.
Life cycle extension to make RtcComponent Supervisory.
Definition: supervisory.hpp:213
Lifecycle Extension that makes an RTC Component 'Supervisory'.