Public Types | Public Member Functions | Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
rosmon::monitor::NodeMonitor Class Reference

Monitors a single node process. More...

#include <node_monitor.h>

Public Types

typedef std::shared_ptr< NodeMonitorConstPtr
 
typedef std::shared_ptr< NodeMonitorPtr
 
enum  State { STATE_IDLE, STATE_RUNNING, STATE_CRASHED, STATE_WAITING }
 Process state. More...
 

Public Member Functions

std::string name () const
 Node name. More...
 
std::string namespaceString () const
 Node namespace. More...
 
 NodeMonitor (launch::Node::ConstPtr launchNode, FDWatcher::Ptr fdWatcher, ros::NodeHandle &nh)
 Constructor. More...
 
int pid () const
 Node PID. More...
 
double stopTimeout () const
 Node stop timeout. More...
 
 ~NodeMonitor ()
 
Starting & stopping
void start ()
 Start the node. More...
 
void stop (bool restart=false)
 Stop the node. More...
 
void restart ()
 Restart the node. More...
 
void shutdown ()
 Start shutdown sequence. More...
 
void forceExit ()
 Finish shutdown sequence. More...
 
bool running () const
 Is the node running? More...
 
State state () const
 Get process state. More...
 
Debugging
bool coredumpAvailable () const
 Is a core dump available from a crash under rosmon control? More...
 
std::string debuggerCommand () const
 What command should we use to debug the coredump? More...
 
void launchDebugger ()
 Launch gdb interactively. More...
 
Statistics
void beginStatUpdate ()
 
void addCPUTime (uint64_t userTime, uint64_t systemTime)
 
void addMemory (uint64_t memoryBytes)
 
void endStatUpdate (uint64_t elapsedTime)
 
double userLoad () const
 Estimate of the userspace load. More...
 
double systemLoad () const
 Estimate of the kernelspace load. More...
 
double memory () const
 Total system memory used by the node. More...
 
unsigned int restartCount () const
 
uint64_t memoryLimit () const
 
float cpuLimit () const
 

Public Attributes

boost::signals2::signal< void(std::string)> exitedSignal
 Signalled whenever the process exits. More...
 
boost::signals2::signal< void(std::string, std::string)> logMessageSignal
 Logging signal. More...
 

Private Types

enum  Command { CMD_RUN, CMD_STOP, CMD_RESTART }
 

Private Member Functions

void checkStop ()
 
void communicate ()
 
std::vector< std::string > composeCommand () const
 
void gatherCoredump (int signal)
 
template<typename... Args>
void log (const char *format, const Args &...args)
 

Private Attributes

Command m_command
 
std::string m_debuggerCommand
 
int m_exitCode
 
int m_fd = -1
 
FDWatcher::Ptr m_fdWatcher
 
launch::Node::ConstPtr m_launchNode
 
uint64_t m_memory = 0
 
int m_pid = -1
 
std::string m_processWorkingDirectory
 
bool m_processWorkingDirectoryCreated = false
 
unsigned int m_restartCount = 0
 
bool m_restarting
 
ros::WallTimer m_restartTimer
 
boost::circular_buffer< char > m_rxBuffer
 
ros::WallTimer m_stopCheckTimer
 
double m_systemLoad = 0.0
 
uint64_t m_systemTime = 0
 
double m_userLoad = 0.0
 
uint64_t m_userTime = 0
 

Detailed Description

Monitors a single node process.

Definition at line 24 of file node_monitor.h.

Member Typedef Documentation

Definition at line 28 of file node_monitor.h.

Definition at line 27 of file node_monitor.h.

Member Enumeration Documentation

Enumerator
CMD_RUN 
CMD_STOP 
CMD_RESTART 

Definition at line 185 of file node_monitor.h.

Process state.

Enumerator
STATE_IDLE 

Idle (e.g. exited with code 0)

STATE_RUNNING 

Running.

STATE_CRASHED 

Crashed (i.e. exited with code != 0)

STATE_WAITING 

Waiting for automatic restart after crash.

Definition at line 31 of file node_monitor.h.

Constructor & Destructor Documentation

rosmon::monitor::NodeMonitor::NodeMonitor ( launch::Node::ConstPtr  launchNode,
FDWatcher::Ptr  fdWatcher,
ros::NodeHandle nh 
)

Constructor.

Parameters
launchNodeCorresponding launch::Node instance
fdWatcherFDWatcher instance to register in
nhros::NodeHandle to use for creating timers

Definition at line 88 of file node_monitor.cpp.

rosmon::monitor::NodeMonitor::~NodeMonitor ( )

Definition at line 125 of file node_monitor.cpp.

Member Function Documentation

void rosmon::monitor::NodeMonitor::addCPUTime ( uint64_t  userTime,
uint64_t  systemTime 
)

Definition at line 628 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::addMemory ( uint64_t  memoryBytes)

Definition at line 634 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::beginStatUpdate ( )

Definition at line 621 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::checkStop ( )
private

Definition at line 292 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::communicate ( )
private

Definition at line 349 of file node_monitor.cpp.

std::vector< std::string > rosmon::monitor::NodeMonitor::composeCommand ( ) const
private

Definition at line 133 of file node_monitor.cpp.

bool rosmon::monitor::NodeMonitor::coredumpAvailable ( ) const
inline

Is a core dump available from a crash under rosmon control?

Definition at line 88 of file node_monitor.h.

float rosmon::monitor::NodeMonitor::cpuLimit ( ) const
inline

Definition at line 154 of file node_monitor.h.

std::string rosmon::monitor::NodeMonitor::debuggerCommand ( ) const
inline

What command should we use to debug the coredump?

See also
coredumpAvailable()

Definition at line 96 of file node_monitor.h.

void rosmon::monitor::NodeMonitor::endStatUpdate ( uint64_t  elapsedTime)

Definition at line 639 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::forceExit ( )

Finish shutdown sequence.

If the node is still running, this sends SIGKILL and prints a warning.

Definition at line 322 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::gatherCoredump ( int  signal)
private

Definition at line 468 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::launchDebugger ( )

Launch gdb interactively.

This opens gdb in a new terminal window. If X11 is not available, the gdb command is emitted via logMessageSignal().

If a coredump is available (see coredumpAvailable()), gdb is launched against the coredump instead of the running process.

Definition at line 582 of file node_monitor.cpp.

template<typename... Args>
void rosmon::monitor::NodeMonitor::log ( const char *  format,
const Args &...  args 
)
private

Definition at line 451 of file node_monitor.cpp.

double rosmon::monitor::NodeMonitor::memory ( ) const
inline

Total system memory used by the node.

This includes child processes. Only resident memory is counted (i.e. how much physical memory is used).

Returns
Memory usage in bytes

Definition at line 145 of file node_monitor.h.

uint64_t rosmon::monitor::NodeMonitor::memoryLimit ( ) const
inline

Definition at line 151 of file node_monitor.h.

std::string rosmon::monitor::NodeMonitor::name ( ) const
inline

Node name.

Definition at line 160 of file node_monitor.h.

std::string rosmon::monitor::NodeMonitor::namespaceString ( ) const
inline

Node namespace.

Definition at line 164 of file node_monitor.h.

int rosmon::monitor::NodeMonitor::pid ( ) const
inline

Node PID.

Definition at line 168 of file node_monitor.h.

void rosmon::monitor::NodeMonitor::restart ( )

Restart the node.

Definition at line 303 of file node_monitor.cpp.

unsigned int rosmon::monitor::NodeMonitor::restartCount ( ) const
inline

Definition at line 148 of file node_monitor.h.

bool rosmon::monitor::NodeMonitor::running ( ) const

Is the node running?

Definition at line 330 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::shutdown ( )

Start shutdown sequence.

If the node is still running, this sends SIGINT.

Definition at line 314 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::start ( )

Start the node.

Definition at line 164 of file node_monitor.cpp.

NodeMonitor::State rosmon::monitor::NodeMonitor::state ( ) const

Get process state.

Definition at line 335 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::stop ( bool  restart = false)

Stop the node.

Definition at line 273 of file node_monitor.cpp.

double rosmon::monitor::NodeMonitor::stopTimeout ( ) const
inline

Node stop timeout.

Definition at line 172 of file node_monitor.h.

double rosmon::monitor::NodeMonitor::systemLoad ( ) const
inline

Estimate of the kernelspace load.

This is the fraction of CPU time spent in kernelspace code of this node. Note that this value is relative to one CPU core.

Definition at line 134 of file node_monitor.h.

double rosmon::monitor::NodeMonitor::userLoad ( ) const
inline

Estimate of the userspace load.

This is the fraction of CPU time spent in userspace code of this node. Note that this value is relative to one CPU core.

Definition at line 125 of file node_monitor.h.

Member Data Documentation

boost::signals2::signal<void(std::string)> rosmon::monitor::NodeMonitor::exitedSignal

Signalled whenever the process exits.

Definition at line 183 of file node_monitor.h.

boost::signals2::signal<void(std::string,std::string)> rosmon::monitor::NodeMonitor::logMessageSignal

Logging signal.

Contains a log message (node name, message) to be printed or saved in a log file.

Definition at line 180 of file node_monitor.h.

Command rosmon::monitor::NodeMonitor::m_command
private

Definition at line 214 of file node_monitor.h.

std::string rosmon::monitor::NodeMonitor::m_debuggerCommand
private

Definition at line 218 of file node_monitor.h.

int rosmon::monitor::NodeMonitor::m_exitCode
private

Definition at line 209 of file node_monitor.h.

int rosmon::monitor::NodeMonitor::m_fd = -1
private

Definition at line 208 of file node_monitor.h.

FDWatcher::Ptr rosmon::monitor::NodeMonitor::m_fdWatcher
private

Definition at line 203 of file node_monitor.h.

launch::Node::ConstPtr rosmon::monitor::NodeMonitor::m_launchNode
private

Definition at line 201 of file node_monitor.h.

uint64_t rosmon::monitor::NodeMonitor::m_memory = 0
private

Definition at line 226 of file node_monitor.h.

int rosmon::monitor::NodeMonitor::m_pid = -1
private

Definition at line 207 of file node_monitor.h.

std::string rosmon::monitor::NodeMonitor::m_processWorkingDirectory
private

Definition at line 228 of file node_monitor.h.

bool rosmon::monitor::NodeMonitor::m_processWorkingDirectoryCreated = false
private

Definition at line 229 of file node_monitor.h.

unsigned int rosmon::monitor::NodeMonitor::m_restartCount = 0
private

Definition at line 220 of file node_monitor.h.

bool rosmon::monitor::NodeMonitor::m_restarting
private

Definition at line 216 of file node_monitor.h.

ros::WallTimer rosmon::monitor::NodeMonitor::m_restartTimer
private

Definition at line 212 of file node_monitor.h.

boost::circular_buffer<char> rosmon::monitor::NodeMonitor::m_rxBuffer
private

Definition at line 205 of file node_monitor.h.

ros::WallTimer rosmon::monitor::NodeMonitor::m_stopCheckTimer
private

Definition at line 211 of file node_monitor.h.

double rosmon::monitor::NodeMonitor::m_systemLoad = 0.0
private

Definition at line 225 of file node_monitor.h.

uint64_t rosmon::monitor::NodeMonitor::m_systemTime = 0
private

Definition at line 223 of file node_monitor.h.

double rosmon::monitor::NodeMonitor::m_userLoad = 0.0
private

Definition at line 224 of file node_monitor.h.

uint64_t rosmon::monitor::NodeMonitor::m_userTime = 0
private

Definition at line 222 of file node_monitor.h.


The documentation for this class was generated from the following files:


rosmon_core
Author(s): Max Schwarz
autogenerated on Wed Jul 10 2019 03:10:12