From: Ethan G. <ega...@us...> - 2003-02-25 04:55:48
|
Update of /cvsroot/nagios/nagios/base In directory sc8-pr-cvs1:/tmp/cvs-serv26635/base Modified Files: checks.c commands.c events.c nagios.c nagios.h.in Log Message: More scheduled host check stuff Index: checks.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/checks.c,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -r1.30 -r1.31 *** checks.c 24 Feb 2003 05:17:22 -0000 1.30 --- checks.c 25 Feb 2003 04:55:44 -0000 1.31 *************** *** 1543,1557 **** } /**** RUN THE SCHEDULED HOST CHECK ****/ /* check route to the host (propagate problems and recoveries both up and down the tree) */ check_host(hst,PROPAGATE_TO_PARENT_HOSTS | PROPAGATE_TO_CHILD_HOSTS,hst->check_options); - /* reschedule the next host check */ - hst->next_check=current_time+(hst->check_interval*interval_length); - schedule_host_check(hst,hst->next_check,FALSE); ! /* update the status data */ ! update_host_status(hst,FALSE); #ifdef DEBUG0 --- 1543,1559 ---- } + /**** RUN THE SCHEDULED HOST CHECK ****/ /* check route to the host (propagate problems and recoveries both up and down the tree) */ check_host(hst,PROPAGATE_TO_PARENT_HOSTS | PROPAGATE_TO_CHILD_HOSTS,hst->check_options); ! /* should another host check be scheduled? */ ! if(hst->check_interval>0 && hst->should_be_scheduled==TRUE){ + /* reschedule the next host check */ + hst->next_check=current_time+(hst->check_interval*interval_length); + schedule_host_check(hst,hst->next_check,FALSE); + } #ifdef DEBUG0 Index: commands.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/commands.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -r1.21 -r1.22 *** commands.c 24 Feb 2003 05:17:22 -0000 1.21 --- commands.c 25 Feb 2003 04:55:44 -0000 1.22 *************** *** 4,8 **** * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 02-23-2003 * * License: --- 4,8 ---- * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 02-24-2003 * * License: *************** *** 355,358 **** --- 355,364 ---- command_type=CMD_STOP_OBSESSING_OVER_HOST_CHECKS; + /* this is used for immediate and delayed host checks... */ + else if(!strcmp(command_id,"SCHEDULE_HOST_CHECK")) + command_type=CMD_DELAY_HOST_CHECK; + else if(!strcmp(command_id,"SCHEDULE_FORCED_HOST_CHECK")) + command_type=CMD_FORCE_DELAY_HOST_CHECK; + else{ /* log the bad external command */ *************** *** 626,629 **** --- 632,641 ---- break; + case CMD_DELAY_HOST_CHECK: + case CMD_FORCE_DELAY_HOST_CHECK: + case CMD_IMMEDIATE_HOST_CHECK: + cmd_schedule_host_check(cmd,args,(cmd==CMD_FORCE_DELAY_HOST_CHECK)?TRUE:FALSE); + break; + default: break; *************** *** 885,888 **** --- 897,938 ---- #ifdef DEBUG0 printf("cmd_schedule_service_check() end\n"); + #endif + return OK; + } + + + + /* schedules a host check at a particular time */ + int cmd_schedule_host_check(int cmd,char *args, int force){ + char *temp_ptr; + host *temp_host=NULL; + char *host_name=""; + time_t delay_time=0L; + + #ifdef DEBUG0 + printf("cmd_schedule_host_check() start\n"); + #endif + + /* get the host name */ + host_name=my_strtok(args,";"); + if(host_name==NULL) + return ERROR; + + /* verify that the host is valid */ + temp_host=find_host(host_name); + if(temp_host==NULL) + return ERROR; + + /* get the next check time */ + temp_ptr=my_strtok(NULL,"\n"); + if(temp_ptr==NULL) + return ERROR; + delay_time=strtoul(temp_ptr,NULL,10); + + /* schedule a delayed host check */ + schedule_host_check(temp_host,delay_time,force); + + #ifdef DEBUG0 + printf("cmd_schedule_host_check() end\n"); #endif return OK; Index: events.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/events.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** events.c 24 Feb 2003 05:17:22 -0000 1.6 --- events.c 25 Feb 2003 04:55:45 -0000 1.7 *************** *** 4,8 **** * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 02-23-2003 * * License: --- 4,8 ---- * * Copyright (c) 1999-2003 Ethan Galstad (na...@na...) ! * Last Modified: 02-24-2003 * * License: *************** *** 200,203 **** --- 200,204 ---- move_first_host(); while(temp_host=get_next_host()){ + scheduling_info.total_hosts++; if(temp_host->check_interval==0) continue; *************** *** 362,367 **** #ifdef DEBUG1 ! printf("\t\tInterleave Block Index: %d\n",interleave_block_index); ! printf("\t\tMult factor: %d\n",mult_factor); #endif --- 363,369 ---- #ifdef DEBUG1 ! printf("\t\tService '%s' on host '%s'\n",temp_service->description,temp_service->host_name); ! printf("\t\t\tInterleave Block Index: %d\n",interleave_block_index); ! printf("\t\t\tMult factor: %d\n",mult_factor); #endif *************** *** 369,372 **** --- 371,378 ---- temp_service->next_check=(time_t)(current_time+(mult_factor*scheduling_info.service_inter_check_delay)); + #ifdef DEBUG1 + printf("\t\t\tPreferred Check Time: %lu --> %s",(unsigned long)temp_service->next_check,ctime(&temp_service->next_check)); + #endif + /* make sure the service can actually be scheduled */ is_valid_time=check_time_against_period(temp_service->next_check,temp_service->check_period); *************** *** 382,390 **** #ifdef DEBUG1 - printf("\t\tService '%s' on host '%s'\n",temp_service->description,temp_service->host_name); if(temp_service->should_be_scheduled==TRUE) ! printf("\t\tNext Check: %lu --> %s",(unsigned long)temp_service->next_check,ctime(&temp_service->next_check)); else ! printf("\t\tService check should *not* be scheduled!\n"); #endif --- 388,395 ---- #ifdef DEBUG1 if(temp_service->should_be_scheduled==TRUE) ! printf("\t\t\tNext Check: %lu --> %s",(unsigned long)temp_service->next_check,ctime(&temp_service->next_check)); else ! printf("\t\t\tService check should *not* be scheduled!\n"); #endif *************** *** 426,430 **** /* calculate first host check */ ! temp_host->next_check=(time_t)(current_time+(mult_factor*scheduling_info.service_inter_check_delay)); /* make sure the host can actually be scheduled at this time */ --- 431,435 ---- /* calculate first host check */ ! temp_host->next_check=(time_t)(current_time+(mult_factor*scheduling_info.host_inter_check_delay)); /* make sure the host can actually be scheduled at this time */ *************** *** 457,461 **** new_event=malloc(sizeof(timed_event)); if(new_event!=NULL){ ! new_event->event_type=EVENT_SERVICE_REAPER; new_event->event_data=(void *)temp_host; new_event->run_time=temp_host->next_check; --- 462,466 ---- new_event=malloc(sizeof(timed_event)); if(new_event!=NULL){ ! new_event->event_type=EVENT_HOST_CHECK; new_event->event_data=(void *)temp_host; new_event->run_time=temp_host->next_check; *************** *** 1023,1028 **** /* handles a timed event */ int handle_timed_event(timed_event *event){ ! host *temp_host; ! service *temp_service; char temp_buffer[MAX_INPUT_BUFFER]; --- 1028,1033 ---- /* handles a timed event */ int handle_timed_event(timed_event *event){ ! host *temp_host=NULL; ! service *temp_service=NULL; char temp_buffer[MAX_INPUT_BUFFER]; *************** *** 1095,1100 **** /* run a service check */ run_service_check(temp_service); - break; --- 1100,1105 ---- /* run a service check */ + temp_service=(service *)event->event_data; run_service_check(temp_service); break; *************** *** 1102,1107 **** /* run a host check */ run_scheduled_host_check(temp_host); - break; --- 1107,1112 ---- /* run a host check */ + temp_host=(host *)event->event_data; run_scheduled_host_check(temp_host); break; Index: nagios.c =================================================================== RCS file: /cvsroot/nagios/nagios/base/nagios.c,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -r1.39 -r1.40 *** nagios.c 21 Feb 2003 05:12:47 -0000 1.39 --- nagios.c 25 Feb 2003 04:55:45 -0000 1.40 *************** *** 475,479 **** } ! /* calculate the inter-check delay to use when initially scheduling services */ calculate_inter_check_delay(); --- 475,479 ---- } ! /* calculate the inter-check delay to use when initially scheduling host and service checks */ calculate_inter_check_delay(); *************** *** 612,616 **** } ! /* calculate the inter-check delay to use when initially scheduling services */ calculate_inter_check_delay(); --- 612,616 ---- } ! /* calculate the inter-check delay to use when initially scheduling host and service checks */ calculate_inter_check_delay(); Index: nagios.h.in =================================================================== RCS file: /cvsroot/nagios/nagios/base/nagios.h.in,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** nagios.h.in 24 Feb 2003 05:17:22 -0000 1.26 --- nagios.h.in 25 Feb 2003 04:55:45 -0000 1.27 *************** *** 3,7 **** * Nagios Main Header File * Written By: Ethan Galstad (na...@na...) ! * Last Modified: 02-23-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: 02-24-2003 * * This program is free software; you can redistribute it and/or modify *************** *** 151,156 **** #define DEFAULT_MAX_EMBEDDED_PERL_CALLS 1000 /* number of times to use embedded perl interpreter before reloading it */ ! #define DEFAULT_HOST_CHECK_SPREAD 15 /* max minutes to schedule all initial host checks */ ! #define DEFAULT_SERVICE_CHECK_SPREAD 15 /* max minutes to schedule all initial service checks */ --- 151,156 ---- #define DEFAULT_MAX_EMBEDDED_PERL_CALLS 1000 /* number of times to use embedded perl interpreter before reloading it */ ! #define DEFAULT_HOST_CHECK_SPREAD 30 /* max minutes to schedule all initial host checks */ ! #define DEFAULT_SERVICE_CHECK_SPREAD 30 /* max minutes to schedule all initial service checks */ *************** *** 551,554 **** --- 551,555 ---- int cmd_delay_notification(int,char *); /* delay a service or host notification */ int cmd_schedule_service_check(int,char *,int); /* schedule an immediate or delayed service check */ + int cmd_schedule_host_check(int,char *,int); /* schedule an immediate or delayed host check */ int cmd_schedule_host_service_checks(int,char *,int); /* schedule an immediate or delayed check of all services on a host */ int cmd_enable_disable_service_check(int,char *); /* enable/disable a service check */ |