<div dir="ltr">Hi Guillaume, <div><br></div><div>Thank you very much for the example. I will have a look on that. Actually I already developed a C++ plugin but now I am trying to figure out how to simulate the robot side (create and publish information on a diagnostic topic) for test integration with Nagios.</div>
<div><br></div><div>Let me know if my source code could be useful and I can send here too.</div><div><br></div><div>Regards,</div><div>Roman<br><table cellpadding="0" class="" style="font-family:arial,sans-serif;font-size:13px">
<tbody><tr class=""><td class="" style="width:1187px"><table cellpadding="0" class="" style="width:1187px"><tbody></tbody></table></td></tr></tbody></table></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Wed, Jun 25, 2014 at 10:06 AM, Guillaume Schreiner <span dir="ltr"><<a href="mailto:schreiner@unistra.fr" target="_blank">schreiner@unistra.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word">Hello,<div><br></div><div>here’s an example of Nagios plugin written in Python interacting with ROS framework.</div><div> </div><div><div>#!/usr/bin/env python</div><div><br></div><div>import sys</div>
<div>sys.path.append("/home/schreiner/catkin_ws_hydro/install/lib/python2.7/dist-packages")</div><div>sys.path.append("/opt/ros/hydro/lib/python2.7/dist-packages")</div><div><br></div><div>import os</div>
<div>os.environ['PATH'] = "/opt/ros/hydro/bin:" + os.environ['PATH']</div><div>os.environ['ROS_PACKAGE_PATH']= '/home/schreiner/catkin_ws_hydro/install/share:/home/schreiner/catkin_ws_hydro/install/stacks:/opt/ros/hydro/share:/opt/ros/hydro/stacks'</div>
<div><br></div><div>from optparse import OptionParser</div><div><br></div><div>import rospy</div><div>import rosnode</div><div>import os</div><div>import roslib</div><div>import sys</div><div>roslib.load_manifest('linux_hardware')</div>
<div>from linux_hardware.msg import LaptopChargeStatus</div><div>from diagnostic_msgs.msg import DiagnosticStatus, DiagnosticArray, KeyValue</div><div><br></div><div># Exit statuses recognized by Nagios</div><div>UNKNOWN = -1</div>
<div>OK = 0</div><div>WARNING = 1</div><div>CRITICAL = 2</div><div><br></div><div># TEMPLATE FOR READING PARAMETERS FROM COMMANDLINE</div><div>parser = OptionParser()</div><div>parser.add_option("-H", "--host", dest="host", default='localhost', help="A message to print after OK - ")</div>
<div>parser.add_option("-w", "--warning", dest="warning", default='40', help="A message to print after OK - ")</div><div>parser.add_option("-c", "--critical", dest="critical", default='20', help="A message to print after OK - ")</div>
<div>(options, args) = parser.parse_args()</div><div><br></div><div># Set turtlebot ROS Master URI</div><div>os.environ['ROS_MASTER_URI'] = '<a href="http://'" target="_blank">http://'</a> + options.host + ':11311'</div>
<div><br></div><div>kobuki_charge = None</div><div>kobuki_percentage = None</div><div><br></div><div>def callback_kobuki(data):</div><div> global kobuki_charge</div><div> global kobuki_percentage</div><div><br></div>
<div> ready = False</div><div><br></div><div> while not ready:</div><div> for current in data.status:</div><div> if <a href="http://current.name" target="_blank">current.name</a> == "mobile_base_nodelet_manager: Battery":</div>
<div> <span style="white-space:pre-wrap"> </span> for value in current.values:</div><div><span style="white-space:pre-wrap"> </span> if value.key == "Charge (Ah)":</div><div><span style="white-space:pre-wrap"> </span> kobuki_charge = value.value</div>
<div><span style="white-space:pre-wrap"> </span> if value.key == "Percent":</div><div><span style="white-space:pre-wrap"> </span> kobuki_percentage = value.value</div><div> ready = True</div>
<div><br></div><div> time = rospy.get_time()</div><div> kobuki_percentage = int(float(kobuki_percentage))</div><div> rospy.signal_shutdown(0)</div><div><br></div><div>def listener():</div><div> rospy.init_node('check_battery_kobuki', anonymous=True, disable_signals=True)</div>
<div> rospy.Subscriber("diagnostics", DiagnosticArray , callback_kobuki)</div><div> rospy.spin()</div><div><br></div><div>def myhook():</div><div> if kobuki_percentage < int(options.critical):</div><div>
print "CRITICAL - Kobuki Charge Percent %s | kobuki_battery=%s" % (kobuki_percentage,kobuki_percentage)</div><div> exiting(CRITICAL)</div><div> elif kobuki_percentage < int(options.warning):</div>
<div> print "WARNING - Kobuki Charge Percent %s | kobuki_battery=%s" % (kobuki_percentage,kobuki_percentage)</div><div> exiting(WARNING)</div><div> else:</div><div> print "OK - Kobuki Charge Percent %s | kobuki_battery=%s" % (kobuki_percentage,kobuki_percentage)</div>
<div> exiting(OK)</div><div><br></div><div>def exiting(value):</div><div> try:</div><div><span style="white-space:pre-wrap"> </span>sys.stdout.flush()</div><div><span style="white-space:pre-wrap"> </span>os._exit(value)</div>
<div> except:</div><div> pass</div><div><br></div><div>if __name__ == '__main__':</div><div> try:</div><div> master = rospy.get_master()</div><div> master.getPid()</div><div> except Exception:</div>
<div> print "UNKNOWN - Roscore not available"</div><div><span style="white-space:pre-wrap"> </span>exiting(UNKNOWN)</div><div><br></div><div> try:</div><div> if len(sys.argv) < 5:</div><div> print "usage %s -c <critical> -w <warning>" % (sys.argv[0])</div>
<div><span style="white-space:pre-wrap"> </span> exiting(UNKNOWN)</div><div> rospy.on_shutdown(myhook)</div><div> listener()</div><div> except rospy.ROSInterruptException:</div><div> exit</div></div>
<span class="HOEnZb"><font color="#888888"><div><br></div></font></span><div><span class="HOEnZb"><font color="#888888"><div>-- <br>Guillaume Schreiner<br>Research Engineer<br>Network Research Group<span style="white-space:pre-wrap"> </span><br>
ICube - UMR CNRS 7357<br>Strasbourg University <br></div><div><br></div>
<br></font></span><div><span class="HOEnZb"><font color="#888888"><div>Le 25 juin 2014 à 13:47, Dominik Kirchner <<a href="mailto:kirchner@vs.uni-kassel.de" target="_blank">kirchner@vs.uni-kassel.de</a>> a écrit :</div>
</font></span><div><div class="h5"><br><blockquote type="cite">
<div bgcolor="#FFFFFF" text="#000000">
Hi,<br>
<br>
the Nagios plugin needs to pubish its monitoring data on the
/diagnostic topic. Msg type needs to be a DiagnosticArray with
DiagnosticStatus items for each entity you have monitored. <br>
<br>
You will find good tutorials on how use the ROS diagnostic stack on
<a href="http://wiki.ros.org/diagnostics/Tutorials" target="_blank">http://wiki.ros.org/diagnostics/Tutorials</a>.<br>
<br>
Best Regards,<br>
Dominik Kirchner<br>
<br>
<br>
<div>On <a href="tel:24.06.2014%2022" value="+12406201422" target="_blank">24.06.2014 22</a>:40, Felipe Roman
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi Everyone,
<div><br>
</div>
<div>Has anyone have used ROS diagnostics before ? I am working
on a research work to integrate ROS with one IT monitoring
tool (Nagios). Basically this IT monitoring tool will be able
to get information about the Robot Sensor Status.</div>
<div><br>
</div>
<div>I already have implemented the communication between them
(Nagios plugin reading ROS service information) and now I
would like to know how to create and configure a ROS
diagnostic topic to test it.</div>
<div><br>
</div>
<div>Any ideas will be welcome, thanks in advance<br clear="all">
<div><br>
</div>
-- <br>
Best Regards,<br>
Felipe Roman<br>
Phone 55 51 8454 8110<br>
LinkedIn <a href="http://au.linkedin.com/in/feliperoman" target="_blank">http://au.linkedin.com/in/feliperoman</a>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
ros-users mailing list
<a href="mailto:ros-users@lists.ros.org" target="_blank">ros-users@lists.ros.org</a>
<a href="http://lists.ros.org/mailman/listinfo/ros-users" target="_blank">http://lists.ros.org/mailman/listinfo/ros-users</a>
</pre>
</blockquote>
<br>
<pre cols="72">--
--
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Dominik Kirchner - <a href="mailto:kirchner@vs.uni-kassel.de" target="_blank">kirchner@vs.uni-kassel.de</a> - T. <a href="tel:%2B49%20561%20804-6279" value="+495618046279" target="_blank">+49 561 804-6279</a>
-- Univ. Kassel - FB 16, Wilhelmshöher Allee 73, D-34121 Kassel
-- <a href="http://www.uni-kassel.de/eecs/fachgebiete/vs/team/person/677-Dominik-Kirchner.html" target="_blank">http://www.uni-kassel.de/eecs/fachgebiete/vs/team/person/677-Dominik-Kirchner.html</a>
------------------------------------------------------------------------
</pre>
</div>
_______________________________________________<br>ros-users mailing list<br><a href="mailto:ros-users@lists.ros.org" target="_blank">ros-users@lists.ros.org</a><br><a href="http://lists.ros.org/mailman/listinfo/ros-users" target="_blank">http://lists.ros.org/mailman/listinfo/ros-users</a><br>
</blockquote></div></div></div><br></div></div><br>_______________________________________________<br>
ros-users mailing list<br>
<a href="mailto:ros-users@lists.ros.org">ros-users@lists.ros.org</a><br>
<a href="http://lists.ros.org/mailman/listinfo/ros-users" target="_blank">http://lists.ros.org/mailman/listinfo/ros-users</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best Regards,<br>Felipe Roman<br>Phone 55 51 8454 8110<br>LinkedIn <a href="http://au.linkedin.com/in/feliperoman" target="_blank">http://au.linkedin.com/in/feliperoman</a>
</div>