[Nagiosplug-checkins] nagiosplug/plugins utils.c,1.43,1.44 utils.h,1.25,1.26
Ton Voon
tonvoon at users.sourceforge.net
Mon Jan 30 14:25:03 CET 2006
Update of /cvsroot/nagiosplug/nagiosplug/plugins
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19257/plugins
Modified Files:
utils.c utils.h
Log Message:
Clearly defined thresholds & ranges in docs. Added get_status routine. Added
set_thresholds routine. Tests enhanced to check new routines
Index: utils.c
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/utils.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- utils.c 30 Jan 2006 16:10:50 -0000 1.43
+++ utils.c 30 Jan 2006 22:24:31 -0000 1.44
@@ -265,44 +265,44 @@
return FALSE;
}
-void set_threshold_start (threshold *this, double value) {
+void set_range_start (range *this, double value) {
this->start = value;
this->start_infinity = FALSE;
}
-void set_threshold_end (threshold *this, double value) {
+void set_range_end (range *this, double value) {
this->end = value;
this->end_infinity = FALSE;
}
-threshold
-*parse_threshold (char *str) {
- threshold *temp_threshold;
+range
+*parse_range_string (char *str) {
+ range *temp_range;
double start;
double end;
char *end_str;
- temp_threshold = (threshold *) malloc(sizeof(threshold));
+ temp_range = (range *) malloc(sizeof(range));
/* Set defaults */
- temp_threshold->start = 0;
- temp_threshold->start_infinity = FALSE;
- temp_threshold->end = 0;
- temp_threshold->end_infinity = TRUE;
- temp_threshold->alert_on = OUTSIDE;
+ temp_range->start = 0;
+ temp_range->start_infinity = FALSE;
+ temp_range->end = 0;
+ temp_range->end_infinity = TRUE;
+ temp_range->alert_on = OUTSIDE;
if (str[0] == '@') {
- temp_threshold->alert_on = INSIDE;
+ temp_range->alert_on = INSIDE;
str++;
}
end_str = index(str, ':');
if (end_str != NULL) {
if (str[0] == '~') {
- temp_threshold->start_infinity = TRUE;
+ temp_range->start_infinity = TRUE;
} else {
start = strtod(str, NULL); /* Will stop at the ':' */
- set_threshold_start(temp_threshold, start);
+ set_range_start(temp_range, start);
}
end_str++; /* Move past the ':' */
} else {
@@ -310,18 +310,111 @@
}
end = strtod(end_str, NULL);
if (strcmp(end_str, "") != 0) {
- set_threshold_end(temp_threshold, end);
+ set_range_end(temp_range, end);
}
- if (temp_threshold->start_infinity == TRUE ||
- temp_threshold->end_infinity == TRUE ||
- temp_threshold->start <= temp_threshold->end) {
- return temp_threshold;
+ if (temp_range->start_infinity == TRUE ||
+ temp_range->end_infinity == TRUE ||
+ temp_range->start <= temp_range->end) {
+ return temp_range;
}
- free(temp_threshold);
+ free(temp_range);
return NULL;
}
+/* returns 0 if okay, otherwise 1 */
+int
+_set_thresholds(thresholds **my_thresholds, char *warn_string, char *critical_string)
+{
+ thresholds *temp_thresholds = NULL;
+
+ temp_thresholds = malloc(sizeof(temp_thresholds));
+
+ temp_thresholds->warning = NULL;
+ temp_thresholds->critical = NULL;
+
+ if (warn_string != NULL) {
+ if ((temp_thresholds->warning = parse_range_string(warn_string)) == NULL) {
+ return 1;
+ }
+ }
+ if (critical_string != NULL) {
+ if ((temp_thresholds->critical = parse_range_string(critical_string)) == NULL) {
+ return 1;
+ }
+ }
+
+ if (*my_thresholds != 0) {
+ /* printf("Freeing here: %d\n", *my_thresholds); */
+ free(*my_thresholds);
+ }
+ *my_thresholds = temp_thresholds;
+
+ return 0;
+}
+
+void
+set_thresholds(thresholds **my_thresholds, char *warn_string, char *critical_string)
+{
+ if (_set_thresholds(my_thresholds, warn_string, critical_string) == 0) {
+ return;
+ } else {
+ usage("Range format incorrect");
+ }
+}
+
+/* Returns TRUE if alert should be raised based on the range */
+int
+check_range(double value, range *my_range)
+{
+ int false = FALSE;
+ int true = TRUE;
+
+ if (my_range->alert_on == INSIDE) {
+ false = TRUE;
+ true = FALSE;
+ }
+
+ if (my_range->end_infinity == FALSE && my_range->start_infinity == FALSE) {
+ if ((my_range->start <= value) && (value <= my_range->end)) {
+ return false;
+ } else {
+ return true;
+ }
+ } else if (my_range->start_infinity == FALSE && my_range->end_infinity == TRUE) {
+ if (my_range->start <= value) {
+ return false;
+ } else {
+ return true;
+ }
+ } else if (my_range->start_infinity == TRUE && my_range->end_infinity == FALSE) {
+ if (value <= my_range->end) {
+ return false;
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+}
+
+/* Returns status */
+int
+get_status(double value, thresholds *my_thresholds)
+{
+ if (my_thresholds->critical != NULL) {
+ if (check_range(value, my_thresholds->critical) == TRUE) {
+ return STATE_CRITICAL;
+ }
+ }
+ if (my_thresholds->warning != NULL) {
+ if (check_range(value, my_thresholds->warning) == TRUE) {
+ return STATE_WARNING;
+ }
+ }
+ return STATE_OK;
+}
+
#ifdef NEED_GETTIMEOFDAY
int
gettimeofday (struct timeval *tv, struct timezone *tz)
Index: utils.h
===================================================================
RCS file: /cvsroot/nagiosplug/nagiosplug/plugins/utils.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- utils.h 30 Jan 2006 16:10:50 -0000 1.25
+++ utils.h 30 Jan 2006 22:24:31 -0000 1.26
@@ -61,15 +61,24 @@
#define OUTSIDE 0
#define INSIDE 1
-typedef struct threshold_struct {
+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 */
- } threshold;
+ } range;
-threshold *parse_threshold (char *);
+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 *);
+int check_range(double, range *);
+int get_status(double, thresholds *);
#ifndef HAVE_GETTIMEOFDAY
int gettimeofday(struct timeval *, struct timezone *);
More information about the Commits
mailing list