ddt  0.1
ddtDataTransferLib.hpp
Go to the documentation of this file.
1 // @copyright
2 // (c) Copyright ESO 2020
3 // All Rights Reserved
4 // ESO (eso.org) is an Intergovernmental Organization, and therefore special
5 // legal conditions apply.
6 //
7 // @file ddtDataTransferLib.hpp
8 // @brief Base class for DdtDataPublishers and DdtDataSubscribers.
9 //
10 // This is the base class for DdtDataPublishers and DdtDataSubscribers.
11 //
12 // @author Matthias Grimm, CGI
13 // @since 2020/01/16
14 //
15 
16 #ifndef DDTDATATRANSFERLIB_HPP_
17 #define DDTDATATRANSFERLIB_HPP_
18 
19 #include <Ddtdatatransfericd.hpp>
20 #include <boost/property_tree/ini_parser.hpp>
21 #include <boost/property_tree/ptree.hpp>
22 #include <iostream>
23 #include <mal/Cii.hpp>
24 #include <mal/rr/qos/ReplyTime.hpp>
25 #include <mal/utility/LoadMal.hpp>
26 
27 #include "ddt/ddtErrorCodes.hpp"
28 #include "ddt/ddtLogger.hpp"
30 
31 namespace mal = ::elt::mal;
32 namespace datatransfer = ::elt::ddt::datatransfer;
33 
34 namespace ddt {
35 
40  public:
44  explicit DdtDataTransferLib(DdtLogger* ddt_logger);
45 
49  explicit DdtDataTransferLib(log4cplus::Logger const& log4cplusLogger);
50 
54  virtual ~DdtDataTransferLib();
55 
59  void SetQoS(const int ddt_latency, const int ddt_deadline);
60 
65  virtual int RegisterPublisher(const std::string uri, const std::string dsi,
66  const bool compute_crc) {
67  return 0;
68  };
69 
73  virtual int UnregisterPublisher() { return 0; };
74 
78  virtual void PublishData() {
79  // intentionally-blank override
80  }
81 
86  virtual int RegisterSubscriber(const std::string uri, const std::string dsi,
87  const std::string remote_uri,
88  const int32_t interval = 10) {
89  return 0;
90  };
91 
95  virtual int UnregisterSubscriber() { return 0; };
96 
100  virtual DataSample* ReadData() { return nullptr; };
101 
102  protected:
106  void StartHeartbeat(const int32_t interval, const std::string id);
107 
111  void StopHeartbeat();
112 
116  int InitMAL(const std::string broker_uri);
117 
122  void CheckHeartbeatTimeout(int32_t& new_reply_time);
123 
128  const std::string VerifyPathInBrokerUri(std::string broker_uri);
129 
135  const std::string GetConfigFilePath();
136 
137  int latency;
139  int deadline;
141  int32_t reply_time;
148  std::promise<void> exit_signal_heartbeat;
149 
153  std::future<void> future_object_heartbeat;
154 
159  std::atomic<bool> heartbeat_active;
160 
164  std::unique_ptr<
165  datatransfer::DataBrokerRegistrationSync,
166  std::default_delete<datatransfer::DataBrokerRegistrationSync> >
168 
172  std::atomic<bool> connected_to_broker;
173 
177  elt::mal::rr::ListenerRegistration connection_listener;
178 
183  DdtLogger* myLogger = nullptr;
187  const int32_t REPLY_TIME_DEFAULT = 6;
188 
192  const int32_t REPLY_TIME_MIN = 2;
193 
194  private:
198  void Init(DdtLogger* ddt_logger);
199 
203  void HeartbeatThread();
204 
205  std::string identifier;
206 
207  const std::string BROKER_PATH{"/broker/Broker1"};
208  const int LATENCY_DEFAULT = 10000;
209  const int DEADLINE_DEFAULT = 10;
210  const int32_t HEARTBEAT_INTERVAL_DEFAULT = 1;
211 };
212 
213 } // namespace ddt
214 
215 #endif /* DDTDATATRANSFERLIB_HPP_ */
ddt::DdtDataTransferLib::~DdtDataTransferLib
virtual ~DdtDataTransferLib()
Definition: ddtDataTransferLib.cpp:29
ddt::DdtDataTransferLib::GetConfigFilePath
const std::string GetConfigFilePath()
Definition: ddtDataTransferLib.cpp:226
ddt::DdtDataTransferLib::connected_to_broker
std::atomic< bool > connected_to_broker
Definition: ddtDataTransferLib.hpp:172
ddt::DdtDataTransferLib::StartHeartbeat
void StartHeartbeat(const int32_t interval, const std::string id)
Definition: ddtDataTransferLib.cpp:50
ddt::DdtDataTransferLib::VerifyPathInBrokerUri
const std::string VerifyPathInBrokerUri(std::string broker_uri)
Definition: ddtDataTransferLib.cpp:199
ddtErrorCodes.hpp
ddt::DdtLogger
Definition: ddtLogger.hpp:48
ddt
Definition: ddtClient.hpp:36
ddt::DdtDataTransferLib::REPLY_TIME_MIN
const int32_t REPLY_TIME_MIN
Definition: ddtDataTransferLib.hpp:192
ddt::DdtDataTransferLib::latency
int latency
Definition: ddtDataTransferLib.hpp:137
ddt::DdtDataTransferLib::RegisterSubscriber
virtual int RegisterSubscriber(const std::string uri, const std::string dsi, const std::string remote_uri, const int32_t interval=10)
Definition: ddtDataTransferLib.hpp:86
ddt::DdtDataTransferLib::SetQoS
void SetQoS(const int ddt_latency, const int ddt_deadline)
Definition: ddtDataTransferLib.cpp:45
ddt::DdtDataTransferLib::UnregisterPublisher
virtual int UnregisterPublisher()
Definition: ddtDataTransferLib.hpp:73
ddt::DataSample
Definition: ddtMemoryAccessor.hpp:173
ddt::DdtDataTransferLib::heartbeat_active
std::atomic< bool > heartbeat_active
Definition: ddtDataTransferLib.hpp:159
ddt::DdtDataTransferLib::PublishData
virtual void PublishData()
Definition: ddtDataTransferLib.hpp:78
ddt::DdtDataTransferLib::exit_signal_heartbeat
std::promise< void > exit_signal_heartbeat
Definition: ddtDataTransferLib.hpp:148
ddt::DdtDataTransferLib::CheckHeartbeatTimeout
void CheckHeartbeatTimeout(int32_t &new_reply_time)
Definition: ddtDataTransferLib.cpp:105
ddt::DdtDataTransferLib::InitMAL
int InitMAL(const std::string broker_uri)
Definition: ddtDataTransferLib.cpp:140
ddt::DdtDataTransferLib::future_object_heartbeat
std::future< void > future_object_heartbeat
Definition: ddtDataTransferLib.hpp:153
ddt::DdtDataTransferLib::UnregisterSubscriber
virtual int UnregisterSubscriber()
Definition: ddtDataTransferLib.hpp:95
ddt::DdtDataTransferLib::DdtDataTransferLib
DdtDataTransferLib(DdtLogger *ddt_logger)
Definition: ddtDataTransferLib.cpp:20
ddt::DdtDataTransferLib::myLogger
DdtLogger * myLogger
Definition: ddtDataTransferLib.hpp:183
ddt::DdtDataTransferLib::logger
DdtLogger * logger
Definition: ddtDataTransferLib.hpp:182
ddt::DdtDataTransferLib::REPLY_TIME_DEFAULT
const int32_t REPLY_TIME_DEFAULT
Definition: ddtDataTransferLib.hpp:187
ddtLogger.hpp
ddt::DdtDataTransferLib::reply_time
int32_t reply_time
Definition: ddtDataTransferLib.hpp:141
ddt::DdtDataTransferLib::ReadData
virtual DataSample * ReadData()
Definition: ddtDataTransferLib.hpp:100
ddt::DdtDataTransferLib::client
std::unique_ptr< datatransfer::DataBrokerRegistrationSync, std::default_delete< datatransfer::DataBrokerRegistrationSync > > client
Definition: ddtDataTransferLib.hpp:167
ddt::DdtDataTransferLib::StopHeartbeat
void StopHeartbeat()
Definition: ddtDataTransferLib.cpp:69
ddt::DdtDataTransferLib::deadline
int deadline
Definition: ddtDataTransferLib.hpp:139
ddt::DdtDataTransferLib::RegisterPublisher
virtual int RegisterPublisher(const std::string uri, const std::string dsi, const bool compute_crc)
Definition: ddtDataTransferLib.hpp:65
ddtMemoryAccessor.hpp
ddt::DdtDataTransferLib
Definition: ddtDataTransferLib.hpp:39
ddt::DdtDataTransferLib::connection_listener
elt::mal::rr::ListenerRegistration connection_listener
Definition: ddtDataTransferLib.hpp:177
ddt::DdtDataTransferLib::heartbeat_interval
int32_t heartbeat_interval
Definition: ddtDataTransferLib.hpp:142