From: Ethan G. <ega...@us...> - 2003-05-19 00:15:52
|
Update of /cvsroot/nagios/nagios/base In directory sc8-pr-cvs1:/tmp/cvs-serv24330/base Modified Files: checks.c config.c events.c nagios.c nagios.h.in utils.c Log Message: Added host result freshness checking Index: checks.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/checks.c,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** checks.c 11 May 2003 06:16:52 -0000 1.43 --- checks.c 19 May 2003 00:15:15 -0000 1.44 *************** *** 4,8 **** * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 05-08-2003 * * License: --- 4,8 ---- * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 05-18-2003 * * License: *************** *** 70,73 **** --- 70,74 ---- extern int check_service_freshness; + extern int check_host_freshness; extern time_t program_start; *************** *** 1778,1781 **** --- 1779,1854 ---- + /* check freshness of host results */ + void check_host_result_freshness(void){ + host *temp_host; + time_t current_time; + time_t expiration_time; + int freshness_threshold; + char buffer[MAX_INPUT_BUFFER]; + + #ifdef DEBUG0 + printf("check_host_result_freshness() start\n"); + #endif + + /* bail out if we're not supposed to be checking freshness */ + if(check_host_freshness==FALSE) + return; + + /* get the current time */ + time(¤t_time); + + /* check all hosts... */ + move_first_host(); + while((temp_host=get_next_host())){ + + /* skip hosts we shouldn't be checking for freshness */ + if(temp_host->check_freshness==FALSE) + continue; + + /* skip hosts that have both active and passive checks disabled */ + if(temp_host->checks_enabled==FALSE && temp_host->accept_passive_host_checks==FALSE) + continue; + + /* skip hosts that are already being freshened */ + if(temp_host->is_being_freshened==TRUE) + continue; + + /* use user-supplied freshness threshold or auto-calculate a freshness threshold to use? */ + if(temp_host->freshness_threshold==0) + freshness_threshold=(temp_host->check_interval*interval_length)+temp_host->latency+15; + else + freshness_threshold=temp_host->freshness_threshold; + + /* calculate expiration time */ + if(temp_host->has_been_checked==FALSE) + expiration_time=(time_t)(program_start+freshness_threshold); + else + expiration_time=(time_t)(temp_host->last_check+freshness_threshold); + + /* the results for the last check of this host are stale */ + if(expiration_time<current_time){ + + /* log a warning */ + snprintf(buffer,sizeof(buffer)-1,"Warning: The results of host '%s' are stale by %lu seconds (threshold=%d seconds). I'm forcing an immediate check of the host.\n",temp_host->name,(current_time-expiration_time),freshness_threshold); + buffer[sizeof(buffer)-1]='\x0'; + write_to_logs_and_console(buffer,NSLOG_RUNTIME_WARNING,TRUE); + + /* set the freshen flag */ + temp_host->is_being_freshened=TRUE; + + /* schedule an immediate forced check of the host */ + schedule_host_check(temp_host,current_time,TRUE); + } + } + + #ifdef DEBUG0 + printf("check_host_result_freshness() end\n"); + #endif + + return; + } + + + /* see if the remote host is alive at all */ int check_host(host *hst, int propagation_options, int check_options){ *************** *** 1810,1813 **** --- 1883,1889 ---- /* set the checked flag */ hst->has_been_checked=TRUE; + + /* clear the freshness flag */ + hst->is_being_freshened=FALSE; /* save the old plugin output and host state for use with state stalking routines */ Index: config.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/config.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** config.c 14 May 2003 03:04:47 -0000 1.25 --- config.c 19 May 2003 00:15:15 -0000 1.26 *************** *** 89,97 **** extern int command_check_interval; extern int service_check_reaper_interval; ! extern int freshness_check_interval; extern int check_external_commands; extern int check_orphaned_services; extern int check_service_freshness; extern int use_aggressive_host_checking; --- 89,99 ---- extern int command_check_interval; extern int service_check_reaper_interval; ! extern int service_freshness_check_interval; ! extern int host_freshness_check_interval; extern int check_external_commands; extern int check_orphaned_services; extern int check_service_freshness; + extern int check_host_freshness; extern int use_aggressive_host_checking; *************** *** 994,1002 **** #endif } ! else if(!strcmp(variable,"freshness_check_interval")){ strip(value); ! freshness_check_interval=atoi(value); ! if(freshness_check_interval<=0){ ! strcpy(error_message,"Illegal value for freshness_check_interval"); error=TRUE; break; --- 996,1031 ---- #endif } ! else if(!strcmp(variable,"check_host_freshness")){ ! if(strlen(value)!=1||value[0]<'0'||value[0]>'1'){ ! strcpy(error_message,"Illegal value for check_host_freshness"); ! error=TRUE; ! break; ! } ! ! strip(value); ! check_host_freshness=(atoi(value)>0)?TRUE:FALSE; ! ! #ifdef DEBUG1 ! printf("\t\tcheck_host_freshness set to %s\n",(check_host_freshness==TRUE)?"TRUE":"FALSE"); ! #endif ! } ! else if(!strcmp(variable,"service_freshness_check_interval") || !strcmp(variable,"freshness_check_interval")){ ! strip(value); ! service_freshness_check_interval=atoi(value); ! if(service_freshness_check_interval<=0){ ! strcpy(error_message,"Illegal value for service_freshness_check_interval"); ! error=TRUE; ! break; ! } ! ! #ifdef DEBUG1 ! printf("\t\tservice_freshness_check_interval set to %d\n",service_freshness_check_interval); ! #endif ! } ! else if(!strcmp(variable,"host_freshness_check_interval")){ strip(value); ! host_freshness_check_interval=atoi(value); ! if(host_freshness_check_interval<=0){ ! strcpy(error_message,"Illegal value for host_freshness_check_interval"); error=TRUE; break; *************** *** 1004,1008 **** #ifdef DEBUG1 ! printf("\t\tfreshness_check_interval set to %d\n",freshness_check_interval); #endif } --- 1033,1037 ---- #ifdef DEBUG1 ! printf("\t\thost_freshness_check_interval set to %d\n",host_freshness_check_interval); #endif } Index: events.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/events.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** events.c 11 May 2003 06:16:52 -0000 1.13 --- events.c 19 May 2003 00:15:15 -0000 1.14 *************** *** 4,8 **** * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 05-08-2003 * * License: --- 4,8 ---- * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 05-18-2003 * * License: *************** *** 48,56 **** extern int command_check_interval; extern int service_check_reaper_interval; ! extern int freshness_check_interval; extern int check_external_commands; extern int check_orphaned_services; extern int check_service_freshness; extern int retain_state_information; --- 48,58 ---- extern int command_check_interval; extern int service_check_reaper_interval; ! extern int service_freshness_check_interval; ! extern int host_freshness_check_interval; extern int check_external_commands; extern int check_orphaned_services; extern int check_service_freshness; + extern int check_host_freshness; extern int retain_state_information; *************** *** 519,523 **** new_event=malloc(sizeof(timed_event)); if(new_event!=NULL){ ! new_event->event_type=EVENT_FRESHNESS_CHECK; new_event->event_data=(void *)NULL; new_event->run_time=current_time; --- 521,537 ---- new_event=malloc(sizeof(timed_event)); if(new_event!=NULL){ ! new_event->event_type=EVENT_SFRESHNESS_CHECK; ! new_event->event_data=(void *)NULL; ! new_event->run_time=current_time; ! new_event->recurring=TRUE; ! schedule_event(new_event,&event_list_high); ! } ! } ! ! /* add a host result "freshness" check event */ ! if(check_host_freshness==TRUE){ ! new_event=malloc(sizeof(timed_event)); ! if(new_event!=NULL){ ! new_event->event_type=EVENT_HFRESHNESS_CHECK; new_event->event_data=(void *)NULL; new_event->run_time=current_time; *************** *** 752,757 **** /* if this is a service result freshness check */ ! else if(event->event_type==EVENT_FRESHNESS_CHECK) ! event->run_time=event->run_time+freshness_check_interval; /* if this is a state retention save event... */ --- 766,775 ---- /* if this is a service result freshness check */ ! else if(event->event_type==EVENT_SFRESHNESS_CHECK) ! event->run_time=event->run_time+service_freshness_check_interval; ! ! /* if this is a host result freshness check */ ! else if(event->event_type==EVENT_HFRESHNESS_CHECK) ! event->run_time=event->run_time+host_freshness_check_interval; /* if this is a state retention save event... */ *************** *** 1144,1150 **** printf("(scheduled downtime)\n"); ! else if(event->event_type==EVENT_FRESHNESS_CHECK) printf("(service result freshness check)\n"); else if(event->event_type==EVENT_EXPIRE_DOWNTIME) printf("(expire downtime)\n"); --- 1162,1171 ---- printf("(scheduled downtime)\n"); ! else if(event->event_type==EVENT_SFRESHNESS_CHECK) printf("(service result freshness check)\n"); + else if(event->event_type==EVENT_HFRESHNESS_CHECK) + printf("(host result freshness check)\n"); + else if(event->event_type==EVENT_EXPIRE_DOWNTIME) printf("(expire downtime)\n"); *************** *** 1234,1241 **** break; ! case EVENT_FRESHNESS_CHECK: /* check service result freshness */ check_service_result_freshness(); break; --- 1255,1268 ---- break; ! case EVENT_SFRESHNESS_CHECK: /* check service result freshness */ check_service_result_freshness(); + break; + + case EVENT_HFRESHNESS_CHECK: + + /* check host result freshness */ + check_host_result_freshness(); break; Index: nagios.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/nagios.c,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -r1.45 -r1.46 *** nagios.c 14 May 2003 03:04:47 -0000 1.45 --- nagios.c 19 May 2003 00:15:16 -0000 1.46 *************** *** 9,13 **** * * First Written: 01-28-1999 (start of development) ! * Last Modified: 04-29-2003 * * Description: --- 9,13 ---- * * First Written: 01-28-1999 (start of development) ! * Last Modified: 05-18-2003 * * Description: *************** *** 108,112 **** int service_check_reaper_interval=DEFAULT_SERVICE_REAPER_INTERVAL; int max_check_reaper_time=DEFAULT_MAX_REAPER_TIME; ! int freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL; int non_parallelized_check_running=FALSE; --- 108,113 ---- int service_check_reaper_interval=DEFAULT_SERVICE_REAPER_INTERVAL; int max_check_reaper_time=DEFAULT_MAX_REAPER_TIME; ! int service_freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL; ! int host_freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL; int non_parallelized_check_running=FALSE; *************** *** 115,118 **** --- 116,120 ---- int check_orphaned_services=DEFAULT_CHECK_ORPHANED_SERVICES; int check_service_freshness=DEFAULT_CHECK_SERVICE_FRESHNESS; + int check_host_freshness=DEFAULT_CHECK_HOST_FRESHNESS; time_t last_command_check=0L; Index: nagios.h.in =================================================================== RCS file: /cvsroot/nagios/nagios/base/nagios.h.in,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -r1.33 -r1.34 *** nagios.h.in 14 May 2003 03:04:47 -0000 1.33 --- nagios.h.in 19 May 2003 00:15:16 -0000 1.34 *************** *** 3,7 **** * Nagios Main Header File * Written By: Ethan Galstad (na...@na...) ! * Last Modified: 05-13-2003 * * This program is free software; you can redistribute it and/or modify --- 3,7 ---- * Nagios Main Header File * Written By: Ethan Galstad (na...@na...) ! * Last Modified: 05-18-2003 * * This program is free software; you can redistribute it and/or modify *************** *** 145,148 **** --- 145,149 ---- #define DEFAULT_PROCESS_PERFORMANCE_DATA 0 /* don't process performance data */ #define DEFAULT_CHECK_SERVICE_FRESHNESS 1 /* check service result freshness */ + #define DEFAULT_CHECK_HOST_FRESHNESS 0 /* check host result freshness */ #define DEFAULT_LOW_SERVICE_FLAP_THRESHOLD 20.0 /* low threshold for detection of service flapping */ *************** *** 238,244 **** #define EVENT_STATUS_SAVE 8 /* save (dump) status data */ #define EVENT_SCHEDULED_DOWNTIME 9 /* scheduled host or service downtime */ ! #define EVENT_FRESHNESS_CHECK 10 /* checks service result "freshness" */ #define EVENT_EXPIRE_DOWNTIME 11 /* checks for (and removes) expired scheduled downtime */ #define EVENT_HOST_CHECK 12 /* active host check */ --- 239,246 ---- #define EVENT_STATUS_SAVE 8 /* save (dump) status data */ #define EVENT_SCHEDULED_DOWNTIME 9 /* scheduled host or service downtime */ ! #define EVENT_SFRESHNESS_CHECK 10 /* checks service result "freshness" */ #define EVENT_EXPIRE_DOWNTIME 11 /* checks for (and removes) expired scheduled downtime */ #define EVENT_HOST_CHECK 12 /* active host check */ + #define EVENT_HFRESHNESS_CHECK 13 /* checks host result "freshness" */ *************** *** 441,444 **** --- 443,447 ---- void check_for_orphaned_services(void); /* checks for orphaned services */ void check_service_result_freshness(void); /* checks the "freshness" of service check results */ + void check_host_result_freshness(void); /* checks the "freshness" of host check results */ int my_system(char *,int,int *,double *,char *,int); /* executes a command via popen(), but also protects against timeouts */ void compensate_for_system_time_change(unsigned long,unsigned long); /* attempts to compensate for a change in the system time */ Index: utils.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/utils.c,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** utils.c 14 May 2003 03:04:47 -0000 1.42 --- utils.c 19 May 2003 00:15:16 -0000 1.43 *************** *** 4,8 **** * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 05-13-2003 * * License: --- 4,8 ---- * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 05-18-2003 * * License: *************** *** 118,126 **** extern int command_check_interval; extern int service_check_reaper_interval; ! extern int freshness_check_interval; extern int check_external_commands; extern int check_orphaned_services; extern int check_service_freshness; extern int use_aggressive_host_checking; --- 118,128 ---- extern int command_check_interval; extern int service_check_reaper_interval; ! extern int service_freshness_check_interval; ! extern int host_freshness_check_interval; extern int check_external_commands; extern int check_orphaned_services; extern int check_service_freshness; + extern int check_host_freshness; extern int use_aggressive_host_checking; *************** *** 3423,3431 **** command_check_interval=DEFAULT_COMMAND_CHECK_INTERVAL; service_check_reaper_interval=DEFAULT_SERVICE_REAPER_INTERVAL; ! freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL; check_external_commands=DEFAULT_CHECK_EXTERNAL_COMMANDS; check_orphaned_services=DEFAULT_CHECK_ORPHANED_SERVICES; check_service_freshness=DEFAULT_CHECK_SERVICE_FRESHNESS; log_rotation_method=LOG_ROTATION_NONE; --- 3425,3435 ---- command_check_interval=DEFAULT_COMMAND_CHECK_INTERVAL; service_check_reaper_interval=DEFAULT_SERVICE_REAPER_INTERVAL; ! service_freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL; ! host_freshness_check_interval=DEFAULT_FRESHNESS_CHECK_INTERVAL; check_external_commands=DEFAULT_CHECK_EXTERNAL_COMMANDS; check_orphaned_services=DEFAULT_CHECK_ORPHANED_SERVICES; check_service_freshness=DEFAULT_CHECK_SERVICE_FRESHNESS; + check_host_freshness=DEFAULT_CHECK_HOST_FRESHNESS; log_rotation_method=LOG_ROTATION_NONE; |