<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">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://'">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 current.name == "mobile_base_nodelet_manager: Battery":</div><div> <span class="Apple-tab-span" style="white-space:pre"> </span> for value in current.values:</div><div><span class="Apple-tab-span" style="white-space:pre"> </span> if value.key == "Charge (Ah)":</div><div><span class="Apple-tab-span" style="white-space:pre"> </span> kobuki_charge = value.value</div><div><span class="Apple-tab-span" style="white-space:pre"> </span> if value.key == "Percent":</div><div><span class="Apple-tab-span" style="white-space:pre"> </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 class="Apple-tab-span" style="white-space:pre"> </span>sys.stdout.flush()</div><div><span class="Apple-tab-span" style="white-space:pre"> </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 class="Apple-tab-span" style="white-space:pre"> </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 class="Apple-tab-span" style="white-space:pre"> </span> exiting(UNKNOWN)</div><div> rospy.on_shutdown(myhook)</div><div> listener()</div><div> except rospy.ROSInterruptException:</div><div> exit</div></div><div><br></div><div><div apple-content-edited="true">-- <br>Guillaume Schreiner<br>Research Engineer<br>Network Research Group<span class="Apple-tab-span" style="white-space: pre;"> </span><br>ICube - UMR CNRS 7357<br>Strasbourg University <br></div><div apple-content-edited="true"><br></div>
<br><div><div>Le 25 juin 2014 à 13:47, Dominik Kirchner <<a href="mailto:kirchner@vs.uni-kassel.de">kirchner@vs.uni-kassel.de</a>> a écrit :</div><br class="Apple-interchange-newline"><blockquote type="cite">
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
<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 class="moz-txt-link-freetext" href="http://wiki.ros.org/diagnostics/Tutorials">http://wiki.ros.org/diagnostics/Tutorials</a>.<br>
<br>
Best Regards,<br>
Dominik Kirchner<br>
<br>
<br>
<div class="moz-cite-prefix">On 24.06.2014 22:40, Felipe Roman
wrote:<br>
</div>
<blockquote cite="mid:CADsnxaRK=gxUFAbEmBj8Y_Rpnj0wc_SmzjQ7vZdDFMiVW5jrUA@mail.gmail.com" 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 moz-do-not-send="true" href="http://au.linkedin.com/in/feliperoman" target="_blank">http://au.linkedin.com/in/feliperoman</a>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
ros-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:ros-users@lists.ros.org">ros-users@lists.ros.org</a>
<a class="moz-txt-link-freetext" href="http://lists.ros.org/mailman/listinfo/ros-users">http://lists.ros.org/mailman/listinfo/ros-users</a>
</pre>
</blockquote>
<br>
<pre class="moz-signature" cols="72">--
--
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-- Dominik Kirchner - <a class="moz-txt-link-abbreviated" href="mailto:kirchner@vs.uni-kassel.de">kirchner@vs.uni-kassel.de</a> - T. +49 561 804-6279
-- Univ. Kassel - FB 16, Wilhelmshöher Allee 73, D-34121 Kassel
-- <a class="moz-txt-link-freetext" href="http://www.uni-kassel.de/eecs/fachgebiete/vs/team/person/677-Dominik-Kirchner.html">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">ros-users@lists.ros.org</a><br>http://lists.ros.org/mailman/listinfo/ros-users<br></blockquote></div><br></div></body></html>