ifw-sup  2.1.0-pre1
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 
26 namespace 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 
87  inline ConnectionEnum GetConnection() const;
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>
107  class Dispatcher {
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
sup::syssup::common::Subsys::CheckSubsysFailure
virtual void CheckSubsysFailure() const
Check if subsys is in failure state.
Definition: subsys.cpp:131
sup::syssup::common::Subsys::Subscribe
void Subscribe(UpdateHandler::slot_type handler)
Implements a notification for updates in the subsystem status.
Definition: subsys.cpp:208
sup::syssup::common::Subsys::SubsysEnable
virtual void SubsysEnable(rad::AnyEvent const &last_event)
Executes a hardware enable command.
Definition: subsys.cpp:100
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:158
sup::syssup::common::Dispatcher::Dispatcher
Dispatcher(const Dispatcher &)=delete
sup::syssup::common::DataContext
Definition: dataContext.hpp:68
sup::syssup::common::Subsys::SubsysInit
virtual void SubsysInit(rad::AnyEvent const &last_event)
Executes a hardware init command.
Definition: subsys.cpp:93
states.hpp
State header file.
sup::syssup::common::Config
Definition: config.hpp:162
sup::syssup::common::Subsys::UpdateHandler
boost::signals2::signal< void()> UpdateHandler
Definition: subsys.hpp:183
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:41
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:86
sup::syssup::common::Subsys::~Subsys
virtual ~Subsys()
Default destructor.
Definition: subsys.cpp:28
sup::syssup::common
Definition: actionMgr.cpp:31
sup::syssup::common::Subsys::IsReady
virtual bool IsReady() const
Check if subsys is Standby/Ready.
Definition: subsys.cpp:119
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:183
sup::syssup::common::SubsysData::ConnectionMap
const std::map< ConnectionEnum, std::string > ConnectionMap
Definition: subsys.hpp:48
sup::syssup::common::SubsysData::ConnectionEnum::CONNECTED
@ CONNECTED
sup::syssup::common::Subsys::SetIgnore
void SetIgnore(bool flag)
SetIgnore.
Definition: subsys.cpp:150
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:117
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:134
sup::syssup::common::Subsys::GetDataConnection
SubsysData::ConnectionEnum GetDataConnection() const
Get actual connection as enumeration.
Definition: subsys.cpp:203
sup::syssup::common::Subsys::GetDataSubstate
State::SubstateEnum GetDataSubstate() const
Get actual subtate as a enumeration.
Definition: subsys.cpp:174
sup::syssup::common::Subsys::SetDataState
void SetDataState(const std::string state)
Set actual subsystem state.
Definition: subsys.cpp:188
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::Dispatcher
Definition: subsys.hpp:107
sup::syssup::common::Subsys::Subsys
Subsys(Key)
Subsys abstract class constructor.
Definition: subsys.cpp:23
sup::syssup::common::Subsys::UpdateDb
void UpdateDb(std::vector< std::string > attr_vector)
Update subsys database.
Definition: subsys.cpp:145
sup::syssup::common::Subsys::SetDataSubstate
void SetDataSubstate(const std::string subtate)
Set actual subsystem substate.
Definition: subsys.cpp:193
sup::syssup::common::Subsys::GetDataStateStr
std::string GetDataStateStr() const
Get actual state as string.
Definition: subsys.cpp:168
sup::syssup::common::Dispatcher::GetInterface
std::shared_ptr< INTERFACE > & GetInterface()
Definition: subsys.hpp:156
sup::syssup::common::Subsys::IsOperational
virtual bool IsOperational() const
Check if subsys is Operational.
Definition: subsys.cpp:125
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:44
sup::syssup::common::State::StateEnum
StateEnum
Definition: states.hpp:56
sup::syssup::common::Subsys::SubsysDisable
virtual void SubsysDisable(rad::AnyEvent const &last_event)
Executes a hardware disable command.
Definition: subsys.cpp:107
sup::syssup::common::Subsys::IsDisabling
virtual bool IsDisabling() const
Check if subsys is disablig.
Definition: subsys.cpp:137
sup::syssup::common::Subsys::StopIgn
virtual void StopIgn(rad::AnyEvent const &last_event)
Executes a StopIgn.
Definition: subsys.cpp:79
sup::syssup::common::Subsys::Ignore
virtual void Ignore(rad::AnyEvent const &last_event)
Executes a Ignore.
Definition: subsys.cpp:72
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:165
sup::syssup::common::Subsys
Definition: subsys.hpp:180
sup::syssup::common::State::SubstateEnum
SubstateEnum
Definition: states.hpp:62
sup::syssup::common::KEY_STATUS_SUBSYS_CONNECTION
constexpr auto KEY_STATUS_SUBSYS_CONNECTION
Definition: subsys.hpp:29
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:113
sup::syssup::common::Subsys::SetDataConnection
void SetDataConnection(const SubsysData::ConnectionEnum connection)
Set actual connection state.
Definition: subsys.cpp:198
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:178
sup::syssup::common::SubsysData::SetConnection
void SetConnection(const SubsysData::ConnectionEnum connection)
SetConnection.