ifw-sup  1.0.0
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 
20 #include <mal/utility/LoadMal.hpp>
21 #include <mal/rr/qos/ReplyTime.hpp>
22 
23 
24 namespace sup::syssup::common {
25 
26 
27  constexpr auto KEY_STATUS_SUBSYS_CONNECTION = "connection_status";
28 
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 
85  inline ConnectionEnum GetConnection() const;
86 
91  inline std::string GetConnectionStr() const;
92 
93 
94  protected:
98 
99  };
100 
104  template <typename INTERFACE>
105  class Dispatcher {
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/1000) {
119  try {
120  m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
121  uri,
122  {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::seconds(m_timeout))},
123  mal_properties ? *mal_properties : elt::mal::Mal::Properties());
124  } catch (std::exception& e) {
125  RAD_LOG_ERROR() << "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/1000;
137  m_client = elt::mal::CiiFactory::getInstance().getClient<INTERFACE>(
138  uri,
139  {std::make_shared<elt::mal::rr::qos::ReplyTime>(std::chrono::seconds(m_timeout))},
140  mal_properties ? *mal_properties : elt::mal::Mal::Properties());
141  } catch (std::exception& e) {
142  RAD_LOG_ERROR() << "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:
378 
381 
382 
383  };
384 
385 }
386 
387 #include "subsys.ipp"
388 
389 #endif //SUP_SYSSUP_COMMON_SUBSYS_HPP
sup::syssup::common::Subsys::CheckSubsysFailure
virtual void CheckSubsysFailure() const
Check if subsys is in failure state.
Definition: subsys.cpp:136
sup::syssup::common::Subsys::Subscribe
void Subscribe(UpdateHandler::slot_type handler)
Implements a notification for updates in the subsystem status.
Definition: subsys.cpp:213
sup::syssup::common::Subsys::SubsysEnable
virtual void SubsysEnable(rad::AnyEvent const &last_event)
Executes a hardware enable command.
Definition: subsys.cpp:105
sup::syssup::common::Subsys::GetPrefix
void GetPrefix(const std::vector< std::string > prefix_list, std::string &prefix)
Get prefix for writing attributes to the DB.
Definition: subsys.cpp:163
sup::syssup::common::Dispatcher::Dispatcher
Dispatcher(const Dispatcher &)=delete
sup::syssup::common::DataContext
Definition: dataContext.hpp:34
sup::syssup::common::Subsys::SubsysInit
virtual void SubsysInit(rad::AnyEvent const &last_event)
Executes a hardware init command.
Definition: subsys.cpp:98
states.hpp
State header file.
sup::syssup::common::Config
Definition: config.hpp:137
sup::syssup::common::Subsys::UpdateHandler
boost::signals2::signal< void()> UpdateHandler
Definition: subsys.hpp:181
sup::syssup::common::Factory
Definition: subsysFactory.hpp:34
subsysFactory.hpp
SubsysFactory class header file.
sup::syssup::common::SubsysData::GetConnectionStr
std::string GetConnectionStr() const
GetConnectionStr.
sup::syssup::common::SubsysData
The SubsysData struct.
Definition: subsys.hpp:39
sup::syssup::common::SubsysData::SetSubstate
void SetSubstate(const std::string subtate)
SetSubstate.
iSubsys.hpp
Subsys interface class header file.
sup::syssup::common::Subsys::SubsysReset
virtual void SubsysReset(rad::AnyEvent const &last_event)
Executes a hardware reset command.
Definition: subsys.cpp:91
sup::syssup::common::Subsys::~Subsys
virtual ~Subsys()
Default destructor.
Definition: subsys.cpp:33
sup::syssup::common::SubsysData::m_connection
ConnectionEnum m_connection
connection status
Definition: subsys.hpp:95
sup::syssup::common
Definition: actionMgr.cpp:33
sup::syssup::common::Subsys::IsReady
virtual bool IsReady() const
Check if subsys is Standby/Ready.
Definition: subsys.cpp:124
sup::syssup::common::SubsysData::GetConnection
ConnectionEnum GetConnection() const
GetConnection.
sup::syssup::common::Subsys::GetDataConnectionStr
std::string GetDataConnectionStr() const
Get actual connection as string.
Definition: subsys.cpp:188
sup::syssup::common::SubsysData::ConnectionMap
const std::map< ConnectionEnum, std::string > ConnectionMap
Definition: subsys.hpp:46
sup::syssup::common::SubsysData::ConnectionEnum::CONNECTED
@ CONNECTED
sup::syssup::common::Subsys::SetIgnore
void SetIgnore(bool flag)
SetIgnore.
Definition: subsys.cpp:155
sup::syssup::common::Dispatcher::Dispatcher
Dispatcher(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition: subsys.hpp:115
sup::syssup::common::Dispatcher::Update
void Update(const elt::mal::Uri &uri, const int timeout=5000, const std::optional< elt::mal::Mal::Properties > mal_properties={})
Definition: subsys.hpp:132
sup::syssup::common::Subsys::GetDataConnection
SubsysData::ConnectionEnum GetDataConnection() const
Get actual connection as enumeration.
Definition: subsys.cpp:208
sup::syssup::common::SubsysData::m_state
State::StateEnum m_state
actual state
Definition: subsys.hpp:96
sup::syssup::common::Subsys::GetDataSubstate
State::SubstateEnum GetDataSubstate() const
Get actual subtate as a enumeration.
Definition: subsys.cpp:179
sup::syssup::common::Subsys::SetDataState
void SetDataState(const std::string state)
Set actual subsystem state.
Definition: subsys.cpp:193
sup::syssup::common::ISubsys
Definition: iSubsys.hpp:32
sup::syssup::common::Subsys::m_signal
UpdateHandler m_signal
notification signal.
Definition: subsys.hpp:380
sup::syssup::common::Subsys::m_status
SubsysData m_status
object storing actual subsystem data.
Definition: subsys.hpp:379
sup::syssup::common::Dispatcher
Definition: subsys.hpp:105
sup::syssup::common::Subsys::Subsys
Subsys(Key)
Subsys abstract class constructor.
Definition: subsys.cpp:28
sup::syssup::common::Subsys::UpdateDb
void UpdateDb(std::vector< std::string > attr_vector)
Update subsys database.
Definition: subsys.cpp:150
sup::syssup::common::Subsys::SetDataSubstate
void SetDataSubstate(const std::string subtate)
Set actual subsystem substate.
Definition: subsys.cpp:198
sup::syssup::common::Subsys::GetDataStateStr
std::string GetDataStateStr() const
Get actual state as string.
Definition: subsys.cpp:173
sup::syssup::common::Dispatcher::GetInterface
std::shared_ptr< INTERFACE > & GetInterface()
Definition: subsys.hpp:154
sup::syssup::common::Subsys::IsOperational
virtual bool IsOperational() const
Check if subsys is Operational.
Definition: subsys.cpp:130
sup::syssup::common::SubsysData::ConnectionEnum::NOT_CONNECTED
@ NOT_CONNECTED
sup::syssup::common::SubsysData::SetState
void SetState(const std::string state)
SetState.
sup::syssup::common::SubsysData::ConnectionEnum
ConnectionEnum
Definition: subsys.hpp:42
sup::syssup::common::State::StateEnum
StateEnum
Definition: states.hpp:55
sup::syssup::common::Subsys::SubsysDisable
virtual void SubsysDisable(rad::AnyEvent const &last_event)
Executes a hardware disable command.
Definition: subsys.cpp:112
sup::syssup::common::Subsys::IsDisabling
virtual bool IsDisabling() const
Check if subsys is disablig.
Definition: subsys.cpp:142
sup::syssup::common::Subsys::StopIgn
virtual void StopIgn(rad::AnyEvent const &last_event)
Executes a StopIgn.
Definition: subsys.cpp:84
sup::syssup::common::Subsys::Ignore
virtual void Ignore(rad::AnyEvent const &last_event)
Executes a Ignore.
Definition: subsys.cpp:77
sup::syssup::common::Dispatcher::operator=
Dispatcher & operator=(const Dispatcher &)=delete
sup::syssup::common::Subsys::GetDataState
State::StateEnum GetDataState() const
Get actual state as a enumeration.
Definition: subsys.cpp:170
sup::syssup::common::SubsysData::m_substate
State::SubstateEnum m_substate
actual substate
Definition: subsys.hpp:97
sup::syssup::common::Subsys
Definition: subsys.hpp:178
sup::syssup::common::State::SubstateEnum
SubstateEnum
Definition: states.hpp:61
sup::syssup::common::KEY_STATUS_SUBSYS_CONNECTION
constexpr auto KEY_STATUS_SUBSYS_CONNECTION
Definition: subsys.hpp:27
sup::syssup::common::SubsysData::GetSubstate
State::SubstateEnum GetSubstate() const
GetSubstate.
sup::syssup::common::Subsys::IsNotReady
virtual bool IsNotReady() const
Check if subsys is Standby/NotReady.
Definition: subsys.cpp:118
sup::syssup::common::Subsys::SetDataConnection
void SetDataConnection(const SubsysData::ConnectionEnum connection)
Set actual connection state.
Definition: subsys.cpp:203
sup::syssup::common::SubsysData::GetState
State::StateEnum GetState() const
GetState.
sup::syssup::common::Subsys::GetDataSubstateStr
std::string GetDataSubstateStr() const
Get actual subtate as string.
Definition: subsys.cpp:183
sup::syssup::common::SubsysData::SetConnection
void SetConnection(const SubsysData::ConnectionEnum connection)
SetConnection.