FairMQ  1.4.33
C++ Message Queuing Library and Framework
Monitor.h
1 /********************************************************************************
2  * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
8 #ifndef FAIR_MQ_SHMEM_MONITOR_H_
9 #define FAIR_MQ_SHMEM_MONITOR_H_
10 
11 #include <thread>
12 #include <chrono>
13 #include <atomic>
14 #include <string>
15 #include <stdexcept>
16 #include <unordered_map>
17 #include <utility> // pair
18 #include <vector>
19 
20 namespace fair::mq::shmem
21 {
22 
23 struct SessionId
24 {
25  std::string sessionId;
26  explicit operator std::string() const { return sessionId; }
27 };
28 
29 struct ShmId
30 {
31  std::string shmId;
32  explicit operator std::string() const { return shmId; }
33 };
34 
36 {
37  BufferDebugInfo(size_t offset, pid_t pid, size_t size, uint64_t creationTime)
38  : fOffset(offset)
39  , fPid(pid)
40  , fSize(size)
41  , fCreationTime(creationTime)
42  {}
43 
44  size_t fOffset;
45  pid_t fPid;
46  size_t fSize;
47  uint64_t fCreationTime;
48 };
49 
50 class Monitor
51 {
52  public:
53  Monitor(const std::string& shmId, bool selfDestruct, bool interactive, bool viewOnly, unsigned int timeoutInMS, unsigned int intervalInMS, bool runAsDaemon, bool cleanOnExit);
54 
55  Monitor(const Monitor&) = delete;
56  Monitor operator=(const Monitor&) = delete;
57 
58  virtual ~Monitor();
59 
60  void CatchSignals();
61  void Run();
62 
66  static std::vector<std::pair<std::string, bool>> Cleanup(const ShmId& shmId, bool verbose = true);
70  static std::vector<std::pair<std::string, bool>> Cleanup(const SessionId& sessionId, bool verbose = true);
74  static std::vector<std::pair<std::string, bool>> CleanupFull(const ShmId& shmId, bool verbose = true);
78  static std::vector<std::pair<std::string, bool>> CleanupFull(const SessionId& sessionId, bool verbose = true);
79 
80  static void PrintDebugInfo(const ShmId& shmId);
81  static void PrintDebugInfo(const SessionId& shmId);
82  static std::unordered_map<uint16_t, std::vector<BufferDebugInfo>> GetDebugInfo(const ShmId& shmId);
83  static std::unordered_map<uint16_t, std::vector<BufferDebugInfo>> GetDebugInfo(const SessionId& shmId);
84 
85  static bool RemoveObject(const std::string& name);
86  static bool RemoveFileMapping(const std::string& name);
87  static bool RemoveQueue(const std::string& name);
88  static bool RemoveMutex(const std::string& name);
89  static bool RemoveCondition(const std::string& name);
90 
91  struct DaemonPresent : std::runtime_error { using std::runtime_error::runtime_error; };
92 
93  private:
94  void PrintHelp();
95  void MonitorHeartbeats();
96  void CheckSegment();
97  void Interactive();
98  void SignalMonitor();
99 
100  bool fSelfDestruct; // will self-destruct after the memory has been closed
101  bool fInteractive; // running in interactive mode
102  bool fViewOnly; // view only mode
103  bool fIsDaemon;
104  bool fSeenOnce; // true is segment has been opened successfully at least once
105  bool fCleanOnExit;
106  unsigned int fTimeoutInMS;
107  unsigned int fIntervalInMS;
108  std::string fShmId;
109  std::string fSegmentName;
110  std::string fManagementSegmentName;
111  std::string fControlQueueName;
112  std::atomic<bool> fTerminating;
113  std::atomic<bool> fHeartbeatTriggered;
114  std::chrono::high_resolution_clock::time_point fLastHeartbeat;
115  std::thread fSignalThread;
116  std::unordered_map<std::string, std::chrono::high_resolution_clock::time_point> fDeviceHeartbeats;
117 };
118 
119 } // namespace fair::mq::shmem
120 
121 #endif /* FAIR_MQ_SHMEM_MONITOR_H_ */
fair::mq::shmem::SessionId
Definition: Monitor.h:30
fair::mq::shmem::Monitor::CleanupFull
static std::vector< std::pair< std::string, bool > > CleanupFull(const ShmId &shmId, bool verbose=true)
Cleanup all shared memory artifacts created by devices and monitors.
Definition: Monitor.cxx:546
fair::mq::shmem::ShmId
Definition: Monitor.h:36
fair::mq::shmem::Monitor::DaemonPresent
Definition: Monitor.h:97
fair::mq::shmem::Monitor
Definition: Monitor.h:57
fair::mq::shmem::Monitor::Cleanup
static std::vector< std::pair< std::string, bool > > Cleanup(const ShmId &shmId, bool verbose=true)
Cleanup all shared memory artifacts created by devices.
Definition: Monitor.cxx:466
fair::mq::shmem::BufferDebugInfo
Definition: Monitor.h:42
fair::mq::shmem
Definition: Common.h:33

privacy