mirror of
https://github.com/centreon/centreon-plugins.git
synced 2025-07-23 21:55:16 +02:00
add trap handler
git-svn-id: http://svn.centreon.com/Plugins/Dev@2437 6bcd3966-0018-0410-8128-fd23d134de7e
This commit is contained in:
parent
a46f343a73
commit
eb74f75f57
134
centreon-plugins/src/traps/trapHandler
Normal file
134
centreon-plugins/src/traps/trapHandler
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
#! /usr/bin/perl -w
|
||||||
|
###################################################################
|
||||||
|
# Oreon is developped with GPL Licence 2.0
|
||||||
|
#
|
||||||
|
# GPL License: http://www.gnu.org/licenses/gpl.txt
|
||||||
|
#
|
||||||
|
# Developped by : Mathavarajan Sugumaran - msugumaran@merethis.com
|
||||||
|
#
|
||||||
|
###################################################################
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
# For information : contact@merethis.com
|
||||||
|
####################################################################
|
||||||
|
#
|
||||||
|
# Script init
|
||||||
|
#
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use DBI;
|
||||||
|
|
||||||
|
#############################
|
||||||
|
## SET DATABASE CONFIGURATION
|
||||||
|
#
|
||||||
|
sub set_db {
|
||||||
|
require "@OREON_PATH@/ODS/etc/conf.pm"
|
||||||
|
my $dsn = "dbi:mysql:$mysql_database_oreon";
|
||||||
|
return $dsn, $mysql_user, $mysql_passwd;
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################
|
||||||
|
## GET HOSTNAME FROM IP ADDRESS
|
||||||
|
#
|
||||||
|
|
||||||
|
sub get_hostinfos($$){
|
||||||
|
my $requete = "SELECT host_name FROM host WHERE host_address='$_[1]' ";
|
||||||
|
my $sth = $_[0]->prepare($requete);
|
||||||
|
$sth->execute();
|
||||||
|
my @host;
|
||||||
|
while (my $temp = $sth->fetchrow_array()) {
|
||||||
|
$host[scalar(@host)] = $temp;
|
||||||
|
}
|
||||||
|
$sth -> finish;
|
||||||
|
return @host;
|
||||||
|
}
|
||||||
|
|
||||||
|
##########################
|
||||||
|
## GET SERVICE DESCRIPTION
|
||||||
|
#
|
||||||
|
sub get_servicename($$$) {
|
||||||
|
my $query_host = "SELECT host_id from host WHERE host_name ='$_[2]'";
|
||||||
|
my $sth = $_[0]->prepare($query_host);
|
||||||
|
$sth->execute();
|
||||||
|
my $host_id = $sth -> fetchrow_array;
|
||||||
|
exit if (!defined $host_id);
|
||||||
|
$sth->finish();
|
||||||
|
|
||||||
|
my $query_trap = "SELECT traps_id, traps_args, traps_status from traps where traps_oid='$_[1]'";
|
||||||
|
$sth = $_[0]->prepare($query_trap);
|
||||||
|
$sth->execute();
|
||||||
|
my ($trap_id,$argument, $trap_status) = $sth -> fetchrow_array;
|
||||||
|
exit if (!defined $trap_id);
|
||||||
|
|
||||||
|
my $query_services = "SELECT service_description FROM service s, host_service_relation h, traps_service_relation t";
|
||||||
|
$query_services .= " where s.service_id = t.service_id and t.traps_id='$trap_id' and s.service_id=h.service_service_id";
|
||||||
|
$query_services .= " and h.host_host_id='$host_id'";
|
||||||
|
$sth = $_[0]->prepare($query_services);
|
||||||
|
$sth->execute();
|
||||||
|
my @service;
|
||||||
|
while (my $temp = $sth -> fetchrow_array) {
|
||||||
|
$service[scalar(@service)] = $temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $query_hostgroup_services = "SELECT service_description FROM hostgroup_relation hgr, traps_service_relation t, service s, host_service_relation hsr";
|
||||||
|
$query_hostgroup_services .= " WHERE hgr.host_host_id = '".$host_id."' AND hsr.hostgroup_hg_id = hgr.hostgroup_hg_id";
|
||||||
|
$query_hostgroup_services .= " AND s.service_id = hsr.service_service_id and s.service_id=t.service_id and t.traps_id='$trap_id'";
|
||||||
|
$sth->finish();
|
||||||
|
$sth = $_[0]->prepare($query_hostgroup_services);
|
||||||
|
$sth->execute();
|
||||||
|
my @new_service;
|
||||||
|
while (my $temp = $sth->fetchrow_array()){
|
||||||
|
$new_service[scalar(@new_service)] = $temp;
|
||||||
|
}
|
||||||
|
$sth->finish();
|
||||||
|
return $trap_status, $argument, (@service,@new_service);
|
||||||
|
}
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
## GET HOSTNAME AND SERVICE DESCRIPTION
|
||||||
|
#
|
||||||
|
|
||||||
|
sub getTrapsInfos($$$){
|
||||||
|
my $ip = shift;
|
||||||
|
my $oid = shift;
|
||||||
|
my $arguments_line = shift;
|
||||||
|
my @db = set_db();
|
||||||
|
my $dbh = DBI->connect($db[0], $db[1], $db[2]) or die "Echec de la connexion\n";
|
||||||
|
my @host = get_hostinfos($dbh, $ip);
|
||||||
|
foreach(@host) {
|
||||||
|
my $this_host = $_;
|
||||||
|
my ($status, $argument, @servicename) = get_servicename($dbh, $oid, $_);
|
||||||
|
foreach (@servicename) {
|
||||||
|
my $this_service = $_;
|
||||||
|
my $datetime=`date +%s`;
|
||||||
|
my @vars = split(/\ /,$arguments_line);
|
||||||
|
$argument =~ s/\$([0-9]+)/$vars[$1-1]/g;
|
||||||
|
chomp($datetime);
|
||||||
|
$sth = $_[0]->prepare("SELECT command_file FROM cfg_nagios WHERE nagios_activate = '1' LIMIT 1");
|
||||||
|
$sth->execute();
|
||||||
|
my $conf = $sth->fetchrow_array();
|
||||||
|
$sth->finish();
|
||||||
|
my $submit = `/usr/bin/printf "[$datetime] PROCESS_SERVICE_CHECK_RESULT;$this_host;$this_service;$status;$argument" >> $conf->{'command_file'}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$dbh->disconnect();
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
##########################
|
||||||
|
## PARSE TRAP INFORMATIONS
|
||||||
|
#
|
||||||
|
if (scalar(@ARGV)) {
|
||||||
|
my $ip = $ARGV[0];
|
||||||
|
my $oid = $ARGV[1];
|
||||||
|
my $arguments = $ARGV[2];
|
||||||
|
getTrapsInfos($ip, $oid, $arguments);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user