Apama  10.1.0.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
engine_client_cpp.hpp
Go to the documentation of this file.
1 /*
2  * engine_client_cpp.hpp
3  *
4  * $Copyright(c) 2002-2012 Progress Software Corporation and/or its subsidiaries and affiliates. All rights reserved.$
5  * $Copyright (c) 2013-2017 Software AG, Darmstadt, Germany and/or Software AG USA Inc., Reston, VA, USA, and/or its subsidiaries and/or its affiliates and/or their licensors.$
6  * Use, reproduction, transfer, publication or disclosure is prohibited except as specifically provided for in your License Agreement with Software AG
7  *
8  * $Id: engine_client_cpp.hpp 314448 2017-08-08 16:13:03Z bsp $
9  */
10 
15 #ifndef ENGINE_CLIENT_CPP_HPP
16 #define ENGINE_CLIENT_CPP_HPP
17 
18 #include <AP_Types.h>
19 #include <AP_Platform.h>
20 #include <iostream>
21 #include <sstream>
22 #include <exception>
23 #include <iterator>
24 #include <algorithm>
25 #include <utility>
26 #include <string>
27 #include <assert.h>
28 #include <sag_internal/engine_client_c.h>
29 #include <iomanip>
30 #include <vector>
31 
32 
33 using std::pair;
34 
35 #undef ERROR
36 
37 namespace com {
38 
40 namespace apama {
41 
46  class AP_ENGINE_CLIENT_API EngineException : public std::exception
47  {
48  public:
50  EngineException(const char *message);
53 
55  EngineException& operator= (const EngineException& ce) {
56  EngineException(ce).swap(*this);
57  return *this;
58  }
59 
61  virtual ~EngineException() throw();
62 
69  virtual const char* what() const throw() { return m_message; }
70 
78  virtual const char* const* getWarnings() const { return m_warnings; }
79 
80  protected:
82  void swap(EngineException &);
84  const char* const* m_warnings;
85 
86  private:
88  char *m_message;
89  };
90 
91 
93  typedef enum {
112  } LogLevel;
113 
114 
120  AP_ENGINE_CLIENT_API void setLogLevel(LogLevel level);
121 
132  AP_ENGINE_CLIENT_API void setLogFile(const AP_char8* filename, bool truncate, bool utf8 = false);
133 
139  AP_ENGINE_CLIENT_API void setLogFD(int fd);
140 
145  AP_ENGINE_CLIENT_API void setLogMutex(void *mutex);
146 
151  AP_ENGINE_CLIENT_API void reOpenLog();
152 
153 
155  AP_ENGINE_CLIENT_API AP_char8* convertToUTF8(const AP_char8* s);
156 
158  AP_ENGINE_CLIENT_API AP_char8* convertFromUTF8(const AP_char8* s);
159 
163  AP_ENGINE_CLIENT_API void char8free(char *string);
164 
168  namespace event {
169 
178  class AP_ENGINE_CLIENT_API Event
179  {
180  friend AP_ENGINE_CLIENT_API Event* createEvent(const char* eventString, const char* channelString);
181  friend AP_ENGINE_CLIENT_API void deleteEvent(Event* ev);
182 
183  public:
190  virtual const char* getText() const = 0;
191 
200  virtual const char* getChannel() const = 0;
201 
212  virtual double getTime() const = 0;
213 
215  inline friend std::ostream& operator << (std::ostream& stream, const Event& obj) {
216  stream << obj.getText();
217  return stream;
218  }
220  inline friend std::ostream& operator << (std::ostream& stream, const Event* obj) {
221  stream << obj->getText();
222  return stream;
223  }
224 
225  private:
227  Event(const Event&);
229  Event& operator= (const Event&);
230 
231  protected:
233  Event();
235  virtual ~Event();
236  };
237 
238 
250  class AP_ENGINE_CLIENT_API EventSupplier
251  {
252  friend AP_ENGINE_CLIENT_API void deleteEventSupplier(EventSupplier* evsup);
253 
254  public:
264  virtual void disconnect() = 0;
265 
266  protected:
268  EventSupplier();
270  virtual ~EventSupplier();
271 
272  private:
276  EventSupplier& operator= (const EventSupplier&);
277  };
278 
279 
290  class AP_ENGINE_CLIENT_API EventConsumer
291  {
292  public:
305  virtual void sendEvents(const Event* const* events) = 0;
306 
307  protected:
309  EventConsumer();
311  virtual ~EventConsumer();
312 
313  private:
317  EventConsumer& operator= (const EventConsumer&);
318  };
319 
323  class AP_ENGINE_CLIENT_API DisconnectableEventConsumer : public EventConsumer
324  {
325  public:
333  virtual void disconnect(const char* reason) = 0;
334 
335  protected:
339  virtual ~DisconnectableEventConsumer();
340 
341  private:
346  };
347 
348 
359  AP_ENGINE_CLIENT_API Event* createEvent(const char* eventString, const char* channelString);
360 
366  AP_ENGINE_CLIENT_API void deleteEvent(Event* ev);
367 
368 
377  AP_ENGINE_CLIENT_API void deleteEventSupplier(EventSupplier* evsup);
378 
379  } // namespace event
380 
382  namespace engine {
383 
392  class AP_ENGINE_CLIENT_API MonitorScript
393  {
394  friend AP_ENGINE_CLIENT_API MonitorScript* createMonitorScript(const char* monitorString);
395  friend AP_ENGINE_CLIENT_API void deleteMonitorScript(MonitorScript* mon);
396 
397  public:
405  virtual const char* getText() const = 0;
406 
408  inline friend std::ostream& operator << (std::ostream& stream, const MonitorScript& obj) {
409  stream << obj.getText();
410  return stream;
411  }
413  inline friend std::ostream& operator << (std::ostream& stream, const MonitorScript* obj) {
414  stream << obj->getText();
415  return stream;
416  }
417 
418  private:
422  MonitorScript& operator= (const MonitorScript&);
423 
424  protected:
426  MonitorScript();
428  virtual ~MonitorScript();
429  };
430 
431  class EngineStatus;
432  std::ostream& operator << (std::ostream& stream, const EngineStatus& obj);
433  std::ostream& operator << (std::ostream& stream, const EngineStatus* obj);
434 
435 
441  class AP_ENGINE_CLIENT_API EngineStatus
442  {
443  friend class EngineManagement; /* getStatus */
444 
445  public:
446 
452 #ifdef _MSC_VER
453 // needed or MSVC complains about the use of pair<string> here, even though it's all inlined
454 #pragma warning (disable : 4251)
455 #endif
456  class AP_ENGINE_CLIENT_API StatusIterator : public std::iterator<std::forward_iterator_tag, int>
457  {
458  public:
460  typedef pair<std::string, std::string> pair_t;
461 
463  explicit StatusIterator(const EngineStatus &es, bool end=false);
466  m_status(0),
467  m_opaqueState(0),
468  iterPair()
469  {}
472  {
473  if (m_status && m_opaqueState) m_status->disposeIterator(m_opaqueState);
474  }
476  StatusIterator operator++(int dummy/*@unused@*/)
477  {
478  StatusIterator current(*this);
479  ++(*this); //this->operator++() // prefix ++
480  return current;
481  }
483  StatusIterator& operator++();
485  bool operator==(const StatusIterator& ref) const
486  {
487  return (m_status == ref.m_status) &&
488  (((0 == m_opaqueState) && (0 == ref.m_opaqueState)) ||
489  (iterPair.first == ref.iterPair.first));
490  }
492  bool operator!=(const StatusIterator& ref) const { return !((*this)==ref); }
494  pair_t &operator*() { return iterPair; }
496  pair_t *operator->() { return &iterPair; }
498  bool valid() { return 0 != m_opaqueState; }
499 
502  : m_status(ref.m_status),
503  m_opaqueState(m_status->copyIterator(ref.m_opaqueState)),
504  iterPair(ref.iterPair)
505  {}
508  {
509  StatusIterator(other).swap(*this);
510  return *this;
511  }
512 
513  private:
515  void step();
517  void swap(StatusIterator &other)
518  {
519  std::swap(m_status, other.m_status);
520  std::swap(m_opaqueState, other.m_opaqueState);
521  std::swap(iterPair, other.iterPair);
522  }
523 
525  const EngineStatus *m_status;
527  void *m_opaqueState;
529  pair_t iterPair;
530  };
531 
536 
540  AP_uint64 getUptime() const {
541  return getStatusIntValue("uptime");
542  }
543 
547  AP_uint32 getNumContexts() const {
548  return (AP_uint32) getStatusIntValue("numContexts");
549  }
550 
554  AP_uint32 getNumMonitors() const {
555  return (AP_uint32) getStatusIntValue("numMonitors");
556  }
557 
561  AP_uint32 getNumProcesses() const {
562  return (AP_uint32) getStatusIntValue("numProcesses");
563  }
564 
568  AP_uint32 getNumJavaApplications() const {
569  return (AP_uint32) getStatusIntValue("numJavaApplications");
570  }
571 
575  AP_uint32 getNumListeners() const {
576  return (AP_uint32) getStatusIntValue("numListeners");
577  }
578 
582  AP_uint32 getNumEventTypes() const {
583  return (AP_uint32) getStatusIntValue("numEventTypes");
584  }
585 
589  AP_uint32 getNumQueuedFastTrack() const {
590  return (AP_uint32) getStatusIntValue("numQueuedFastTrack");
591  }
592 
597  AP_uint32 getNumQueuedInput() const {
598  return (AP_uint32) getStatusIntValue("numQueuedInput");
599  }
600 
604  AP_uint64 getNumReceived() const {
605  return getStatusIntValue("numReceived");
606  }
607 
611  AP_uint64 getNumFastTracked() const {
612  return getStatusIntValue("numFastTracked");
613  }
614 
618  AP_uint32 getNumConsumers() const {
619  return (AP_uint32) getStatusIntValue("numConsumers");
620  }
621 
625  AP_uint32 getNumOutEventsQueued() const {
626  return (AP_uint32) getStatusIntValue("numOutEventsQueued");
627  }
628 
633  AP_uint64 getNumOutEventsCreated() const {
634  return getStatusIntValue("numEmits");
635  }
636 
641  AP_uint64 getNumOutEventsSent() const {
642  return getStatusIntValue("numOutEventsSent");
643  }
644 
648  AP_uint32 getNumInputQueuedInput() const {
649  return (AP_uint32) getStatusIntValue("numInputQueuedInput");
650  }
651 
655  const AP_char8* getMostBackedUpInput() const {
656  return (*this)["mostBackedUpInputContext"];
657  }
658 
662  const AP_char8 *getSlowestReceiver() const {
663  return (*this)["slowestReceiver"];
664  }
665 
669  AP_uint32 getSlowestReceiverQueueSize() const {
670  return (AP_uint32) getStatusIntValue("slowestReceiverQueueSize");
671  }
672 
676  AP_uint32 getMostBackedUpQueueSize() const {
677  return (AP_uint32) getStatusIntValue("mostBackedUpQueueSize");
678  }
679 
683  AP_uint32 getNumSubListeners() const {
684  return (AP_uint32) getStatusIntValue("numSubListeners");
685  }
686 
690  AP_uint64 getNumProcessed() const {
691  return getStatusIntValue("numProcessed");
692  }
699  const_iterator begin() const {
700  return StatusIterator(*this);
701  }
702 
709  const_iterator end() const {
710  return StatusIterator(*this, true);
711  }
712 
716  const AP_char8* operator[] (const char *ref) const {
717  return getStatusValue(ref);
718  }
719 
723  const AP_char8* operator[] (std::string &ref) const {
724  return this->operator[](ref.c_str());
725  }
726 
733  AP_int64 getUserInt(const char* key) {
734  return userInt(key);
735  }
736 
743  AP_int64 getUserIntOr(const char* key, int alt) {
744  return userIntOr(key, alt);
745  }
746 
753  AP_float64 getUserFloat(const char* key) {
754  return userFloat(key);
755  }
756 
763  AP_float64 getUserFloatOr(const char* key, float alt) {
764  return userFloatOr(key, alt);
765  }
766 
773  AP_bool getUserBool(const char* key) {
774  return userBool(key);
775  }
776 
783  AP_bool getUserBoolOr(const char* key, bool alt) {
784  return userBoolOr(key, alt);
785  }
786 
793  const AP_char8* getUserString(const char* key) {
794  return userString(key);
795  }
796 
803  const AP_char8* getUserStringOr(const char* key, const char* alt) {
804  return userStringOr(key, alt);
805  }
806 
812  std::string getAllStatusValues() {
813  std::ostringstream ost;
814  ost << getStandardStatusValues();
815  for (EngineStatus::StatusIterator it = begin(); it != end(); ++it) {
816  if (it->first.find("user-") != std::string::npos)
817  ost << std::setw(32) << setiosflags(std::ios_base::left) << it->first.append(":") << it->second << std::endl;
818  }
819  return ost.str();
820  }
821 
827  std::string getStandardStatusValues() {
828  std::ostringstream ost;
829  ost << *this;
830  return ost.str();
831  }
832 
838  static std::string getRawHeader() {
839  std::ostringstream ost;
840  ost << "Uptime (ms),# Contexts,# Monitors,# Sub-monitors,# Java apps,# Listeners,";
841  ost << "# Sub-listeners,# Event types,Input queue,# Received events,";
842  ost << "Route queue,# Routed events,# Consumers,Output queue,";
843  ost << "# Created output events,# Sent output events,# Processed events,";
844  ost << "Slowest context name,Slowest context queue size,Slowest receiver,Slowest receiver queue";
845  return ost.str();
846  }
847 
853  std::string getRawHeaderAll() {
854  std::ostringstream ost;
855  ost << getRawHeader();
856  for (EngineStatus::StatusIterator it = begin(); it != end(); ++it) {
857  if (it->first.find("user-") != std::string::npos)
858  ost << "," << it->first;
859  }
860  return ost.str();
861  }
862 
869  std::ostringstream ost;
870  ost << getUptime()
871  << "," << getNumContexts()
872  << "," << getNumMonitors()
873  << "," << getNumProcesses()
874  << "," << getNumJavaApplications()
875  << "," << getNumListeners()
876  << "," << getNumSubListeners()
877  << "," << getNumEventTypes()
878  << "," << getNumQueuedInput()
879  << "," << getNumReceived()
880  << "," << getNumQueuedFastTrack()
881  << "," << getNumFastTracked()
882  << "," << getNumConsumers()
883  << "," << getNumOutEventsQueued()
884  << "," << getNumOutEventsCreated()
885  << "," << getNumOutEventsSent()
886  << "," << getNumProcessed()
887  << "," << getMostBackedUpInput()
888  << "," << getMostBackedUpQueueSize()
889  << "," << getSlowestReceiver()
890  << "," << getSlowestReceiverQueueSize();
891  return ost.str();
892  }
893 
899  std::string getAllStatusValuesRaw() {
900  std::ostringstream ost;
901  ost << getStandardStatusValuesRaw();
902  for (EngineStatus::StatusIterator it = begin(); it != end(); ++it) {
903  if (it->first.find("user-") != std::string::npos)
904  ost << "," << it->second;
905  }
906  return ost.str();
907  }
908 
913  {
914  if (c_status) {
915  c_status->functions->deleteStatus(reinterpret_cast<AP_EngineStatus *>(c_status));
916  }
917  }
920  : c_status(other.c_status ? reinterpret_cast<AP_EngineStatus_API*>(other.c_status->functions->copyStatus(reinterpret_cast<AP_EngineStatus *>(other.c_status))) : 0)
921  {}
924  {
925  EngineStatus(other).swap(*this);
926  return *this;
927  }
931  EngineStatus(): c_status(0) {}
932  private:
934  EngineStatus(AP_EngineStatus_API *api): c_status(api) {}
936  void swap(EngineStatus &other) {
937  std::swap(c_status, other.c_status);
938  }
940  void getNext(const char *&name, const char *&value, void *&opaqueState) const {
941  if (c_status)
942  c_status->functions->getNextStatusItem(reinterpret_cast<AP_EngineStatus *>(c_status), &name, &value, &opaqueState);
943  }
945  const AP_char8* getStatusValue(const char *name) const {
946  return c_status->functions->getStatusValue(reinterpret_cast<AP_EngineStatus *>(c_status), name);
947  }
949  AP_uint64 getStatusIntValue(const char *name) const {
950  return c_status->functions->getStatusIntValue(reinterpret_cast<AP_EngineStatus *>(c_status), name);
951  }
953  void disposeIterator(void *opaqueState) const {
954  c_status->functions->disposeIterator(reinterpret_cast<AP_EngineStatus *>(c_status), opaqueState);
955  }
957  void *copyIterator(void *opaqueState) const {
958  return c_status->functions->copyIterator(reinterpret_cast<AP_EngineStatus *>(c_status), opaqueState);
959  }
960 
962  AP_int64 userIntOr(const char* key, AP_int64 alt) {
963  return c_status->functions->getUserIntOr(reinterpret_cast<AP_EngineStatus *>(c_status), key, alt);
964  }
966  AP_float64 userFloatOr(const char* key, AP_float64 alt) {
967  return c_status->functions->getUserFloatOr(reinterpret_cast<AP_EngineStatus *>(c_status), key, alt);
968  }
970  AP_bool userBoolOr(const char* key, AP_bool alt) {
971  return c_status->functions->getUserBoolOr(reinterpret_cast<AP_EngineStatus *>(c_status), key, alt);
972  }
974  const AP_char8* userStringOr(const char* key, const AP_char8* alt) {
975  return c_status->functions->getUserStringOr(reinterpret_cast<AP_EngineStatus *>(c_status), key, alt);
976  }
978  AP_int64 userInt(const char* key) {
979  return c_status->functions->getUserInt(reinterpret_cast<AP_EngineStatus *>(c_status), key);
980  }
982  AP_float64 userFloat(const char* key) {
983  return c_status->functions->getUserFloat(reinterpret_cast<AP_EngineStatus *>(c_status), key);
984  }
986  AP_bool userBool(const char* key) {
987  return c_status->functions->getUserBool(reinterpret_cast<AP_EngineStatus *>(c_status), key);
988  }
990  const AP_char8* userString(const char* key) {
991  return c_status->functions->getUserString(reinterpret_cast<AP_EngineStatus *>(c_status), key);
992  }
994  AP_EngineStatus_API *c_status;
995  };
996 
997 
1001  inline std::ostream& operator << (std::ostream& stream, const EngineStatus& obj) {
1002  std::ostringstream ost;
1003  ost
1004  << "Uptime(ms): " << obj.getUptime() << std::endl
1005  << "Number of contexts: " << obj.getNumContexts() << std::endl
1006  << "Number of monitors: " << obj.getNumMonitors() << std::endl
1007  << "Number of sub-monitors: " << obj.getNumProcesses() << std::endl
1008  << "Number of Java applications: " << obj.getNumJavaApplications() << std::endl
1009  << "Number of listeners: " << obj.getNumListeners() << std::endl
1010  << "Number of sub-listeners: " << obj.getNumSubListeners() << std::endl
1011  << "Number of event types: " << obj.getNumEventTypes() << std::endl
1012  << "Events on input queue: " << obj.getNumQueuedInput() << std::endl
1013  << "Events received: " << obj.getNumReceived() << std::endl
1014  << "Events processed: " << obj.getNumProcessed() << std::endl
1015  << "Events on internal queue: " << obj.getNumQueuedFastTrack() << std::endl
1016  << "Events routed internally: " << obj.getNumFastTracked() << std::endl
1017  << "Number of consumers: " << obj.getNumConsumers() << std::endl
1018  << "Events on output queue: " << obj.getNumOutEventsQueued() << std::endl
1019  << "Output events created: " << obj.getNumOutEventsCreated() << std::endl
1020  << "Output events sent: " << obj.getNumOutEventsSent() << std::endl
1021  << "Events on input context queues: " << obj.getNumInputQueuedInput() << std::endl
1022  << "Slowest context name: " << obj.getMostBackedUpInput() << std::endl
1023  << "Slowest context queue size: " << obj.getMostBackedUpQueueSize() << std::endl
1024  << "Slowest receiver name: " << obj.getSlowestReceiver() << std::endl
1025  << "Slowest receiver queue size: " << obj.getSlowestReceiverQueueSize() << std::endl;
1026  stream << ost.str();
1027  return stream;
1028  }
1029 
1033  inline std::ostream& operator << (std::ostream& stream, const EngineStatus* obj) {
1034  stream << *obj;
1035  return stream;
1036  }
1037 
1038  inline EngineStatus::StatusIterator::StatusIterator(const EngineStatus &es, bool end):
1039  m_status(&es),
1040  m_opaqueState(0),
1041  iterPair()
1042  {
1043  if (!end) step(); // get the first item in the map
1044  }
1045 
1047  inline EngineStatus::StatusIterator& EngineStatus::StatusIterator::operator++()
1048  {
1049  if (m_opaqueState) step();// don't step past the end
1050  return *this;
1051  }
1052 
1053  inline void EngineStatus::StatusIterator::step()
1054  {
1055  const char *name = nullptr;
1056  const char *value = nullptr;
1057 
1058  /* get the next item from the library map */
1059  m_status->getNext(name, value, m_opaqueState );
1060  if(!name || !value) {
1061  assert(!m_opaqueState);
1062  } else {
1063  iterPair = pair_t(name, value);
1064  }
1065  }
1066 
1077  class AP_ENGINE_CLIENT_API NameInfo
1078  {
1079  public:
1083  virtual const char* getName() const = 0;
1084 
1089  virtual const char* getPackage() const = 0;
1090 
1094  virtual const char* getFullyQualifiedName() const = 0;
1095 
1096  private:
1098  NameInfo(const NameInfo&);
1100  NameInfo& operator= (const NameInfo&);
1101 
1102  protected:
1104  NameInfo();
1106  virtual ~NameInfo();
1107  };
1108 
1113  class AP_ENGINE_CLIENT_API NamedMonitorInfo : public NameInfo
1114  {
1115  public:
1119  virtual unsigned int getNumSubMonitors() const = 0;
1120 
1121  private:
1125  NamedMonitorInfo& operator= (const NamedMonitorInfo&);
1126 
1127  protected:
1129  NamedMonitorInfo();
1131  virtual ~NamedMonitorInfo();
1132  };
1133 
1138  class AP_ENGINE_CLIENT_API NamedJavaApplicationInfo : public NameInfo {
1139 
1140  public:
1144  virtual unsigned int getNumListeners() const = 0;
1145 
1146  private:
1151 
1152  protected:
1156  virtual ~NamedJavaApplicationInfo();
1157  };
1158 
1163  class AP_ENGINE_CLIENT_API NamedContextInfo : public NameInfo {
1164 
1165  public:
1169  virtual unsigned int getNumSubMonitors() const = 0;
1170 
1174  virtual unsigned int getQueueSize() const = 0;
1175 
1179  virtual char const *const *getChannels() const = 0;
1180 
1181  private:
1185  NamedContextInfo& operator= (const NamedContextInfo&);
1186 
1187  protected:
1189  NamedContextInfo();
1191  virtual ~NamedContextInfo();
1192  };
1193 
1194 
1199  class AP_ENGINE_CLIENT_API NamedReceiverInfo : public NameInfo {
1200 
1201  public:
1205  virtual unsigned int getQueueSize() const = 0;
1206 
1210  virtual char const *const *getChannels() const = 0;
1211 
1215  virtual const AP_char8 *getAddress() const = 0;
1216 
1217  private:
1221  NamedReceiverInfo& operator= (const NamedReceiverInfo&);
1222 
1223  protected:
1227  virtual ~NamedReceiverInfo();
1228  };
1229 
1230 
1235  class AP_ENGINE_CLIENT_API NamedPluginReceiverInfo : public NameInfo {
1236 
1237  public:
1241  virtual unsigned int getQueueSize() const = 0;
1242 
1246  virtual char const *const *getChannels() const = 0;
1247 
1248  private:
1253 
1254  protected:
1258  virtual ~NamedPluginReceiverInfo();
1259  };
1260 
1265  class AP_ENGINE_CLIENT_API NamedEventTypeInfo : public NameInfo {
1266 
1267  public:
1271  virtual unsigned int getNumEventTemplates() const = 0;
1272 
1273  private:
1277  NamedEventTypeInfo& operator= (const NamedEventTypeInfo&);
1278 
1279  protected:
1283  virtual ~NamedEventTypeInfo();
1284  };
1285 
1290  class AP_ENGINE_CLIENT_API NamedTimerInfo : public NameInfo {
1291 
1292  public:
1296  virtual unsigned int getNumTimers() const = 0;
1297 
1298  private:
1302  NamedTimerInfo& operator= (const NamedTimerInfo&);
1303 
1304  protected:
1306  NamedTimerInfo();
1308  virtual ~NamedTimerInfo();
1309  };
1310 
1316  class AP_ENGINE_CLIENT_API NamedAggregateInfo : public NameInfo {
1317 
1318  private:
1322  NamedAggregateInfo& operator= (const NamedAggregateInfo&);
1323 
1324  protected:
1328  virtual ~NamedAggregateInfo();
1329  };
1330 
1343  class AP_ENGINE_CLIENT_API EngineInfo
1344  {
1345  friend AP_ENGINE_CLIENT_API void deleteInfo(EngineInfo* info);
1346 
1347  public:
1351  virtual unsigned int getNumMonitors() const = 0;
1352 
1356  virtual unsigned int getNumJavaApplications() const = 0;
1357 
1361  virtual unsigned int getNumEventTypes() const = 0;
1362 
1366  virtual unsigned int getNumTimers() const = 0;
1367 
1371  virtual unsigned int getNumAggregates() const = 0;
1372 
1380  virtual NamedMonitorInfo** getMonitors() const = 0;
1381 
1389  virtual NamedJavaApplicationInfo** getJavaApplications() const = 0;
1390 
1398  virtual NamedEventTypeInfo** getEventTypes() const = 0;
1399 
1407  virtual NamedTimerInfo** getTimers() const = 0;
1408 
1416  virtual NamedAggregateInfo** getAggregates() const = 0;
1417 
1421  virtual unsigned int getNumContexts() const = 0;
1422 
1430  virtual NamedContextInfo** getContexts() const = 0;
1431 
1435  virtual unsigned int getNumReceivers() const = 0;
1436 
1444  virtual NamedReceiverInfo **getReceivers() const = 0;
1445 
1449  virtual unsigned int getNumPluginReceivers() const = 0;
1450 
1458  virtual NamedPluginReceiverInfo **getPluginReceivers() const = 0;
1459 
1460  private:
1462  EngineInfo(const EngineInfo&);
1464  EngineInfo& operator= (const EngineInfo&);
1465 
1466  protected:
1468  EngineInfo();
1470  virtual ~EngineInfo();
1471  };
1472 
1473  class AP_ENGINE_CLIENT_API EngineConnection;
1474 
1491  class AP_ENGINE_CLIENT_API EngineManagement : public com::apama::event::EventConsumer
1492  {
1493  public:
1499  CONNECT_PARALLEL
1500  };
1507  virtual void injectMonitorScript(MonitorScript& script) = 0;
1508 
1524  virtual const char* const* injectMonitorScriptWithWarnings(MonitorScript& script) = 0;
1525 
1542  virtual const char* const* injectMonitorScriptWithWarningsFilename(MonitorScript& script, const char *filename) = 0;
1543 
1550  virtual void deleteName(const char * name) = 0;
1551 
1558  virtual void forceDeleteName(const char * name) = 0;
1559 
1566  virtual void killName(const char * name) = 0;
1567 
1571  virtual void deleteAll() = 0;
1572 
1581  virtual void injectJava(const AP_uint8* jarbytes, AP_uint32 size) = 0;
1582 
1599  virtual const char* const* injectJavaWithWarnings(const AP_uint8* jarbytes, AP_uint32 size) = 0;
1600 
1615  virtual const char* const* injectJavaWithWarningsFilename(const AP_uint8* jarbytes, AP_uint32 size, const char *filename) = 0;
1616 
1617 
1627  virtual void injectCDP(const AP_uint8* cdpbytes, AP_uint32 size, const char *filename=NULL) = 0;
1628 
1645  virtual const char* const* injectCDPWithWarnings(const AP_uint8* cdpbytes, AP_uint32 size) = 0;
1646 
1661  virtual const char* const* injectCDPWithWarningsFilename(const AP_uint8* cdpbytes, AP_uint32 size, const char *filename) = 0;
1662 
1668  {
1669  char *errmsg = nullptr;
1670  AP_EngineStatus *es_api = engineManagement_getStatusOpaque(this, &errmsg);
1671  if (errmsg) {
1672  com::apama::EngineException e(errmsg);
1673  free(errmsg);
1674  throw e;
1675  }
1676 
1677  return EngineStatus(reinterpret_cast<AP_EngineStatus_API *>(es_api));
1678  }
1679 
1703  virtual com::apama::event::EventSupplier* connectEventConsumer(com::apama::event::EventConsumer* consumer, const char* const* channels, bool disconnectSlow) = 0;
1704 
1721  virtual com::apama::event::EventSupplier* connectEventConsumer(com::apama::event::EventConsumer* consumer, const char* const* channels) = 0;
1722 
1745  virtual bool attachAsEventConsumerTo(EngineManagement* target, const char* const* channels, bool disconnectSlow = false, ConnectMode mode = CONNECT_LEGACY) = 0;
1746 
1747 
1770  virtual bool attachAsEventConsumerTo(const char* host, int port, const char* const* channels, bool disconnectSlow = false, ConnectMode mode = CONNECT_LEGACY) = 0;
1771 
1772 
1789  virtual void detachAsEventConsumerFrom(EngineManagement* target, const char* const* channels, ConnectMode mode = CONNECT_LEGACY) = 0;
1790 
1808  virtual void detachAsEventConsumerFrom(const char* host, int port, const char* const* channels, ConnectMode mode = CONNECT_LEGACY) = 0;
1809 
1820  virtual void sendEvents(const com::apama::event::Event* const* events) = 0;
1821 
1829  virtual void sendEventsNoBatching(const com::apama::event::Event* const* events) = 0;
1830 
1834  virtual void flushEvents() = 0;
1835 
1844  virtual EngineInfo* inspectEngine() = 0;
1845 
1862  virtual void ping() = 0;
1863 
1869  virtual bool isConnected() = 0;
1870 
1886  virtual void setReceiverConnections(const std::vector<com::apama::engine::EngineConnection>& connections) = 0;
1887 
1892  virtual const std::vector<com::apama::engine::EngineConnection> getReceiverConnections() = 0;
1893 
1894  protected:
1896  EngineManagement();
1898  virtual ~EngineManagement();
1899 
1900  private:
1904  EngineManagement& operator= (const EngineManagement&);
1905  };
1906 
1911  class AP_ENGINE_CLIENT_API EngineConnection {
1912  private:
1913  std::string host;
1914  int port;
1915  std::vector<std::string> channels;
1916  bool disconnectSlow;
1917  EngineManagement::ConnectMode connectMode;
1918 
1919  void init(const char * host, int port, bool disconnectSlow, EngineManagement::ConnectMode connectMode, const char * const * channels) {
1920  if (host == NULL || channels == NULL) {
1921  throw EngineException("EngineConnection cannot be created with null host or channels");
1922  }
1923  if (port < 0 || port > 65535) {
1924  throw EngineException("EngineConnection cannot be created with invalid port value");
1925  }
1926 
1927  this->host = std::string(host);
1928  this->port = port;
1929  this->disconnectSlow = disconnectSlow;
1930  this->connectMode = connectMode;
1931 
1932  for (const char* const* c = channels; *c != NULL; c++) {
1933  this->channels.push_back(std::string(*c));
1934  }
1935  }
1936 
1937  public:
1948  EngineConnection(const char * host, int port, bool disconnectSlow, EngineManagement::ConnectMode connectMode,
1949  const char * const * channels) {
1950  init(host, port, disconnectSlow, connectMode, channels);
1951  }
1952 
1960  EngineConnection(const char * host, int port, const char * const * channels) {
1961  init(host, port, false, EngineManagement::CONNECT_LEGACY, channels);
1962  }
1963 
1969  virtual const std::vector<std::string>& getChannels() const {
1970  return channels;
1971  }
1972 
1977  virtual const std::string& getHost() const {
1978  return host;
1979  }
1980 
1985  virtual int getPort() const {
1986  return port;
1987  }
1988 
1993  virtual bool getDisconnectSlow() const{
1994  return disconnectSlow;
1995  }
1996 
2002  return connectMode;
2003  }
2004 
2006  inline friend std::ostream& operator << (std::ostream& stream, const EngineConnection& obj) {
2007  std::ostringstream ost;
2008  ost << "EngineConnection to " << obj.host << ":" << obj.port << (obj.disconnectSlow == true ? " diconnectSlow" : "") << " on" <<
2009  (obj.connectMode == EngineManagement::CONNECT_PARALLEL ? " parallel" : "") << " channels [";
2010 
2011  if (!obj.channels.empty()) {
2012  std::copy(obj.channels.begin(), obj.channels.end() - 1, std::ostream_iterator<std::string>(ost, ", "));
2013  ost << obj.channels.back();
2014  }
2015  ost << "]";
2016  stream << ost.str();
2017  return stream;
2018  }
2019 
2021  inline friend std::ostream& operator << (std::ostream& stream, const EngineConnection* obj) {
2022  stream << *obj;
2023  return stream;
2024  }
2025 
2027  virtual ~EngineConnection() {
2028  }
2029  };
2030 
2037  AP_ENGINE_CLIENT_API void engineInit(const char* processName = "C++ Client");
2038 
2039 
2046  AP_ENGINE_CLIENT_API void engineInitMessaging(const char *processName, bool initMessaging=true);
2047 
2053  AP_ENGINE_CLIENT_API void engineShutdown();
2054 
2055 
2070  AP_ENGINE_CLIENT_API EngineManagement* connectToEngine(const char* host, unsigned short port, bool disconnectSlowReceiver = false, const char *processName = nullptr);
2071 
2085  AP_ENGINE_CLIENT_API EngineManagement* connectToEngineReceiveOnly(const char* host, unsigned short port, const char *processName = nullptr);
2086 
2099  AP_ENGINE_CLIENT_API EngineManagement* connectToEngineMonitorOnly(const char* host, unsigned short port, const char *processName = nullptr);
2100 
2110  AP_ENGINE_CLIENT_API void disconnectFromEngine(EngineManagement* corr);
2111 
2118  AP_ENGINE_CLIENT_API MonitorScript* createMonitorScript(const char* monitorString);
2119 
2125  AP_ENGINE_CLIENT_API void deleteMonitorScript(MonitorScript* mon);
2126 
2136  AP_ENGINE_CLIENT_API void deleteInfo(EngineInfo* info);
2137 
2138 
2146  AP_ENGINE_CLIENT_API void deleteWarnings(const char* const* warnings);
2147 
2160  AP_ENGINE_CLIENT_API void setEngineParams(const char* params);
2161 
2162  } // namespace engine
2163 
2164 } // namespace apama
2165 
2166 } // namespace com
2167 
2168 
2169 #endif // ENGINE_CLIENT_CPP_HPP
AP_ENGINE_CLIENT_API void deleteInfo(EngineInfo *info)
This function allows deletion of an EngineInfo object.
AP_ENGINE_CLIENT_API void setLogLevel(LogLevel level)
Sets the level at which the client library will log information.
AP_ENGINE_CLIENT_API void setEngineParams(const char *params)
Set custom parameters for this instance of the client library.
Derived class from EventConsumer which implements the disconnect API.
Definition: engine_client_cpp.hpp:323
Base class for a named object (i.e.
Definition: engine_client_cpp.hpp:1077
const AP_char8 * getMostBackedUpInput() const
The name of the slowest context.
Definition: engine_client_cpp.hpp:655
An EventConsumer can connect to the Engine through an EventSupplier and register to receive events...
Definition: engine_client_cpp.hpp:290
AP_float64 getUserFloatOr(const char *key, float alt)
Get a user value of type AP_float64 or the alt value if it cannot be found.
Definition: engine_client_cpp.hpp:763
virtual const char * getText() const =0
Retrieve the event's type and its contents as a string.
AP_uint32 getNumConsumers() const
The number of external consumers/receivers connected to receive emitted events.
Definition: engine_client_cpp.hpp:618
AP_ENGINE_CLIENT_API void engineInit(const char *processName="C++ Client")
This function must be called once per process first before any other Engine operations are carried ou...
AP_uint32 getNumInputQueuedInput() const
The number of events on the input queues of all public contexts.
Definition: engine_client_cpp.hpp:648
virtual const char * getText() const =0
Retrieve the text of a MonitorScript fragment as a string.
~EngineStatus()
Destroy the underlying status data.
Definition: engine_client_cpp.hpp:912
AP_uint32 getNumSubListeners() const
The number of sub-event-listeners that are active across all contexts.
Definition: engine_client_cpp.hpp:683
EngineStatus getStatus()
Get the Engine's current operational status.
Definition: engine_client_cpp.hpp:1667
AP_int64 getUserIntOr(const char *key, int alt)
Get a user value of type AP_int64 or the alt value if it cannot be found.
Definition: engine_client_cpp.hpp:743
AP_uint64 getNumReceived() const
The number of events that the correlator has received from external sources since the correlator star...
Definition: engine_client_cpp.hpp:604
The Engine Management class acts as the interface to the Engine, and allows operations to be carried ...
Definition: engine_client_cpp.hpp:1491
bool operator==(const StatusIterator &ref) const
Returns true if two iterators point to the same item.
Definition: engine_client_cpp.hpp:485
virtual const std::vector< std::string > & getChannels() const
Get the channels associated with this connection.
Definition: engine_client_cpp.hpp:1969
virtual const std::string & getHost() const
Get the host associated with this connection.
Definition: engine_client_cpp.hpp:1977
pair< std::string, std::string > pair_t
element type
Definition: engine_client_cpp.hpp:460
Fatal messages.
Definition: engine_client_cpp.hpp:101
AP_ENGINE_CLIENT_API void deleteMonitorScript(MonitorScript *mon)
This function allows deletion of MonitorScript objects.
AP_int64 getUserInt(const char *key)
Get a user value of type AP_int64.
Definition: engine_client_cpp.hpp:733
EngineConnection encapsulates the information related to a connection between two Apama messaging com...
Definition: engine_client_cpp.hpp:1911
Nothing logged.
Definition: engine_client_cpp.hpp:95
AP_bool getUserBool(const char *key)
Get a user value of type AP_bool.
Definition: engine_client_cpp.hpp:773
AP_uint32 getNumJavaApplications() const
The number of Java applications and Java EPL plug-ins loaded in the correlator.
Definition: engine_client_cpp.hpp:568
Definition: sag_connectivity_threading.h:178
StatusIterator & operator=(const StatusIterator &other)
Copy assignment.
Definition: engine_client_cpp.hpp:507
Information about a timer type returned by an engine inspection.
Definition: engine_client_cpp.hpp:1290
AP_ENGINE_CLIENT_API AP_char8 * convertFromUTF8(const AP_char8 *s)
Convert a string in UTF-8 to the local encoding, since most of the Apama API returns UTF-8...
AP_uint32 getNumContexts() const
The number of contexts in the correlator, including the main context.
Definition: engine_client_cpp.hpp:547
Information about a context returned by an engine inspection.
Definition: engine_client_cpp.hpp:1163
StatusIterator operator++(int dummy)
(postfix) increment this iterator
Definition: engine_client_cpp.hpp:476
pair_t & operator*()
Return a reference to the element pointed to.
Definition: engine_client_cpp.hpp:494
std::string getStandardStatusValues()
Get the standard status values, formatted for terminal output.
Definition: engine_client_cpp.hpp:827
EngineConnection(const char *host, int port, bool disconnectSlow, EngineManagement::ConnectMode connectMode, const char *const *channels)
Definition: engine_client_cpp.hpp:1948
AP_ENGINE_CLIENT_API void engineInitMessaging(const char *processName, bool initMessaging=true)
This function (or engineInit) must be called once per process first before any other Engine operation...
Startup and other important messages.
Definition: engine_client_cpp.hpp:97
AP_uint32 getNumQueuedFastTrack() const
The sum of routed events on the route queues of all contexts.
Definition: engine_client_cpp.hpp:589
EngineStatus & operator=(const EngineStatus &other)
Copy assignment.
Definition: engine_client_cpp.hpp:923
AP_ENGINE_CLIENT_API MonitorScript * createMonitorScript(const char *monitorString)
This function allows creation of MonitorScript objects.
StatusIterator const_iterator
Iterator type for const EngineStatus.
Definition: engine_client_cpp.hpp:535
An EventSupplier represents the resources created by the Engine to service a connection to an externa...
Definition: engine_client_cpp.hpp:250
static std::string getRawHeader()
Get a header for the raw output, useful for indentifying values.
Definition: engine_client_cpp.hpp:838
const AP_char8 * getSlowestReceiver() const
The name of the consumer/receiver with the largest number of incoming events waiting to be processed...
Definition: engine_client_cpp.hpp:662
For backwards compatibility, single serial connection.
Definition: engine_client_cpp.hpp:1497
Information about a monitor returned by an engine inspection.
Definition: engine_client_cpp.hpp:1113
Information about a receiver returned by an engine inspection.
Definition: engine_client_cpp.hpp:1199
std::string getRawHeaderAll()
Get a header for the raw output, useful for indentifying values.
Definition: engine_client_cpp.hpp:853
AP_ENGINE_CLIENT_API void setLogFile(const AP_char8 *filename, bool truncate, bool utf8=false)
Sets the file to which the client library should log information.
ConnectMode
The mode that attachAsEventConsumerTo and detachAsEventConsumerFrom operate in.
Definition: engine_client_cpp.hpp:1495
EngineStatus()
Create a default-constructed (empty) EngineStatus.
Definition: engine_client_cpp.hpp:931
Information messages (default)
Definition: engine_client_cpp.hpp:107
Information about an aggregate function returned by an engine inspection.
Definition: engine_client_cpp.hpp:1316
virtual const char *const * getWarnings() const
Retrieve the set of warnings associated with the exception.
Definition: engine_client_cpp.hpp:78
AP_uint32 getSlowestReceiverQueueSize() const
The number of events on the slowest consumer's/receiver's queue, as identified by the name of the slo...
Definition: engine_client_cpp.hpp:669
Information about the monitors and types currently in an engine.
Definition: engine_client_cpp.hpp:1343
std::ostream & operator<<(std::ostream &stream, const EngineStatus &obj)
Stream output operator for a reference.
Definition: engine_client_cpp.hpp:1001
AP_ENGINE_CLIENT_API void engineShutdown()
This function must be called once per process before the application closes down. ...
Information about a java application returned by an engine inspection.
Definition: engine_client_cpp.hpp:1138
AP_ENGINE_CLIENT_API void disconnectFromEngine(EngineManagement *corr)
This function allows disconnection from an Engine.
const AP_char8 * getUserString(const char *key)
Get a user value of type AP_char8*.
Definition: engine_client_cpp.hpp:793
An Event object represents an event instance.
Definition: engine_client_cpp.hpp:178
AP_uint32 getNumMonitors() const
The number of EPL monitor definitions injected into the correlator.
Definition: engine_client_cpp.hpp:554
virtual bool getDisconnectSlow() const
Get the value of disconnectSlow flag associated with this connection.
Definition: engine_client_cpp.hpp:1993
Critical messages.
Definition: engine_client_cpp.hpp:99
AP_uint32 getMostBackedUpQueueSize() const
The number of events on the slowest context's queue, as identified by the name of the slowest context...
Definition: engine_client_cpp.hpp:676
pair_t * operator->()
Return a pointer to the element pointed to.
Definition: engine_client_cpp.hpp:496
AP_uint64 getUptime() const
The time in milliseconds since the correlator was started.
Definition: engine_client_cpp.hpp:540
const_iterator begin() const
Returns an instance of the StatusIterator which allows to iterate over all status items...
Definition: engine_client_cpp.hpp:699
virtual ~EngineConnection()
Destroy the underlying connection data.
Definition: engine_client_cpp.hpp:2027
AP_ENGINE_CLIENT_API EngineManagement * connectToEngineMonitorOnly(const char *host, unsigned short port, const char *processName=nullptr)
Attempt to establish a monitor-only connection to an Engine listening on the named host and port...
std::string getAllStatusValuesRaw()
Get all the status values available, formatted for parsers (values separated by ,).
Definition: engine_client_cpp.hpp:899
AP_ENGINE_CLIENT_API void reOpenLog()
Re-opens the log file.
AP_uint32 getNumOutEventsQueued() const
The number of events waiting on output queues to be dispatched to any connected external consumers/re...
Definition: engine_client_cpp.hpp:625
AP_uint32 getNumEventTypes() const
The number of event types defined within the correlator.
Definition: engine_client_cpp.hpp:582
LogLevel
Available logging levels.
Definition: engine_client_cpp.hpp:93
Information about a receiver returned by an engine inspection.
Definition: engine_client_cpp.hpp:1235
std::string getAllStatusValues()
Get all the status values available, formatted for terminal output.
Definition: engine_client_cpp.hpp:812
AP_ENGINE_CLIENT_API EngineManagement * connectToEngineReceiveOnly(const char *host, unsigned short port, const char *processName=nullptr)
Attempt to establish a receive-only connection to an Engine listening on the named host and port...
EngineStatus(const EngineStatus &other)
Copy constructor.
Definition: engine_client_cpp.hpp:919
AP_uint32 getNumQueuedInput() const
The number of executors on the input queues of all contexts.
Definition: engine_client_cpp.hpp:597
AP_uint64 getNumOutEventsSent() const
The number of events that have been delivered to external consumers/receivers.
Definition: engine_client_cpp.hpp:641
AP_ENGINE_CLIENT_API void deleteWarnings(const char *const *warnings)
This function allows deletion of the lists of warnings returned by injectMonitorScriptWithWarnings()...
const_iterator end() const
Returns an instance of the StatusIterator which allows to iterate over all status items...
Definition: engine_client_cpp.hpp:709
virtual EngineManagement::ConnectMode getConnectMode() const
Get the connection mode associated with this connection.
Definition: engine_client_cpp.hpp:2001
EngineConnection(const char *host, int port, const char *const *channels)
Definition: engine_client_cpp.hpp:1960
EngineStatus represents the operational status of the Engine.
Definition: engine_client_cpp.hpp:441
AP_uint32 getNumListeners() const
The number of listeners in all contexts.
Definition: engine_client_cpp.hpp:575
AP_uint64 getNumOutEventsCreated() const
The number of events that have been sent or emitted to channels which have at least one external cons...
Definition: engine_client_cpp.hpp:633
Warning messages.
Definition: engine_client_cpp.hpp:105
AP_ENGINE_CLIENT_API AP_char8 * convertToUTF8(const AP_char8 *s)
Convert a string in local encoding to UTF-8, as required by most of the Apama API.
bool valid()
Returns true if this is a valid iterator over status data.
Definition: engine_client_cpp.hpp:498
const AP_char8 * getUserStringOr(const char *key, const char *alt)
Get a user value of type AP_char8* or the alt value if it cannot be found.
Definition: engine_client_cpp.hpp:803
AP_ENGINE_CLIENT_API Event * createEvent(const char *eventString, const char *channelString)
This function allows creation of an Event object.
std::ostream & operator<<(std::ostream &stream, const EngineStatus *obj)
Stream output operator for a pointer.
Definition: engine_client_cpp.hpp:1033
Debugging messages.
Definition: engine_client_cpp.hpp:109
AP_float64 getUserFloat(const char *key)
Get a user value of type AP_float64.
Definition: engine_client_cpp.hpp:753
bool operator!=(const StatusIterator &ref) const
Returns false if two iterators point to the same item.
Definition: engine_client_cpp.hpp:492
Information about a event type returned by an engine inspection.
Definition: engine_client_cpp.hpp:1265
AP_ENGINE_CLIENT_API EngineManagement * connectToEngine(const char *host, unsigned short port, bool disconnectSlowReceiver=false, const char *processName=nullptr)
This function attempts to establish a connection to an Engine.
std::string getStandardStatusValuesRaw()
Get the standard status values, formatted for parsers (values separated by ,).
Definition: engine_client_cpp.hpp:868
StatusIterator()
Default-constructed status iterator.
Definition: engine_client_cpp.hpp:465
An EngineException is thrown by methods in this library if any problems are encountered.
Definition: engine_client_cpp.hpp:46
More-verbose debug messages.
Definition: engine_client_cpp.hpp:111
A MonitorScript object encapsulates an EPL code fragment, containing package, event and monitor defin...
Definition: engine_client_cpp.hpp:392
AP_ENGINE_CLIENT_API void setLogFD(int fd)
Sets the file descriptor to which the client library should log information.
AP_ENGINE_CLIENT_API void char8free(char *string)
Free any char* string returned from the client API.
A class used for the iterating through all status items.
Definition: engine_client_cpp.hpp:456
AP_ENGINE_CLIENT_API void deleteEvent(Event *ev)
This function allows deletion of an Event object.
StatusIterator iterator
Iterator type.
Definition: engine_client_cpp.hpp:533
AP_ENGINE_CLIENT_API void deleteEventSupplier(EventSupplier *evsup)
This function disconnects and deletes an EventSupplier object.
AP_uint32 getNumProcesses() const
The number of monitor instances, also known as sub-monitors.
Definition: engine_client_cpp.hpp:561
AP_uint64 getNumProcessed() const
The number of events processed by the correlator in all contexts.
Definition: engine_client_cpp.hpp:690
~StatusIterator()
Destroy underling status iterator.
Definition: engine_client_cpp.hpp:471
virtual int getPort() const
Get the port associated with this connection.
Definition: engine_client_cpp.hpp:1985
Error messages.
Definition: engine_client_cpp.hpp:103
StatusIterator(const StatusIterator &ref)
Copy constructor.
Definition: engine_client_cpp.hpp:501
AP_uint64 getNumFastTracked() const
The number of events that have been routed across all contexts since the correlator was started...
Definition: engine_client_cpp.hpp:611
AP_bool getUserBoolOr(const char *key, bool alt)
Get a user value of type AP_bool or the alt value if it cannot be found.
Definition: engine_client_cpp.hpp:783