<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 5.50.4912.300" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>hi all,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>First excuse me for my english I'm a newbee in 
english and in Perl language...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I run Nagios V. 1.0b3 on a linux box (RedHat 7.3), 
and I compile it with no embedded perl. Nagios run under nagios user, and 
...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I make a perl script for openning a telnet session 
on a Cisco routeur and retrive the cpu usage, here the script :</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV><FONT face=Arial size=2><FONT 
face="Courier New" size=2>
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
  <DIV dir=ltr><FONT face=Arial>#!/usr/bin/perl</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial># écrit par Moi !</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>use strict;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>use Net::Telnet;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>use Getopt::Long;</FONT></DIV>
  <DIV dir=ltr><FONT 
  face=Arial>&Getopt::Long::config('auto_abbrev');</FONT></DIV>
  <DIV dir=ltr><FONT 
  face=Arial>#---------------------------------------</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my %ERRORS = ('UNKNOWN' , '-1',</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
                  
      'OK' , '0',</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
                  
      'WARNING', '1',</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
                  
      'CRITICAL', '2');</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>my $state = "UNKNOWN";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my ($host, $user, $pass, $warning, 
  $critical);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $telnettimeout =60;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $ltime = localtime();</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $code = -1;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial># Evaluation des paramètres passés à la 
  commande</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $status = GetOptions(</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
                  
                  
  "host=s",\$host,</FONT></DIV>
  <DIV dir=ltr><FONT 
  face=Arial>                                        
  "user=s",\$user,</FONT></DIV>
  <DIV dir=ltr><FONT 
  face=Arial>                                        
  "pass=s",\$pass,</FONT></DIV>
  <DIV dir=ltr><FONT 
  face=Arial>                                        
  "warning=s",\$warning,</FONT></DIV>
  <DIV dir=ltr><FONT 
  face=Arial>                                        
  "critical=s",\$critical,</FONT></DIV>
  <DIV dir=ltr><FONT 
  face=Arial>                                        
  );</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>usage() if ($status == 0 || ! ($host && 
  $pass ));</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial># -h means host name</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>$host = shift unless ($host);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>unless ($host) { usage(); exit (-1); 
  }</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>if ($host &&</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
      $host =~ 
  m/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-zA-Z][-a-zA-Z0-9]*(\.[a-zA-Z][-a-zA-Z0-9]*)*)$/)</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial> {</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
      $host = $1;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>} else {</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
      print "$host is not a valid host name \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
      exit (-1);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial># -u means user name not needed</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial># -p means password</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>$pass = shift unless ($pass);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>unless ($pass) { usage(); exit (-1); 
  }</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial># -w means warning</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>$warning = shift unless ($warning);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>$warning = 60 unless ($warning);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial># -c means critical</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>$critical = shift unless 
  ($critical);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>$critical = 90 unless ($critical);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial># Si tous les paramètres sont bons, on recupère 
  les info en telnet...</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $line;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my @lines;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $cpuval;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $t</FONT><FONT face=Arial>;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>    $t = new Net::Telnet (Timeout 
  => $telnettimeout);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
  $t->open($host);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>if ($user){</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
  $t->prompt("/:/");</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    @lines = 
  $t->cmd($user);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>        
  $t->prompt("/>/");</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    @lines = 
  $t->cmd($pass);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    @lines = $t->cmd("term len 
  0");</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    @lines = $t->cmd("show 
  processes cpu");</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>$line = $lines[0];</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>if ($line=~/one 
  minute\s*:\s*(\d+)\%/){</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    $cpuval = $1;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>eval{</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    
  $t->cmd("exit");</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>};</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $detail;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>my $report;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>if ($cpuval!~/^\d+$/){</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    my $report = "$ltime, 
  $detail";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    $state = 
  "UNKNOWN";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    
  nsexit($report,'UNKNOWN');</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>elsif ($cpuval < $warning){</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    $report = "$ltime, OK - Cisco 
  CPU on $host is at $cpuval %, $line";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    $state = "OK";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    
  nsexit($report,'OK');</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>elsif ($cpuval < $critical){</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    my $report = "$ltime, WARNING 
  - Cisco CPU on $host is at $cpuval %, $line";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    $state = 
  "WARNING";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    
  nsexit($report,'WARNING');</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>else{</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    #Par default CRITICAL 
  :</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    my $report = "$ltime, 
  CRITICAL - Cisco CPU on $host is at $cpuval %, $line";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    $state = 
  "CRITICAL";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    
  nsexit($report,'CRITICAL');</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial># 
  ----------------------------------------------------------------------</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>sub nsexit {</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    my ($report,$code) = 
  @_;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    $code=$state if (!defined 
  $code);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    print "$code : $report\n" if 
  (defined $report);</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>    exit 
  $ERRORS{$code};</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial># 
  ----------------------------------------------------------------------</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>sub usage {</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>print "Moniteur charge CPU 
Cisco\n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print "Ce plugin questionne un routeur cisco et 
  recupère la moyenne en % de la charge CPU depuis une minute.\n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print "Usage : \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " Les options suivantes doivent être 
  fournis : \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " -host=texte Host du serveur FTP 
  \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " -user=texte Login pour la connection, 
  pas obligatoire \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " -pass=texte Mot de passe pour la session 
  Telnet \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " -warning=pourcentage Le niveau pour le 
  Warning pas obligatoire (par defaut : 60)\n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " -critical=pourcentage Le niveau pour le 
  Critical pas obligatoire (par defaut : 90)\n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " Les options peuvent être abrégées 
  \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " Example: \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " -h=host -pa=pw -us=user -wa=warning 
  -cr=critical\n" ;</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print " Copyleft Moi \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print "This script comes with ABSOLUTELY NO 
  WARRANTY \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print "This programm is licensed under the terms 
  of the ";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>print "GNU General Public License \n 
  \n";</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>exit $ERRORS{"UNKNOWN"};</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial>}</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial># 
  ---------------------------------------------------------------------</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>My problem is, in the nagios cgi the 
  "Current Status" is always CRITICAL and "Status Information" is (no output!) 
  ...</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>I don't understand because when I run the plugin 
  in command line like 'root' or 'nagios' user, the plugin return me something 
  like :</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>OK: Mon Jul 29 14:19:47 2002 OK - Cisco CPU 
  on xxx.xxx.xxx.xxx is at 0 %</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>And with a strace "the command line" I see the 
  plugin exit with the good exit code... like 0, 1, 2 or -1</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>So I think my script work fine but not with 
  nagios ????</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>Anyone could help me ? please !</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>I plan to make other script for CISCO with 
  telnet or snmp session (when this one run correctly, off course !), so If 
  anyone is interrest with other plugin for Cisco tell me, or if anyone could 
  give plugin for Cisco, I was very happy...</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>Best regards,</FONT></DIV>
  <DIV dir=ltr><FONT face=Arial></FONT> </DIV>
  <DIV dir=ltr><FONT face=Arial>Tom</FONT></DIV></BLOCKQUOTE></FONT></FONT>
<DIV><FONT face=Arial size=2></FONT> </DIV></BODY></HTML>