ifw-sup 4.0.0
Loading...
Searching...
No Matches
subsys.hpp
Go to the documentation of this file.
1
9#ifndef SUP_SYSSUP_COMMON_SUBSYS_HPP
10#define SUP_SYSSUP_COMMON_SUBSYS_HPP
11
12#include <boost/signals2.hpp>
13#include <boost/bimap.hpp>
14#include <boost/assign.hpp>
15
19#include <utils/bat/logger.hpp>
20
21
22#include <mal/utility/LoadMal.hpp>
23#include <mal/rr/qos/ReplyTime.hpp>
24
25
26namespace sup::syssup::common {
27
28
29 constexpr auto KEY_STATUS_SUBSYS_CONNECTION = "connection_status";
30
31
32
41 struct SubsysData {
42 public:
43
44 enum class ConnectionEnum : short { CONNECTED = 10,
45 NOT_CONNECTED = 11
46 };
47
48 const std::map<ConnectionEnum, std::string> ConnectionMap {
49 { ConnectionEnum::CONNECTED, "Connected" },
50 { ConnectionEnum::NOT_CONNECTED, "ERROR - Not Connected" }
51 };
52
57 inline State::StateEnum GetState() const;
58
63 inline void SetState(const std::string state);
64
70
75 inline void SetSubstate(const std::string subtate);
76
81 inline void SetConnection(const SubsysData::ConnectionEnum connection);
82
88
93 inline std::string GetConnectionStr() const;
94
95
96 private:
98 State::StateEnum m_state;
99 State::SubstateEnum m_substate;
100
101 };
102
106 template <typename INTERFACE>
108 public:
117 Dispatcher(const elt::mal::Uri& uri,
118 const int timeout = 5000,
119 const std::optional<elt::mal::Mal::Properties> mal_properties = {})
120 : m_client(), m_uri(uri), m_timeout(timeout) {
121 try {
122 m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
123 uri,
124 {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::milliseconds(m_timeout))},
125 mal_properties ? *mal_properties : elt::mal::Mal::Properties());
126 } catch (std::exception& e) {
127 LOG4CPLUS_ERROR(utils::bat::GetAppLogger(), "Problems creating MAL client "
128 << " error: " << e.what());
129 m_client = nullptr;
130 }
131
132 }
133
134 void Update(const elt::mal::Uri& uri,
135 const int timeout = 5000,
136 const std::optional<elt::mal::Mal::Properties> mal_properties = {}) {
137 try {
138 m_timeout = timeout;
139 m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
140 uri,
141 {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::milliseconds(m_timeout))},
142 mal_properties ? *mal_properties : elt::mal::Mal::Properties());
143 } catch (std::exception& e) {
144 LOG4CPLUS_ERROR(utils::bat::GetAppLogger(), "Problems creating MAL client "
145 << " error: " << e.what());
146 m_client = nullptr;
147 }
148
149 }
156 std::shared_ptr<INTERFACE>& GetInterface() {
157
158 return m_client;
159 }
160
161 Dispatcher(const Dispatcher&) = delete;
162 Dispatcher& operator=(const Dispatcher&) = delete;
163
164 private:
165 std::shared_ptr<INTERFACE> m_client; // Share pointer to MAL Client
166 elt::mal::Uri m_uri;
167 int m_timeout;
168 };
169
170
171 class Config;
172 class DataContext;
179 struct Subsys : Factory<Subsys, const std::string, Config&, DataContext&>,
180 public ISubsys {
181 public:
182
183 using UpdateHandler = boost::signals2::signal<void()>;
184
188 Subsys(Key);
189
190
194 virtual ~Subsys();
195
201 virtual bool IsNotReady() const ;
207 virtual bool IsReady() const ;
208
214 virtual bool IsOperational() const ;
215
221 virtual void CheckSubsysFailure() const ;
222
228 virtual bool IsDisabling() const ;
229
230
231
239 virtual void Ignore(rad::AnyEvent const& last_event) ;
240
248 virtual void StopIgn(rad::AnyEvent const& last_event) ;
249
257 virtual void SubsysReset(rad::AnyEvent const& last_event) ;
258
266 virtual void SubsysInit(rad::AnyEvent const& last_event) ;
267
275 virtual void SubsysEnable(rad::AnyEvent const& last_event) ;
276
284 virtual void SubsysDisable(rad::AnyEvent const& last_event) ;
285
290 void Subscribe(UpdateHandler::slot_type handler);
291
298 void SetDataState(const std::string state);
299
304 std::string GetDataStateStr() const;
305
311
318 void SetDataSubstate(const std::string subtate);
319
324 std::string GetDataSubstateStr() const;
325
331
332
337 void SetDataConnection(const SubsysData::ConnectionEnum connection);
338
343 std::string GetDataConnectionStr() const;
344
350
351
352 protected:
353
354
355
361 void UpdateDb(std::vector<std::string> attr_vector);
362
367 void SetIgnore(bool flag);
368
369
370
376 void GetPrefix(const std::vector<std::string> prefix_list, std::string& prefix);
377
378
379 protected:
381
382 private:
383
384 SubsysData m_status;
385 log4cplus::Logger m_logger;
386
387 };
388
389}
390
391#include "subsys.ipp"
392
393#endif //SUP_SYSSUP_COMMON_SUBSYS_HPP
Definition: config.hpp:162
Definition: dataContext.hpp:69
Definition: subsys.hpp:107
Dispatcher(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition: subsys.hpp:117
Dispatcher(const Dispatcher &)=delete
std::shared_ptr< INTERFACE > & GetInterface()
Definition: subsys.hpp:156
void Update(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition: subsys.hpp:134
Dispatcher & operator=(const Dispatcher &)=delete
Definition: subsysFactory.hpp:34
Definition: iSubsys.hpp:32
Subsys interface class header file.
Definition: actionMgr.cpp:31
constexpr auto KEY_STATUS_SUBSYS_CONNECTION
Definition: subsys.hpp:29
State header file.
StateEnum
Definition: states.hpp:56
SubstateEnum
Definition: states.hpp:62
The SubsysData struct.
Definition: subsys.hpp:41
std::string GetConnectionStr() const
GetConnectionStr.
ConnectionEnum GetConnection() const
GetConnection.
State::StateEnum GetState() const
GetState.
ConnectionEnum
Definition: subsys.hpp:44
void SetState(const std::string state)
SetState.
void SetConnection(const SubsysData::ConnectionEnum connection)
SetConnection.
void SetSubstate(const std::string subtate)
SetSubstate.
const std::map< ConnectionEnum, std::string > ConnectionMap
Definition: subsys.hpp:48
State::SubstateEnum GetSubstate() const
GetSubstate.
Definition: subsys.hpp:180
virtual bool IsDisabling() const
Check if subsys is disablig.
Definition: subsys.cpp:137
virtual void SubsysDisable(rad::AnyEvent const &last_event)
Executes a hardware disable command.
Definition: subsys.cpp:107
void Subscribe(UpdateHandler::slot_type handler)
Implements a notification for updates in the subsystem status.
Definition: subsys.cpp:208
SubsysData::ConnectionEnum GetDataConnection() const
Get actual connection as enumeration.
Definition: subsys.cpp:203
std::string GetDataSubstateStr() const
Get actual subtate as string.
Definition: subsys.cpp:178
virtual bool IsNotReady() const
Check if subsys is Standby/NotReady.
Definition: subsys.cpp:113
State::SubstateEnum GetDataSubstate() const
Get actual subtate as a enumeration.
Definition: subsys.cpp:174
virtual void StopIgn(rad::AnyEvent const &last_event)
Executes a StopIgn.
Definition: subsys.cpp:79
virtual void CheckSubsysFailure() const
Check if subsys is in failure state.
Definition: subsys.cpp:131
void SetIgnore(bool flag)
SetIgnore.
Definition: subsys.cpp:150
void SetDataConnection(const SubsysData::ConnectionEnum connection)
Set actual connection state.
Definition: subsys.cpp:198
virtual void SubsysInit(rad::AnyEvent const &last_event)
Executes a hardware init command.
Definition: subsys.cpp:93
virtual void SubsysReset(rad::AnyEvent const &last_event)
Executes a hardware reset command.
Definition: subsys.cpp:86
void UpdateDb(std::vector< std::string > attr_vector)
Update subsys database.
Definition: subsys.cpp:145
State::StateEnum GetDataState() const
Get actual state as a enumeration.
Definition: subsys.cpp:165
virtual ~Subsys()
Default destructor.
Definition: subsys.cpp:28
UpdateHandler m_signal
notification signal.
Definition: subsys.hpp:380
virtual void Ignore(rad::AnyEvent const &last_event)
Executes a Ignore.
Definition: subsys.cpp:72
void GetPrefix(const std::vector< std::string > prefix_list, std::string &prefix)
Get prefix for writing attributes to the DB.
Definition: subsys.cpp:158
boost::signals2::signal< void()> UpdateHandler
Definition: subsys.hpp:183
std::string GetDataConnectionStr() const
Get actual connection as string.
Definition: subsys.cpp:183
virtual bool IsReady() const
Check if subsys is Standby/Ready.
Definition: subsys.cpp:119
virtual void SubsysEnable(rad::AnyEvent const &last_event)
Executes a hardware enable command.
Definition: subsys.cpp:100
void SetDataState(const std::string state)
Set actual subsystem state.
Definition: subsys.cpp:188
std::string GetDataStateStr() const
Get actual state as string.
Definition: subsys.cpp:168
void SetDataSubstate(const std::string subtate)
Set actual subsystem substate.
Definition: subsys.cpp:193
virtual bool IsOperational() const
Check if subsys is Operational.
Definition: subsys.cpp:125
SubsysFactory class header file.