neic-glass3  1.4.6
output.h
Go to the documentation of this file.
1 /*****************************************
2  * This file is documented for Doxygen.
3  * If you modify this file please update
4  * the comments so that Doxygen will still
5  * be able to work.
6  ****************************************/
7 #ifndef OUTPUT_H
8 #define OUTPUT_H
9 
10 #include <json.h>
11 #include <threadbaseclass.h>
12 #include <outputinterface.h>
13 #include <associatorinterface.h>
14 #include <cache.h>
15 #include <queue.h>
16 #include <threadpool.h>
17 
18 #include <thread>
19 #include <mutex>
20 #include <future>
21 #include <string>
22 #include <sstream>
23 #include <iostream>
24 #include <fstream>
25 #include <vector>
26 #include <memory>
27 
28 namespace glass3 {
29 
37 namespace output {
76  public:
83  output();
84 
91  ~output();
92 
105  bool setup(std::shared_ptr<const json::Object> config) override;
106 
113  void clear() override;
114 
124  void sendToOutput(std::shared_ptr<json::Object> message) override;
125 
136  bool start() override;
137 
145  bool healthCheck() override;
146 
156  void setSiteListRequestInterval(int delay);
157 
167 
176  void setReportInterval(int interval);
177 
186  int getReportInterval();
187 
198  void setAssociator(glass3::util::iAssociator* associator);
199 
211 
222  void setPubOnExpiration(bool pub);
223 
234  bool getPubOnExpiration();
235 
245  void setImmediatePubThreshold(double threshold);
246 
256  double getImmediatePubThreshold();
257 
269  std::vector<int> getPubTimes();
270 
284  void addPubTime(int pubTime);
285 
292  void clearPubTimes();
293 
305  bool addTrackingData(std::shared_ptr<json::Object> data);
306 
319  std::shared_ptr<const json::Object> getTrackingData(std::string id);
320 
332  std::shared_ptr<const json::Object> getNextTrackingData();
333 
344  bool haveTrackingData(std::shared_ptr<json::Object> data);
345 
355  bool haveTrackingData(std::string ID);
356 
366  bool removeTrackingData(std::shared_ptr<const json::Object> data);
367 
377  bool removeTrackingData(std::string ID);
378 
384  void clearTrackingData();
385 
395  bool isDataReady(std::shared_ptr<const json::Object> data);
396 
407  bool isDataChanged(std::shared_ptr<const json::Object> data);
408 
424  bool isDataPublished(std::shared_ptr<const json::Object> data,
425  bool ignoreVersion = true);
437  bool isDataFinished(std::shared_ptr<const json::Object> data);
438 
447  void writeOutput(std::shared_ptr<json::Object> data);
448 
460  glass3::util::WorkState work() override;
461 
462  // constants
466  static constexpr int k_iMinimumPublicationTime = 10;
467 
468  protected:
475  void checkEventsLoop();
476 
488  virtual void sendOutput(const std::string &type, const std::string &id,
489  const std::string &message) = 0;
490 
497  virtual void sendHeartbeat();
498 
499  private:
507  std::vector<int> m_PublicationTimes;
508 
513  std::atomic<bool> m_bPubOnExpiration;
514 
521  std::atomic<int> m_iReportInterval;
522 
529  std::atomic<double> m_dImmediatePubThreshold;
530 
538  glass3::util::iAssociator* m_Associator;
539 
544  std::atomic<int> m_iSiteListRequestInterval;
545 
550  glass3::util::Cache * m_TrackingCache;
551 
555  std::mutex m_TrackingCacheMutex;
556 
561  glass3::util::Queue* m_OutputQueue;
562 
567  glass3::util::Queue* m_LookupQueue;
568 
573  int m_iMessageCounter;
574 
579  int m_iEventCounter;
580 
585  int m_iCancelCounter;
586 
591  int m_iExpireCounter;
592 
597  int m_iHypoCounter;
598 
603  int m_iLookupCounter;
604 
609  int m_iSiteListCounter;
610 
614  std::time_t tLastWorkReport;
615 
619  std::time_t m_tLastSiteRequest;
620 
625  glass3::util::ThreadPool *m_ThreadPool;
626 
627  private:
632  std::mutex & getMutex();
633 
637  std::mutex m_Mutex;
638 };
639 } // namespace output
640 } // namespace glass3
641 #endif // OUTPUT_H
void clearTrackingData()
clear output tracking cache
Definition: output.cpp:505
The output message interface, used in sending data to output classes in neic-glass3.
Definition: outputinterface.h:19
bool getPubOnExpiration()
Function to retrieve the publish on expiration flag.
Definition: output.cpp:1306
glass3::util::ThreadPool class
Definition: threadpool.h:31
bool healthCheck() override
output heath check function
Definition: output.cpp:311
void clearPubTimes()
Function to clear the publication times.
Definition: output.cpp:1333
bool setup(std::shared_ptr< const json::Object > config) override
output configuration function
Definition: output.cpp:98
void clear() override
output clear function
Definition: output.cpp:245
virtual void sendOutput(const std::string &type, const std::string &id, const std::string &message)=0
Send output data.
void setSiteListRequestInterval(int delay)
Function to set the interval for requesting the site list.
Definition: output.cpp:1269
void setImmediatePubThreshold(double threshold)
Function to set the immediate publication threshold.
Definition: output.cpp:1311
int getSiteListRequestInterval()
Function to retrieve the interval for requesting the site list.
Definition: output.cpp:1274
void setReportInterval(int interval)
Function to set the interval to generate informational reports.
Definition: output.cpp:1279
void setPubOnExpiration(bool pub)
Function to set the publish on expiration flag.
Definition: output.cpp:1301
int getReportInterval()
Function to retrieve the interval to generate informational reports.
Definition: output.cpp:1284
The associator messaging interface, used in sending configuration and input data to neic-glass3...
Definition: associatorinterface.h:51
std::shared_ptr< const json::Object > getTrackingData(std::string id)
get tracking information from the output tracking cache by id
Definition: output.cpp:433
The neic-glass3 project namespace containing all the classes and functions that make up neic-glass3...
WorkState
glass3::util::WorkState enumeration
Definition: workstate.h:25
static constexpr int k_iMinimumPublicationTime
The minimum time in seconds to publish an event.
Definition: output.h:466
glass3::util::iAssociator * getAssociator()
Function to get the associator interface pointer.
Definition: output.cpp:1295
bool haveTrackingData(std::shared_ptr< json::Object > data)
check if tracking information is in output tracking cache
Definition: output.cpp:469
bool isDataFinished(std::shared_ptr< const json::Object > data)
check to see if tracking information is finished
Definition: output.cpp:1226
bool isDataPublished(std::shared_ptr< const json::Object > data, bool ignoreVersion=true)
check to see if tracking information has been published
Definition: output.cpp:1174
bool isDataChanged(std::shared_ptr< const json::Object > data)
check to see if detection data has changed
Definition: output.cpp:1128
virtual void sendHeartbeat()
Send heartbeats.
Definition: output.cpp:1265
std::vector< int > getPubTimes()
Function to retrieve the publication times.
Definition: output.cpp:1321
void addPubTime(int pubTime)
Function to add a single publication time to the list.
Definition: output.cpp:1327
void checkEventsLoop()
output tracking data background work function
Definition: output.cpp:511
double getImmediatePubThreshold()
Function to retrieve the immediate publication threshold.
Definition: output.cpp:1316
bool removeTrackingData(std::shared_ptr< const json::Object > data)
remove tracking information from the output tracking cache
Definition: output.cpp:392
void writeOutput(std::shared_ptr< json::Object > data)
output writing function
Definition: output.cpp:891
glass3::util::Cache class - a thread safe in-memory cache
Definition: cache.h:30
bool isDataReady(std::shared_ptr< const json::Object > data)
check to see if tracking information is ready for output
Definition: output.cpp:949
glass3::util::Queue class
Definition: queue.h:28
glass output class
Definition: output.h:74
bool addTrackingData(std::shared_ptr< json::Object > data)
add tracking information to the output tracking cache
Definition: output.cpp:325
bool start() override
work thread start function
Definition: output.cpp:288
std::shared_ptr< const json::Object > getNextTrackingData()
get tracking information from the output tracking cache
Definition: output.cpp:446
associatorinterface.h
glass3::util::WorkState work() override
output background work function
Definition: output.cpp:611
output()
output constructor
Definition: output.cpp:36
glass3::util::ThreadBaseClass class
Definition: threadbaseclass.h:34
~output()
output destructor
Definition: output.cpp:68
void sendToOutput(std::shared_ptr< json::Object > message) override
output message sending function
Definition: output.cpp:256
void setAssociator(glass3::util::iAssociator *associator)
Function to set the associator interface pointer.
Definition: output.cpp:1289