ifw-sup 5.1.0
 
Loading...
Searching...
No Matches
subsys.hpp
Go to the documentation of this file.
1
7
8#ifndef SUP_SYSSUP_COMMON_SUBSYS_HPP
9#define SUP_SYSSUP_COMMON_SUBSYS_HPP
10
11#include <boost/signals2.hpp>
12#include <boost/bimap.hpp>
13#include <boost/assign.hpp>
14
18#include <ifw/core/utils/bat/logger.hpp>
19
20
21#include <mal/utility/LoadMal.hpp>
22#include <mal/rr/qos/ReplyTime.hpp>
23
24
26
27 constexpr auto KEY_STATUS_SUBSYS_CONNECTION = "connection_status";
28
29
38 struct SubsysData {
39 public:
40
41 enum class ConnectionEnum : short { CONNECTED = 10,
43 };
44
45 const std::map<ConnectionEnum, std::string> ConnectionMap {
46 { ConnectionEnum::CONNECTED, "Connected" },
47 { ConnectionEnum::NOT_CONNECTED, "ERROR - Not Connected" }
48 };
49
54 inline State::StateEnum GetState() const;
55
60 inline void SetState(const std::string state);
61
67
72 inline void SetSubstate(const std::string subtate);
73
78 inline void SetConnection(const SubsysData::ConnectionEnum connection);
79
85
90 inline std::string GetConnectionStr() const;
91
92
93 private:
95 State::StateEnum m_state;
96 State::SubstateEnum m_substate;
97
98 };
99
103 template <typename INTERFACE>
105 public:
114 Dispatcher(const elt::mal::Uri& uri,
115 const int timeout = 5000,
116 const std::optional<elt::mal::Mal::Properties> mal_properties = {})
117 : m_client(), m_uri(uri), m_timeout(timeout) {
118 try {
119 m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
120 uri,
121 {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::milliseconds(m_timeout))},
122 mal_properties ? *mal_properties : elt::mal::Mal::Properties());
123 } catch (std::exception& e) {
124 LOG4CPLUS_ERROR(ifw::core::utils::bat::GetAppLogger(), "Problems creating MAL client "
125 << " error: " << e.what());
126 m_client = nullptr;
127 }
128
129 }
130
131 void Update(const elt::mal::Uri& uri,
132 const int timeout = 5000,
133 const std::optional<elt::mal::Mal::Properties> mal_properties = {}) {
134 try {
135 m_timeout = timeout;
136 m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
137 uri,
138 {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::milliseconds(m_timeout))},
139 mal_properties ? *mal_properties : elt::mal::Mal::Properties());
140 } catch (std::exception& e) {
141 LOG4CPLUS_ERROR(ifw::core::utils::bat::GetAppLogger(), "Problems creating MAL client "
142 << " error: " << e.what());
143 m_client = nullptr;
144 }
145
146 }
147
153 std::shared_ptr<INTERFACE>& GetInterface() {
154
155 return m_client;
156 }
157
158 Dispatcher(const Dispatcher&) = delete;
159 Dispatcher& operator=(const Dispatcher&) = delete;
160
161 private:
162 std::shared_ptr<INTERFACE> m_client; // Share pointer to MAL Client
163 elt::mal::Uri m_uri;
164 int m_timeout;
165 };
166
167
168 class Config;
169 class DataContext;
176 struct Subsys : Factory<Subsys, const std::string, Config&, DataContext&>,
177 public ISubsys {
178 public:
179
180 using UpdateHandler = boost::signals2::signal<void()>;
181
185 Subsys(Key);
186
187
191 virtual ~Subsys();
192
198 virtual bool IsNotReady() const ;
204 virtual bool IsReady() const ;
205
211 virtual bool IsOperational() const ;
212
218 virtual void CheckSubsysFailure() const ;
219
225 virtual bool IsDisabling() const ;
226
227
228
236 virtual void Ignore(rad::AnyEvent const& last_event) ;
237
245 virtual void StopIgn(rad::AnyEvent const& last_event) ;
246
254 virtual void SubsysReset(rad::AnyEvent const& last_event) ;
255
263 virtual void SubsysInit(rad::AnyEvent const& last_event) ;
264
272 virtual void SubsysEnable(rad::AnyEvent const& last_event) ;
273
281 virtual void SubsysDisable(rad::AnyEvent const& last_event) ;
282
287 void Subscribe(UpdateHandler::slot_type handler);
288
295 void SetDataState(const std::string state);
296
301 std::string GetDataStateStr() const;
302
308
315 void SetDataSubstate(const std::string subtate);
316
321 std::string GetDataSubstateStr() const;
322
328
329
334 void SetDataConnection(const SubsysData::ConnectionEnum connection);
335
340 std::string GetDataConnectionStr() const;
341
347
348
349 protected:
350
351
352
358 void UpdateDb(std::vector<std::string> attr_vector);
359
364 void SetIgnore(bool flag);
365
366
367
373 void GetPrefix(const std::vector<std::string> prefix_list, std::string& prefix);
374
375
376 protected:
378
379 private:
380
381 SubsysData m_status;
382 log4cplus::Logger m_logger;
383
384 };
385
386}
387
388#include "subsys.ipp"
389
390#endif //SUP_SYSSUP_COMMON_SUBSYS_HPP
Definition config.hpp:162
Definition dataContext.hpp:66
Dispatcher(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition subsys.hpp:114
Dispatcher & operator=(const Dispatcher &)=delete
Dispatcher(const Dispatcher &)=delete
std::shared_ptr< INTERFACE > & GetInterface()
Definition subsys.hpp:153
void Update(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition subsys.hpp:131
Definition iSubsys.hpp:27
ActionMgr class source file.
Definition actionMgr.cpp:30
constexpr auto KEY_STATUS_SUBSYS_CONNECTION
Definition subsys.hpp:27
StateEnum
Definition states.hpp:61
SubstateEnum
Definition states.hpp:67
The SubsysData struct.
Definition subsys.hpp:38
State::SubstateEnum GetSubstate() const
GetSubstate.
void SetState(const std::string state)
SetState.
ConnectionEnum
Definition subsys.hpp:41
std::string GetConnectionStr() const
GetConnectionStr.
void SetConnection(const SubsysData::ConnectionEnum connection)
SetConnection.
const std::map< ConnectionEnum, std::string > ConnectionMap
Definition subsys.hpp:45
void SetSubstate(const std::string subtate)
SetSubstate.
State::StateEnum GetState() const
GetState.
ConnectionEnum GetConnection() const
GetConnection.
virtual void SubsysEnable(rad::AnyEvent const &last_event)
Executes a hardware enable command.
Definition subsys.cpp:80
void SetIgnore(bool flag)
SetIgnore.
Definition subsys.cpp:115
std::string GetDataSubstateStr() const
Get actual subtate as string.
Definition subsys.cpp:135
virtual bool IsOperational() const
Check if subsys is Operational.
Definition subsys.cpp:98
State::StateEnum GetDataState() const
Get actual state as a enumeration.
Definition subsys.cpp:123
std::string GetDataConnectionStr() const
Get actual connection as string.
Definition subsys.cpp:139
virtual ~Subsys()
Default destructor.
Definition subsys.cpp:22
boost::signals2::signal< void()> UpdateHandler
Definition subsys.hpp:180
virtual void SubsysDisable(rad::AnyEvent const &last_event)
Executes a hardware disable command.
Definition subsys.cpp:84
virtual bool IsNotReady() const
Check if subsys is Standby/NotReady.
Definition subsys.cpp:88
virtual void Ignore(rad::AnyEvent const &last_event)
Executes a Ignore.
Definition subsys.cpp:64
void SetDataState(const std::string state)
Set actual subsystem state.
Definition subsys.cpp:143
virtual void StopIgn(rad::AnyEvent const &last_event)
Executes a StopIgn.
Definition subsys.cpp:68
virtual bool IsReady() const
Check if subsys is Standby/Ready.
Definition subsys.cpp:93
void Subscribe(UpdateHandler::slot_type handler)
Implements a notification for updates in the subsystem status.
Definition subsys.cpp:159
void UpdateDb(std::vector< std::string > attr_vector)
Update subsys database.
Definition subsys.cpp:112
State::SubstateEnum GetDataSubstate() const
Get actual subtate as a enumeration.
Definition subsys.cpp:131
UpdateHandler m_signal
notification signal.
Definition subsys.hpp:377
std::string GetDataStateStr() const
Get actual state as string.
Definition subsys.cpp:127
Subsys(Key)
Subsys abstract class constructor.
Definition subsys.cpp:19
SubsysData::ConnectionEnum GetDataConnection() const
Get actual connection as enumeration.
Definition subsys.cpp:155
virtual void CheckSubsysFailure() const
Check if subsys is in failure state.
Definition subsys.cpp:103
void GetPrefix(const std::vector< std::string > prefix_list, std::string &prefix)
Get prefix for writing attributes to the DB.
Definition subsys.cpp:119
void SetDataConnection(const SubsysData::ConnectionEnum connection)
Set actual connection state.
Definition subsys.cpp:151
virtual void SubsysReset(rad::AnyEvent const &last_event)
Executes a hardware reset command.
Definition subsys.cpp:72
void SetDataSubstate(const std::string subtate)
Set actual subsystem substate.
Definition subsys.cpp:147
virtual bool IsDisabling() const
Check if subsys is disablig.
Definition subsys.cpp:107
virtual void SubsysInit(rad::AnyEvent const &last_event)
Executes a hardware init command.
Definition subsys.cpp:76