node_monitor.h
Go to the documentation of this file.
1 // Monitors a single node process
2 // Author: Max Schwarz <max.schwarz@uni-bonn.de>
3 
4 #ifndef ROSMON_MONITOR_NODE_MONITOR_H
5 #define ROSMON_MONITOR_NODE_MONITOR_H
6 
7 #include "../launch/node.h"
8 #include "../launch/launch_config.h"
9 #include "../fd_watcher.h"
10 #include "../log_event.h"
11 #include "log_parser.h"
12 
13 #include <ros/node_handle.h>
14 
15 #include <boost/signals2.hpp>
16 #include <boost/circular_buffer.hpp>
17 
18 namespace rosmon
19 {
20 
21 namespace monitor
22 {
23 
28 {
29 public:
30  typedef std::shared_ptr<NodeMonitor> Ptr;
31  typedef std::shared_ptr<NodeMonitor> ConstPtr;
32 
34  enum State
35  {
40  };
41 
50  const launch::LaunchConfig::ConstPtr& config,
51  const launch::Node::ConstPtr& launchNode,
52  FDWatcher::Ptr fdWatcher, ros::NodeHandle& nh);
53  ~NodeMonitor();
54 
56 
57 
59  void start();
60 
62  void stop(bool restart = false);
63 
65  void restart();
66 
72  void shutdown();
73 
79  void forceExit();
80 
82  bool running() const;
83 
85  State state() const;
87 
89 
90 
92  inline bool coredumpAvailable() const
93  { return !m_debuggerCommand.empty(); }
94 
100  inline std::string debuggerCommand() const
101  { return m_debuggerCommand; }
102 
112  void launchDebugger();
114 
116 
117 
118  void beginStatUpdate();
119  void addCPUTime(uint64_t userTime, uint64_t systemTime);
120  void addMemory(uint64_t memoryBytes);
121  void endStatUpdate(double elapsedTimeInTicks);
122 
129  inline double userLoad() const
130  { return m_userLoad; }
131 
138  inline double systemLoad() const
139  { return m_systemLoad; }
140 
149  inline uint64_t memory() const
150  { return m_memory; }
151 
152  inline unsigned int restartCount() const
153  { return m_restartCount; }
154 
155  inline int numRespawnsAllowed() const
156  { return m_launchNode->numRespawnsAllowed(); }
157 
158  inline uint64_t memoryLimit() const
159  { return m_launchNode->memoryLimitByte();}
160 
161  inline double cpuLimit() const
162  { return m_launchNode->cpuLimit();}
163 
165 
167  inline std::string name() const
168  { return m_launchNode->name(); }
169 
171  inline std::string namespaceString() const
172  { return m_launchNode->namespaceString(); }
173 
175  inline std::string fullName() const
176  {
177  return namespaceString() + "/" + name();
178  }
179 
181  inline int pid() const
182  { return m_pid; }
183 
185  inline double stopTimeout() const
186  { return m_launchNode->stopTimeout(); }
187 
188  void setMuted(bool muted);
189 
190  bool isMuted() const
191  { return m_muted; }
192 
198  boost::signals2::signal<void(LogEvent)> logMessageSignal;
199 
201  boost::signals2::signal<void(std::string)> exitedSignal;
202 private:
203  enum Command
204  {
208  };
209 
210  std::vector<std::string> composeCommand() const;
211 
212  void communicate();
213  void communicateStderr();
214 
215  template<typename... Args>
216  void log(const char* format, Args&& ... args);
217 
218  template<typename... Args>
219  void logTyped(LogEvent::Type type, const char* format, Args&& ... args);
220 
221  void checkStop();
222  void gatherCoredump(int signal);
223 
224  std::pair<int,int> createPTY();
225 
228 
230 
233 
234  int m_pid = -1;
235  int m_fd = -1;
236  int m_stderrFD = -1;
238 
241 
243 
245 
246  std::string m_debuggerCommand;
247 
248  unsigned int m_restartCount = 0;
249 
250  uint64_t m_userTime = 0;
251  uint64_t m_systemTime = 0;
252  double m_userLoad = 0.0;
253  double m_systemLoad = 0.0;
254  uint64_t m_memory = 0;
255 
259 
260  bool m_firstStart = true;
261 
262  bool m_muted = false;
263 };
264 
265 }
266 
267 }
268 
269 #endif
rosmon::monitor::NodeMonitor::isMuted
bool isMuted() const
Definition: node_monitor.h:190
rosmon::monitor::NodeMonitor::addCPUTime
void addCPUTime(uint64_t userTime, uint64_t systemTime)
Definition: node_monitor.cpp:781
rosmon::monitor::NodeMonitor::m_userTime
uint64_t m_userTime
Definition: node_monitor.h:250
rosmon::monitor::NodeMonitor::State
State
Process state.
Definition: node_monitor.h:34
rosmon::monitor::NodeMonitor::numRespawnsAllowed
int numRespawnsAllowed() const
Definition: node_monitor.h:155
node_handle.h
rosmon::monitor::NodeMonitor::forceExit
void forceExit()
Finish shutdown sequence.
Definition: node_monitor.cpp:396
rosmon
Definition: diagnostics_publisher.cpp:34
rosmon::monitor::NodeMonitor::m_processWorkingDirectory
std::string m_processWorkingDirectory
Definition: node_monitor.h:256
rosmon::monitor::NodeMonitor::debuggerCommand
std::string debuggerCommand() const
What command should we use to debug the coredump?
Definition: node_monitor.h:100
rosmon::monitor::NodeMonitor::logMessageSignal
boost::signals2::signal< void(LogEvent)> logMessageSignal
Logging signal.
Definition: node_monitor.h:198
rosmon::monitor::NodeMonitor::stop
void stop(bool restart=false)
Stop the node.
Definition: node_monitor.cpp:345
rosmon::LogEvent
Definition: log_event.h:13
boost::shared_ptr< FDWatcher >
rosmon::monitor::NodeMonitor::stopTimeout
double stopTimeout() const
Node stop timeout.
Definition: node_monitor.h:185
rosmon::monitor::NodeMonitor::m_fdWatcher
FDWatcher::Ptr m_fdWatcher
Definition: node_monitor.h:229
rosmon::monitor::NodeMonitor::CMD_RESTART
@ CMD_RESTART
Definition: node_monitor.h:207
rosmon::monitor::NodeMonitor::m_muted
bool m_muted
Definition: node_monitor.h:262
rosmon::monitor::NodeMonitor::m_fd
int m_fd
Definition: node_monitor.h:235
rosmon::monitor::NodeMonitor::m_launchNode
launch::Node::ConstPtr m_launchNode
Definition: node_monitor.h:227
rosmon::monitor::NodeMonitor::memoryLimit
uint64_t memoryLimit() const
Definition: node_monitor.h:158
rosmon::monitor::NodeMonitor::setMuted
void setMuted(bool muted)
Definition: node_monitor.cpp:798
rosmon::monitor::NodeMonitor::Command
Command
Definition: node_monitor.h:203
rosmon::monitor::NodeMonitor::m_stdoutParser
LogParser m_stdoutParser
Definition: node_monitor.h:231
rosmon::LogEvent::Type
Type
Definition: log_event.h:16
ros::WallTimer
rosmon::monitor::NodeMonitor::createPTY
std::pair< int, int > createPTY()
Definition: node_monitor.cpp:709
rosmon::monitor::NodeMonitor::coredumpAvailable
bool coredumpAvailable() const
Is a core dump available from a crash under rosmon control?
Definition: node_monitor.h:92
rosmon::monitor::NodeMonitor::log
void log(const char *format, Args &&... args)
Definition: node_monitor.cpp:564
rosmon::monitor::NodeMonitor::communicateStderr
void communicateStderr()
Definition: node_monitor.cpp:423
rosmon::monitor::NodeMonitor::pid
int pid() const
Node PID.
Definition: node_monitor.h:181
rosmon::monitor::NodeMonitor::CMD_RUN
@ CMD_RUN
Definition: node_monitor.h:205
rosmon::monitor::NodeMonitor::Ptr
std::shared_ptr< NodeMonitor > Ptr
Definition: node_monitor.h:30
rosmon::monitor::NodeMonitor::m_userLoad
double m_userLoad
Definition: node_monitor.h:252
rosmon::monitor::NodeMonitor::cpuLimit
double cpuLimit() const
Definition: node_monitor.h:161
rosmon::monitor::NodeMonitor::endStatUpdate
void endStatUpdate(double elapsedTimeInTicks)
Definition: node_monitor.cpp:792
rosmon::monitor::NodeMonitor::m_memory
uint64_t m_memory
Definition: node_monitor.h:254
rosmon::monitor::NodeMonitor::m_processWorkingDirectoryCreated
bool m_processWorkingDirectoryCreated
Definition: node_monitor.h:258
log_parser.h
rosmon::launch::LaunchConfig::ConstPtr
std::shared_ptr< const LaunchConfig > ConstPtr
Definition: launch_config.h:179
rosmon::monitor::NodeMonitor::name
std::string name() const
Node name.
Definition: node_monitor.h:167
rosmon::monitor::NodeMonitor::m_debuggerCommand
std::string m_debuggerCommand
Definition: node_monitor.h:246
rosmon::monitor::NodeMonitor::ConstPtr
std::shared_ptr< NodeMonitor > ConstPtr
Definition: node_monitor.h:31
rosmon::monitor::NodeMonitor::addMemory
void addMemory(uint64_t memoryBytes)
Definition: node_monitor.cpp:787
rosmon::monitor::NodeMonitor::memory
uint64_t memory() const
Total system memory used by the node.
Definition: node_monitor.h:149
rosmon::monitor::NodeMonitor::CMD_STOP
@ CMD_STOP
Definition: node_monitor.h:206
rosmon::monitor::NodeMonitor::m_stderrFD
int m_stderrFD
Definition: node_monitor.h:236
rosmon::monitor::NodeMonitor::launchDebugger
void launchDebugger()
Launch gdb interactively.
Definition: node_monitor.cpp:735
rosmon::monitor::NodeMonitor::m_exitCode
int m_exitCode
Definition: node_monitor.h:237
rosmon::monitor::NodeMonitor::fullName
std::string fullName() const
Full name including namespace.
Definition: node_monitor.h:175
rosmon::launch::Node::ConstPtr
std::shared_ptr< const Node > ConstPtr
Definition: node.h:24
rosmon::monitor::NodeMonitor::m_restartTimer
ros::WallTimer m_restartTimer
Definition: node_monitor.h:240
rosmon::monitor::NodeMonitor::checkStop
void checkStop()
Definition: node_monitor.cpp:366
rosmon::monitor::NodeMonitor::composeCommand
std::vector< std::string > composeCommand() const
Definition: node_monitor.cpp:162
rosmon::monitor::NodeMonitor::m_systemLoad
double m_systemLoad
Definition: node_monitor.h:253
rosmon::monitor::NodeMonitor::m_pid
int m_pid
Definition: node_monitor.h:234
rosmon::monitor::NodeMonitor::~NodeMonitor
~NodeMonitor()
Definition: node_monitor.cpp:154
rosmon::monitor::NodeMonitor::NodeMonitor
NodeMonitor(const launch::LaunchConfig::ConstPtr &config, const launch::Node::ConstPtr &launchNode, FDWatcher::Ptr fdWatcher, ros::NodeHandle &nh)
Constructor.
Definition: node_monitor.cpp:93
rosmon::monitor::NodeMonitor::communicate
void communicate()
Definition: node_monitor.cpp:445
rosmon::monitor::NodeMonitor::gatherCoredump
void gatherCoredump(int signal)
Definition: node_monitor.cpp:587
rosmon::monitor::NodeMonitor::STATE_IDLE
@ STATE_IDLE
Idle (e.g. exited with code 0)
Definition: node_monitor.h:36
rosmon::monitor::NodeMonitor::STATE_RUNNING
@ STATE_RUNNING
Running.
Definition: node_monitor.h:37
rosmon::monitor::NodeMonitor::m_command
Command m_command
Definition: node_monitor.h:242
rosmon::monitor::NodeMonitor::namespaceString
std::string namespaceString() const
Node namespace.
Definition: node_monitor.h:171
rosmon::monitor::NodeMonitor::m_restartCount
unsigned int m_restartCount
Definition: node_monitor.h:248
rosmon::monitor::NodeMonitor::exitedSignal
boost::signals2::signal< void(std::string)> exitedSignal
Signalled whenever the process exits.
Definition: node_monitor.h:201
rosmon::monitor::NodeMonitor::m_lastWorkingDirectory
std::string m_lastWorkingDirectory
Definition: node_monitor.h:257
rosmon::monitor::NodeMonitor::beginStatUpdate
void beginStatUpdate()
Definition: node_monitor.cpp:774
rosmon::monitor::NodeMonitor::start
void start()
Start the node.
Definition: node_monitor.cpp:217
rosmon::monitor::NodeMonitor::m_restarting
bool m_restarting
Definition: node_monitor.h:244
rosmon::monitor::NodeMonitor::logTyped
void logTyped(LogEvent::Type type, const char *format, Args &&... args)
Definition: node_monitor.cpp:570
rosmon::monitor::NodeMonitor::userLoad
double userLoad() const
Estimate of the userspace load.
Definition: node_monitor.h:129
rosmon::monitor::NodeMonitor::state
State state() const
Get process state.
Definition: node_monitor.cpp:409
rosmon::monitor::LogParser
Definition: log_parser.h:18
rosmon::monitor::NodeMonitor::m_systemTime
uint64_t m_systemTime
Definition: node_monitor.h:251
rosmon::monitor::NodeMonitor::restartCount
unsigned int restartCount() const
Definition: node_monitor.h:152
rosmon::monitor::NodeMonitor::shutdown
void shutdown()
Start shutdown sequence.
Definition: node_monitor.cpp:388
rosmon::monitor::NodeMonitor::restart
void restart()
Restart the node.
Definition: node_monitor.cpp:377
rosmon::monitor::NodeMonitor::m_firstStart
bool m_firstStart
Definition: node_monitor.h:260
rosmon::monitor::NodeMonitor::STATE_WAITING
@ STATE_WAITING
Waiting for automatic restart after crash.
Definition: node_monitor.h:39
rosmon::monitor::NodeMonitor::systemLoad
double systemLoad() const
Estimate of the kernelspace load.
Definition: node_monitor.h:138
rosmon::monitor::NodeMonitor::m_stopCheckTimer
ros::WallTimer m_stopCheckTimer
Definition: node_monitor.h:239
rosmon::monitor::NodeMonitor::STATE_CRASHED
@ STATE_CRASHED
Crashed (i.e. exited with code != 0)
Definition: node_monitor.h:38
rosmon::monitor::NodeMonitor::running
bool running() const
Is the node running?
Definition: node_monitor.cpp:404
ros::NodeHandle
rosmon::monitor::NodeMonitor::m_launchConfig
launch::LaunchConfig::ConstPtr m_launchConfig
Definition: node_monitor.h:226
rosmon::monitor::NodeMonitor::m_stderrParser
LogParser m_stderrParser
Definition: node_monitor.h:232
rosmon::monitor::NodeMonitor
Monitors a single node process.
Definition: node_monitor.h:27


rosmon_core
Author(s): Max Schwarz
autogenerated on Wed Feb 21 2024 04:01:14