ifw-sup 5.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 <ifw/core/utils/bat/logger.hpp>
20
21
22#include <mal/utility/LoadMal.hpp>
23#include <mal/rr/qos/ReplyTime.hpp>
24
25
27
28 constexpr auto KEY_STATUS_SUBSYS_CONNECTION = "connection_status";
29
30
39 struct SubsysData {
40 public:
41
42 enum class ConnectionEnum : short { CONNECTED = 10,
43 NOT_CONNECTED = 11
44 };
45
46 const std::map<ConnectionEnum, std::string> ConnectionMap {
47 { ConnectionEnum::CONNECTED, "Connected" },
48 { ConnectionEnum::NOT_CONNECTED, "ERROR - Not Connected" }
49 };
50
55 inline State::StateEnum GetState() const;
56
61 inline void SetState(const std::string state);
62
68
73 inline void SetSubstate(const std::string subtate);
74
79 inline void SetConnection(const SubsysData::ConnectionEnum connection);
80
86
91 inline std::string GetConnectionStr() const;
92
93
94 private:
96 State::StateEnum m_state;
97 State::SubstateEnum m_substate;
98
99 };
100
104 template <typename INTERFACE>
106 public:
115 Dispatcher(const elt::mal::Uri& uri,
116 const int timeout = 5000,
117 const std::optional<elt::mal::Mal::Properties> mal_properties = {})
118 : m_client(), m_uri(uri), m_timeout(timeout) {
119 try {
120 m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
121 uri,
122 {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::milliseconds(m_timeout))},
123 mal_properties ? *mal_properties : elt::mal::Mal::Properties());
124 } catch (std::exception& e) {
125 LOG4CPLUS_ERROR(ifw::core::utils::bat::GetAppLogger(), "Problems creating MAL client "
126 << " error: " << e.what());
127 m_client = nullptr;
128 }
129
130 }
131
132 void Update(const elt::mal::Uri& uri,
133 const int timeout = 5000,
134 const std::optional<elt::mal::Mal::Properties> mal_properties = {}) {
135 try {
136 m_timeout = timeout;
137 m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
138 uri,
139 {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::milliseconds(m_timeout))},
140 mal_properties ? *mal_properties : elt::mal::Mal::Properties());
141 } catch (std::exception& e) {
142 LOG4CPLUS_ERROR(ifw::core::utils::bat::GetAppLogger(), "Problems creating MAL client "
143 << " error: " << e.what());
144 m_client = nullptr;
145 }
146
147 }
154 std::shared_ptr<INTERFACE>& GetInterface() {
155
156 return m_client;
157 }
158
159 Dispatcher(const Dispatcher&) = delete;
160 Dispatcher& operator=(const Dispatcher&) = delete;
161
162 private:
163 std::shared_ptr<INTERFACE> m_client; // Share pointer to MAL Client
164 elt::mal::Uri m_uri;
165 int m_timeout;
166 };
167
168
169 class Config;
170 class DataContext;
177 struct Subsys : Factory<Subsys, const std::string, Config&, DataContext&>,
178 public ISubsys {
179 public:
180
181 using UpdateHandler = boost::signals2::signal<void()>;
182
186 Subsys(Key);
187
188
192 virtual ~Subsys();
193
199 virtual bool IsNotReady() const ;
205 virtual bool IsReady() const ;
206
212 virtual bool IsOperational() const ;
213
219 virtual void CheckSubsysFailure() const ;
220
226 virtual bool IsDisabling() const ;
227
228
229
237 virtual void Ignore(rad::AnyEvent const& last_event) ;
238
246 virtual void StopIgn(rad::AnyEvent const& last_event) ;
247
255 virtual void SubsysReset(rad::AnyEvent const& last_event) ;
256
264 virtual void SubsysInit(rad::AnyEvent const& last_event) ;
265
273 virtual void SubsysEnable(rad::AnyEvent const& last_event) ;
274
282 virtual void SubsysDisable(rad::AnyEvent const& last_event) ;
283
288 void Subscribe(UpdateHandler::slot_type handler);
289
296 void SetDataState(const std::string state);
297
302 std::string GetDataStateStr() const;
303
309
316 void SetDataSubstate(const std::string subtate);
317
322 std::string GetDataSubstateStr() const;
323
329
330
335 void SetDataConnection(const SubsysData::ConnectionEnum connection);
336
341 std::string GetDataConnectionStr() const;
342
348
349
350 protected:
351
352
353
359 void UpdateDb(std::vector<std::string> attr_vector);
360
365 void SetIgnore(bool flag);
366
367
368
374 void GetPrefix(const std::vector<std::string> prefix_list, std::string& prefix);
375
376
377 protected:
379
380 private:
381
382 SubsysData m_status;
383 log4cplus::Logger m_logger;
384
385 };
386
387}
388
389#include "subsys.ipp"
390
391#endif //SUP_SYSSUP_COMMON_SUBSYS_HPP
Definition config.hpp:162
Definition dataContext.hpp:67
Definition subsys.hpp:105
Dispatcher(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition subsys.hpp:115
Dispatcher & operator=(const Dispatcher &)=delete
Dispatcher(const Dispatcher &)=delete
std::shared_ptr< INTERFACE > & GetInterface()
Definition subsys.hpp:154
void Update(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition subsys.hpp:132
Definition subsysFactory.hpp:34
Definition iSubsys.hpp:28
Subsys interface class header file.
ActionsInit class source file.
Definition actionMgr.cpp:32
constexpr auto KEY_STATUS_SUBSYS_CONNECTION
Definition subsys.hpp:28
State header file.
StateEnum
Definition states.hpp:58
SubstateEnum
Definition states.hpp:64
The SubsysData struct.
Definition subsys.hpp:39
State::SubstateEnum GetSubstate() const
GetSubstate.
void SetState(const std::string state)
SetState.
ConnectionEnum
Definition subsys.hpp:42
std::string GetConnectionStr() const
GetConnectionStr.
void SetConnection(const SubsysData::ConnectionEnum connection)
SetConnection.
const std::map< ConnectionEnum, std::string > ConnectionMap
Definition subsys.hpp:46
void SetSubstate(const std::string subtate)
SetSubstate.
State::StateEnum GetState() const
GetState.
ConnectionEnum GetConnection() const
GetConnection.
Definition subsys.hpp:178
virtual void SubsysEnable(rad::AnyEvent const &last_event)
Executes a hardware enable command.
Definition subsys.cpp:81
void SetIgnore(bool flag)
SetIgnore.
Definition subsys.cpp:116
std::string GetDataSubstateStr() const
Get actual subtate as string.
Definition subsys.cpp:136
virtual bool IsOperational() const
Check if subsys is Operational.
Definition subsys.cpp:99
State::StateEnum GetDataState() const
Get actual state as a enumeration.
Definition subsys.cpp:124
std::string GetDataConnectionStr() const
Get actual connection as string.
Definition subsys.cpp:140
virtual ~Subsys()
Default destructor.
Definition subsys.cpp:23
boost::signals2::signal< void()> UpdateHandler
Definition subsys.hpp:181
virtual void SubsysDisable(rad::AnyEvent const &last_event)
Executes a hardware disable command.
Definition subsys.cpp:85
virtual bool IsNotReady() const
Check if subsys is Standby/NotReady.
Definition subsys.cpp:89
virtual void Ignore(rad::AnyEvent const &last_event)
Executes a Ignore.
Definition subsys.cpp:65
void SetDataState(const std::string state)
Set actual subsystem state.
Definition subsys.cpp:144
virtual void StopIgn(rad::AnyEvent const &last_event)
Executes a StopIgn.
Definition subsys.cpp:69
virtual bool IsReady() const
Check if subsys is Standby/Ready.
Definition subsys.cpp:94
void Subscribe(UpdateHandler::slot_type handler)
Implements a notification for updates in the subsystem status.
Definition subsys.cpp:160
void UpdateDb(std::vector< std::string > attr_vector)
Update subsys database.
Definition subsys.cpp:113
State::SubstateEnum GetDataSubstate() const
Get actual subtate as a enumeration.
Definition subsys.cpp:132
UpdateHandler m_signal
notification signal.
Definition subsys.hpp:378
std::string GetDataStateStr() const
Get actual state as string.
Definition subsys.cpp:128
Subsys(Key)
Subsys abstract class constructor.
Definition subsys.cpp:20
SubsysData::ConnectionEnum GetDataConnection() const
Get actual connection as enumeration.
Definition subsys.cpp:156
virtual void CheckSubsysFailure() const
Check if subsys is in failure state.
Definition subsys.cpp:104
void GetPrefix(const std::vector< std::string > prefix_list, std::string &prefix)
Get prefix for writing attributes to the DB.
Definition subsys.cpp:120
void SetDataConnection(const SubsysData::ConnectionEnum connection)
Set actual connection state.
Definition subsys.cpp:152
virtual void SubsysReset(rad::AnyEvent const &last_event)
Executes a hardware reset command.
Definition subsys.cpp:73
void SetDataSubstate(const std::string subtate)
Set actual subsystem substate.
Definition subsys.cpp:148
virtual bool IsDisabling() const
Check if subsys is disablig.
Definition subsys.cpp:108
virtual void SubsysInit(rad::AnyEvent const &last_event)
Executes a hardware init command.
Definition subsys.cpp:77
SubsysFactory class header file.