6 #include <rosmon_msgs/State.h>
15 const std::string& diagnosticsPrefix)
18 , m_diagnosticsEnabled(enableDiagnostics)
32 rosmon_msgs::State
state;
40 rosmon_msgs::NodeState nstate;
41 nstate.name = node->name();
42 nstate.ns = node->namespaceString();
47 nstate.state = nstate.RUNNING;
50 nstate.state = nstate.CRASHED;
53 nstate.state = nstate.IDLE;
56 nstate.state = nstate.WAITING;
59 nstate.state = nstate.IDLE;
63 nstate.restart_count = node->restartCount();
65 nstate.user_load =
static_cast<float>(node->userLoad());
66 nstate.system_load =
static_cast<float>(node->systemLoad());
68 nstate.memory = node->memory();
70 state.nodes.push_back(nstate);
80 case rosmon_msgs::StartStopRequest::START:
83 case rosmon_msgs::StartStopRequest::STOP:
86 case rosmon_msgs::StartStopRequest::RESTART:
93 const auto trim = [](std::string& str) {
94 size_t start = str.find_first_not_of(
'/');
95 size_t end = str.find_last_not_of(
'/');
96 if(
start == std::string::npos || end == std::string::npos ||
start > end)
109 ROS_ERROR(
"Got a StartStopRequest with empty node field");
113 std::string strPattern;
120 strPattern += req.ns;
123 if(req.node[0] !=
'/')
126 strPattern += req.node;
131 reg = std::regex(strPattern);
133 catch(
const std::regex_error& e)
135 ROS_ERROR(
"Invalid regular expression: %s", e.what());
142 const std::string str_name = node->namespaceString() +
"/" + node->name();
143 if(std::regex_match(str_name, reg))
152 ROS_ERROR(
"No node matching '%s' found", strPattern.c_str());
164 rosmon_msgs::State
state;