#!/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 " -a "Return-Path: help\@conet.de" -s "Monitoring beachten!" $email`; }