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 fullName () const
 Full name including namespace. More...
 
bool isMuted () const
 
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...
 
void setMuted (bool muted)
 
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 (double elapsedTimeInTicks)
 
double userLoad () const
 Estimate of the userspace load. More...
 
double systemLoad () const
 Estimate of the kernelspace load. More...
 
uint64_t memory () const
 Total system memory used by the node. More...
 
unsigned int restartCount () const
 
uint64_t memoryLimit () const
 
double cpuLimit () const
 

Public Attributes

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

Private Types

enum  Command { CMD_RUN, CMD_STOP, CMD_RESTART }
 

Private Member Functions

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

Private Attributes

Command m_command
 
std::string m_debuggerCommand
 
int m_exitCode
 
int m_fd = -1
 
FDWatcher::Ptr m_fdWatcher
 
bool m_firstStart = true
 
std::string m_lastWorkingDirectory
 
launch::Node::ConstPtr m_launchNode
 
uint64_t m_memory = 0
 
bool m_muted = false
 
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
 
boost::circular_buffer< char > m_stderrBuffer
 
int m_stderrFD = -1
 
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 25 of file node_monitor.h.

Member Typedef Documentation

Definition at line 29 of file node_monitor.h.

Definition at line 28 of file node_monitor.h.

Member Enumeration Documentation

Enumerator
CMD_RUN 
CMD_STOP 
CMD_RESTART 

Definition at line 197 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 32 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 93 of file node_monitor.cpp.

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

Definition at line 136 of file node_monitor.cpp.

Member Function Documentation

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

Definition at line 758 of file node_monitor.cpp.

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

Definition at line 764 of file node_monitor.cpp.

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

Definition at line 751 of file node_monitor.cpp.

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

Definition at line 322 of file node_monitor.cpp.

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

Definition at line 424 of file node_monitor.cpp.

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

Definition at line 379 of file node_monitor.cpp.

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

Definition at line 144 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 89 of file node_monitor.h.

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

Definition at line 155 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 97 of file node_monitor.h.

void rosmon::monitor::NodeMonitor::endStatUpdate ( double  elapsedTimeInTicks)

Definition at line 769 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 352 of file node_monitor.cpp.

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

Full name including namespace.

Definition at line 169 of file node_monitor.h.

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

Definition at line 590 of file node_monitor.cpp.

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

Definition at line 184 of file node_monitor.h.

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 712 of file node_monitor.cpp.

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

Definition at line 567 of file node_monitor.cpp.

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

Definition at line 573 of file node_monitor.cpp.

uint64_t 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 146 of file node_monitor.h.

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

Definition at line 152 of file node_monitor.h.

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

Node name.

Definition at line 161 of file node_monitor.h.

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

Node namespace.

Definition at line 165 of file node_monitor.h.

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

Node PID.

Definition at line 175 of file node_monitor.h.

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

Restart the node.

Definition at line 333 of file node_monitor.cpp.

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

Definition at line 149 of file node_monitor.h.

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

Is the node running?

Definition at line 360 of file node_monitor.cpp.

void rosmon::monitor::NodeMonitor::setMuted ( bool  muted)

Definition at line 775 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 344 of file node_monitor.cpp.

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

Start the node.

Definition at line 175 of file node_monitor.cpp.

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

Get process state.

Definition at line 365 of file node_monitor.cpp.

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

Stop the node.

Definition at line 301 of file node_monitor.cpp.

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

Node stop timeout.

Definition at line 179 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 135 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 126 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 195 of file node_monitor.h.

boost::signals2::signal<void(LogEvent)> 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 192 of file node_monitor.h.

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

Definition at line 233 of file node_monitor.h.

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

Definition at line 237 of file node_monitor.h.

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

Definition at line 228 of file node_monitor.h.

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

Definition at line 226 of file node_monitor.h.

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

Definition at line 220 of file node_monitor.h.

bool rosmon::monitor::NodeMonitor::m_firstStart = true
private

Definition at line 251 of file node_monitor.h.

std::string rosmon::monitor::NodeMonitor::m_lastWorkingDirectory
private

Definition at line 248 of file node_monitor.h.

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

Definition at line 218 of file node_monitor.h.

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

Definition at line 245 of file node_monitor.h.

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

Definition at line 253 of file node_monitor.h.

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

Definition at line 225 of file node_monitor.h.

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

Definition at line 247 of file node_monitor.h.

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

Definition at line 249 of file node_monitor.h.

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

Definition at line 239 of file node_monitor.h.

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

Definition at line 235 of file node_monitor.h.

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

Definition at line 231 of file node_monitor.h.

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

Definition at line 222 of file node_monitor.h.

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

Definition at line 223 of file node_monitor.h.

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

Definition at line 227 of file node_monitor.h.

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

Definition at line 230 of file node_monitor.h.

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

Definition at line 244 of file node_monitor.h.

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

Definition at line 242 of file node_monitor.h.

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

Definition at line 243 of file node_monitor.h.

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

Definition at line 241 of file node_monitor.h.


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


rosmon_core
Author(s): Max Schwarz
autogenerated on Sat Jan 9 2021 03:35:43