-
Notifications
You must be signed in to change notification settings - Fork 455
/
nagios.h
791 lines (629 loc) · 38.4 KB
/
nagios.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
/************************************************************************
*
* Nagios Main Header File
* Written By: Ethan Galstad (egalstad@nagios.org)
*
* 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 02139, USA.
************************************************************************/
#ifndef NAGIOS_NAGIOS_H_INCLUDED
#define NAGIOS_NAGIOS_H_INCLUDED
#ifndef NSCORE
# define NSCORE
#endif
#include "defaults.h"
#include "common.h"
#include "logging.h"
#include "locations.h"
#include "objects.h"
#include "macros.h"
/*
* global variables only used in the core. Reducing this list would be
* a Good Thing(tm).
*/
extern char *nagios_binary_path;
extern char *config_file;
extern char *command_file;
extern char *temp_file;
extern char *temp_path;
extern char *check_result_path;
extern char *lock_file;
extern char *object_precache_file;
extern unsigned int nofile_limit, nproc_limit, max_apps;
extern int num_check_workers;
extern char *qh_socket_path;
extern char *nagios_user;
extern char *nagios_group;
extern char *macro_user[MAX_USER_MACROS];
extern char *ocsp_command;
extern char *ochp_command;
extern command *ocsp_command_ptr;
extern command *ochp_command_ptr;
extern int ocsp_timeout;
extern int ochp_timeout;
extern char *global_host_event_handler;
extern char *global_service_event_handler;
extern command *global_host_event_handler_ptr;
extern command *global_service_event_handler_ptr;
extern char *illegal_object_chars;
extern int use_regexp_matches;
extern int use_true_regexp_matching;
extern int use_syslog;
extern char *log_file;
extern char *log_archive_path;
extern int log_notifications;
extern int log_service_retries;
extern int log_host_retries;
extern int log_event_handlers;
extern int log_external_commands;
extern int log_passive_checks;
extern unsigned long logging_options;
extern unsigned long syslog_options;
extern int service_check_timeout;
extern int service_check_timeout_state;
extern int host_check_timeout;
extern int event_handler_timeout;
extern int notification_timeout;
extern int log_initial_states;
extern int log_current_states;
extern int daemon_dumps_core;
extern int sig_id;
extern int caught_signal;
extern int verify_config;
extern int test_scheduling;
extern int precache_objects;
extern int use_precached_objects;
extern int service_inter_check_delay_method;
extern int host_inter_check_delay_method;
extern int service_interleave_factor_method;
extern int max_host_check_spread;
extern int max_service_check_spread;
extern sched_info scheduling_info;
extern int max_parallel_service_checks;
extern int check_reaper_interval;
extern int max_check_reaper_time;
extern int service_freshness_check_interval;
extern int host_freshness_check_interval;
extern int auto_rescheduling_interval;
extern int auto_rescheduling_window;
extern int enable_soft_host_recovery;
extern int enable_soft_service_recovery;
extern int check_orphaned_services;
extern int check_orphaned_hosts;
extern int check_service_freshness;
extern int check_host_freshness;
extern int auto_reschedule_checks;
extern int additional_freshness_latency;
extern int check_for_updates;
extern int bare_update_check;
extern time_t last_update_check;
extern unsigned long update_uid;
extern int update_available;
extern char *last_program_version;
extern char *new_program_version;
extern int use_aggressive_host_checking;
extern time_t cached_host_check_horizon;
extern time_t cached_service_check_horizon;
extern int enable_predictive_host_dependency_checks;
extern int enable_predictive_service_dependency_checks;
extern int soft_state_dependencies;
extern int retain_state_information;
extern int retention_update_interval;
extern int use_retained_program_state;
extern int use_retained_scheduling_info;
extern int retention_scheduling_horizon;
extern char *retention_file;
extern unsigned long retained_host_attribute_mask;
extern unsigned long retained_service_attribute_mask;
extern unsigned long retained_contact_host_attribute_mask;
extern unsigned long retained_contact_service_attribute_mask;
extern unsigned long retained_process_host_attribute_mask;
extern unsigned long retained_process_service_attribute_mask;
extern int translate_passive_host_checks;
extern int passive_host_checks_are_soft;
extern int status_update_interval;
extern char *retention_file;
extern int time_change_threshold;
extern unsigned long event_broker_options;
extern double low_service_flap_threshold;
extern double high_service_flap_threshold;
extern double low_host_flap_threshold;
extern double high_host_flap_threshold;
extern int use_large_installation_tweaks;
extern int enable_environment_macros;
extern int free_child_process_memory;
extern int child_processes_fork_twice;
extern char *use_timezone;
extern time_t max_check_result_file_age;
extern char *debug_file;
extern int debug_level;
extern int debug_verbosity;
extern unsigned long max_debug_file_size;
extern int allow_empty_hostgroup_assignment;
extern int host_down_disable_service_checks;
extern int service_skip_check_dependency_status;
extern int service_skip_check_parent_status;
extern int service_skip_check_host_down_status;
extern int host_skip_check_dependency_status;
extern time_t last_program_stop;
extern time_t event_start;
extern int sigshutdown, sigrestart;
extern int currently_running_service_checks;
extern int currently_running_host_checks;
extern unsigned long next_event_id;
extern unsigned long next_problem_id;
extern unsigned long next_comment_id;
extern unsigned long next_notification_id;
extern unsigned long modified_process_attributes;
extern unsigned long modified_host_process_attributes;
extern unsigned long modified_service_process_attributes;
extern squeue_t *nagios_squeue;
extern iobroker_set *nagios_iobs;
extern struct check_stats check_statistics[MAX_CHECK_STATS_TYPES];
/*** perfdata variables ***/
extern int perfdata_timeout;
extern char *host_perfdata_command;
extern char *service_perfdata_command;
extern char *host_perfdata_file_template;
extern char *service_perfdata_file_template;
extern char *host_perfdata_file;
extern char *service_perfdata_file;
extern int host_perfdata_file_append;
extern int service_perfdata_file_append;
extern int host_perfdata_file_pipe;
extern int service_perfdata_file_pipe;
extern unsigned long host_perfdata_file_processing_interval;
extern unsigned long service_perfdata_file_processing_interval;
extern char *host_perfdata_file_processing_command;
extern char *service_perfdata_file_processing_command;
extern int host_perfdata_process_empty_results;
extern int service_perfdata_process_empty_results;
/*** end perfdata variables */
extern struct notify_list *notification_list;
extern struct check_engine nagios_check_engine;
/*
* Everything we need to keep system load in check.
* Don't use this from modules.
*/
struct load_control {
time_t last_check; /* last time we checked the real load */
time_t last_change; /* last time we changed settings */
time_t check_interval; /* seconds between load checks */
double load[3]; /* system load, as reported by getloadavg() */
float backoff_limit; /* limit we must reach before we back off */
float rampup_limit; /* limit we must reach before we ramp back up */
unsigned int backoff_change; /* backoff by this much */
unsigned int rampup_change; /* ramp up by this much */
unsigned int changes; /* number of times we've changed settings */
unsigned int jobs_max; /* upper setting for jobs_limit */
unsigned int jobs_limit; /* current limit */
unsigned int jobs_min; /* lower setting for jobs_limit */
unsigned int jobs_running; /* jobs currently running */
unsigned int nproc_limit; /* rlimit for user processes */
unsigned int nofile_limit; /* rlimit for open files */
unsigned int options; /* various option flags */
};
extern struct load_control loadctl;
/* options for load control */
#define LOADCTL_ENABLED (1 << 0)
/************* MISC LENGTH/SIZE DEFINITIONS ***********/
/*
NOTE: Plugin length is artificially capped at 8k to prevent runaway plugins from returning MBs/GBs of data
back to Nagios. If you increase the 8k cap by modifying this value, make sure you also increase the value
of MAX_EXTERNAL_COMMAND_LENGTH in common.h to allow for passive checks results received through the external
command file. EG 10/19/07
*/
#define MAX_PLUGIN_OUTPUT_LENGTH 8192 /* max length of plugin output (including perf data) */
/******************* STATE LOGGING TYPES **************/
#define INITIAL_STATES 1
#define CURRENT_STATES 2
/************ SERVICE DEPENDENCY VALUES ***************/
#define DEPENDENCIES_OK 0
#define DEPENDENCIES_FAILED 1
/*********** ROUTE CHECK PROPAGATION TYPES ************/
#define PROPAGATE_TO_PARENT_HOSTS 1
#define PROPAGATE_TO_CHILD_HOSTS 2
/****************** FLAPPING TYPES ********************/
#define HOST_FLAPPING 0
#define SERVICE_FLAPPING 1
/**************** NOTIFICATION TYPES ******************/
#define HOST_NOTIFICATION 0
#define SERVICE_NOTIFICATION 1
/************* NOTIFICATION REASON TYPES ***************/
#define NOTIFICATION_NORMAL 0
#define NOTIFICATION_ACKNOWLEDGEMENT 1
#define NOTIFICATION_FLAPPINGSTART 2
#define NOTIFICATION_FLAPPINGSTOP 3
#define NOTIFICATION_FLAPPINGDISABLED 4
#define NOTIFICATION_DOWNTIMESTART 5
#define NOTIFICATION_DOWNTIMEEND 6
#define NOTIFICATION_DOWNTIMECANCELLED 7
#define NOTIFICATION_CUSTOM 8
/**************** EVENT HANDLER TYPES *****************/
#define HOST_EVENTHANDLER 0
#define SERVICE_EVENTHANDLER 1
#define GLOBAL_HOST_EVENTHANDLER 2
#define GLOBAL_SERVICE_EVENTHANDLER 3
/***************** STATE CHANGE TYPES *****************/
#define HOST_STATECHANGE 0
#define SERVICE_STATECHANGE 1
/***************** OBJECT CHECK TYPES *****************/
#define SERVICE_CHECK 0
#define HOST_CHECK 1
/******************* EVENT TYPES **********************/
#define EVENT_SERVICE_CHECK 0 /* active service check */
#define EVENT_COMMAND_CHECK 1 /* external command check */
#define EVENT_LOG_ROTATION 2 /* log file rotation */
#define EVENT_PROGRAM_SHUTDOWN 3 /* program shutdown */
#define EVENT_PROGRAM_RESTART 4 /* program restart */
#define EVENT_CHECK_REAPER 5 /* reaps results from host and service checks */
#define EVENT_ORPHAN_CHECK 6 /* checks for orphaned hosts and services */
#define EVENT_RETENTION_SAVE 7 /* save (dump) retention data */
#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" */
#define EVENT_RESCHEDULE_CHECKS 14 /* adjust scheduling of host and service checks */
#define EVENT_EXPIRE_COMMENT 15 /* removes expired comments */
#define EVENT_CHECK_PROGRAM_UPDATE 16 /* checks for new version of Nagios */
#define EVENT_SLEEP 98 /* asynchronous sleep event that occurs when event queues are empty */
#define EVENT_USER_FUNCTION 99 /* USER-defined function (modules) */
/*
* VERSIONFIX: Make EVENT_SLEEP and EVENT_USER_FUNCTION appear
* linearly in order.
*/
#define EVENT_TYPE_STR(type) ( \
type == EVENT_SERVICE_CHECK ? "SERVICE_CHECK" : \
type == EVENT_COMMAND_CHECK ? "COMMAND_CHECK" : \
type == EVENT_LOG_ROTATION ? "LOG_ROTATION" : \
type == EVENT_PROGRAM_SHUTDOWN ? "PROGRAM_SHUTDOWN" : \
type == EVENT_PROGRAM_RESTART ? "PROGRAM_RESTART" : \
type == EVENT_CHECK_REAPER ? "CHECK_REAPER" : \
type == EVENT_ORPHAN_CHECK ? "ORPHAN_CHECK" : \
type == EVENT_RETENTION_SAVE ? "RETENTION_SAVE" : \
type == EVENT_STATUS_SAVE ? "STATUS_SAVE" : \
type == EVENT_SCHEDULED_DOWNTIME ? "SCHEDULED_DOWNTIME" : \
type == EVENT_SFRESHNESS_CHECK ? "SFRESHNESS_CHECK" : \
type == EVENT_EXPIRE_DOWNTIME ? "EXPIRE_DOWNTIME" : \
type == EVENT_HOST_CHECK ? "HOST_CHECK" : \
type == EVENT_HFRESHNESS_CHECK ? "HFRESHNESS_CHECK" : \
type == EVENT_RESCHEDULE_CHECKS ? "RESCHEDULE_CHECKS" : \
type == EVENT_EXPIRE_COMMENT ? "EXPIRE_COMMENT" : \
type == EVENT_CHECK_PROGRAM_UPDATE ? "CHECK_PROGRAM_UPDATE" : \
type == EVENT_SLEEP ? "SLEEP" : \
type == EVENT_USER_FUNCTION ? "USER_FUNCTION" : \
"UNKNOWN" \
)
/******* INTER-CHECK DELAY CALCULATION TYPES **********/
#define ICD_NONE 0 /* no inter-check delay */
#define ICD_DUMB 1 /* dumb delay of 1 second */
#define ICD_SMART 2 /* smart delay */
#define ICD_USER 3 /* user-specified delay */
/******* INTERLEAVE FACTOR CALCULATION TYPES **********/
#define ILF_USER 0 /* user-specified interleave factor */
#define ILF_SMART 1 /* smart interleave */
/************ SCHEDULED DOWNTIME TYPES ****************/
#define ACTIVE_DOWNTIME 0 /* active downtime - currently in effect */
#define PENDING_DOWNTIME 1 /* pending downtime - scheduled for the future */
NAGIOS_BEGIN_DECL
/* useful for hosts and services to determine time 'til next check */
#define normal_check_window(o) ((time_t)(o->check_interval * interval_length))
#define retry_check_window(o) ((time_t)(o->retry_interval * interval_length))
#define check_window(o) \
((o->current_state && o->state_type == SOFT_STATE) ? \
retry_check_window(o) : \
normal_check_window(o))
/******************** FUNCTIONS **********************/
extern int set_loadctl_options(char *opts, unsigned int len);
/* silly helpers useful pretty much all over the place */
extern const char *service_state_name(int state);
extern const char *host_state_name(int state);
extern const char *state_type_name(int state_type);
extern const char *check_type_name(int check_type);
extern const char *check_result_source(check_result *cr);
#ifdef ENABLE_NERD
/** Nerd subscription type */
struct nerd_subscription {
int sd;
struct nerd_channel *chan;
char *format; /* requested format (macro string) for this subscription */
};
/*** Nagios Event Radio Dispatcher functions ***/
extern int nerd_init(void);
extern int nerd_mkchan(const char *name, const char *description, int (*handler)(int, void *), unsigned int callbacks);
extern int nerd_cancel_subscriber(int sd);
extern int nerd_get_channel_id(const char *chan_name);
extern objectlist *nerd_get_subscriptions(int chan_id);
extern int nerd_broadcast(unsigned int chan_id, void *buf, unsigned int len);
#endif
/*** Query Handler functions, types and macros*/
typedef int (*qh_handler)(int, char *, unsigned int);
extern int dump_event_stats(int sd);
/* return codes for query_handlers() */
#define QH_OK 0 /* keep listening */
#define QH_CLOSE 1 /* we should close the socket */
#define QH_INVALID 2 /* invalid query. Log and close */
#define QH_TAKEOVER 3 /* handler will take full control. de-register but don't close */
extern int qh_init(const char *path);
extern void qh_deinit(const char *path);
extern int qh_register_handler(const char *name, const char *description, unsigned int options, qh_handler handler);
extern const char *qh_strerror(int code);
/**** Configuration Functions ****/
int read_main_config_file(char *); /* reads the main config file (nagios.cfg) */
int read_resource_file(char *); /* processes macros in resource file */
int read_all_object_data(char *); /* reads all object config data */
/**** Setup Functions ****/
int pre_flight_check(void); /* try and verify the configuration data */
int pre_flight_object_check(int *, int *); /* verify object relationships and settings */
int pre_flight_circular_check(int *, int *); /* detects circular dependencies and paths */
void init_timing_loop(void); /* setup the initial scheduling queue */
void setup_sighandler(void); /* trap signals */
void reset_sighandler(void); /* reset signals to default action */
extern void handle_sigxfsz(int); /* handle SIGXFSZ */
int daemon_init(void); /* switches to daemon mode */
int drop_privileges(char *, char *); /* drops privileges before startup */
void display_scheduling_info(void); /* displays service check scheduling information */
void init_main_cfg_vars(int); /* Initialize the non-shared main configuration variables */
/**** Event Queue Functions ****/
int init_event_queue(void); /* creates the queue nagios_squeue */
timed_event *schedule_new_event(int, int, time_t, int, unsigned long, void *, int, void *, void *, int); /* schedules a new timed event */
void reschedule_event(squeue_t *sq, timed_event *event); /* reschedules an event */
void add_event(squeue_t *sq, timed_event *event); /* adds an event to the execution queue */
void remove_event(squeue_t *sq, timed_event *event); /* remove an event from the execution queue */
int event_execution_loop(void); /* main monitoring/event handler loop */
int handle_timed_event(timed_event *); /* top level handler for timed events */
void adjust_check_scheduling(void); /* auto-adjusts scheduling of host and service checks */
void compensate_for_system_time_change(unsigned long, unsigned long); /* attempts to compensate for a change in the system time */
void adjust_timestamp_for_time_change(time_t, time_t, unsigned long, time_t *); /* adjusts a timestamp variable for a system time change */
/**** IPC Functions ****/
int process_check_result_queue(const char *);
int process_check_result_file(const char *);
int process_check_result(check_result *);
int delete_check_result_file(const char *);
int init_check_result(check_result *);
int free_check_result(check_result *); /* frees memory associated with a host/service check result */
int parse_check_output(char *, char **, char **, char **, int, int);
int open_command_file(void); /* creates the external command file as a named pipe (FIFO) and opens it for reading */
int close_command_file(void); /* closes and deletes the external command file (FIFO) */
/**** Monitoring/Event Handler Functions ****/
int check_service_parents(service *svc); /* checks service parents */
int check_service_dependencies(service *, int); /* checks service dependencies */
int check_host_dependencies(host *, int); /* checks host dependencies */
void check_for_orphaned_services(void); /* checks for orphaned services */
void check_for_orphaned_hosts(void); /* checks for orphaned hosts */
void check_service_result_freshness(void); /* checks the "freshness" of service check results */
int is_service_result_fresh(service *, time_t, int); /* determines if a service's check results are fresh */
void check_host_result_freshness(void); /* checks the "freshness" of host check results */
int is_host_result_fresh(host *, time_t, int); /* determines if a host's check results are fresh */
int my_system(char *, int, int *, double *, char **, int); /* executes a command via popen(), but also protects against timeouts */
int my_system_r(nagios_macros *mac, char *, int, int *, double *, char **, int); /* thread-safe version of the above */
/**** Flap Detection Functions ****/
void check_for_service_flapping(service *, int, int); /* determines whether or not a service is "flapping" between states */
void check_for_host_flapping(host *, int, int, int); /* determines whether or not a host is "flapping" between states */
void set_service_flap(service *, double, double, double, int); /* handles a service that is flapping */
void clear_service_flap(service *, double, double, double, int); /* handles a service that has stopped flapping */
void set_host_flap(host *, double, double, double, int); /* handles a host that is flapping */
void clear_host_flap(host *, double, double, double, int); /* handles a host that has stopped flapping */
void enable_flap_detection_routines(void); /* enables flap detection on a program-wide basis */
void disable_flap_detection_routines(void); /* disables flap detection on a program-wide basis */
void enable_host_flap_detection(host *); /* enables flap detection for a particular host */
void disable_host_flap_detection(host *); /* disables flap detection for a particular host */
void enable_service_flap_detection(service *); /* enables flap detection for a particular service */
void disable_service_flap_detection(service *); /* disables flap detection for a particular service */
void handle_host_flap_detection_disabled(host *); /* handles the details when flap detection is disabled globally or on a per-host basis */
void handle_service_flap_detection_disabled(service *); /* handles the details when flap detection is disabled globally or on a per-service basis */
/**** Route/Host Check Functions ****/
int check_host_check_viability(host *, int, int *, time_t *);
int adjust_host_check_attempt(host *, int);
int determine_host_reachability(host *);
int perform_on_demand_host_check(host *, int *, int, int, unsigned long);
int execute_sync_host_check(host *);
int run_scheduled_host_check(host *, int, double);
int run_async_host_check(host *, int, double, int, int, int *, time_t *);
int handle_async_host_check_result(host *, check_result *);
/**** Service Check Functions ****/
int check_service_check_viability(service *, int, int *, time_t *);
int run_scheduled_service_check(service *, int, double);
int run_async_service_check(service *, int, double, int, int, int *, time_t *);
int handle_async_service_check_result(service *, check_result *);
/**** Event Handler Functions ****/
int handle_host_state(host *); /* top level host state handler */
/**** Common Check Functions *****/
int reap_check_results(void);
/**** Check Statistics Functions ****/
int init_check_stats(void);
int update_check_stats(int, time_t);
int generate_check_stats(void);
/**** Event Handler Functions ****/
int obsessive_compulsive_service_check_processor(service *); /* distributed monitoring craziness... */
int obsessive_compulsive_host_check_processor(host *); /* distributed monitoring craziness... */
int handle_service_event(service *); /* top level service event logic */
int run_service_event_handler(nagios_macros *mac, service *); /* runs the event handler for a specific service */
int run_global_service_event_handler(nagios_macros *mac, service *); /* runs the global service event handler */
int check_service_event_handler_viability(int, service *); /* checks if service event handler can be run */
int handle_host_event(host *); /* top level host event logic */
int run_host_event_handler(nagios_macros *mac, host *); /* runs the event handler for a specific host */
int run_global_host_event_handler(nagios_macros *mac, host *); /* runs the global host event handler */
int check_host_event_handler_viability(int, host *); /* checks if host event handler can be run */
/**** Notification Functions ****/
const char *notification_reason_name(unsigned int reason_type);
int check_service_notification_viability(service *, int, int); /* checks viability of notifying all contacts about a service */
int is_valid_escalation_for_service_notification(service *, serviceescalation *, int); /* checks if an escalation entry is valid for a particular service notification */
int should_service_notification_be_escalated(service *); /* checks if a service notification should be escalated */
int service_notification(service *, int, char *, char *, int); /* notify all contacts about a service (problem or recovery) */
int check_contact_service_notification_viability(contact *, service *, int, int); /* checks viability of notifying a contact about a service */
int notify_contact_of_service(nagios_macros *mac, contact *, service *, int, char *, char *, int, int); /* notify a single contact about a service */
int check_host_notification_viability(host *, int, int); /* checks viability of notifying all contacts about a host */
int is_valid_escalation_for_host_notification(host *, hostescalation *, int); /* checks if an escalation entry is valid for a particular host notification */
int should_host_notification_be_escalated(host *); /* checks if a host notification should be escalated */
int host_notification(host *, int, char *, char *, int); /* notify all contacts about a host (problem or recovery) */
int check_contact_host_notification_viability(contact *, host *, int, int); /* checks viability of notifying a contact about a host */
int notify_contact_of_host(nagios_macros *mac, contact *, host *, int, char *, char *, int, int); /* notify a single contact about a host */
int create_notification_list_from_host(nagios_macros *mac, host *,int,int *,int); /* given a host, create list of contacts to be notified (remove duplicates) */
int create_notification_list_from_service(nagios_macros *mac, service *,int,int *,int); /* given a service, create list of contacts to be notified (remove duplicates) */
int add_notification(nagios_macros *mac, contact *); /* adds a notification instance */
notification *find_notification(contact *); /* finds a notification object */
time_t get_next_host_notification_time(host *, time_t); /* calculates nex acceptable re-notification time for a host */
time_t get_next_service_notification_time(service *, time_t); /* calculates nex acceptable re-notification time for a service */
/**** Cleanup Functions ****/
void cleanup(void); /* cleanup after ourselves (before quitting or restarting) */
void free_memory(nagios_macros *mac); /* free memory allocated to all linked lists in memory */
int reset_variables(void); /* reset all global variables */
void free_notification_list(void); /* frees all memory allocated to the notification list */
/**** Miscellaneous Functions ****/
void sighandler(int); /* handles signals */
void my_system_sighandler(int); /* handles timeouts when executing commands via my_system() */
char *get_next_string_from_buf(char *buf, int *start_index, int bufsize);
int compare_strings(char *, char *); /* compares two strings for equality */
char *escape_newlines(char *);
#ifdef DETECT_RLIMIT_PROBLEM
void rlimit_problem_detection(int);
#endif
/**
* Unescapes newlines and backslashes in a check result output string read from
* a source that uses newlines as a delimiter (e.g., files in the checkresults
* spool dir, or the command pipe).
* @note: There is an unescape_newlines() in cgi/cgiutils.c that unescapes more
* than '\\' and '\n' in place. Since this function is specifically intended
* for processing escaped plugin output, we'll use a more specific name to
* avoid confusion and conflicts.
* @param rawbuf Input string tp unescape.
* @return An unescaped copy of rawbuf in a newly allocated string, or NULL if
* rawbuf is NULL or no memory could be allocated for the new string.
*/
char *unescape_check_result_output(const char *rawbuf);
int contains_illegal_object_chars(char *); /* tests whether or not an object name (host, service, etc.) contains illegal characters */
int my_rename(char *, char *); /* renames a file - works across filesystems */
int my_fcopy(char *, char *); /* copies a file - works across filesystems */
int my_fdcopy(char *, char *, int); /* copies a named source to an already opened destination file */
/* thread-safe version of get_raw_command_line_r() */
extern int get_raw_command_line_r(nagios_macros *mac, command *, char *, char **, int);
/*
* given a raw command line, determine the actual command to run
* Manipulates global_macros.argv and is thus not threadsafe
*/
extern int get_raw_command_line(command *, char *, char **, int);
int check_time_against_period(time_t, timeperiod *); /* check to see if a specific time is covered by a time period */
int is_daterange_single_day(daterange *);
time_t calculate_time_from_weekday_of_month(int, int, int, int); /* calculates midnight time of specific (3rd, last, etc.) weekday of a particular month */
time_t calculate_time_from_day_of_month(int, int, int); /* calculates midnight time of specific (1st, last, etc.) day of a particular month */
void get_next_valid_time(time_t, time_t *, timeperiod *); /* get the next valid time in a time period */
time_t reschedule_within_timeperiod(time_t, timeperiod*, time_t);
time_t get_next_log_rotation_time(void); /* determine the next time to schedule a log rotation */
int dbuf_init(dbuf *, int);
int dbuf_free(dbuf *);
int dbuf_strcat(dbuf *, const char *);
int set_environment_var(char *, char *, int); /* sets/clears and environment variable */
int check_for_nagios_updates(int, int); /* checks to see if new version of Nagios are available */
int query_update_api(void); /* checks to see if new version of Nagios are available */
/**** External Command Functions ****/
int process_external_command1(char *); /* top-level external command processor */
int process_external_command2(int, time_t, char *); /* process an external command */
int process_external_commands_from_file(char *, int); /* process external commands in a file */
int process_host_command(int, time_t, char *); /* process an external host command */
int process_hostgroup_command(int, time_t, char *); /* process an external hostgroup command */
int process_service_command(int, time_t, char *); /* process an external service command */
int process_servicegroup_command(int, time_t, char *); /* process an external servicegroup command */
int process_contact_command(int, time_t, char *); /* process an external contact command */
int process_contactgroup_command(int, time_t, char *); /* process an external contactgroup command */
/**** External Command Implementations ****/
int cmd_add_comment(int, time_t, char *); /* add a service or host comment */
int cmd_delete_comment(int, char *); /* delete a service or host comment */
int cmd_delete_all_comments(int, char *); /* delete all comments associated with a host or service */
int cmd_delay_notification(int, char *); /* delay a service or host notification */
int cmd_schedule_check(int, char *); /* schedule an immediate or delayed host check */
int cmd_schedule_host_service_checks(int, char *, int); /* schedule an immediate or delayed checks of all services on a host */
int cmd_signal_process(int, char *); /* schedules a program shutdown or restart */
int cmd_process_service_check_result(int, time_t, char *); /* processes a passive service check */
int cmd_process_host_check_result(int, time_t, char *); /* processes a passive host check */
int cmd_acknowledge_problem(int, char *); /* acknowledges a host or service problem */
int cmd_remove_acknowledgement(int, char *); /* removes a host or service acknowledgement */
int cmd_schedule_downtime(int, time_t, char *); /* schedules host or service downtime */
int cmd_delete_downtime(int, char *); /* cancels active/pending host or service scheduled downtime */
int cmd_change_object_int_var(int, char *); /* changes host/svc (int) variable */
int cmd_change_object_char_var(int, char *); /* changes host/svc (char) variable */
int cmd_change_object_custom_var(int, char *); /* changes host/svc custom variable */
int cmd_process_external_commands_from_file(int, char *); /* process external commands from a file */
int cmd_delete_downtime_by_start_time_comment(int, char *);
int cmd_delete_downtime_by_host_name(int, char *);
int cmd_delete_downtime_by_hostgroup_name(int, char *);
int process_passive_service_check(time_t, char *, char *, int, char *);
int process_passive_host_check(time_t, char *, int, char *);
/**** Internal Command Implementations ****/
void disable_service_checks(service *); /* disables a service check */
void enable_service_checks(service *); /* enables a service check */
void schedule_service_check(service *, time_t, int); /* schedules an immediate or delayed service check */
void schedule_host_check(host *, time_t, int); /* schedules an immediate or delayed host check */
void enable_all_notifications(void); /* enables notifications on a program-wide basis */
void disable_all_notifications(void); /* disables notifications on a program-wide basis */
void enable_service_notifications(service *); /* enables service notifications */
void disable_service_notifications(service *); /* disables service notifications */
void enable_host_notifications(host *); /* enables host notifications */
void disable_host_notifications(host *); /* disables host notifications */
void enable_and_propagate_notifications(host *, int, int, int, int); /* enables notifications for all hosts and services beyond a given host */
void disable_and_propagate_notifications(host *, int, int, int, int); /* disables notifications for all hosts and services beyond a given host */
void schedule_and_propagate_downtime(host *, time_t, char *, char *, time_t, time_t, int, unsigned long, unsigned long); /* schedules downtime for all hosts beyond a given host */
void acknowledge_host_problem(host *, char *, char *, int, int, int); /* acknowledges a host problem */
void acknowledge_service_problem(service *, char *, char *, int, int, int); /* acknowledges a service problem */
void remove_host_acknowledgement(host *); /* removes a host acknowledgement */
void remove_service_acknowledgement(service *); /* removes a service acknowledgement */
void start_executing_service_checks(void); /* starts executing service checks */
void stop_executing_service_checks(void); /* stops executing service checks */
void start_accepting_passive_service_checks(void); /* starts accepting passive service check results */
void stop_accepting_passive_service_checks(void); /* stops accepting passive service check results */
void enable_passive_service_checks(service *); /* enables passive service checks for a particular service */
void disable_passive_service_checks(service *); /* disables passive service checks for a particular service */
void start_using_event_handlers(void); /* enables event handlers on a program-wide basis */
void stop_using_event_handlers(void); /* disables event handlers on a program-wide basis */
void enable_service_event_handler(service *); /* enables the event handler for a particular service */
void disable_service_event_handler(service *); /* disables the event handler for a particular service */
void enable_host_event_handler(host *); /* enables the event handler for a particular host */
void disable_host_event_handler(host *); /* disables the event handler for a particular host */
void enable_host_checks(host *); /* enables checks of a particular host */
void disable_host_checks(host *); /* disables checks of a particular host */
void start_obsessing_over_service_checks(void); /* start obsessing about service check results */
void stop_obsessing_over_service_checks(void); /* stop obsessing about service check results */
void start_obsessing_over_host_checks(void); /* start obsessing about host check results */
void stop_obsessing_over_host_checks(void); /* stop obsessing about host check results */
void enable_service_freshness_checks(void); /* enable service freshness checks */
void disable_service_freshness_checks(void); /* disable service freshness checks */
void enable_host_freshness_checks(void); /* enable host freshness checks */
void disable_host_freshness_checks(void); /* disable host freshness checks */
void enable_performance_data(void); /* enables processing of performance data on a program-wide basis */
void disable_performance_data(void); /* disables processing of performance data on a program-wide basis */
void start_executing_host_checks(void); /* starts executing host checks */
void stop_executing_host_checks(void); /* stops executing host checks */
void start_accepting_passive_host_checks(void); /* starts accepting passive host check results */
void stop_accepting_passive_host_checks(void); /* stops accepting passive host check results */
void enable_passive_host_checks(host *); /* enables passive host checks for a particular host */
void disable_passive_host_checks(host *); /* disables passive host checks for a particular host */
void start_obsessing_over_service(service *); /* start obsessing about specific service check results */
void stop_obsessing_over_service(service *); /* stop obsessing about specific service check results */
void start_obsessing_over_host(host *); /* start obsessing about specific host check results */
void stop_obsessing_over_host(host *); /* stop obsessing about specific host check results */
void set_host_notification_number(host *, int); /* sets current notification number for a specific host */
void set_service_notification_number(service *, int); /* sets current notification number for a specific service */
void enable_contact_host_notifications(contact *); /* enables host notifications for a specific contact */
void disable_contact_host_notifications(contact *); /* disables host notifications for a specific contact */
void enable_contact_service_notifications(contact *); /* enables service notifications for a specific contact */
void disable_contact_service_notifications(contact *); /* disables service notifications for a specific contact */
void clear_host_flapping_state(host *); /* clears the flapping state for a specific host */
void clear_service_flapping_state(service *); /* clears the flapping state for a specific service */
int launch_command_file_worker(void);
int shutdown_command_file_worker(void);
char *get_program_version(void);
char *get_program_modification_date(void);
NAGIOS_END_DECL
#endif