2007-07-31 Sancho Lerena <slerena@gmail.com>

* pandora_snmpconsole: Fixed startup scripts. Many checks added to
        manage NetSNMP Trap daemon. Now uses /usr/sbin/snmptrapd by
        default. Solved many problems. This also solve bug #1763691.

        * conf/pandora_server.conf: Added snmp_logfile token (before
        inside CODE!, UGLY!).

        * bin/pandora_network.pl: I hope Fixed BUG #1763305 with Master Server.

        * bin/PandoraFMS/Config.pm: Support for config token snmp_logfile.

        * bin/PandoraFMS/DB.pm: Fixed (stupid) BUG #1763304 with alerts.

        * bin/pandora_snmpconsole.pl: Removed logfile filename from code
        (VERY ugly!).

        * pandora_server, pandora_network, pandora_recon: This also solve
        bug #1763691. Some additional checks included.

        * util/pandora_SNMP_test.pl: Removed, old stuff.




git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@576 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f
This commit is contained in:
slerena 2007-07-31 17:26:09 +00:00
parent c292246b61
commit 36c0b32258
12 changed files with 222 additions and 177 deletions

View File

@ -1,3 +1,26 @@
2007-07-31 Sancho Lerena <slerena@gmail.com>
* pandora_snmpconsole: Fixed startup scripts. Many checks added to
manage NetSNMP Trap daemon. Now uses /usr/sbin/snmptrapd by
default. Solved many problems. This also solve bug #1763691.
* conf/pandora_server.conf: Added snmp_logfile token (before
inside CODE!, UGLY!).
* bin/pandora_network.pl: I hope Fixed BUG #1763305 with Master Server.
* bin/PandoraFMS/Config.pm: Support for config token snmp_logfile.
* bin/PandoraFMS/DB.pm: Fixed (stupid) BUG #1763304 with alerts.
* bin/pandora_snmpconsole.pl: Removed logfile filename from code
(VERY ugly!).
* pandora_server, pandora_network, pandora_recon: This also solve
bug #1763691. Some additional checks included.
* util/pandora_SNMP_test.pl: Removed, old stuff.
2007-07-20 Sancho Lerena <slerena@artica.es> 2007-07-20 Sancho Lerena <slerena@artica.es>
* pandora_network.pl: Fixed a typo in pandora_ping_latency function. * pandora_network.pl: Fixed a typo in pandora_ping_latency function.

View File

@ -34,8 +34,8 @@ our @EXPORT = qw( pandora_help_screen
# There is no global vars, all variables (setup) passed as hash reference # There is no global vars, all variables (setup) passed as hash reference
# version: Defines actual version of Pandora Server for this module only # version: Defines actual version of Pandora Server for this module only
my $pandora_version = "1.3-beta2"; my $pandora_version = "1.3-dev";
my $pandora_build="PS070717"; my $pandora_build="PS070731";
our $VERSION = $pandora_version; our $VERSION = $pandora_version;
# Setup hash # Setup hash
@ -138,7 +138,8 @@ sub pandora_loadconfig {
$pa_config->{"dataserver"}=0; $pa_config->{"dataserver"}=0;
$pa_config->{"reconserver"}=0; $pa_config->{"reconserver"}=0;
$pa_config->{"servermode"}=""; $pa_config->{"servermode"}="";
$pa_config->{"network_threads"}=4; # Fixed default $pa_config->{'pandora_snmp_logfile'}="/var/log/pandora/pandora_snmptrap.log";
$pa_config->{"network_threads"}=5; # Fixed default
$pa_config->{"keepalive"}=60; # 60 Seconds initially for server keepalive $pa_config->{"keepalive"}=60; # 60 Seconds initially for server keepalive
$pa_config->{"keepalive_orig"} = $pa_config->{"keepalive"}; $pa_config->{"keepalive_orig"} = $pa_config->{"keepalive"};
# Check for UID0 # Check for UID0
@ -204,6 +205,7 @@ sub pandora_loadconfig {
$pa_config->{"errorlogfile"} = $tbuf; $pa_config->{"errorlogfile"} = $tbuf;
} }
} }
elsif ($parametro =~ m/^pandora_snmp_logfile\s(.*)/i) { $pa_config->{'pandora_snmp_logfile'}= $1; }
elsif ($parametro =~ m/^dbname\s(.*)/i) { $pa_config->{'dbname'}= $1; } elsif ($parametro =~ m/^dbname\s(.*)/i) { $pa_config->{'dbname'}= $1; }
elsif ($parametro =~ m/^dbuser\s(.*)/i) { $pa_config->{'dbuser'}= $1; } elsif ($parametro =~ m/^dbuser\s(.*)/i) { $pa_config->{'dbuser'}= $1; }
elsif ($parametro =~ m/^dbpass\s(.*)/i) { $pa_config->{'dbpass'}= $1; } elsif ($parametro =~ m/^dbpass\s(.*)/i) { $pa_config->{'dbpass'}= $1; }

View File

@ -64,6 +64,7 @@ our @EXPORT = qw( crea_agente_modulo
execute_alert execute_alert
give_network_component_profile_name give_network_component_profile_name
pandora_create_incident pandora_create_incident
give_db_value
); );
# Spanish translation note: # Spanish translation note:
@ -375,10 +376,7 @@ sub pandora_writestate (%$$$$$$$) {
# Check alert subroutine # Check alert subroutine
eval { eval {
# Alerts checks for Agents, only for master servers
if ($pa_config->{"pandora_master"} == 1){
pandora_calcula_alerta ($pa_config, $timestamp, $nombre_agente, $tipo_modulo, $nombre_modulo, $datos, $dbh); pandora_calcula_alerta ($pa_config, $timestamp, $nombre_agente, $tipo_modulo, $nombre_modulo, $datos, $dbh);
}
}; };
if ($@) { if ($@) {
logger($pa_config, "ERROR: Error in SUB calcula_alerta(). ModuleName: $nombre_modulo ModuleType: $tipo_modulo AgentName: $nombre_agente", 4); logger($pa_config, "ERROR: Error in SUB calcula_alerta(). ModuleName: $nombre_modulo ModuleType: $tipo_modulo AgentName: $nombre_agente", 4);

View File

@ -37,7 +37,7 @@ use PandoraFMS::DB;
# FLUSH in each IO (only for debug, very slooow) # FLUSH in each IO (only for debug, very slooow)
# ENABLED in DEBUGMODE # ENABLED in DEBUGMODE
# DISABLE FOR PRODUCTION # DISABLE FOR PRODUCTION
$| = 0; $| = 1;
my %pa_config; my %pa_config;
my @pending_task : shared; my @pending_task : shared;
@ -173,7 +173,7 @@ sub pandora_network_producer ($) {
my $exec_sql1; my $exec_sql1;
while (1) { while (1) {
if ($pa_config->{"pandora_master"} != 666) { if ($pa_config->{"pandora_master"} != 1) {
# Query for normal server, not MASTER server # Query for normal server, not MASTER server
$query1 = "SELECT $query1 = "SELECT
tagente_modulo.id_agente_modulo, tagente_modulo.id_agente_modulo,
@ -198,8 +198,23 @@ sub pandora_network_producer ($) {
ORDER BY ORDER BY
last_execution_try ASC "; last_execution_try ASC ";
} else { } else {
# Query for master server # Query for MASTER SERVER !
# PENDING TODO ! $query1 = "SELECT
DISTINCT(tagente_modulo.id_agente_modulo), tagente_modulo.flag
FROM
tagente, tagente_modulo, tagente_estado, tserver
WHERE
( (tagente.id_server = $server_id AND tagente_modulo.id_agente = tagente.id_agente) OR
(tagente.id_server != $server_id AND tagente_modulo.id_agente = tagente.id_agente AND tagente.id_server = tserver.id_server AND tserver.status = 0)
) AND
tagente.disabled = 0
AND
tagente_modulo.id_tipo_modulo > 4
AND
tagente_estado.id_agente_modulo = tagente_modulo.id_agente_modulo
AND
((tagente_estado.last_execution_try + tagente_estado.current_interval) < UNIX_TIMESTAMP() OR tagente_modulo.flag = 1 )
ORDER BY last_execution_try ASC";
} }
$exec_sql1 = $dbh->prepare($query1); $exec_sql1 = $dbh->prepare($query1);
$exec_sql1 ->execute; $exec_sql1 ->execute;
@ -221,6 +236,7 @@ sub pandora_network_producer ($) {
} }
} }
} }
#logger ($pa_config, "Items in Network Pending Queue: ".scalar(@pending_task), 5);
$exec_sql1->finish(); $exec_sql1->finish();
sleep($pa_config->{"server_threshold"}); sleep($pa_config->{"server_threshold"});
} # Main loop } # Main loop
@ -325,7 +341,7 @@ sub pandora_query_tcp (%$$$$$$$) {
if (($tcp_rcv ne "") || ($id_tipo_modulo == 10) || ($id_tipo_modulo ==8) || ($id_tipo_modulo == 11)) { if (($tcp_rcv ne "") || ($id_tipo_modulo == 10) || ($id_tipo_modulo ==8) || ($id_tipo_modulo == 11)) {
# Receive data, non-blocking !!!! (VERY IMPORTANT!) # Receive data, non-blocking !!!! (VERY IMPORTANT!)
$temp2 = ""; $temp2 = "";
for ($tam=0; $tam<($pa_config->{'networktimeout'}/2); $tam++){ for ($tam=0; $tam<($pa_config->{'networktimeout'}); $tam++){
$handle->recv($temp,16000,0x40); $handle->recv($temp,16000,0x40);
$temp2 = $temp2.$temp; $temp2 = $temp2.$temp;
if ($temp ne ""){ if ($temp ne ""){
@ -452,7 +468,9 @@ sub exec_network_module {
my $id_module_group; my $id_module_group;
my $flag; my $flag;
my @sql_data; my @sql_data;
if ((!defined($id_agente_modulo)) || ($id_agente_modulo eq "")){
return;
}
my $query_sql = "SELECT * FROM tagente_modulo WHERE id_agente_modulo = $id_agente_modulo"; my $query_sql = "SELECT * FROM tagente_modulo WHERE id_agente_modulo = $id_agente_modulo";
my $exec_sql = $dbh->prepare($query_sql); my $exec_sql = $dbh->prepare($query_sql);
$exec_sql ->execute; $exec_sql ->execute;
@ -579,9 +597,13 @@ sub exec_network_module {
pandora_lastagentcontact ($pa_config, $timestamp, $agent_name, $pa_config->{'servername'}.$pa_config->{"servermode"}, $pa_config->{'version'}, -1, $dbh); pandora_lastagentcontact ($pa_config, $timestamp, $agent_name, $pa_config->{'servername'}.$pa_config->{"servermode"}, $pa_config->{'version'}, -1, $dbh);
} else { } else {
# $module_result != 0) # $module_result != 0)
if ($module_interval == 0){
$module_interval = dame_intervalo ($pa_config, $id_agente, $dbh);
}
# Modules who cannot connect or something go bad, update last_execution_try field # Modules who cannot connect or something go bad, update last_execution_try field
logger ($pa_config, "Cannot obtain exec Network Module $nombre from agent $agent_name", 4); logger ($pa_config, "Cannot obtain exec Network Module $nombre from agent $agent_name", 4);
my $query_act = "UPDATE tagente_estado SET last_execution_try = $utimestamp WHERE id_agente_modulo = $id_agente_modulo "; my $query_act = "UPDATE tagente_estado SET current_interval = $module_interval, last_execution_try = $utimestamp WHERE id_agente_modulo = $id_agente_modulo ";
my $a_idages = $dbh->prepare($query_act); my $a_idages = $dbh->prepare($query_act);
$a_idages->execute; $a_idages->execute;
$a_idages->finish(); $a_idages->finish();

View File

@ -62,7 +62,7 @@ pandora_snmptrapd (\%pa_config);
sub pandora_snmptrapd { sub pandora_snmptrapd {
my $pa_config = $_[0]; my $pa_config = $_[0];
my $snmp_logfile = $pa_config->{'pandora_path'}."/log/snmptrapd.log"; my $snmp_logfile = $pa_config->{'pandora_snmp_logfile'};
my $logfile_size; # Size of logfile, use for calculating index file my $logfile_size; # Size of logfile, use for calculating index file
my @array; my @array;
my $datos; my $datos;

View File

@ -6,7 +6,7 @@
# if not given, it takes localhost. It's preferable to setup one # if not given, it takes localhost. It's preferable to setup one
# because machine name could change by some reason. # because machine name could change by some reason.
servername endor #servername endor
# incomingdir: Defines directory where incoming data packets are stored # incomingdir: Defines directory where incoming data packets are stored
# You could set directory relative to base path or absolute, starting with / # You could set directory relative to base path or absolute, starting with /
@ -18,6 +18,10 @@ incomingdir /var/spool/pandora/data_in
log_file /var/log/pandora_server.log log_file /var/log/pandora_server.log
# Log file for Pandora FMS SNMP console. Its generated by NetSNMP Trap daemon
snmp_logfile /var/log/pandora/pandora_snmptrap.log
# Error logfile: aux logfile for pandora_server errors (in Daemon mode) # Error logfile: aux logfile for pandora_server errors (in Daemon mode)
# You could set file relative to base path or absolute, starting with / # You could set file relative to base path or absolute, starting with /
@ -25,11 +29,11 @@ errorlog_file /var/log/pandora_server.error
# dbname: Database name (pandora by default # dbname: Database name (pandora by default
dbname pandora13 dbname pandora
# dbuser: Database user name (pandora by default) # dbuser: Database user name (pandora by default)
dbuser pandora dbuser zhriopul
# daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground # daemon: Runs in daemon mode (background) if 1, if 0 runs in foreground
# this could be setup on command line with -D option # this could be setup on command line with -D option
@ -55,7 +59,7 @@ alert_threshold 45
# Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup) # Master Server, 1 if master server (normal mode), 0 for slave mode (slave in multi-server setup)
master 0 master 1
# Check datafiles using a MD5 hash, 1 to check (default), 0 to ignore .checksum # Check datafiles using a MD5 hash, 1 to check (default), 0 to ignore .checksum

View File

@ -1,16 +1,23 @@
#!/bin/bash #!/bin/bash
# Pandora Network Server, startup script # Pandora FMS Network Server, startup script
# Sancho Lerena, <slerena@gmail.com> # Sancho Lerena, <slerena@gmail.com>
# Linux Version (generico) # Linux Version (generic)
# v1.3 (Jul/2007) # v1.3 Build 070731
# Configurable path and filenames # Configurable path and filenames
PANDORA_HOME="/usr/share/pandora_server" PANDORA_HOME="/usr/share/pandora_server"
PANDORA_NETWORK_PID="/var/run/pandora/pandora_network.pid" PANDORA_PID_PATH="/var/run/pandora"
PANDORA_PID=$PANDORA_PID_PATH/pandora_network.pid
# Main script # Main script
if [ ! -d "$PANDORA_PID_PATH" ]
then
echo "Pandora FMS cannot write it's PID file in $PANDORA_PID_PATH. Please create that directory"
exit
fi
if [ ! -f $PANDORA_HOME/bin/pandora_network.pl ] if [ ! -f $PANDORA_HOME/bin/pandora_network.pl ]
then then
echo "Pandora FMS Network Server not found, please check setup and read manual" echo "Pandora FMS Network Server not found, please check setup and read manual"
@ -20,18 +27,24 @@ fi
case "$1" in case "$1" in
start) start)
OLD_PATH="`pwd`" OLD_PATH="`pwd`"
if [ -f $PANDORA_NETWORK_PID ] if [ -f $PANDORA_PID ]
then then
echo "Pandora FMS Network Server is currently running on this machine. Aborting now..." CHECK_PID=`cat $PANDORA_PID`
CHECK_PID_RESULT=`ps aux | grep -v grep | grep "$CHECK_PID" | grep "pandora_network" | wc -l`
if [ $CHECK_PID_RESULT == 1 ]
then
echo "Pandora FMS Network Server is currently running on this machine with PID ($CHECK_PID). Aborting now..."
exit exit
fi fi
fi
cd $PANDORA_HOME/bin cd $PANDORA_HOME/bin
./pandora_network.pl $PANDORA_HOME -D ./pandora_network.pl $PANDORA_HOME -D
MYPID=`ps aux | grep 'pandora_network.pl' | grep -v grep | tail -1 | awk '{print $2}'` MYPID=`ps aux | grep 'pandora_network.pl' | grep -v grep | tail -1 | awk '{print $2}'`
if [ ! -z "$MYPID" ] if [ ! -z "$MYPID" ]
then then
echo $MYPID > $PANDORA_NETWORK_PID echo $MYPID > $PANDORA_PID
echo "Pandora Network Server is now running with PID $MYPID" echo "Pandora Network Server is now running with PID $MYPID"
else else
echo "Cannot start Pandora FMS Network Server. Aborted." echo "Cannot start Pandora FMS Network Server. Aborted."
@ -39,15 +52,15 @@ case "$1" in
cd "$OLD_PATH" cd "$OLD_PATH"
;; ;;
stop) stop)
if [ -f $PANDORA_NETWORK_PID ] if [ -f $PANDORA_PID ]
then then
echo "Stopping Pandora FMS Network Server" echo "Stopping Pandora FMS Network Server"
PID_2=`cat $PANDORA_NETWORK_PID` PID_2=`cat $PANDORA_PID`
if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_network' `" ] if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_network' `" ]
then then
kill `cat $PANDORA_NETWORK_PID` 2> /dev/null > /dev/null kill `cat $PANDORA_PID` 2> /dev/null > /dev/null
fi fi
rm -f $PANDORA_NETWORK_PID rm -f $PANDORA_PID
else else
echo "Pandora FMS Network Server is not running, cannot stop it." echo "Pandora FMS Network Server is not running, cannot stop it."
fi fi

View File

@ -1,15 +1,23 @@
#!/bin/sh #!/bin/bash
# Pandora FMS Recon Server, startup script # Pandora FMS Recon Server, startup script
# Sancho Lerena, <slerena@gmail.com> # Sancho Lerena, <slerena@gmail.com>
# Linux Version (generic) # Linux Version (generic)
# v1.3 (Jul/2007) # v1.3 Build 070731
# Configurable path and filenames # Configurable path and filenames
PANDORA_HOME="/usr/share/pandora_server" PANDORA_HOME="/usr/share/pandora_server"
PANDORA_PID="/var/run/pandora/pandora_recon.pid" PANDORA_PID_PATH="/var/run/pandora"
PANDORA_PID=$PANDORA_PID_PATH/pandora_recon.pid
# Main script # Main script
if [ ! -d "$PANDORA_PID_PATH" ]
then
echo "Pandora FMS cannot write it's PID file in $PANDORA_PID_PATH. Please create that directory"
exit
fi
if [ ! -f $PANDORA_HOME/bin/pandora_recon.pl ] if [ ! -f $PANDORA_HOME/bin/pandora_recon.pl ]
then then
echo "Pandora FMS Recon Server not found, please check setup and read manual" echo "Pandora FMS Recon Server not found, please check setup and read manual"
@ -21,23 +29,25 @@ case "$1" in
OLD_PATH="`pwd`" OLD_PATH="`pwd`"
if [ -f $PANDORA_PID ] if [ -f $PANDORA_PID ]
then then
PID_2=`cat $PANDORA_PID` CHECK_PID=`cat $PANDORA_PID`
if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_recon.pl'`" ] CHECK_PID_RESULT=`ps aux | grep -v grep | grep "$CHECK_PID" | grep "pandora_recon" | wc -l`
if [ $CHECK_PID_RESULT == 1 ]
then then
echo "Pandora FMS Recon Server is currently running on this machine. Aborting now..." echo "Pandora FMS Recon Server is currently running on this machine with PID ($CHECK_PID). Aborting now..."
exit exit
fi fi
fi fi
cd $PANDORA_HOME/bin cd $PANDORA_HOME/bin
./pandora_recon.pl $PANDORA_HOME -D ./pandora_recon.pl $PANDORA_HOME -D
MYPID=`ps aux | grep 'pandora_recon.pl' | grep -v grep | tail -1 | awk '{print $2}'` MYPID=`ps aux | grep 'pandora_recon.pl' | grep -v grep | tail -1 | awk '{print $2}'`
if [ ! -z "$MYPID" ] if [ ! -z "$MYPID" ]
then then
echo $MYPID > $PANDORA_PID echo $MYPID > $PANDORA_PID
echo "Pandora FMS Recon Server is now running with PID $MYPID" echo "Pandora Recon Server is now running with PID $MYPID"
else else
echo "Cannot start Pandora FMS Recon Server. Aborted" echo "Cannot start Pandora FMS Recon Server. Aborted."
fi fi
cd "$OLD_PATH" cd "$OLD_PATH"
;; ;;
@ -46,7 +56,7 @@ case "$1" in
then then
echo "Stopping Pandora FMS Recon Server" echo "Stopping Pandora FMS Recon Server"
PID_2=`cat $PANDORA_PID` PID_2=`cat $PANDORA_PID`
if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_recon.pl'`" ] if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_recon' `" ]
then then
kill `cat $PANDORA_PID` 2> /dev/null > /dev/null kill `cat $PANDORA_PID` 2> /dev/null > /dev/null
fi fi

View File

@ -1,15 +1,23 @@
#!/bin/bash #!/bin/bash
# Pandora Data Server startup script
# Pandora Data Server, startup script
# Sancho Lerena, <slerena@gmail.com> # Sancho Lerena, <slerena@gmail.com>
# Linux Version (generic) # Linux Version (generico)
# v1.3 (Jul/2007) # v1.3 Build 070731
# Configurable path and filenames # Configurable path and filenames
PANDORA_HOME="/usr/share/pandora_server" PANDORA_HOME="/usr/share/pandora_server"
PANDORA_SERVER_PID="/var/run/pandora/pandora_server.pid" PANDORA_PID_PATH="/var/run/pandora"
PANDORA_PID=$PANDORA_PID_PATH/pandora_dataserver.pid
# Main script # Main script
if [ ! -d "$PANDORA_PID_PATH" ]
then
echo "Pandora FMS cannot write it's PID file in $PANDORA_PID_PATH. Please create that directory"
exit
fi
if [ ! -f $PANDORA_HOME/bin/pandora_server.pl ] if [ ! -f $PANDORA_HOME/bin/pandora_server.pl ]
then then
echo "Pandora FMS Data Server not found, please check setup and read manual" echo "Pandora FMS Data Server not found, please check setup and read manual"
@ -19,34 +27,40 @@ fi
case "$1" in case "$1" in
start) start)
OLD_PATH="`pwd`" OLD_PATH="`pwd`"
if [ -f $PANDORA_SERVER_PID ] if [ -f $PANDORA_PID ]
then then
echo "Pandora FMS Data Server is currently running on this machine. Aborting now..." CHECK_PID=`cat $PANDORA_PID`
CHECK_PID_RESULT=`ps aux | grep -v grep | grep "$CHECK_PID" | grep "pandora_server.pl" | wc -l`
if [ $CHECK_PID_RESULT == 1 ]
then
echo "Pandora FMS Data Server is currently running on this machine with PID ($CHECK_PID). Aborting now..."
exit exit
fi fi
fi
cd $PANDORA_HOME/bin cd $PANDORA_HOME/bin
./pandora_server.pl $PANDORA_HOME -D ./pandora_server.pl $PANDORA_HOME -D
MYPID=`ps aux | grep 'pandora_server.pl' | grep -v grep | tail -1 | awk '{print $2}'` MYPID=`ps aux | grep 'pandora_server.pl' | grep -v grep | tail -1 | awk '{print $2}'`
if [ ! -z "$MYPID" ] if [ ! -z "$MYPID" ]
then then
echo $MYPID > $PANDORA_SERVER_PID echo $MYPID > $PANDORA_PID
echo "Pandora FMS Data Server is now running with PID $MYPID" echo "Pandora Data Server is now running with PID $MYPID"
else else
echo "Cannot start Pandora FMS Data Server. Aborted" echo "Cannot start Pandora FMS Data Server. Aborted."
fi fi
cd "$OLD_PATH" cd "$OLD_PATH"
;; ;;
stop) stop)
if [ -f $PANDORA_SERVER_PID ] if [ -f $PANDORA_PID ]
then then
echo "Stopping Pandora FMS Data Server" echo "Stopping Pandora FMS Data Server"
PID_2=`cat $PANDORA_SERVER_PID` PID_2=`cat $PANDORA_PID`
if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_server' `" ] if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_server' `" ]
then then
kill `cat $PANDORA_SERVER_PID` 2> /dev/null > /dev/null kill `cat $PANDORA_PID` 2> /dev/null > /dev/null
fi fi
rm -f $PANDORA_SERVER_PID rm -f $PANDORA_PID
else else
echo "Pandora FMS Data Server is not running, cannot stop it." echo "Pandora FMS Data Server is not running, cannot stop it."
fi fi

View File

@ -1,24 +1,36 @@
#!/bin/bash #!/bin/bash
# Startup script for Pandora SNMP Console # Startup script for Pandora SNMP Console
# Sancho Lerena, <slerena@gmail.com> # Sancho Lerena, <slerena@gmail.com>
# Linux Version (generic) # Linux Version (generic)
# v1.3 (May/2007) # v1.3 BUILD 070731
# Compatible with NetSNMP 5.1 or higher # Compatible with NetSNMP 5.1 or higher
# Configurable path and filenames # Configurable path and filenames
PANDORA_HOME="/usr/share/pandora_server" PANDORA_HOME="/usr/share/pandora_server"
DAEMON_PATH="$PANDORA_HOME/util" PANDORA_PID_PATH="/var/run/pandora"
DAEMON_LOG="$PANDORA_HOME/log/snmptrapd.log" PANDORA_PID=$PANDORA_PID_PATH/pandora_snmp.pid
DAEMON_PID="$PANDORA_HOME/var/snmptrapd.pid"
PANDORA_SNMP_PID="$PANDORA_HOME/var/pandora_snmp.pid"
# Dont touch this call unless you know are doing. DAEMON_LOG="/var/log/pandora/pandora_snmptrap.log"
DAEMON="$DAEMON_PATH/snmptrapd -t -On -n -a -Lf $DAEMON_LOG -p $DAEMON_PID -F %4y-%02.2m-%l[**]%02.2h:%02.2j:%02.2k[**]%B[**]%N[**]%w[**]%W[**]%q[**]%v\n" DAEMON_PID="$PANDORA_PID_PATH/pandora_snmptrapd.pid"
DAEMON_PATH=/usr/sbin/snmptrapd
if [ ! -f $DAEMON_PATH/snmptrapd ] # Dont touch this call unless you know are doing. For different versions of NetSNMP Trap daemon, it's possible you need to change some options
# Please refer NetSNMP documentation in that case.
DAEMON_OPTIONS="-t -On -n -a -Lf $DAEMON_LOG -p $DAEMON_PID -F %4y-%02.2m-%l[**]%02.2h:%02.2j:%02.2k[**]%B[**]%N[**]%w[**]%W[**]%q[**]%v\n"
DAEMON="$DAEMON_PATH $DAEMON_OPTIONS"
if [ ! -d "$PANDORA_PID_PATH" ]
then then
echo "NetSNMP snmptrapd not found at $DAEMON_PATH/snmptrapd, please check setup and read manual" echo "Pandora FMS cannot write it's PID file in $PANDORA_PID_PATH. Please create that directory"
exit
fi
if [ ! -f "$DAEMON_PATH" ]
then
echo "NetSNMP snmptrapd not found at $DAEMON_PATH, please check setup and read manual"
exit exit
fi fi
@ -26,13 +38,46 @@ case "$1" in
start) start)
if [ -f $DAEMON_PID ] if [ -f $DAEMON_PID ]
then then
echo "NetSNMP Trap daemon is currently running on this machine. Aborting now..." CHECK_PID=`cat $DAEMON_PID`
CHECK_PID_RESULT=`ps aux | grep -v grep | grep "$CHECK_PID" | grep "snmp" | wc -l`
if [ $CHECK_PID_RESULT == 1 ]
then
echo "NetSNMP Trap daemon is currently running on this machine with PID ($CHECK_PID). Aborting now..."
exit
fi
fi
SNMP_WARNING=`ps aux | grep "snmptrapd" | grep -v grep | wc -l`
if [ $SNMP_WARNING == 1 ]
then
echo "WARNING: Seems to be already running a SNMP trap daemon on this system not associated with Pandora FMS"
echo "Check manually if their output logfile is been used for Pandora FMS and it's format is correct"
fi
# Launch SNMP TRAP Daemon
$DAEMON
sleep 1
if [ ! -f $DAEMON_LOG ]
then
echo "Problem with NetSNMP Trap daemon (Logfile $DAEMON_LOG not found!). Aborting"
exit
fi
if [ -f $DAEMON_PID ]
then
CHECK_PID=`cat $DAEMON_PID`
CHECK_PID_RESULT=`ps aux | grep -v grep | grep "$CHECK_PID" | grep "snmp" | wc -l`
if [ $CHECK_PID_RESULT != 1 ]
then
echo "Problem starting NetSNMP Trap daemon on this machine (PID File not correct). Aborting now..."
exit
fi
else
echo "Problem starting NetSNMP Trap daemon on this machine (Cannot get PID File). Aborting now..."
exit exit
fi fi
rm -f $DAEMON_LOG 2> /dev/null
$DAEMON 2> /dev/null
sleep 1
RESULT="`cat $DAEMON_LOG | grep 'errno 13' 2> /dev/null`" RESULT="`cat $DAEMON_LOG | grep 'errno 13' 2> /dev/null`"
if [ -z "$RESULT" ] if [ -z "$RESULT" ]
then then
@ -42,18 +87,24 @@ case "$1" in
rm -f $DAEMON_PID 2> /dev/null rm -f $DAEMON_PID 2> /dev/null
fi fi
if [ -f $PANDORA_SNMP_PID ] if [ -f $PANDORA_PID ]
then then
echo "Pandora FMS SNMP Server is currently running on this machine. Aborting now..." CHECK_PID=`cat $PANDORA_PID`
CHECK_PID_RESULT=`ps aux | grep -v grep | grep "$CHECK_PID" | grep "pandora_snmpconsole.pl" | wc -l`
if [ $CHECK_PID_RESULT == 1 ]
then
echo "Pandora FMS SNMP Server is currently running on this machine with PID ($CHECK_PID). Aborting now..."
exit exit
fi fi
fi
cd $PANDORA_HOME/bin cd $PANDORA_HOME/bin
./pandora_snmpconsole.pl $PANDORA_HOME -D ./pandora_snmpconsole.pl $PANDORA_HOME -D
MYPID=`ps aux | grep 'pandora_snmpconsole.pl' | grep -v grep | tail -1 | awk '{print $2}'` MYPID=`ps aux | grep 'pandora_snmpconsole.pl' | grep -v grep | tail -1 | awk '{print $2}'`
if [ ! -z "$MYPID" ] if [ ! -z "$MYPID" ]
then then
echo $MYPID > $PANDORA_SNMP_PID echo $MYPID > $PANDORA_PID
echo "Pandora FMS SNMP Server is now running with PID $MYPID" echo "Pandora FMS SNMP Server is now running with PID $MYPID"
else else
echo "Cannot start Pandora FMS SNMP Server. Aborted" echo "Cannot start Pandora FMS SNMP Server. Aborted"
@ -75,15 +126,15 @@ case "$1" in
echo "NetSNMP Trap daemon is not running, cannot stop it." echo "NetSNMP Trap daemon is not running, cannot stop it."
fi fi
if [ -f $PANDORA_SNMP_PID ] if [ -f $PANDORA_PID ]
then then
echo "Stopping Pandora SNMP Console" echo "Stopping Pandora SNMP Console"
PID_2=`cat $PANDORA_SNMP_PID` PID_2=`cat $PANDORA_PID`
if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_snmpconsole'`" ] if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'pandora_snmpconsole'`" ]
then then
kill `cat $PANDORA_SNMP_PID` 2> /dev/null > /dev/null kill `cat $PANDORA_PID` 2> /dev/null > /dev/null
fi fi
rm -f $PANDORA_SNMP_PID rm -f $PANDORA_PID
else else
echo "Pandora FMS SNMP Console is not running, cannot stop it." echo "Pandora FMS SNMP Console is not running, cannot stop it."
fi fi

View File

@ -1,92 +0,0 @@
#!/usr/bin/perl
##################################################################################
# SNMP Test tool
##################################################################################
# Copyright (c) 2004-2006 Sancho Lerena, slerena@gmail.com
# Copyright (c) 2005-2006 Artica Soluciones Tecnológicas S.L
#
#This program is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public License
#as published by the Free Software Foundation; either version 2
#of the License, or (at your option) any later version.
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#You should have received a copy of the GNU General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
##################################################################################
#use Net::SNMP; # For query2 testing
use SNMP '5.0.2.pre1' || die("Cannot load module\n");
##########################################################################################
# SUB pandora_query_snmp (pa_config, oid, community, target, error, dbh)
# Makes a call to SNMP modules to get a value,
##########################################################################################
sub pandora_query_snmp2 {
my $snmp_oid = shift;
my $snmp_community = shift;
my $snmp_target = shift;
print "DEBUG OID $snmp_oid comm $snmp_community target $snmp_target \n";
my $output ="";
my ($session1, $error) = Net::SNMP->session(
-hostname => $snmp_target,
-community => $snmp_community,
-port => 161 );
if (!defined($session1)) {
printf("SNMP ERROR SESSION");
}
my $result = $session1->get_request(
-varbindlist => $snmp_oid
);
if (!defined($result)) {
printf("SNMP ERROR GET");
$session1->close;
} else {
$output = $result->{$snmp_oid};
$session1->close;
}
return $output;
}
sub pandora_query_snmp {
my $snmp_oid = shift;
my $snmp_community = shift;
my $snmp_target = shift;
$ENV{'MIBS'}="ALL"; #Load all available MIBs
$SNMP_TARGET = $snmp_target;
$SNMP_COMMUNITY = $snmp_community;
$SESSION = new SNMP::Session (DestHost => $SNMP_TARGET,
Community => $SNMP_COMMUNITY,
Version => 1);
# Populate a VarList with OID values.
$APC_VLIST = new SNMP::VarList([$snmp_oid]);
# Pass the VarList to getnext building an array of the output
@APC_INFO = $SESSION->getnext($APC_VLIST);
print $APC_INFO[0];
print "\n";
}
if ($#ARGV == -1 ){
print "Syntax: snmptest community hostname oid\n";
exit;
}
my $snmp_community = $ARGV[0];
my $snmp_target = $ARGV[1];
my $snmp_oid = $ARGV[2];
pandora_query_snmp($snmp_oid, $snmp_community, $snmp_target);

Binary file not shown.