#!/usr/bin/perl -w #Script zur Anzeige der angemeldeten Agenten und KeyUser in OTRS #Copyright (c) 2008 by Michael Glaess use strict; use Getopt::Long; use vars qw($opt_t $opt_q $opt_c $opt_w $opt_v $opt_h); my(%ERRORS) = ( OK=>0, WARNING=>1, CRITICAL=>2, UNKNOWN=>3, WARN=>1, CRIT=>2 ); use DBI; use DBD::mysql; use Net::SMTP; sub print_help(); my $VERSION ="1.1"; my $DBuser ="nagios"; my $DBpass ="nagios"; my $opt_v; my $opt_h; my $opt_w; my $opt_c; my $opt_H; my $opt_U; my $opt_P; my $status ="0"; my $anzahl; my $anzahla; my $anzahlu; my $sql; my $result; my $message; sub check_otrs { #Check DatabaseConnection my $dbhm=DBI->connect("dbi:mysql:otrs:$opt_H","$opt_U","$opt_P", { PrintError=>1, } ); unless ( $dbhm ) { die("No Connection to Database"); } my $dbhm2=DBI->connect("dbi:mysql:otrs:$opt_H","$opt_U","$opt_P", { PrintError=>1, } ); # Anzahl Agenten $sql = "Select count(*) as Anzahl from sessions where left(session_value,4)='User'"; my $sqlp=$dbhm->prepare($sql); if (!$sqlp->execute()){ print "CRITICAL - Unable to Execute SQL-Query"; $status = $ERRORS{'CRITICAL'}; } $result=$sqlp->fetchrow_hashref(); $anzahla=$result->{Anzahl}; # Anzahl KeyUser $sql = "Select count(*) as Anzahl from sessions where left(session_value,4)<>'User'"; $sqlp=$dbhm->prepare($sql); if (!$sqlp->execute()){ print "CRITICAL - Unable to Execute SQL-Query"; $status = $ERRORS{'CRITICAL'}; } $result=$sqlp->fetchrow_hashref(); $anzahlu=$result->{Anzahl}; $anzahl=$anzahla + $anzahlu; #Set Optimize Text for Nagios $message = "Anzahl Agenten $anzahla
"; $message .= "Anzahl KeyUser $anzahlu
"; $message .= "Gesamt $anzahl"; $message = $message." |Agenten=$anzahla;KeyUser=$anzahlu;Gesamt=$anzahl"; if ($anzahl >= $opt_c) {$status = $ERRORS{'CRITICAL'};} elsif ($anzahl >= $opt_w) {$status = $ERRORS{'WARNING'};} else { $status = $ERRORS{'OK'};} $sqlp->finish(); } #################################### sub print_help () { printf "$0 plugin for Nagios check for count of Agents/KeyUsers loggedin in OTRS\n"; printf "Copyright (c) 2008 Michael Glaess\n"; printf "Usage:\n"; printf " -w (--warn) Warning-Level, Default: 0\n"; printf " -c (--crit) Criticle-Level, Default: 2\n"; printf " -v Version\n"; printf " -h (--help) Help\n"; printf "\n"; print_usage(); } ############################################## sub print_usage () { print "Usage: $0 \n"; print " $0 -w 2 -c 3\n"; print " $0 -w 2 -c 4\n"; } ############################################### $ENV{'BASH_ENV'}=''; $ENV{'ENV'}=''; Getopt::Long::Configure('bundling'); GetOptions ("v" => \$opt_v, "version" => \$opt_v, "h" => \$opt_h, "help" => \$opt_h, "w:i" => \$opt_w, "warn" => \$opt_w, "c:i" => \$opt_c, "crit" => \$opt_c, "H:s" => \$opt_H, "U:s" => \$opt_U, "P:s" => \$opt_P ); #Set default Values if ( !$opt_w){$opt_w=1;} #Warning at just one ticket if ( !$opt_c){$opt_c=2;} #Set Critical even on two tickets if ( !$opt_H){$opt_H="localhost";} if ( !$opt_U){$opt_U=$DBuser;} if ( !$opt_P){$opt_P=$DBpass;} #printf "OPT_t = $opt_t,OPT_w= $opt_w, OPT_c = $opt_c, OPT_q = $opt_q\n"; if ($opt_v) { print "$0: $VERSION\n" ; exit $ERRORS{'OK'}; } if ($opt_h) {print_help(); exit $ERRORS{'OK'};} $status = $ERRORS{OK}; $message = ''; #Call CheckUp Routine check_otrs; #Give System a feedback what have we done if( $message ) { if( $status == $ERRORS{OK} ) { print "OK: "; } elsif( $status == $ERRORS{WARNING} ) { print "WARNING: "; } elsif( $status == $ERRORS{CRITICAL} ) { print "CRITICAL: "; } print "$message\n"; } else { $status = $ERRORS{UNKNOWN}; print "No Data yet\n"; } exit $status;