diff --git a/pandora_agents/ChangeLog b/pandora_agents/ChangeLog index 1ee4876f3c..d6d3277cdf 100644 --- a/pandora_agents/ChangeLog +++ b/pandora_agents/ChangeLog @@ -1,3 +1,13 @@ +2008-05-19 Ramon Novoa + + * linux/pandora_agent_installer: Added plugin installation. + * linux/plugins: Added to repository. Plugins directory. + * linux/plugins/grep_log: Added to repository. Plugin to search log + files for a matching pattern. + * linux/pandora_agent: Added support for plugin execution. Removed + support for pandora_user.conf. + * linux/pandora_user.conf: Deleted from repository. Not used anymore. + 2008-04-09 Sancho lerena * README, AUTHORS, COPYING: Updated on all agents. diff --git a/pandora_agents/linux/pandora_agent b/pandora_agents/linux/pandora_agent index 93a5822605..5b56ba9765 100755 --- a/pandora_agents/linux/pandora_agent +++ b/pandora_agents/linux/pandora_agent @@ -322,6 +322,19 @@ do EXECUTE=`expr \( $CONTADOR + 1 \) % $MODULEINTERVAL` fi + # Plugin execution + if [ ! -z "`echo $a | grep '^module_plugin'`" ] + then + PLUGIN=`echo $a | cut -d" " -f2` + PARAMS=`echo $a | cut -d" " -f3-` + if [ -f $PANDORA_HOME/plugins/$PLUGIN ] + then + eval $PANDORA_HOME/plugins/$PLUGIN $PARAMS >> $DATA + else + echo "$PANDORA_HOME/plugins/$PLUGIN not found" + fi + fi + # If module ends, and execute for this module is enabled # then write @@ -343,11 +356,6 @@ do CONTADOR=0 fi - # Call for user-defined script for data adquisition - if [ -f "$PANDORA_HOME/pandora_user.conf" ] - then - /bin/bash $PANDORA_HOME/pandora_user.conf >> $DATA - fi # Checking MD5 if [ "$CHECKSUM_MODE" == "1" ] diff --git a/pandora_agents/linux/pandora_agent_installer b/pandora_agents/linux/pandora_agent_installer index 4e9f588160..18f6b93fe0 100755 --- a/pandora_agents/linux/pandora_agent_installer +++ b/pandora_agents/linux/pandora_agent_installer @@ -87,9 +87,11 @@ install () { cp pandora_agent.conf $PANDORA_HOME chmod 600 $PANDORA_HOME/pandora_agent.conf - echo "Copying Pandora FMS Agent user configuration file to $PANDORA_HOME/pandora_user.conf..." - cp pandora_user.conf $PANDORA_HOME - chmod 700 $PANDORA_HOME/pandora_user.conf + echo "Copying Pandora FMS Agent plugins to $PANDORA_HOME/plugins..." + cp -r plugins $PANDORA_HOME + chmod -R 700 $PANDORA_HOME/plugins + echo "Linking Pandora FMS Agent plugins directory to $PANDORA_CFG/plugins..." + ln -s $PANDORA_HOME/plugins $PANDORA_CFG echo "Linking Pandora FMS Agent configuration to $PANDORA_CFG/pandora_agent.conf..." ln -s $PANDORA_HOME/pandora_agent.conf $PANDORA_CFG diff --git a/pandora_agents/linux/pandora_user.conf b/pandora_agents/linux/pandora_user.conf deleted file mode 100755 index f34311e269..0000000000 --- a/pandora_agents/linux/pandora_user.conf +++ /dev/null @@ -1,75 +0,0 @@ -# Pandora User-Defined adquisition script -# This code is under GPL licence -# This is the default user script file -# If you're using this is because default config doest fit all your needs -# You can use the following variables -# -# All STDOUT output will be written in final XML file sent to Pandora Server. -# -# Please refer documentatation for more example and a more depth usage instructions -# - -# ================================ -# Check for WEBPage content change -# ================================ - -#MYMD5=`echo -e "GET / HTTP/1.0\n\n\n" | nc -w 30 www.artica.es 80 | grep -v "Date:" | md5sum | awk '{ print $1 }'` -#VALIDMD5=e85c0b9018a22c1086c8e0179cd224b1 -#if [ "$MYMD5" != "$VALIDMD5" ] -#then -# MD5SUM=0 -#else -# MD5SUM=1 -#fi -#echo "" -#echo "www.artica.es_WEBContenct" -#echo "generic_proc" -#echo "$MD5SUM" -#echo "" - -# MODULE END ======================== - -# ================================ -# Check for DNS Entry change -# ================================ - -#HOSTNAME=arcadia.genterara.com -#MAXHOPS=1 -#MAXHOPS2=`expr $MAXHOPS + 1` -#SALIDA=`traceroute -n $HOSTNAME -w 5 -m $MAXHOPS2 2> /dev/null | awk '{ print $1 }' | tail -1` -# if SALIDA != MAXHOPS, error (more than MAXHOPS hop, if this is our local IP, no more than MAXHOPS hop its needed -#if [ "$SALIDA" == "$MAXHOPS" ] -#then -# DNS_STATUS=1 -#else -# DNS_STATUS=0 -#fi -#echo "" -#echo "DNS_CHECK" -#echo "generic_proc" -#echo "$DNS_STATUS" -#echo "" - -# MODULE END ======================== - - -# ================================ -# Check for DNS Entry change -# on local interface ppp0 -# ================================ - -# PLC_DNS=`dig @194.179.1.101 plc.genterara.com A +short | tail -1 ` -# PLC_LOCAL=`ifconfig ppp0 | head -2 | tail -1 | tr -s ":" " " | awk ' { print $3 } '` -# if [ "$PLC_DNS" == "$PLC_LOCAL" ] -# then -# PLC_STATUS=1 -# else -# PLC_STATUS=0 -# fi -# -# echo "" -# echo "PLC_DNS_CHECK" -# echo "generic_proc" -# echo "$PLC_STATUS" -# echo "" -# MODULE END ======================== \ No newline at end of file diff --git a/pandora_agents/linux/plugins/grep_log b/pandora_agents/linux/plugins/grep_log new file mode 100755 index 0000000000..1bde968af1 --- /dev/null +++ b/pandora_agents/linux/plugins/grep_log @@ -0,0 +1,237 @@ +#!/usr/bin/perl +############################################################################### +# +# Copyright (c) 2008 Ramon Novoa +# Copyright (c) 2008 Artica Soluciones Tecnologicas S.L. +# +# grep_log Perl script to search log files for a matching pattern. The last +# searched position is saved in an index file so that consecutive +# runs do not return the same results. The log file inode number is +# also saved to detect log rotation. +# +# 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; version 2 of the License. +# +# 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. +# +############################################################################### + +use strict; +use File::Basename; + +# Be verbose +my $Verbose = 0; + +# Index file storage directory, with a trailing '/' +my $Idx_dir='/var/pandora/'; + +# Log file +my $Log_file = ''; + +# Index file +my $Idx_file = ''; + +# Log file position index +my $Idx_pos = 0; + +# Log file inode number +my $Idx_ino = ''; + +# Regular expression to be matched +my $Reg_exp = ''; + +############################################################################### +# SUB error_msg +# Print an error message and exit. +############################################################################### +sub error_msg ($) { + my $err_msg = $_[0]; + + if (! -z $err_msg) { + print(stderr "[error] $err_msg.\n"); + } + + exit 1; +} + +############################################################################### +# SUB print_help +# Print a help message. +############################################################################### +sub print_help () { + print "Usage: $0 \n"; +} + +############################################################################### +# SUB log_msg +# Print a log message. +############################################################################### +sub log_msg ($) { + my $log_msg = $_[0]; + + if (! -z $log_msg && $Verbose == 1) { + print(stdout "[log] $log_msg.\n"); + } +} + +############################################################################### +# SUB load_idx +# Load index file. +############################################################################### +sub load_idx () { + my $line; + my $current_ino; + + log_msg("Loading index file $Idx_file"); + + open(IDXFILE, $Idx_file) || error_msg("Error opening file $Idx_file: " . + $!); + + # Read position and date + $line = ; + ($Idx_pos, $Idx_ino) = split(' ', $line); + + close(IDXFILE); + + # Reset the file index if the file has changed + $current_ino = (stat($Log_file))[1]; + if ($current_ino != $Idx_ino) { + log_msg("File changed, resetting index"); + + $Idx_pos = 0; + $Idx_ino = $current_ino; + } + + return; +} + +############################################################################### +# SUB save_idx +# Save index file. +############################################################################### +sub save_idx () { + + log_msg("Saving index file $Idx_file"); + + open(IDXFILE, "> $Idx_file") || error_msg("Error opening file $Idx_file: " + . $!); + print (IDXFILE $Idx_pos . " " . $Idx_ino); + close(IDXFILE); + + return; +} + +############################################################################### +# SUB create_idx +# Create index file. +############################################################################### +sub create_idx () { + my $first_line; + + log_msg("Creating index file $Idx_file"); + + open(LOGFILE, $Log_file) || error_msg("Error opening file $Log_file: " . + $!); + + # Go to EOF and save the position + seek(LOGFILE, 0, 2); + $Idx_pos = tell(LOGFILE); + + close(LOGFILE); + + # Save the file inode number + $Idx_ino = (stat($Log_file))[1]; + + # Save the index file + save_idx(); + + return; +} + +############################################################################### +# SUB parse_log +# Parse log file starting from position $Idx_pos. +############################################################################### +sub parse_log () { + my $line; + + log_msg("Parsing log file $Log_file"); + + # Open log file for reading + open(LOGFILE, $Log_file) || error_msg("Error opening file $Log_file: " . + $!); + + # Go to starting position + seek(LOGFILE, $Idx_pos, 0); + + print (stdout "\n"); + print (stdout "\n"); + print (stdout "\n"); + print (stdout "\n"); + + # Parse log file + while ($line = ) { + if ($line =~ m/$Reg_exp/i) { + # Remove the trailing '\n' + chop($line); + + print (stdout "\n"); + } + } + + print (stdout "\n"); + print (stdout "\n"); + + $Idx_pos = tell(LOGFILE); + close(LOGFILE); + + # Save the index file + save_idx(); + + return; +} + +############################################################################### +############################################################################### +## Main +############################################################################### +############################################################################### + +# Check command line parameters +if ($#ARGV != 1) { + print_help(); + exit 1; +} + +$Log_file = $ARGV[0]; +$Reg_exp = $ARGV[1]; + +# Create index file storage directory +if ( ! -d $Idx_dir) { + mkdir($Idx_dir) || error_msg("Error creating directory $Idx_dir: " + . $!); +} + +# Check that log file exists +if (! -e $Log_file) { + error_msg("File $Log_file does not exist"); +} + +# Create index file if it does not exist +$Idx_file=$Idx_dir . basename($Log_file) . ".idx"; +if (! -e $Idx_file) { + create_idx(); + exit 0; +} + +# Load index file +load_idx(); + +# Parse log file +parse_log(); + +exit 0;