2017-05-19 22:22:40 +02:00
/*****************************************************************************
*
* NAGIOSTATS . C - Displays Nagios Statistics
*
* Program : Nagiostats
* License : GPL
*
* License :
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2017-05-19 23:37:19 +02:00
# include "../lib/libnagios.h"
2017-05-19 22:22:40 +02:00
# include "../include/config.h"
# include "../include/common.h"
# include "../include/nagios.h"
# include "../include/locations.h"
# define STATUS_NO_DATA 0
# define STATUS_INFO_DATA 1
# define STATUS_PROGRAM_DATA 2
# define STATUS_HOST_DATA 3
# define STATUS_SERVICE_DATA 4
2017-05-19 23:37:19 +02:00
static char * main_config_file = NULL ;
2017-05-19 22:22:40 +02:00
char * status_file = NULL ;
2017-05-19 23:37:19 +02:00
static char * mrtg_variables = NULL ;
static const char * mrtg_delimiter = " \n " ;
2017-05-19 22:22:40 +02:00
2017-05-19 23:37:19 +02:00
static int mrtg_mode = FALSE ;
2017-05-19 22:22:40 +02:00
2017-05-19 23:37:19 +02:00
static time_t status_creation_date = 0L ;
static char * status_version = NULL ;
2017-05-19 22:22:40 +02:00
time_t program_start = 0L ;
2017-05-19 23:37:19 +02:00
static int status_service_entries = 0 ;
static int status_host_entries = 0 ;
int nagios_pid = 0 ;
static double min_service_state_change = 0.0 ;
static int have_min_service_state_change = FALSE ;
static double max_service_state_change = 0.0 ;
static int have_max_service_state_change = FALSE ;
static double average_service_state_change = 0.0 ;
static double min_active_service_state_change = 0.0 ;
static int have_min_active_service_state_change = FALSE ;
static double max_active_service_state_change = 0.0 ;
static int have_max_active_service_state_change = FALSE ;
static double average_active_service_state_change = 0.0 ;
static double min_active_service_latency = 0.0 ;
static int have_min_active_service_latency = FALSE ;
static double max_active_service_latency = 0.0 ;
static int have_max_active_service_latency = FALSE ;
static double average_active_service_latency = 0.0 ;
static double min_active_service_execution_time = 0.0 ;
static int have_min_active_service_execution_time = FALSE ;
static double max_active_service_execution_time = 0.0 ;
static int have_max_active_service_execution_time = FALSE ;
static double average_active_service_execution_time = 0.0 ;
static double min_passive_service_state_change = 0.0 ;
static int have_min_passive_service_state_change = FALSE ;
static double max_passive_service_state_change = 0.0 ;
static int have_max_passive_service_state_change = FALSE ;
static double average_passive_service_state_change = 0.0 ;
static double min_passive_service_latency = 0.0 ;
static int have_min_passive_service_latency = FALSE ;
static double max_passive_service_latency = 0.0 ;
static int have_max_passive_service_latency = FALSE ;
static double average_passive_service_latency = 0.0 ;
static int have_min_host_state_change = FALSE ;
static double min_host_state_change = 0.0 ;
static int have_max_host_state_change = FALSE ;
static double max_host_state_change = 0.0 ;
static double average_host_state_change = 0.0 ;
static int have_min_active_host_state_change = FALSE ;
static double min_active_host_state_change = 0.0 ;
static int have_max_active_host_state_change = FALSE ;
static double max_active_host_state_change = 0.0 ;
static double average_active_host_state_change = 0.0 ;
static int have_min_active_host_latency = FALSE ;
static double min_active_host_latency = 0.0 ;
static int have_max_active_host_latency = FALSE ;
static double max_active_host_latency = 0.0 ;
static double average_active_host_latency = 0.0 ;
static int have_min_active_host_execution_time = FALSE ;
static double min_active_host_execution_time = 0.0 ;
static int have_max_active_host_execution_time = FALSE ;
static double max_active_host_execution_time = 0.0 ;
static double average_active_host_execution_time = 0.0 ;
static int have_min_passive_host_latency = FALSE ;
static double min_passive_host_latency = 0.0 ;
static int have_max_passive_host_latency = FALSE ;
static double max_passive_host_latency = 0.0 ;
static double average_passive_host_latency = 0.0 ;
static double min_passive_host_state_change = 0.0 ;
static int have_min_passive_host_state_change = FALSE ;
static double max_passive_host_state_change = 0.0 ;
static int have_max_passive_host_state_change = FALSE ;
static double average_passive_host_state_change = 0.0 ;
static int passive_service_checks = 0 ;
static int active_service_checks = 0 ;
static int services_ok = 0 ;
static int services_warning = 0 ;
static int services_unknown = 0 ;
static int services_critical = 0 ;
static int services_flapping = 0 ;
static int services_in_downtime = 0 ;
static int services_checked = 0 ;
static int services_scheduled = 0 ;
static int passive_host_checks = 0 ;
static int active_host_checks = 0 ;
static int hosts_up = 0 ;
static int hosts_down = 0 ;
static int hosts_unreachable = 0 ;
static int hosts_flapping = 0 ;
static int hosts_in_downtime = 0 ;
static int hosts_checked = 0 ;
static int hosts_scheduled = 0 ;
static int passive_services_checked_last_1min = 0 ;
static int passive_services_checked_last_5min = 0 ;
static int passive_services_checked_last_15min = 0 ;
static int passive_services_checked_last_1hour = 0 ;
static int active_services_checked_last_1min = 0 ;
static int active_services_checked_last_5min = 0 ;
static int active_services_checked_last_15min = 0 ;
static int active_services_checked_last_1hour = 0 ;
static int passive_hosts_checked_last_1min = 0 ;
static int passive_hosts_checked_last_5min = 0 ;
static int passive_hosts_checked_last_15min = 0 ;
static int passive_hosts_checked_last_1hour = 0 ;
static int active_hosts_checked_last_1min = 0 ;
static int active_hosts_checked_last_5min = 0 ;
static int active_hosts_checked_last_15min = 0 ;
static int active_hosts_checked_last_1hour = 0 ;
static int active_host_checks_last_1min = 0 ;
static int active_host_checks_last_5min = 0 ;
static int active_host_checks_last_15min = 0 ;
static int active_ondemand_host_checks_last_1min = 0 ;
static int active_ondemand_host_checks_last_5min = 0 ;
static int active_ondemand_host_checks_last_15min = 0 ;
static int active_scheduled_host_checks_last_1min = 0 ;
static int active_scheduled_host_checks_last_5min = 0 ;
static int active_scheduled_host_checks_last_15min = 0 ;
static int passive_host_checks_last_1min = 0 ;
static int passive_host_checks_last_5min = 0 ;
static int passive_host_checks_last_15min = 0 ;
static int active_cached_host_checks_last_1min = 0 ;
static int active_cached_host_checks_last_5min = 0 ;
static int active_cached_host_checks_last_15min = 0 ;
static int parallel_host_checks_last_1min = 0 ;
static int parallel_host_checks_last_5min = 0 ;
static int parallel_host_checks_last_15min = 0 ;
static int serial_host_checks_last_1min = 0 ;
static int serial_host_checks_last_5min = 0 ;
static int serial_host_checks_last_15min = 0 ;
static int active_service_checks_last_1min = 0 ;
static int active_service_checks_last_5min = 0 ;
static int active_service_checks_last_15min = 0 ;
static int active_ondemand_service_checks_last_1min = 0 ;
static int active_ondemand_service_checks_last_5min = 0 ;
static int active_ondemand_service_checks_last_15min = 0 ;
static int active_scheduled_service_checks_last_1min = 0 ;
static int active_scheduled_service_checks_last_5min = 0 ;
static int active_scheduled_service_checks_last_15min = 0 ;
static int passive_service_checks_last_1min = 0 ;
static int passive_service_checks_last_5min = 0 ;
static int passive_service_checks_last_15min = 0 ;
static int active_cached_service_checks_last_1min = 0 ;
static int active_cached_service_checks_last_5min = 0 ;
static int active_cached_service_checks_last_15min = 0 ;
static int external_commands_last_1min = 0 ;
static int external_commands_last_5min = 0 ;
static int external_commands_last_15min = 0 ;
static int display_mrtg_values ( void ) ;
static int display_stats ( void ) ;
static int read_config_file ( void ) ;
static int read_status_file ( void ) ;
2017-05-19 22:22:40 +02:00
int main ( int argc , char * * argv ) {
int result ;
int error = FALSE ;
int display_license = FALSE ;
int display_help = FALSE ;
int c ;
# ifdef HAVE_GETOPT_H
int option_index = 0 ;
static struct option long_options [ ] = {
2017-05-19 23:37:19 +02:00
{ " help " , no_argument , NULL , ' h ' } ,
{ " version " , no_argument , NULL , ' V ' } ,
{ " license " , no_argument , NULL , ' L ' } ,
{ " config " , required_argument , NULL , ' c ' } ,
{ " statsfile " , required_argument , NULL , ' s ' } ,
{ " mrtg " , no_argument , NULL , ' m ' } ,
{ " data " , required_argument , NULL , ' d ' } ,
{ " delimiter " , required_argument , NULL , ' D ' } ,
{ NULL , 0 , NULL , 0 }
2017-05-19 22:22:40 +02:00
} ;
2017-05-19 23:37:19 +02:00
# define getopt(argc, argv, OPTSTR) getopt_long(argc, argv, OPTSTR, long_options, &option_index)
2017-05-19 22:22:40 +02:00
# endif
/* defaults */
main_config_file = strdup ( DEFAULT_CONFIG_FILE ) ;
/* get all command line arguments */
while ( 1 ) {
c = getopt ( argc , argv , " +hVLc:ms:d:D: " ) ;
if ( c = = - 1 | | c = = EOF )
break ;
switch ( c ) {
case ' ? ' :
case ' h ' :
display_help = TRUE ;
break ;
case ' V ' :
display_license = TRUE ;
break ;
case ' L ' :
display_license = TRUE ;
break ;
case ' c ' :
if ( main_config_file )
free ( main_config_file ) ;
main_config_file = strdup ( optarg ) ;
break ;
case ' s ' :
2017-05-19 23:37:19 +02:00
status_file = strdup ( optarg ) ;
2017-05-19 22:22:40 +02:00
break ;
case ' m ' :
mrtg_mode = TRUE ;
break ;
case ' d ' :
mrtg_variables = strdup ( optarg ) ;
break ;
case ' D ' :
mrtg_delimiter = strdup ( optarg ) ;
break ;
default :
break ;
}
}
if ( mrtg_mode = = FALSE ) {
printf ( " \n Nagios Stats %s \n " , PROGRAM_VERSION ) ;
printf ( " Copyright (c) 2003-2008 Ethan Galstad (www.nagios.org) \n " ) ;
printf ( " Last Modified: %s \n " , PROGRAM_MODIFICATION_DATE ) ;
printf ( " License: GPL \n \n " ) ;
}
/* just display the license */
if ( display_license = = TRUE ) {
printf ( " This program is free software; you can redistribute it and/or modify \n " ) ;
printf ( " it under the terms of the GNU General Public License version 2 as \n " ) ;
printf ( " published by the Free Software Foundation. \n \n " ) ;
printf ( " This program is distributed in the hope that it will be useful, \n " ) ;
printf ( " but WITHOUT ANY WARRANTY; without even the implied warranty of \n " ) ;
printf ( " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n " ) ;
printf ( " GNU General Public License for more details. \n \n " ) ;
printf ( " You should have received a copy of the GNU General Public License \n " ) ;
printf ( " along with this program; if not, write to the Free Software \n " ) ;
printf ( " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. \n \n " ) ;
exit ( OK ) ;
}
/* if there are no command line options (or if we encountered an error), print usage */
if ( error = = TRUE | | display_help = = TRUE ) {
printf ( " Usage: %s [options] \n " , argv [ 0 ] ) ;
printf ( " \n " ) ;
printf ( " Startup: \n " ) ;
printf ( " -V, --version display program version information and exit. \n " ) ;
printf ( " -L, --license display license information and exit. \n " ) ;
printf ( " -h, --help display usage information and exit. \n " ) ;
printf ( " \n " ) ;
printf ( " Input file: \n " ) ;
printf ( " -c, --config=FILE specifies location of main Nagios config file. \n " ) ;
printf ( " -s, --statsfile=FILE specifies alternate location of file to read Nagios \n " ) ;
printf ( " performance data from. \n " ) ;
printf ( " \n " ) ;
printf ( " Output: \n " ) ;
printf ( " -m, --mrtg display output in MRTG compatible format. \n " ) ;
2017-05-19 23:37:19 +02:00
printf ( " -d, --data=VARS comma-separated list of variables to output in MRTG \n " ) ;
2017-05-19 22:22:40 +02:00
printf ( " (or compatible) format. See possible values below. \n " ) ;
printf ( " Percentages are rounded, times are in milliseconds. \n " ) ;
printf ( " -D, --delimiter=C character to use as delimiter in MRTG output mode. \n " ) ;
printf ( " Defaults to a newline. \n " ) ;
printf ( " \n " ) ;
printf ( " MRTG DATA VARIABLES (-d option): \n " ) ;
printf ( " PROGRUNTIME string with time Nagios process has been running. \n " ) ;
printf ( " PROGRUNTIMETT time Nagios process has been running (time_t format). \n " ) ;
printf ( " STATUSFILEAGE string with age of status data file. \n " ) ;
printf ( " STATUSFILEAGETT string with age of status data file (time_t format). \n " ) ;
printf ( " NAGIOSVERSION string with Nagios version. \n " ) ;
2017-05-19 23:37:19 +02:00
printf ( " NAGIOSPID pid number of Nagios daemon. \n " ) ;
2017-05-19 22:22:40 +02:00
printf ( " NAGIOSVERPID string with Nagios version and PID. \n " ) ;
printf ( " TOTCMDBUF total number of external command buffer slots available. \n " ) ;
printf ( " USEDCMDBUF number of external command buffer slots currently in use. \n " ) ;
printf ( " HIGHCMDBUF highest number of external command buffer slots ever in use. \n " ) ;
printf ( " NUMSERVICES total number of services. \n " ) ;
printf ( " NUMHOSTS total number of hosts. \n " ) ;
printf ( " NUMSVCOK number of services OK. \n " ) ;
printf ( " NUMSVCWARN number of services WARNING. \n " ) ;
printf ( " NUMSVCUNKN number of services UNKNOWN. \n " ) ;
printf ( " NUMSVCCRIT number of services CRITICAL. \n " ) ;
2017-05-19 23:37:19 +02:00
printf ( " NUMSVCPROB number of service problems (WARNING, UNKNOWN or CRITICAL). \n " ) ;
2017-05-19 22:22:40 +02:00
printf ( " NUMSVCCHECKED number of services that have been checked since start. \n " ) ;
printf ( " NUMSVCSCHEDULED number of services that are currently scheduled to be checked. \n " ) ;
printf ( " NUMSVCFLAPPING number of services that are currently flapping. \n " ) ;
printf ( " NUMSVCDOWNTIME number of services that are currently in downtime. \n " ) ;
printf ( " NUMHSTUP number of hosts UP. \n " ) ;
printf ( " NUMHSTDOWN number of hosts DOWN. \n " ) ;
printf ( " NUMHSTUNR number of hosts UNREACHABLE. \n " ) ;
printf ( " NUMHSTPROB number of host problems (DOWN or UNREACHABLE). \n " ) ;
printf ( " NUMHSTCHECKED number of hosts that have been checked since start. \n " ) ;
printf ( " NUMHSTSCHEDULED number of hosts that are currently scheduled to be checked. \n " ) ;
printf ( " NUMHSTFLAPPING number of hosts that are currently flapping. \n " ) ;
printf ( " NUMHSTDOWNTIME number of hosts that are currently in downtime. \n " ) ;
printf ( " NUMHSTACTCHKxM number of hosts actively checked in last 1/5/15/60 minutes. \n " ) ;
printf ( " NUMHSTPSVCHKxM number of hosts passively checked in last 1/5/15/60 minutes. \n " ) ;
printf ( " NUMSVCACTCHKxM number of services actively checked in last 1/5/15/60 minutes. \n " ) ;
printf ( " NUMSVCPSVCHKxM number of services passively checked in last 1/5/15/60 minutes. \n " ) ;
printf ( " xxxACTSVCLAT MIN/MAX/AVG active service check latency (ms). \n " ) ;
printf ( " xxxACTSVCEXT MIN/MAX/AVG active service check execution time (ms). \n " ) ;
printf ( " xxxACTSVCPSC MIN/MAX/AVG active service check %% state change. \n " ) ;
printf ( " xxxPSVSVCLAT MIN/MAX/AVG passive service check latency (ms). \n " ) ;
printf ( " xxxPSVSVCPSC MIN/MAX/AVG passive service check %% state change. \n " ) ;
printf ( " xxxSVCPSC MIN/MAX/AVG service check %% state change. \n " ) ;
printf ( " xxxACTHSTLAT MIN/MAX/AVG active host check latency (ms). \n " ) ;
printf ( " xxxACTHSTEXT MIN/MAX/AVG active host check execution time (ms). \n " ) ;
printf ( " xxxACTHSTPSC MIN/MAX/AVG active host check %% state change. \n " ) ;
printf ( " xxxPSVHSTLAT MIN/MAX/AVG passive host check latency (ms). \n " ) ;
printf ( " xxxPSVHSTPSC MIN/MAX/AVG passive host check %% state change. \n " ) ;
printf ( " xxxHSTPSC MIN/MAX/AVG host check %% state change. \n " ) ;
2017-05-19 23:37:19 +02:00
printf ( " NUMACTHSTCHECKSxM number of total active host checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMOACTHSTCHECKSxM number of on-demand active host checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMCACHEDHSTCHECKSxM number of cached host checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMSACTHSTCHECKSxM number of scheduled active host checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMPARHSTCHECKSxM number of parallel host checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMSERHSTCHECKSxM number of serial host checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMPSVHSTCHECKSxM number of passive host checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMACTSVCCHECKSxM number of total active service checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMOACTSVCCHECKSxM number of on-demand active service checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMCACHEDSVCCHECKSxM number of cached service checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMSACTSVCCHECKSxM number of scheduled active service checks occurring in last 1/5/15 minutes. \n " ) ;
printf ( " NUMPSVSVCCHECKSxM number of passive service checks occurring in last 1/5/15 minutes. \n " ) ;
2017-05-19 22:22:40 +02:00
printf ( " NUMEXTCMDSxM number of external commands processed in last 1/5/15 minutes. \n " ) ;
printf ( " \n " ) ;
printf ( " Note: Replace x's in MRTG variable names with 'MIN', 'MAX', 'AVG', or the \n " ) ;
printf ( " the appropriate number (i.e. '1', '5', '15', or '60'). \n " ) ;
printf ( " \n " ) ;
exit ( ERROR ) ;
}
2017-05-19 23:37:19 +02:00
/* if we got no -s option, we must read the main config file */
if ( status_file = = NULL ) {
2017-05-19 22:22:40 +02:00
/* read main config file */
result = read_config_file ( ) ;
if ( result = = ERROR & & mrtg_mode = = FALSE ) {
printf ( " Error processing config file '%s' \n " , main_config_file ) ;
return ERROR ;
}
2017-05-19 23:37:19 +02:00
}
2017-05-19 22:22:40 +02:00
2017-05-19 23:37:19 +02:00
/* read status file */
result = read_status_file ( ) ;
if ( result = = ERROR & & mrtg_mode = = FALSE ) {
printf ( " Error reading status file '%s': %s \n " , status_file , strerror ( errno ) ) ;
return ERROR ;
2017-05-19 22:22:40 +02:00
}
/* display stats */
if ( mrtg_mode = = FALSE )
display_stats ( ) ;
else
display_mrtg_values ( ) ;
/* Opsera patch - return based on error, because mrtg_mode was always returning OK */
if ( result = = ERROR )
return ERROR ;
else
return OK ;
}
2017-05-19 23:37:19 +02:00
static int display_mrtg_values ( void ) {
2017-05-19 22:22:40 +02:00
char * temp_ptr ;
time_t current_time ;
unsigned long time_difference ;
int days ;
int hours ;
int minutes ;
int seconds ;
time ( & current_time ) ;
if ( mrtg_variables = = NULL )
return OK ;
/* process all variables */
for ( temp_ptr = strtok ( mrtg_variables , " , " ) ; temp_ptr ! = NULL ; temp_ptr = strtok ( NULL , " , " ) ) {
if ( ! strcmp ( temp_ptr , " PROGRUNTIME " ) ) {
time_difference = ( current_time - program_start ) ;
get_time_breakdown ( time_difference , & days , & hours , & minutes , & seconds ) ;
printf ( " %dd %dh %dm %ds%s " , days , hours , minutes , seconds , mrtg_delimiter ) ;
}
else if ( ! strcmp ( temp_ptr , " PROGRUNTIMETT " ) ) {
time_difference = ( current_time - program_start ) ;
printf ( " %lu%s " , time_difference , mrtg_delimiter ) ;
}
else if ( ! strcmp ( temp_ptr , " STATUSFILEAGE " ) ) {
time_difference = ( current_time - status_creation_date ) ;
get_time_breakdown ( time_difference , & days , & hours , & minutes , & seconds ) ;
printf ( " %dd %dh %dm %ds%s " , days , hours , minutes , seconds , mrtg_delimiter ) ;
}
else if ( ! strcmp ( temp_ptr , " STATUSFILEAGETT " ) ) {
time_difference = ( current_time - status_creation_date ) ;
printf ( " %lu%s " , time_difference , mrtg_delimiter ) ;
}
else if ( ! strcmp ( temp_ptr , " NAGIOSVERSION " ) )
printf ( " %s%s " , status_version , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NAGIOSPID " ) )
2017-05-19 23:37:19 +02:00
printf ( " %d%s " , nagios_pid , mrtg_delimiter ) ;
2017-05-19 22:22:40 +02:00
else if ( ! strcmp ( temp_ptr , " NAGIOSVERPID " ) )
2017-05-19 23:37:19 +02:00
printf ( " Nagios %s (pid=%d)%s " , status_version , nagios_pid , mrtg_delimiter ) ;
2017-05-19 22:22:40 +02:00
else if ( ! strcmp ( temp_ptr , " NUMSERVICES " ) )
printf ( " %d%s " , status_service_entries , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHOSTS " ) )
printf ( " %d%s " , status_host_entries , mrtg_delimiter ) ;
/* active service check latency */
else if ( ! strcmp ( temp_ptr , " MINACTSVCLAT " ) )
printf ( " %d%s " , ( int ) ( min_active_service_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXACTSVCLAT " ) )
printf ( " %d%s " , ( int ) ( max_active_service_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGACTSVCLAT " ) )
printf ( " %d%s " , ( int ) ( average_active_service_latency * 1000 ) , mrtg_delimiter ) ;
/* active service check execution time */
else if ( ! strcmp ( temp_ptr , " MINACTSVCEXT " ) )
printf ( " %d%s " , ( int ) ( min_active_service_execution_time * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXACTSVCEXT " ) )
printf ( " %d%s " , ( int ) ( max_active_service_execution_time * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGACTSVCEXT " ) )
printf ( " %d%s " , ( int ) ( average_active_service_execution_time * 1000 ) , mrtg_delimiter ) ;
/* active service check percent state change */
else if ( ! strcmp ( temp_ptr , " MINACTSVCPSC " ) )
printf ( " %d%s " , ( int ) min_active_service_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXACTSVCPSC " ) )
printf ( " %d%s " , ( int ) max_active_service_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGACTSVCPSC " ) )
printf ( " %d%s " , ( int ) average_active_service_state_change , mrtg_delimiter ) ;
/* passive service check latency */
else if ( ! strcmp ( temp_ptr , " MINPSVSVCLAT " ) )
printf ( " %d%s " , ( int ) ( min_passive_service_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXPSVSVCLAT " ) )
printf ( " %d%s " , ( int ) ( max_passive_service_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGPSVSVCLAT " ) )
printf ( " %d%s " , ( int ) ( average_passive_service_latency * 1000 ) , mrtg_delimiter ) ;
/* passive service check percent state change */
else if ( ! strcmp ( temp_ptr , " MINPSVSVCPSC " ) )
printf ( " %d%s " , ( int ) min_passive_service_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXPSVSVCPSC " ) )
printf ( " %d%s " , ( int ) max_passive_service_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGPSVSVCPSC " ) )
printf ( " %d%s " , ( int ) average_passive_service_state_change , mrtg_delimiter ) ;
/* service check percent state change */
else if ( ! strcmp ( temp_ptr , " MINSVCPSC " ) )
printf ( " %d%s " , ( int ) min_service_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXSVCPSC " ) )
printf ( " %d%s " , ( int ) max_service_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGSVCPSC " ) )
printf ( " %d%s " , ( int ) average_service_state_change , mrtg_delimiter ) ;
/* active host check latency */
else if ( ! strcmp ( temp_ptr , " MINACTHSTLAT " ) )
printf ( " %d%s " , ( int ) ( min_active_host_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXACTHSTLAT " ) )
printf ( " %d%s " , ( int ) ( max_active_host_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGACTHSTLAT " ) )
printf ( " %d%s " , ( int ) ( average_active_host_latency * 1000 ) , mrtg_delimiter ) ;
/* active host check execution time */
else if ( ! strcmp ( temp_ptr , " MINACTHSTEXT " ) )
printf ( " %d%s " , ( int ) ( min_active_host_execution_time * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXACTHSTEXT " ) )
printf ( " %d%s " , ( int ) ( max_active_host_execution_time * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGACTHSTEXT " ) )
printf ( " %d%s " , ( int ) ( average_active_host_execution_time * 1000 ) , mrtg_delimiter ) ;
/* active host check percent state change */
else if ( ! strcmp ( temp_ptr , " MINACTHSTPSC " ) )
printf ( " %d%s " , ( int ) min_active_host_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXACTHSTPSC " ) )
printf ( " %d%s " , ( int ) max_active_host_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGACTHSTPSC " ) )
printf ( " %d%s " , ( int ) average_active_host_state_change , mrtg_delimiter ) ;
/* passive host check latency */
else if ( ! strcmp ( temp_ptr , " MINPSVHSTLAT " ) )
printf ( " %d%s " , ( int ) ( min_passive_host_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXPSVHSTLAT " ) )
printf ( " %d%s " , ( int ) ( max_passive_host_latency * 1000 ) , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGPSVHSTLAT " ) )
printf ( " %d%s " , ( int ) ( average_passive_host_latency * 1000 ) , mrtg_delimiter ) ;
/* passive host check percent state change */
else if ( ! strcmp ( temp_ptr , " MINPSVHSTPSC " ) )
printf ( " %d%s " , ( int ) min_passive_host_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXPSVHSTPSC " ) )
printf ( " %d%s " , ( int ) max_passive_host_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGPSVHSTPSC " ) )
printf ( " %d%s " , ( int ) average_passive_host_state_change , mrtg_delimiter ) ;
/* host check percent state change */
else if ( ! strcmp ( temp_ptr , " MINHSTPSC " ) )
printf ( " %d%s " , ( int ) min_host_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " MAXHSTPSC " ) )
printf ( " %d%s " , ( int ) max_host_state_change , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " AVGHSTPSC " ) )
printf ( " %d%s " , ( int ) average_host_state_change , mrtg_delimiter ) ;
/* active host checks over time */
else if ( ! strcmp ( temp_ptr , " NUMHSTACTCHK1M " ) )
printf ( " %d%s " , active_hosts_checked_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTACTCHK5M " ) )
printf ( " %d%s " , active_hosts_checked_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTACTCHK15M " ) )
printf ( " %d%s " , active_hosts_checked_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTACTCHK60M " ) )
printf ( " %d%s " , active_hosts_checked_last_1hour , mrtg_delimiter ) ;
/* passive host checks over time */
else if ( ! strcmp ( temp_ptr , " NUMHSTPSVCHK1M " ) )
printf ( " %d%s " , passive_hosts_checked_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTPSVCHK5M " ) )
printf ( " %d%s " , passive_hosts_checked_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTPSVCHK15M " ) )
printf ( " %d%s " , passive_hosts_checked_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTPSVCHK60M " ) )
printf ( " %d%s " , passive_hosts_checked_last_1hour , mrtg_delimiter ) ;
/* active service checks over time */
else if ( ! strcmp ( temp_ptr , " NUMSVCACTCHK1M " ) )
printf ( " %d%s " , active_services_checked_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCACTCHK5M " ) )
printf ( " %d%s " , active_services_checked_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCACTCHK15M " ) )
printf ( " %d%s " , active_services_checked_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCACTCHK60M " ) )
printf ( " %d%s " , active_services_checked_last_1hour , mrtg_delimiter ) ;
/* passive service checks over time */
else if ( ! strcmp ( temp_ptr , " NUMSVCPSVCHK1M " ) )
printf ( " %d%s " , passive_services_checked_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCPSVCHK5M " ) )
printf ( " %d%s " , passive_services_checked_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCPSVCHK15M " ) )
printf ( " %d%s " , passive_services_checked_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCPSVCHK60M " ) )
printf ( " %d%s " , passive_services_checked_last_1hour , mrtg_delimiter ) ;
/* host check statistics */
else if ( ! strcmp ( temp_ptr , " NUMACTHSTCHECKS1M " ) )
printf ( " %d%s " , active_host_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMACTHSTCHECKS5M " ) )
printf ( " %d%s " , active_host_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMACTHSTCHECKS15M " ) )
printf ( " %d%s " , active_host_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMOACTHSTCHECKS1M " ) )
printf ( " %d%s " , active_ondemand_host_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMOACTHSTCHECKS5M " ) )
printf ( " %d%s " , active_ondemand_host_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMOACTHSTCHECKS15M " ) )
printf ( " %d%s " , active_ondemand_host_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSACTHSTCHECKS1M " ) )
printf ( " %d%s " , active_scheduled_host_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSACTHSTCHECKS5M " ) )
printf ( " %d%s " , active_scheduled_host_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSACTHSTCHECKS15M " ) )
printf ( " %d%s " , active_scheduled_host_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPARHSTCHECKS1M " ) )
printf ( " %d%s " , parallel_host_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPARHSTCHECKS5M " ) )
printf ( " %d%s " , parallel_host_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPARHSTCHECKS15M " ) )
printf ( " %d%s " , parallel_host_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSERHSTCHECKS1M " ) )
printf ( " %d%s " , serial_host_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSERHSTCHECKS5M " ) )
printf ( " %d%s " , serial_host_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSERHSTCHECKS15M " ) )
printf ( " %d%s " , serial_host_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPSVHSTCHECKS1M " ) )
printf ( " %d%s " , passive_host_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPSVHSTCHECKS5M " ) )
printf ( " %d%s " , passive_host_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPSVHSTCHECKS15M " ) )
printf ( " %d%s " , passive_host_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMCACHEDHSTCHECKS1M " ) )
printf ( " %d%s " , active_cached_host_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMCACHEDHSTCHECKS5M " ) )
printf ( " %d%s " , active_cached_host_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMCACHEDHSTCHECKS15M " ) )
printf ( " %d%s " , active_cached_host_checks_last_15min , mrtg_delimiter ) ;
/* service check statistics */
else if ( ! strcmp ( temp_ptr , " NUMACTSVCCHECKS1M " ) )
printf ( " %d%s " , active_service_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMACTSVCCHECKS5M " ) )
printf ( " %d%s " , active_service_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMACTSVCCHECKS15M " ) )
printf ( " %d%s " , active_service_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMOACTSVCCHECKS1M " ) )
printf ( " %d%s " , active_ondemand_service_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMOACTSVCCHECKS5M " ) )
printf ( " %d%s " , active_ondemand_service_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMOACTSVCCHECKS15M " ) )
printf ( " %d%s " , active_ondemand_service_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSACTSVCCHECKS1M " ) )
printf ( " %d%s " , active_scheduled_service_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSACTSVCCHECKS5M " ) )
printf ( " %d%s " , active_scheduled_service_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSACTSVCCHECKS15M " ) )
printf ( " %d%s " , active_scheduled_service_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPSVSVCCHECKS1M " ) )
printf ( " %d%s " , passive_service_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPSVSVCCHECKS5M " ) )
printf ( " %d%s " , passive_service_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMPSVSVCCHECKS15M " ) )
printf ( " %d%s " , passive_service_checks_last_15min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMCACHEDSVCCHECKS1M " ) )
printf ( " %d%s " , active_cached_service_checks_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMCACHEDSVCCHECKS5M " ) )
printf ( " %d%s " , active_cached_service_checks_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMCACHEDSVCCHECKS15M " ) )
printf ( " %d%s " , active_cached_service_checks_last_15min , mrtg_delimiter ) ;
/* external command stats */
else if ( ! strcmp ( temp_ptr , " NUMEXTCMDS1M " ) )
printf ( " %d%s " , external_commands_last_1min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMEXTCMDS5M " ) )
printf ( " %d%s " , external_commands_last_5min , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMEXTCMDS15M " ) )
printf ( " %d%s " , external_commands_last_15min , mrtg_delimiter ) ;
/* service states */
else if ( ! strcmp ( temp_ptr , " NUMSVCOK " ) )
printf ( " %d%s " , services_ok , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCWARN " ) )
printf ( " %d%s " , services_warning , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCUNKN " ) )
printf ( " %d%s " , services_unknown , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCCRIT " ) )
printf ( " %d%s " , services_critical , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCPROB " ) )
printf ( " %d%s " , services_warning + services_unknown + services_critical , mrtg_delimiter ) ;
/* misc service info */
else if ( ! strcmp ( temp_ptr , " NUMSVCCHECKED " ) )
printf ( " %d%s " , services_checked , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCSCHEDULED " ) )
printf ( " %d%s " , services_scheduled , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCFLAPPING " ) )
printf ( " %d%s " , services_flapping , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMSVCDOWNTIME " ) )
printf ( " %d%s " , services_in_downtime , mrtg_delimiter ) ;
/* host states */
else if ( ! strcmp ( temp_ptr , " NUMHSTUP " ) )
printf ( " %d%s " , hosts_up , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTDOWN " ) )
printf ( " %d%s " , hosts_down , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTUNR " ) )
printf ( " %d%s " , hosts_unreachable , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTPROB " ) )
printf ( " %d%s " , hosts_down + hosts_unreachable , mrtg_delimiter ) ;
/* misc host info */
else if ( ! strcmp ( temp_ptr , " NUMHSTCHECKED " ) )
printf ( " %d%s " , hosts_checked , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTSCHEDULED " ) )
printf ( " %d%s " , hosts_scheduled , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTFLAPPING " ) )
printf ( " %d%s " , hosts_flapping , mrtg_delimiter ) ;
else if ( ! strcmp ( temp_ptr , " NUMHSTDOWNTIME " ) )
printf ( " %d%s " , hosts_in_downtime , mrtg_delimiter ) ;
else
printf ( " %s%s " , temp_ptr , mrtg_delimiter ) ;
}
/* add a newline if necessary */
if ( strcmp ( mrtg_delimiter , " \n " ) )
printf ( " \n " ) ;
return OK ;
}
2017-05-19 23:37:19 +02:00
static int display_stats ( void ) {
2017-05-19 22:22:40 +02:00
time_t current_time ;
unsigned long time_difference ;
int days ;
int hours ;
int minutes ;
int seconds ;
time ( & current_time ) ;
printf ( " CURRENT STATUS DATA \n " ) ;
printf ( " ------------------------------------------------------ \n " ) ;
2017-05-19 23:37:19 +02:00
printf ( " Status File: %s \n " , status_file ) ;
2017-05-19 22:22:40 +02:00
time_difference = ( current_time - status_creation_date ) ;
get_time_breakdown ( time_difference , & days , & hours , & minutes , & seconds ) ;
printf ( " Status File Age: %dd %dh %dm %ds \n " , days , hours , minutes , seconds ) ;
printf ( " Status File Version: %s \n " , status_version ) ;
printf ( " \n " ) ;
time_difference = ( current_time - program_start ) ;
get_time_breakdown ( time_difference , & days , & hours , & minutes , & seconds ) ;
printf ( " Program Running Time: %dd %dh %dm %ds \n " , days , hours , minutes , seconds ) ;
2017-05-19 23:37:19 +02:00
printf ( " Nagios PID: %d \n " , nagios_pid ) ;
2017-05-19 22:22:40 +02:00
printf ( " \n " ) ;
printf ( " Total Services: %d \n " , status_service_entries ) ;
printf ( " Services Checked: %d \n " , services_checked ) ;
printf ( " Services Scheduled: %d \n " , services_scheduled ) ;
printf ( " Services Actively Checked: %d \n " , active_service_checks ) ;
printf ( " Services Passively Checked: %d \n " , passive_service_checks ) ;
printf ( " Total Service State Change: %.3f / %.3f / %.3f %% \n " , min_service_state_change , max_service_state_change , average_service_state_change ) ;
printf ( " Active Service Latency: %.3f / %.3f / %.3f sec \n " , min_active_service_latency , max_active_service_latency , average_active_service_latency ) ;
printf ( " Active Service Execution Time: %.3f / %.3f / %.3f sec \n " , min_active_service_execution_time , max_active_service_execution_time , average_active_service_execution_time ) ;
printf ( " Active Service State Change: %.3f / %.3f / %.3f %% \n " , min_active_service_state_change , max_active_service_state_change , average_active_service_state_change ) ;
printf ( " Active Services Last 1/5/15/60 min: %d / %d / %d / %d \n " , active_services_checked_last_1min , active_services_checked_last_5min , active_services_checked_last_15min , active_services_checked_last_1hour ) ;
printf ( " Passive Service Latency: %.3f / %.3f / %.3f sec \n " , min_passive_service_latency , max_passive_service_latency , average_passive_service_latency ) ;
printf ( " Passive Service State Change: %.3f / %.3f / %.3f %% \n " , min_passive_service_state_change , max_passive_service_state_change , average_passive_service_state_change ) ;
printf ( " Passive Services Last 1/5/15/60 min: %d / %d / %d / %d \n " , passive_services_checked_last_1min , passive_services_checked_last_5min , passive_services_checked_last_15min , passive_services_checked_last_1hour ) ;
printf ( " Services Ok/Warn/Unk/Crit: %d / %d / %d / %d \n " , services_ok , services_warning , services_unknown , services_critical ) ;
printf ( " Services Flapping: %d \n " , services_flapping ) ;
printf ( " Services In Downtime: %d \n " , services_in_downtime ) ;
printf ( " \n " ) ;
printf ( " Total Hosts: %d \n " , status_host_entries ) ;
printf ( " Hosts Checked: %d \n " , hosts_checked ) ;
printf ( " Hosts Scheduled: %d \n " , hosts_scheduled ) ;
printf ( " Hosts Actively Checked: %d \n " , active_host_checks ) ;
printf ( " Host Passively Checked: %d \n " , passive_host_checks ) ;
printf ( " Total Host State Change: %.3f / %.3f / %.3f %% \n " , min_host_state_change , max_host_state_change , average_host_state_change ) ;
printf ( " Active Host Latency: %.3f / %.3f / %.3f sec \n " , min_active_host_latency , max_active_host_latency , average_active_host_latency ) ;
printf ( " Active Host Execution Time: %.3f / %.3f / %.3f sec \n " , min_active_host_execution_time , max_active_host_execution_time , average_active_host_execution_time ) ;
printf ( " Active Host State Change: %.3f / %.3f / %.3f %% \n " , min_active_host_state_change , max_active_host_state_change , average_active_host_state_change ) ;
printf ( " Active Hosts Last 1/5/15/60 min: %d / %d / %d / %d \n " , active_hosts_checked_last_1min , active_hosts_checked_last_5min , active_hosts_checked_last_15min , active_hosts_checked_last_1hour ) ;
printf ( " Passive Host Latency: %.3f / %.3f / %.3f sec \n " , min_passive_host_latency , max_passive_host_latency , average_passive_host_latency ) ;
printf ( " Passive Host State Change: %.3f / %.3f / %.3f %% \n " , min_passive_host_state_change , max_passive_host_state_change , average_passive_host_state_change ) ;
printf ( " Passive Hosts Last 1/5/15/60 min: %d / %d / %d / %d \n " , passive_hosts_checked_last_1min , passive_hosts_checked_last_5min , passive_hosts_checked_last_15min , passive_hosts_checked_last_1hour ) ;
printf ( " Hosts Up/Down/Unreach: %d / %d / %d \n " , hosts_up , hosts_down , hosts_unreachable ) ;
printf ( " Hosts Flapping: %d \n " , hosts_flapping ) ;
printf ( " Hosts In Downtime: %d \n " , hosts_in_downtime ) ;
printf ( " \n " ) ;
printf ( " Active Host Checks Last 1/5/15 min: %d / %d / %d \n " , active_host_checks_last_1min , active_host_checks_last_5min , active_host_checks_last_15min ) ;
printf ( " Scheduled: %d / %d / %d \n " , active_scheduled_host_checks_last_1min , active_scheduled_host_checks_last_5min , active_scheduled_host_checks_last_15min ) ;
printf ( " On-demand: %d / %d / %d \n " , active_ondemand_host_checks_last_1min , active_ondemand_host_checks_last_5min , active_ondemand_host_checks_last_15min ) ;
printf ( " Parallel: %d / %d / %d \n " , parallel_host_checks_last_1min , parallel_host_checks_last_5min , parallel_host_checks_last_15min ) ;
printf ( " Serial: %d / %d / %d \n " , serial_host_checks_last_1min , serial_host_checks_last_5min , serial_host_checks_last_15min ) ;
printf ( " Cached: %d / %d / %d \n " , active_cached_host_checks_last_1min , active_cached_host_checks_last_5min , active_cached_host_checks_last_15min ) ;
printf ( " Passive Host Checks Last 1/5/15 min: %d / %d / %d \n " , passive_host_checks_last_1min , passive_host_checks_last_5min , passive_host_checks_last_15min ) ;
printf ( " Active Service Checks Last 1/5/15 min: %d / %d / %d \n " , active_service_checks_last_1min , active_service_checks_last_5min , active_service_checks_last_15min ) ;
printf ( " Scheduled: %d / %d / %d \n " , active_scheduled_service_checks_last_1min , active_scheduled_service_checks_last_5min , active_scheduled_service_checks_last_15min ) ;
printf ( " On-demand: %d / %d / %d \n " , active_ondemand_service_checks_last_1min , active_ondemand_service_checks_last_5min , active_ondemand_service_checks_last_15min ) ;
printf ( " Cached: %d / %d / %d \n " , active_cached_service_checks_last_1min , active_cached_service_checks_last_5min , active_cached_service_checks_last_15min ) ;
printf ( " Passive Service Checks Last 1/5/15 min: %d / %d / %d \n " , passive_service_checks_last_1min , passive_service_checks_last_5min , passive_service_checks_last_15min ) ;
printf ( " \n " ) ;
printf ( " External Commands Last 1/5/15 min: %d / %d / %d \n " , external_commands_last_1min , external_commands_last_5min , external_commands_last_15min ) ;
printf ( " \n " ) ;
printf ( " \n " ) ;
/*
printf ( " CURRENT COMMENT DATA \n " ) ;
printf ( " ---------------------------------------------------- \n " ) ;
printf ( " \n " ) ;
printf ( " \n " ) ;
printf ( " CURRENT DOWNTIME DATA \n " ) ;
printf ( " ---------------------------------------------------- \n " ) ;
printf ( " \n " ) ;
*/
return OK ;
}
2017-05-19 23:37:19 +02:00
static int read_config_file ( void ) {
2017-05-19 22:22:40 +02:00
char temp_buffer [ MAX_INPUT_BUFFER ] ;
FILE * fp ;
char * var ;
char * val ;
2017-05-19 23:37:19 +02:00
char * main_cfg_dir = NULL ;
char * slash = NULL ;
2017-05-19 22:22:40 +02:00
2017-05-19 23:37:19 +02:00
main_cfg_dir = nspath_absolute ( main_config_file , NULL ) ;
if ( ( slash = strrchr ( main_cfg_dir , ' / ' ) ) )
* slash = 0 ;
2017-05-19 22:22:40 +02:00
fp = fopen ( main_config_file , " r " ) ;
if ( fp = = NULL )
return ERROR ;
/* read all lines from the main nagios config file */
while ( fgets ( temp_buffer , sizeof ( temp_buffer ) - 1 , fp ) ) {
strip ( temp_buffer ) ;
/* skip blank lines and comments */
if ( temp_buffer [ 0 ] = = ' # ' | | temp_buffer [ 0 ] = = ' \x0 ' )
continue ;
var = strtok ( temp_buffer , " = " ) ;
val = strtok ( NULL , " \n " ) ;
if ( val = = NULL )
continue ;
if ( ! strcmp ( var , " status_file " ) | | ! strcmp ( var , " status_log " ) | | ! strcmp ( var , " xsddefault_status_log " ) ) {
if ( status_file )
free ( status_file ) ;
2017-05-19 23:37:19 +02:00
status_file = nspath_absolute ( val , main_cfg_dir ) ;
2017-05-19 22:22:40 +02:00
}
}
fclose ( fp ) ;
return OK ;
}
2017-05-19 23:37:19 +02:00
static int read_status_file ( void ) {
2017-05-19 22:22:40 +02:00
char temp_buffer [ MAX_INPUT_BUFFER ] ;
FILE * fp = NULL ;
int data_type = STATUS_NO_DATA ;
char * var = NULL ;
char * val = NULL ;
char * temp_ptr = NULL ;
time_t current_time ;
unsigned long time_difference = 0L ;
double execution_time = 0.0 ;
double latency = 0.0 ;
2017-05-19 23:37:19 +02:00
int check_type = CHECK_TYPE_ACTIVE ;
2017-05-19 22:22:40 +02:00
int current_state = STATE_OK ;
double state_change = 0.0 ;
int is_flapping = FALSE ;
int downtime_depth = 0 ;
time_t last_check = 0L ;
int should_be_scheduled = TRUE ;
int has_been_checked = TRUE ;
time ( & current_time ) ;
fp = fopen ( status_file , " r " ) ;
if ( fp = = NULL )
return ERROR ;
/* read all lines in the status file */
while ( fgets ( temp_buffer , sizeof ( temp_buffer ) - 1 , fp ) ) {
/* skip blank lines and comments */
if ( temp_buffer [ 0 ] = = ' # ' | | temp_buffer [ 0 ] = = ' \x0 ' )
continue ;
strip ( temp_buffer ) ;
/* start of definition */
if ( ! strcmp ( temp_buffer , " servicestatus { " ) ) {
data_type = STATUS_SERVICE_DATA ;
status_service_entries + + ;
}
else if ( ! strcmp ( temp_buffer , " hoststatus { " ) ) {
data_type = STATUS_HOST_DATA ;
status_host_entries + + ;
}
else if ( ! strcmp ( temp_buffer , " info { " ) )
data_type = STATUS_INFO_DATA ;
else if ( ! strcmp ( temp_buffer , " programstatus { " ) )
data_type = STATUS_PROGRAM_DATA ;
/* end of definition */
else if ( ! strcmp ( temp_buffer , " } " ) ) {
switch ( data_type ) {
case STATUS_INFO_DATA :
break ;
case STATUS_PROGRAM_DATA :
/* 02-15-2008 exclude cached host checks from total (they were ondemand checks that never actually executed) */
active_host_checks_last_1min = active_scheduled_host_checks_last_1min + active_ondemand_host_checks_last_1min ;
active_host_checks_last_5min = active_scheduled_host_checks_last_5min + active_ondemand_host_checks_last_5min ;
active_host_checks_last_15min = active_scheduled_host_checks_last_15min + active_ondemand_host_checks_last_15min ;
/* 02-15-2008 exclude cached service checks from total (they were ondemand checks that never actually executed) */
active_service_checks_last_1min = active_scheduled_service_checks_last_1min + active_ondemand_service_checks_last_1min ;
active_service_checks_last_5min = active_scheduled_service_checks_last_5min + active_ondemand_service_checks_last_5min ;
active_service_checks_last_15min = active_scheduled_service_checks_last_15min + active_ondemand_service_checks_last_15min ;
break ;
case STATUS_HOST_DATA :
average_host_state_change = ( ( ( average_host_state_change * ( ( double ) status_host_entries - 1.0 ) ) + state_change ) / ( double ) status_host_entries ) ;
if ( have_min_host_state_change = = FALSE | | min_host_state_change > state_change ) {
have_min_host_state_change = TRUE ;
min_host_state_change = state_change ;
}
if ( have_max_host_state_change = = FALSE | | max_host_state_change < state_change ) {
have_max_host_state_change = TRUE ;
max_host_state_change = state_change ;
}
2017-05-19 23:37:19 +02:00
if ( check_type = = CHECK_TYPE_ACTIVE ) {
2017-05-19 22:22:40 +02:00
active_host_checks + + ;
average_active_host_latency = ( ( ( average_active_host_latency * ( ( double ) active_host_checks - 1.0 ) ) + latency ) / ( double ) active_host_checks ) ;
if ( have_min_active_host_latency = = FALSE | | min_active_host_latency > latency ) {
have_min_active_host_latency = TRUE ;
min_active_host_latency = latency ;
}
if ( have_max_active_host_latency = = FALSE | | max_active_host_latency < latency ) {
have_max_active_host_latency = TRUE ;
max_active_host_latency = latency ;
}
average_active_host_execution_time = ( ( ( average_active_host_execution_time * ( ( double ) active_host_checks - 1.0 ) ) + execution_time ) / ( double ) active_host_checks ) ;
if ( have_min_active_host_execution_time = = FALSE | | min_active_host_execution_time > execution_time ) {
have_min_active_host_execution_time = TRUE ;
min_active_host_execution_time = execution_time ;
}
if ( have_max_active_host_execution_time = = FALSE | | max_active_host_execution_time < execution_time ) {
have_max_active_host_execution_time = TRUE ;
max_active_host_execution_time = execution_time ;
}
average_active_host_state_change = ( ( ( average_active_host_state_change * ( ( double ) active_host_checks - 1.0 ) ) + state_change ) / ( double ) active_host_checks ) ;
if ( have_min_active_host_state_change = = FALSE | | min_active_host_state_change > state_change ) {
have_min_active_host_state_change = TRUE ;
min_active_host_state_change = state_change ;
}
if ( have_max_active_host_state_change = = FALSE | | max_active_host_state_change < state_change ) {
have_max_active_host_state_change = TRUE ;
max_active_host_state_change = state_change ;
}
time_difference = current_time - last_check ;
if ( time_difference < = 3600 )
active_hosts_checked_last_1hour + + ;
if ( time_difference < = 900 )
active_hosts_checked_last_15min + + ;
if ( time_difference < = 300 )
active_hosts_checked_last_5min + + ;
if ( time_difference < = 60 )
active_hosts_checked_last_1min + + ;
}
else {
passive_host_checks + + ;
average_passive_host_latency = ( ( ( average_passive_host_latency * ( ( double ) passive_host_checks - 1.0 ) ) + latency ) / ( double ) passive_host_checks ) ;
if ( have_min_passive_host_latency = = FALSE | | min_passive_host_latency > latency ) {
have_min_passive_host_latency = TRUE ;
min_passive_host_latency = latency ;
}
if ( have_max_passive_host_latency = = FALSE | | max_passive_host_latency < latency ) {
have_max_passive_host_latency = TRUE ;
max_passive_host_latency = latency ;
}
average_passive_host_state_change = ( ( ( average_passive_host_state_change * ( ( double ) passive_host_checks - 1.0 ) ) + state_change ) / ( double ) passive_host_checks ) ;
if ( have_min_passive_host_state_change = = FALSE | | min_passive_host_state_change > state_change ) {
have_min_passive_host_state_change = TRUE ;
min_passive_host_state_change = state_change ;
}
if ( have_max_passive_host_state_change = = FALSE | | max_passive_host_state_change < state_change ) {
have_max_passive_host_state_change = TRUE ;
max_passive_host_state_change = state_change ;
}
time_difference = current_time - last_check ;
if ( time_difference < = 3600 )
passive_hosts_checked_last_1hour + + ;
if ( time_difference < = 900 )
passive_hosts_checked_last_15min + + ;
if ( time_difference < = 300 )
passive_hosts_checked_last_5min + + ;
if ( time_difference < = 60 )
passive_hosts_checked_last_1min + + ;
}
switch ( current_state ) {
case HOST_UP :
hosts_up + + ;
break ;
case HOST_DOWN :
hosts_down + + ;
break ;
case HOST_UNREACHABLE :
hosts_unreachable + + ;
break ;
default :
break ;
}
if ( is_flapping = = TRUE )
hosts_flapping + + ;
if ( downtime_depth > 0 )
hosts_in_downtime + + ;
if ( has_been_checked = = TRUE )
hosts_checked + + ;
if ( should_be_scheduled = = TRUE )
hosts_scheduled + + ;
break ;
case STATUS_SERVICE_DATA :
average_service_state_change = ( ( ( average_service_state_change * ( ( double ) status_service_entries - 1.0 ) ) + state_change ) / ( double ) status_service_entries ) ;
if ( have_min_service_state_change = = FALSE | | min_service_state_change > state_change ) {
have_min_service_state_change = TRUE ;
min_service_state_change = state_change ;
}
if ( have_max_service_state_change = = FALSE | | max_service_state_change < state_change ) {
have_max_service_state_change = TRUE ;
max_service_state_change = state_change ;
}
2017-05-19 23:37:19 +02:00
if ( check_type = = CHECK_TYPE_ACTIVE ) {
2017-05-19 22:22:40 +02:00
active_service_checks + + ;
average_active_service_latency = ( ( ( average_active_service_latency * ( ( double ) active_service_checks - 1.0 ) ) + latency ) / ( double ) active_service_checks ) ;
if ( have_min_active_service_latency = = FALSE | | min_active_service_latency > latency ) {
have_min_active_service_latency = TRUE ;
min_active_service_latency = latency ;
}
if ( have_max_active_service_latency = = FALSE | | max_active_service_latency < latency ) {
have_max_active_service_latency = TRUE ;
max_active_service_latency = latency ;
}
average_active_service_execution_time = ( ( ( average_active_service_execution_time * ( ( double ) active_service_checks - 1.0 ) ) + execution_time ) / ( double ) active_service_checks ) ;
if ( have_min_active_service_execution_time = = FALSE | | min_active_service_execution_time > execution_time ) {
have_min_active_service_execution_time = TRUE ;
min_active_service_execution_time = execution_time ;
}
if ( have_max_active_service_execution_time = = FALSE | | max_active_service_execution_time < execution_time ) {
have_max_active_service_execution_time = TRUE ;
max_active_service_execution_time = execution_time ;
}
average_active_service_state_change = ( ( ( average_active_service_state_change * ( ( double ) active_service_checks - 1.0 ) ) + state_change ) / ( double ) active_service_checks ) ;
if ( have_min_active_service_state_change = = FALSE | | min_active_service_state_change > state_change ) {
have_min_active_service_state_change = TRUE ;
min_active_service_state_change = state_change ;
}
if ( have_max_active_service_state_change = = FALSE | | max_active_service_state_change < state_change ) {
have_max_active_service_state_change = TRUE ;
max_active_service_state_change = state_change ;
}
time_difference = current_time - last_check ;
if ( time_difference < = 3600 )
active_services_checked_last_1hour + + ;
if ( time_difference < = 900 )
active_services_checked_last_15min + + ;
if ( time_difference < = 300 )
active_services_checked_last_5min + + ;
if ( time_difference < = 60 )
active_services_checked_last_1min + + ;
}
else {
passive_service_checks + + ;
average_passive_service_latency = ( ( ( average_passive_service_latency * ( ( double ) passive_service_checks - 1.0 ) ) + latency ) / ( double ) passive_service_checks ) ;
if ( have_min_passive_service_latency = = FALSE | | min_passive_service_latency > latency ) {
have_min_passive_service_latency = TRUE ;
min_passive_service_latency = latency ;
}
if ( have_max_passive_service_latency = = FALSE | | max_passive_service_latency < latency ) {
have_max_passive_service_latency = TRUE ;
max_passive_service_latency = latency ;
}
average_passive_service_state_change = ( ( ( average_passive_service_state_change * ( ( double ) passive_service_checks - 1.0 ) ) + state_change ) / ( double ) passive_service_checks ) ;
if ( have_min_passive_service_state_change = = FALSE | | min_passive_service_state_change > state_change ) {
have_min_passive_service_state_change = TRUE ;
min_passive_service_state_change = state_change ;
}
if ( have_max_passive_service_state_change = = FALSE | | max_passive_service_state_change < state_change ) {
have_max_passive_service_state_change = TRUE ;
max_passive_service_state_change = state_change ;
}
time_difference = current_time - last_check ;
if ( time_difference < = 3600 )
passive_services_checked_last_1hour + + ;
if ( time_difference < = 900 )
passive_services_checked_last_15min + + ;
if ( time_difference < = 300 )
passive_services_checked_last_5min + + ;
if ( time_difference < = 60 )
passive_services_checked_last_1min + + ;
}
switch ( current_state ) {
case STATE_OK :
services_ok + + ;
break ;
case STATE_WARNING :
services_warning + + ;
break ;
case STATE_UNKNOWN :
services_unknown + + ;
break ;
case STATE_CRITICAL :
services_critical + + ;
break ;
default :
break ;
}
if ( is_flapping = = TRUE )
services_flapping + + ;
if ( downtime_depth > 0 )
services_in_downtime + + ;
if ( has_been_checked = = TRUE )
services_checked + + ;
if ( should_be_scheduled = = TRUE )
services_scheduled + + ;
break ;
default :
break ;
}
data_type = STATUS_NO_DATA ;
execution_time = 0.0 ;
latency = 0.0 ;
check_type = 0 ;
current_state = 0 ;
state_change = 0.0 ;
is_flapping = FALSE ;
downtime_depth = 0 ;
last_check = ( time_t ) 0 ;
has_been_checked = FALSE ;
should_be_scheduled = FALSE ;
}
/* inside definition */
else if ( data_type ! = STATUS_NO_DATA ) {
var = strtok ( temp_buffer , " = " ) ;
val = strtok ( NULL , " \n " ) ;
if ( val = = NULL )
continue ;
switch ( data_type ) {
case STATUS_INFO_DATA :
if ( ! strcmp ( var , " created " ) )
status_creation_date = strtoul ( val , NULL , 10 ) ;
else if ( ! strcmp ( var , " version " ) )
status_version = strdup ( val ) ;
break ;
case STATUS_PROGRAM_DATA :
if ( ! strcmp ( var , " program_start " ) )
program_start = strtoul ( val , NULL , 10 ) ;
else if ( ! strcmp ( var , " nagios_pid " ) )
nagios_pid = strtoul ( val , NULL , 10 ) ;
else if ( ! strcmp ( var , " active_scheduled_host_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
active_scheduled_host_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_scheduled_host_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_scheduled_host_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " active_ondemand_host_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
active_ondemand_host_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_ondemand_host_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_ondemand_host_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " cached_host_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
active_cached_host_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_cached_host_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_cached_host_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " passive_host_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
passive_host_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
passive_host_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
passive_host_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " active_scheduled_service_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
active_scheduled_service_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_scheduled_service_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_scheduled_service_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " active_ondemand_service_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
active_ondemand_service_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_ondemand_service_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_ondemand_service_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " cached_service_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
active_cached_service_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_cached_service_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
active_cached_service_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " passive_service_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
passive_service_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
passive_service_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
passive_service_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " external_command_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
external_commands_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
external_commands_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
external_commands_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " parallel_host_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
parallel_host_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
parallel_host_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
parallel_host_checks_last_15min = atoi ( temp_ptr ) ;
}
else if ( ! strcmp ( var , " serial_host_check_stats " ) ) {
if ( ( temp_ptr = strtok ( val , " , " ) ) )
serial_host_checks_last_1min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
serial_host_checks_last_5min = atoi ( temp_ptr ) ;
if ( ( temp_ptr = strtok ( NULL , " , " ) ) )
serial_host_checks_last_15min = atoi ( temp_ptr ) ;
}
break ;
case STATUS_HOST_DATA :
if ( ! strcmp ( var , " check_execution_time " ) )
execution_time = strtod ( val , NULL ) ;
else if ( ! strcmp ( var , " check_latency " ) )
latency = strtod ( val , NULL ) ;
else if ( ! strcmp ( var , " percent_state_change " ) )
state_change = strtod ( val , NULL ) ;
else if ( ! strcmp ( var , " check_type " ) )
check_type = atoi ( val ) ;
else if ( ! strcmp ( var , " current_state " ) )
current_state = atoi ( val ) ;
else if ( ! strcmp ( var , " is_flapping " ) )
is_flapping = ( atoi ( val ) > 0 ) ? TRUE : FALSE ;
else if ( ! strcmp ( var , " scheduled_downtime_depth " ) )
downtime_depth = atoi ( val ) ;
else if ( ! strcmp ( var , " last_check " ) )
last_check = strtoul ( val , NULL , 10 ) ;
else if ( ! strcmp ( var , " has_been_checked " ) )
has_been_checked = ( atoi ( val ) > 0 ) ? TRUE : FALSE ;
else if ( ! strcmp ( var , " should_be_scheduled " ) )
should_be_scheduled = ( atoi ( val ) > 0 ) ? TRUE : FALSE ;
break ;
case STATUS_SERVICE_DATA :
if ( ! strcmp ( var , " check_execution_time " ) )
execution_time = strtod ( val , NULL ) ;
else if ( ! strcmp ( var , " check_latency " ) )
latency = strtod ( val , NULL ) ;
else if ( ! strcmp ( var , " percent_state_change " ) )
state_change = strtod ( val , NULL ) ;
else if ( ! strcmp ( var , " check_type " ) )
check_type = atoi ( val ) ;
else if ( ! strcmp ( var , " current_state " ) )
current_state = atoi ( val ) ;
else if ( ! strcmp ( var , " is_flapping " ) )
is_flapping = ( atoi ( val ) > 0 ) ? TRUE : FALSE ;
else if ( ! strcmp ( var , " scheduled_downtime_depth " ) )
downtime_depth = atoi ( val ) ;
else if ( ! strcmp ( var , " last_check " ) )
last_check = strtoul ( val , NULL , 10 ) ;
else if ( ! strcmp ( var , " has_been_checked " ) )
has_been_checked = ( atoi ( val ) > 0 ) ? TRUE : FALSE ;
else if ( ! strcmp ( var , " should_be_scheduled " ) )
should_be_scheduled = ( atoi ( val ) > 0 ) ? TRUE : FALSE ;
break ;
default :
break ;
}
}
}
fclose ( fp ) ;
return OK ;
}
/* strip newline, carriage return, and tab characters from beginning and end of a string */
void strip ( char * buffer ) {
register int x ;
register int y ;
register int z ;
if ( buffer = = NULL | | buffer [ 0 ] = = ' \x0 ' )
return ;
/* strip end of string */
y = ( int ) strlen ( buffer ) ;
for ( x = y - 1 ; x > = 0 ; x - - ) {
if ( buffer [ x ] = = ' ' | | buffer [ x ] = = ' \n ' | | buffer [ x ] = = ' \r ' | | buffer [ x ] = = ' \t ' | | buffer [ x ] = = 13 )
buffer [ x ] = ' \x0 ' ;
else
break ;
}
/* strip beginning of string (by shifting) */
y = ( int ) strlen ( buffer ) ;
for ( x = 0 ; x < y ; x + + ) {
if ( buffer [ x ] = = ' ' | | buffer [ x ] = = ' \n ' | | buffer [ x ] = = ' \r ' | | buffer [ x ] = = ' \t ' | | buffer [ x ] = = 13 )
continue ;
else
break ;
}
if ( x > 0 ) {
for ( z = x ; z < y ; z + + )
buffer [ z - x ] = buffer [ z ] ;
buffer [ y - x ] = ' \x0 ' ;
}
return ;
}
/* get days, hours, minutes, and seconds from a raw time_t format or total seconds */
void get_time_breakdown ( unsigned long raw_time , int * days , int * hours , int * minutes , int * seconds ) {
unsigned long temp_time ;
int temp_days ;
int temp_hours ;
int temp_minutes ;
int temp_seconds ;
temp_time = raw_time ;
temp_days = temp_time / 86400 ;
temp_time - = ( temp_days * 86400 ) ;
temp_hours = temp_time / 3600 ;
temp_time - = ( temp_hours * 3600 ) ;
temp_minutes = temp_time / 60 ;
temp_time - = ( temp_minutes * 60 ) ;
temp_seconds = ( int ) temp_time ;
* days = temp_days ;
* hours = temp_hours ;
* minutes = temp_minutes ;
* seconds = temp_seconds ;
return ;
}