<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>