Files
scripts-conlxsyslog03/check_alerts.pl
conetadm 5718e70f15 init
2024-11-14 21:11:06 +01:00

111 lines
3.4 KiB
Perl
Executable File

#!/usr/bin/perl
use DBI;
sub db_connect {
# call: db_connect($DB_HANDLE, $conf{'DB_TYPE'}, $conf{'DB_NAME'}, $conf{'DB_HOST'}, $conf{'DB_PORT'}, $conf{'DB_USER'}, $conf{'DB_PASS'});
my $ok = eval {
$_[0] = DBI->connect("DBI:$_[1]:$_[2]:$_[3]:$_[4]", "$_[5]", "$_[6]");
return 0 if ($_[0] == undef);
return 1;
};
return $ok;
}
sub db_disconnect {
# call: db_disconnect($DB_HANDLE);
$_[0]->disconnect();
}
sub db_exec {
# call: db_exec($DB_HANDLE, "insert|update|delete|alter...");
$FUNC_STATEMENT_HANDLE = $_[0]->prepare ("$_[1]");
$FUNC_STATEMENT_HANDLE->execute();
$FUNC_STATEMENT_HANDLE->finish();
}
sub db_select {
# call: db_select($DB_HANDLE, "select ... from ...");
# return: @
my @data, $i, $j;
my @ret;
$FUNC_STATEMENT_HANDLE = $_[0]->prepare ("$_[1]");
$FUNC_STATEMENT_HANDLE->execute();
$i=0;
while (@data = $FUNC_STATEMENT_HANDLE->fetchrow_array()) {
$j=0;
foreach (@data) {
$ret[$i][$j]=$_;
$j++;
}
$i++;
}
return @ret;
}
my $DB_TYPE="mysql";
my $DB_HOST="localhost";
my $DB_PORT="3306";
my $DB_NAME="observium";
my $DB_USER="root";
my $DB_PASS='@Defender2013!';
my $DB_HANDLE;
my $ok = db_connect ($DB_HANDLE, $DB_TYPE, $DB_NAME, $DB_HOST, $DB_PORT, $DB_USER, $DB_PASS);
if (!$ok) {
print "DB connect failed!\n";
exit;
}
my @ret = db_select ($DB_HANDLE, "select device_id,alert_test_id,last_changed,state,entity_type,entity_id from alert_table where alert_status = 0");
my $i=0;
my $str="";
foreach my $x (@ret) {
# print "device_id=${$x}[0]\n";
# print "alert_test_id=${$x}[1]\n";
# print "entity_type=${$x}[4]\n";
# print "entitiy_id=${$x}[5]\n";
$ts = localtime(${$x}[2]);
$td=1*24*60*60; # sekunden
if (time() - $td > ${$x}[2]) {
$i=1;
my @hret = db_select ($DB_HANDLE, "select hostname from devices where device_id = ${$x}[0]");
$str.=" $hret[0][0]; ";
my @eret = db_select ($DB_HANDLE, "select alert_name from alert_tests where alert_test_id = ${$x}[1]");
$str.="$eret[0][0]; ";
if ("${$x}[4]" eq "bgp_peer") {
my @eer = db_select ($DB_HANDLE, "select bgppeeridentifier from bgppeers where bgppeer_id = ${$x}[5]");
$str.="$eer[0][0]";
}
if ("${$x}[4]" eq "port") {
my @eer = db_select ($DB_HANDLE, "select ifName from ports where port_id = ${$x}[5]");
$str.="$eer[0][0]";
}
if ("${$x}[4]" eq "device") {
my @eer = db_select ($DB_HANDLE, "select hostname from devices where device_id = ${$x}[5]");
$str.="$eer[0][0]";
}
if ("${$x}[4]" eq "sensor") {
my @eer = db_select ($DB_HANDLE, "select sensor_descr from sensors where sensor_id = ${$x}[5]");
$str.="$eer[0][0]";
}
if ("${$x}[4]" eq "status") {
my @eer = db_select ($DB_HANDLE, "select status_descr from status where status_id = ${$x}[5]");
$str.="$eer[0][0]";
}
if ("${$x}[4]" eq "storage") {
my @eer = db_select ($DB_HANDLE, "select storage_descr from storage where storage_id = ${$x}[5]");
$str.="$eer[0][0]";
}
$str.="\n\n";
}
}
db_disconnect ($DB_HANDLE);
$email="tech\@conet.de";
if ($i) {
`echo "Hallo\n\nDiese Meldungen existieren zu lange!\n\n$str\n\nGruss Observium\n\n" | mailx -a "From: CONET Services Monitoring <help\@conet.de>" -a "Return-Path: help\@conet.de" -s "Monitoring beachten!" $email`;
}