2014-08-11 11:36:47 +02:00
#
2018-01-29 14:11:11 +01:00
# Copyright 2018 Centreon (http://www.centreon.com/)
2014-08-11 11:36:47 +02:00
#
2015-07-21 11:51:02 +02:00
# Centreon is a full-fledged industry-strength solution that meets
# the needs in IT infrastructure and application monitoring for
# service performance.
2014-08-11 11:36:47 +02:00
#
2015-07-21 11:51:02 +02:00
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
2014-08-11 11:36:47 +02:00
#
2015-07-21 11:51:02 +02:00
# http://www.apache.org/licenses/LICENSE-2.0
2014-08-11 11:36:47 +02:00
#
2015-07-21 11:51:02 +02:00
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2014-08-11 11:36:47 +02:00
#
package apps::bluemind::mode::incoming ;
use base qw( centreon::plugins::mode ) ;
use strict ;
use warnings ;
2015-07-28 18:17:04 +02:00
use centreon::plugins::http ;
2014-08-11 11:36:47 +02:00
use centreon::plugins::statefile ;
2015-02-06 15:09:54 +01:00
use JSON ;
2014-08-11 11:36:47 +02:00
sub new {
my ( $ class , % options ) = @ _ ;
my $ self = $ class - > SUPER:: new ( package = > __PACKAGE__ , % options ) ;
bless $ self , $ class ;
2015-02-06 15:09:54 +01:00
$ self - > { version } = '1.1' ;
2014-08-11 11:36:47 +02:00
$ options { options } - > add_options ( arguments = >
{
"hostname:s" = > { name = > 'hostname' } ,
2015-02-06 15:09:54 +01:00
"port:s" = > { name = > 'port' , default = > '8086' } ,
2015-07-28 18:17:04 +02:00
"proto:s" = > { name = > 'proto' } ,
2015-02-06 15:09:54 +01:00
"urlpath:s" = > { name = > 'url_path' , default = > "/db" } ,
2014-08-11 11:36:47 +02:00
"database:s" = > { name = > 'database' } ,
"username:s" = > { name = > 'username' } ,
"password:s" = > { name = > 'password' } ,
2018-04-23 13:54:07 +02:00
"timeout:s" = > { name = > 'timeout' } ,
"proxyurl:s" = > { name = > 'proxyurl' } ,
"ssl-opt:s@" = > { name = > 'ssl_opt' } ,
2014-08-11 11:36:47 +02:00
"warning:s" = > { name = > 'warning' } ,
"critical:s" = > { name = > 'critical' } ,
} ) ;
$ self - > { statefile_value } = centreon::plugins::statefile - > new ( % options ) ;
2015-07-28 18:17:04 +02:00
$ self - > { http } = centreon::plugins::http - > new ( output = > $ self - > { output } ) ;
2014-08-11 11:36:47 +02:00
return $ self ;
}
sub check_options {
my ( $ self , % options ) = @ _ ;
$ self - > SUPER:: init ( % options ) ;
if ( ( $ self - > { perfdata } - > threshold_validate ( label = > 'warning' , value = > $ self - > { option_results } - > { warning } ) ) == 0 ) {
$ self - > { output } - > add_option_msg ( short_msg = > "Wrong warning threshold '" . $ self - > { option_results } - > { warning } . "'." ) ;
$ self - > { output } - > option_exit ( ) ;
}
if ( ( $ self - > { perfdata } - > threshold_validate ( label = > 'critical' , value = > $ self - > { option_results } - > { critical } ) ) == 0 ) {
$ self - > { output } - > add_option_msg ( short_msg = > "Wrong critical threshold '" . $ self - > { option_results } - > { critical } . "'." ) ;
$ self - > { output } - > option_exit ( ) ;
}
if ( ! defined ( $ self - > { option_results } - > { database } ) ) {
$ self - > { output } - > add_option_msg ( short_msg = > "Please set the database option" ) ;
$ self - > { output } - > option_exit ( ) ;
}
if ( ( ! defined ( $ self - > { option_results } - > { username } ) || ! defined ( $ self - > { option_results } - > { password } ) ) ) {
$ self - > { output } - > add_option_msg ( short_msg = > "You need to set --username= and --password= option" ) ;
$ self - > { output } - > option_exit ( ) ;
}
2015-07-28 18:17:04 +02:00
my $ query = 'select sum("success") as "success_sum", sum("failure") as "failure_sum" from lmtpd.deliveries where time > ' . $ old_timestamp . 's and time < now()' ;
$ self - > { option_results } - > { url_path } = $ self - > { option_results } - > { url_path } . "/" . $ self - > { option_results } - > { database } . "/series" ;
$ self - > { option_results } - > { get_param } = [] ;
push @ { $ self - > { option_results } - > { get_param } } , "q=" . $ query , "p=" . $ self - > { option_results } - > { password } , "u=" . $ self - > { option_results } - > { username } ;
2014-08-11 11:36:47 +02:00
2015-07-28 18:17:04 +02:00
$ self - > { http } - > set_options ( % { $ self - > { option_results } } ) ;
2014-08-11 11:36:47 +02:00
$ self - > { statefile_value } - > check_options ( % options ) ;
}
sub run {
my ( $ self , % options ) = @ _ ;
2015-07-28 18:34:57 +02:00
$ self - > { statefile_value } - > read ( statefile = > 'bluemind_' . $ self - > { option_results } - > { hostname } . '_' . $ self - > { http } - > get_port ( ) . '_' . $ self - > { mode } ) ;
2014-08-11 11:36:47 +02:00
my $ old_timestamp = $ self - > { statefile_value } - > get ( name = > 'last_timestamp' ) ;
my $ new_datas = { } ;
$ new_datas - > { last_timestamp } = time ( ) ;
$ self - > { statefile_value } - > write ( data = > $ new_datas ) ;
if ( ! defined ( $ old_timestamp ) ) {
$ self - > { output } - > output_add ( severity = > 'OK' ,
short_msg = > "Buffer creation..." ) ;
$ self - > { output } - > display ( ) ;
$ self - > { output } - > exit ( ) ;
}
2015-07-28 18:17:04 +02:00
my $ jsoncontent = $ self - > { http } - > request ( ) ;
2015-02-06 15:09:54 +01:00
my $ json = JSON - > new ;
my $ webcontent ;
2014-08-11 11:36:47 +02:00
2015-02-06 15:09:54 +01:00
eval {
$ webcontent = $ json - > decode ( $ jsoncontent ) ;
} ;
if ( $@ ) {
$ self - > { output } - > add_option_msg ( short_msg = > "Cannot decode json response" ) ;
$ self - > { output } - > option_exit ( ) ;
}
2014-08-11 11:36:47 +02:00
my $ hwebcontent ;
for my $ ref ( @ { $ webcontent } ) {
my $ name = $ ref - > { name } ;
my @ columns = @ { $ ref - > { columns } } ;
for my $ points ( @ { $ ref - > { points } } ) {
my % hash ;
@ hash { @ columns } = @$ points ;
push @ { $ hwebcontent - > { $ name } } , \ % hash ;
}
}
2015-02-16 11:01:24 +01:00
my $ success_incoming_mails = defined ( $ hwebcontent - > { qw( lmtpd.deliveries ) } - > [ 0 ] - > { success_sum } ) ? $ hwebcontent - > { qw( lmtpd.deliveries ) } - > [ 0 ] - > { success_sum } : '0' ;
my $ failure_incoming_mails = defined ( $ hwebcontent - > { qw( lmtpd.deliveries ) } - > [ 0 ] - > { failure_sum } ) ? $ hwebcontent - > { qw( lmtpd.deliveries ) } - > [ 0 ] - > { failure_sum } : '0' ;
2014-08-11 11:36:47 +02:00
# If not present: failure and success incoming mails are 0
if ( ! defined ( $ success_incoming_mails ) ) {
$ success_incoming_mails = 0 ;
}
if ( ! defined ( $ failure_incoming_mails ) ) {
$ failure_incoming_mails = 0 ;
}
my $ exit = $ self - > { perfdata } - > threshold_check ( value = > $ failure_incoming_mails , threshold = > [ { label = > 'critical' , 'exit_litteral' = > 'critical' } , { label = > 'warning' , exit_litteral = > 'warning' } ] ) ;
$ self - > { output } - > output_add ( severity = > $ exit ,
short_msg = > sprintf ( "Success Incoming Mails: %d - Failure Incoming Mails: %d" , $ success_incoming_mails , $ failure_incoming_mails ) ) ;
$ self - > { output } - > perfdata_add ( label = > 'success' ,
value = > sprintf ( "%d" , $ success_incoming_mails ) ,
min = > 0 ,
) ;
$ self - > { output } - > perfdata_add ( label = > 'failure' ,
value = > sprintf ( "%d" , $ failure_incoming_mails ) ,
warning = > $ self - > { perfdata } - > get_perfdata_for_output ( label = > 'warning' ) ,
critical = > $ self - > { perfdata } - > get_perfdata_for_output ( label = > 'critical' ) ,
min = > 0 ,
) ;
$ self - > { output } - > display ( ) ;
$ self - > { output } - > exit ( ) ;
}
1 ;
__END__
= head1 MODE
Check Bluemind incoming_mails ( success and failure )
= over 8
= item B <--hostname>
IP Addr / FQDN of the Bluemind host
= item B <--port>
2015-02-06 16:35:13 +01:00
Port used by InfluxDB API ( Default: '8086' )
= item B <--proto>
Specify https if needed ( Default: 'http' )
= item B <--urlpath>
Set path to get influxdb information ( Default: '/db' )
2014-08-11 11:36:47 +02:00
= item B <--database>
InfluxDB Database name
= item B <--username>
Specify username for API authentification
= item B <--password>
Specify password for API authentification
2018-04-23 13:54:07 +02:00
= item B <--proxyurl>
Proxy URL if any
2014-08-11 11:36:47 +02:00
= item B <--timeout>
2018-04-23 13:54:07 +02:00
Threshold for HTTP timeout ( Default: 5 )
= item B <--ssl-opt>
Set SSL Options ( - - ssl - opt = "SSL_version => TLSv1" - - ssl - opt = "SSL_verify_mode => SSL_VERIFY_NONE" ) .
2014-08-11 11:36:47 +02:00
= item B <--warning>
Warning Threshold for failure incoming mails
= item B <--critical>
Critical Threshold for failure incoming mails
= back
= cut