29 #ifndef SWRI_ROSCPP_SERVICE_SERVER_H_ 30 #define SWRI_ROSCPP_SERVICE_SERVER_H_ 47 template<
class MReq,
class MRes,
class T>
49 const std::string &service,
50 bool(T::*srv_func)(MReq &, MRes &),
53 template<
class MReq,
class MRes,
class T>
55 const std::string &service,
59 template<
class MReq,
class MRes,
class T>
61 const std::string &service,
62 bool(T::*srv_func)(
const std::string &,
const MReq &, MRes &),
117 const std::string &
name,
126 impl_ = boost::make_shared<ServiceServerImpl>();
129 template<
class MReq,
class MRes,
class T>
132 const std::string &service,
133 bool(T::*srv_func)(MReq &, MRes &),
138 nh, service, srv_func, obj));
141 template<
class MReq,
class MRes,
class T>
144 const std::string &service,
150 nh, service, srv_func, obj));
153 template<
class MReq,
class MRes,
class T>
156 const std::string &service,
157 bool(T::*srv_func)(
const std::string &,
const MReq &, MRes &),
162 nh, service, srv_func, obj));
168 bool instrument_per_client = impl_->instrumentPerClient();
169 bool log_calls = impl_->logCalls();
171 impl_->setInstrumentPerClient(instrument_per_client);
172 impl_->setLogCalls(log_calls);
179 impl_->resetStatistics();
185 return impl_->unmappedService();
191 return impl_->mappedService();
197 return impl_->totalStats();
203 impl_->setInstrumentPerClient(enable);
209 return impl_->instrumentPerClient();
215 return impl_->clientNames();
220 const std::string &
name)
const 222 return impl_->clientStatistics(name);
228 impl_->setLogCalls(enable);
234 return impl_->logCalls();
240 const std::string &
name,
246 typedef diagnostic_msgs::DiagnosticStatus
DS;
249 status.
mergeSummaryf(DS::ERROR,
"Last %s service called failed", name.c_str());
250 }
else if (stats.
failed()) {
251 status.
mergeSummaryf(DS::ERROR,
"%s service calls have failed.", name.c_str());
258 status.
addf(name +
"service name",
"%s -> %s",
265 status.
addf(name +
"service calls",
"%d failed / %d calls",
270 status.
addf(name +
"service call time",
"%.2f [s] (%.2f [s] - %.2f [s])",
279 for (
size_t i = 0; i < names.size(); i++) {
282 if (flags & DIAG_SERVINGS) {
283 status.
addf(name +
" calls from " + names[i],
"%d failed / %d calls",
288 if (flags & DIAG_TIMING) {
289 status.
addf(name +
" calls from " + names[i] +
" time",
"%.2f [s] (%.2f [s] - %.2f [s])",
298 #endif // SWRI_ROSCPP_SERVICE_SERVER_H_
void appendDiagnostics(diagnostic_updater::DiagnosticStatusWrapper &status, const std::string &name, const int flags)
bool instrumentPerClient() const
void setLogCalls(bool enable)
const std::string & unmappedService() const
ros::WallDuration meanTime() const
ServiceServerStatistics clientStatistics(const std::string &name) const
void addf(const std::string &key, const char *format,...)
const std::string & mappedService() const
ros::WallDuration minTime() const
ServiceServer & operator=(const ServiceServer &other)
ros::WallDuration maxTime() const
void setInstrumentPerClient(bool enable)
const ServiceServerStatistics & statistics() const
boost::shared_ptr< ServiceServerImpl > impl_
void mergeSummaryf(unsigned char lvl, const char *format,...)
std::vector< std::string > clientNames() const
diagnostic_msgs::DiagnosticStatus DS