diff options
Diffstat (limited to 'lib/utils_base.h')
-rw-r--r-- | lib/utils_base.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/lib/utils_base.h b/lib/utils_base.h new file mode 100644 index 0000000..80b8743 --- /dev/null +++ b/lib/utils_base.h @@ -0,0 +1,119 @@ +#ifndef _UTILS_BASE_ +#define _UTILS_BASE_ +/* Header file for Monitoring Plugins utils_base.c */ + +#ifndef USE_OPENSSL +# include "sha256.h" +#endif + +/* 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; + bool start_infinity; + double end; + int end_infinity; + int alert_on; /* OUTSIDE (default) or INSIDE */ + char* text; /* original unparsed text input */ + } range; + +typedef struct thresholds_struct { + range *warning; + range *critical; + } thresholds; + +#define NP_STATE_FORMAT_VERSION 1 + +typedef struct state_data_struct { + time_t time; + void *data; + int length; /* Of binary data */ + } state_data; + + +typedef struct state_key_struct { + char *name; + char *plugin_name; + int data_version; + char *_filename; + state_data *state_data; + } state_key; + +typedef struct np_struct { + char *plugin_name; + state_key *state; + int argc; + char **argv; + } monitoring_plugin; + +range *parse_range_string (char *); +int _set_thresholds(thresholds **, char *, char *); +void set_thresholds(thresholds **, char *, char *); +void print_thresholds(const char *, thresholds *); +bool check_range(double, range *); +int get_status(double, thresholds *); + +/* Handle timeouts */ +extern unsigned int timeout_state; +extern unsigned int timeout_interval; + +/* All possible characters in a threshold range */ +#define NP_THRESHOLDS_CHARS "-0123456789.:@~" + +char *np_escaped_string (const char *); + +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); + +/* mp_suid() returns true if the real and effective uids differs, such as when + * running a suid plugin */ +#define mp_suid() (getuid() != geteuid()) + +/* + * 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, ',') + +/* + * Read a string representing a state (ok, warning... or numeric: 0, 1) and + * return the corresponding NP_STATE or ERROR) + */ +int mp_translate_state (char *); + +void np_enable_state(char *, int); +state_data *np_state_read(); +void np_state_write_string(time_t, char *); + +void np_init(char *, int argc, char **argv); +void np_set_args(int argc, char **argv); +void np_cleanup(); +const char *state_text (int); + +#endif /* _UTILS_BASE_ */ |