# -- # Copyright (C) 2001-2019 OTRS AG, https://otrs.com/ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- package Kernel::System::Console::Command::Maint::SystemMonitoring::NagiosCheckTicketCount; use strict; use warnings; use parent qw(Kernel::System::Console::BaseCommand); our @ObjectDependencies = ( 'Kernel::System::Main', 'Kernel::System::Ticket', ); sub Configure { my ( $Self, %Param ) = @_; $Self->Description('OTRS Nagios checker.'); $Self->AddOption( Name => 'config-file', Description => "Path to configuration file.", Required => 1, HasValue => 1, ValueRegex => qr/.*/smx, ); $Self->AddOption( Name => 'as-checker', Description => "Runs the script as Nagioschecker.", Required => 0, HasValue => 0, ValueRegex => qr/.*/smx, ); return; } sub PreRun { my ( $Self, %Param ) = @_; $Self->{ConfigFile} = $Self->GetOption('config-file') || ''; if ( !$Self->{ConfigFile} ) { die "ERROR: Need --config-file CONFIGFILE\n"; } elsif ( !-e $Self->{ConfigFile} ) { die "ERROR: No such file $Self->{ConfigFile}\n"; } my %Config = do $Self->{ConfigFile}; if ( !%Config ) { die "ERROR: Invalid config file $Self->{ConfigFile}: $@\n"; } # store config for use it later $Self->{Config} = \%Config; return 1; } sub Run { my ( $Self, %Param ) = @_; $Self->Print("Starting ticket count check...\n"); # read configuration my %Config = %{ $Self->{Config} || {} }; # search tickets my $TicketCount = $Kernel::OM->Get('Kernel::System::Ticket')->TicketSearch( %{ $Config{Search} }, Limit => 100_000, Result => 'COUNT', UserID => 1, ); # no checker mode if ( !$Self->GetOption('as-checker') ) { $Self->Print("$TicketCount\n"); $Self->ExitCodeOk(); } # cleanup config file my %Map = ( max_crit_treshhold => 'max_crit_treshold', max_warn_treshhold => 'max_warn_treshold', min_crit_treshhold => 'min_crit_treshold', min_warn_treshhold => 'min_warn_treshold', ); for my $Type ( sort keys %Map ) { if ( defined $Config{$Type} ) { $Self->PrintError("NOTICE: Typo in config name, use $Map{$Type} instead of $Type\n"); $Config{ $Map{$Type} } = $Config{$Type}; delete $Config{$Type}; } } # do critical and warning check for my $Type (qw(crit_treshold warn_treshold)) { if ( defined $Config{ 'min_' . $Type } ) { if ( $Config{ 'min_' . $Type } >= $TicketCount ) { if ( $Type =~ /^crit_/ ) { $Self->Print( "$Config{checkname} CRITICAL $Config{CRIT_TXT} $TicketCount|tickets=$TicketCount;$Config{min_warn_treshold}:$Config{max_warn_treshold};$Config{min_crit_treshold}:$Config{max_crit_treshold}\n" ); $Self->ExitCodeError(2); } elsif ( $Type =~ /^warn_/ ) { $Self->Print( "$Config{checkname} WARNING $Config{WARN_TXT} $TicketCount|tickets=$TicketCount;$Config{min_warn_treshold}:$Config{max_warn_treshold};$Config{min_crit_treshold}:$Config{max_crit_treshold}\n" ); $Self->ExitCodeError(); } } } if ( defined $Config{ 'max_' . $Type } ) { if ( $Config{ 'max_' . $Type } <= $TicketCount ) { if ( $Type =~ /^crit_/ ) { $Self->Print( "$Config{checkname} CRITICAL $Config{CRIT_TXT} $TicketCount|tickets=$TicketCount;$Config{min_warn_treshold}:$Config{max_warn_treshold};$Config{min_crit_treshold}:$Config{max_crit_treshold}\n" ); $Self->ExitCodeError(2); } elsif ( $Type =~ /^warn_/ ) { $Self->Print( "$Config{checkname} WARNING $Config{WARN_TXT} $TicketCount|tickets=$TicketCount;$Config{min_warn_treshold}:$Config{max_warn_treshold};$Config{min_crit_treshold}:$Config{max_crit_treshold}\n" ); $Self->ExitCodeError(); } } } } # return OK $Self->Print( "$Config{checkname} OK $Config{OK_TXT} $TicketCount|tickets=$TicketCount;$Config{min_warn_treshold}:$Config{max_warn_treshold};$Config{min_crit_treshold}:$Config{max_crit_treshold}\n" ); $Self->Print("Done.\n"); return $Self->ExitCodeOk(); } 1; =head1 TERMS AND CONDITIONS This software is part of the OTRS project (L). This software comes with ABSOLUTELY NO WARRANTY. For details, see the enclosed file COPYING for license information (GPL). If you did not receive this file, see L. =cut