monitoring-plugins/lib/utils_base.h
Holger Weiss 006597a12d Make C plugin output format configurable
The development guidelines¹ currently state that the plugin output
should be in the format "SERVICE STATUS: Information text".  However,
the SERVICE and STATUS information is redundant, as the plugin caller
(e.g., Nagios) should know which SERVICE is checked and the STATUS is
returned via the plugin's exit code.  After discussing² this issue on
the development list, we decided to make the plugin output configurable
at compile time (separately for "normal" and "verbose" output).

¹ http://nagiosplug.sf.net/developer-guidelines.html
² http://thread.gmane.org/gmane.network.nagios.plugins.devel/5155

Signed-off-by: Holger Weiss <hweiss@users.sourceforge.net>
2009-05-10 13:37:35 +02:00

87 lines
2.9 KiB
C

#ifndef _UTILS_BASE_
#define _UTILS_BASE_
/* Header file for nagios plugins utils_base.c */
/* This file holds header information for thresholds - use this in preference to
individual plugin logic */
/* This has not been merged with utils.h because of problems with
timeout_interval when other utils_*.h files use utils.h */
/* Long term, add new functions to utils_base.h for common routines
and utils_*.h for specific to plugin routines. If routines are
placed in utils_*.h, then these can be tested with libtap */
#define OUTSIDE 0
#define INSIDE 1
typedef struct range_struct {
double start;
int start_infinity; /* FALSE (default) or TRUE */
double end;
int end_infinity;
int alert_on; /* OUTSIDE (default) or INSIDE */
} range;
typedef struct thresholds_struct {
range *warning;
range *critical;
} thresholds;
range *parse_range_string (char *);
int _set_thresholds(thresholds **, char *, char *);
void set_thresholds(thresholds **, char *, char *);
void print_thresholds(const char *, thresholds *);
int check_range(double, range *);
int get_status(double, thresholds *);
char *np_escaped_string (const char *);
void np_set_output(const char *, const char *, int, int);
int np_adjust_verbosity(int);
void np_debug(int, const char *, ...)
__attribute__((format(printf, 2, 3)));
void np_verbose(const char *, ...)
__attribute__((format(printf, 1, 2)));
void np_die(int, const char *, ...)
__attribute__((noreturn, format(printf, 2, 3)));
#define np_verbatim(s) np_verbose("%s", s)
#define np_increase_verbosity(i) np_adjust_verbosity(i)
#define np_decrease_verbosity(i) np_adjust_verbosity(-i)
#define np_get_verbosity() np_adjust_verbosity(0)
#define np_set_verbosity(v) np_set_output(NULL, NULL, v, 0)
#define np_set_mynames(p, s) np_set_output(p, s, -2, 0)
/* TODO: die() can be removed as soon as all plugins use np_die() instead. */
void die (int, const char *, ...) __attribute__((noreturn,format(printf, 2, 3)));
/* Return codes for _set_thresholds */
#define NP_RANGE_UNPARSEABLE 1
#define NP_WARN_WITHIN_CRIT 2
/* a simple check to see if we're running as root.
* returns zero on failure, nonzero on success */
int np_check_if_root(void);
/* and a helpful wrapper around that. it returns the same status
* code from the above function, in case it's helpful for testing */
int np_warn_if_not_root(void);
/*
* Extract the value from key/value pairs, or return NULL. The value returned
* can be free()ed.
* This function can be used to parse NTP control packet data and performance
* data strings.
*/
char *np_extract_value(const char*, const char*, char);
/*
* Same as np_extract_value with separator suitable for NTP control packet
* payloads (comma)
*/
#define np_extract_ntpvar(l, n) np_extract_value(l, n, ',')
/* Given a numerical status, return a pointer to the according string. */
const char *state_text(int);
#endif /* _UTILS_BASE_ */