summaryrefslogtreecommitdiffstats
path: root/plugins/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/utils.c')
-rw-r--r--plugins/utils.c191
1 files changed, 1 insertions, 190 deletions
diff --git a/plugins/utils.c b/plugins/utils.c
index cb013412..2b3accea 100644
--- a/plugins/utils.c
+++ b/plugins/utils.c
@@ -16,6 +16,7 @@
16 16
17#include "common.h" 17#include "common.h"
18#include "utils.h" 18#include "utils.h"
19#include "utils_base.h"
19#include <stdarg.h> 20#include <stdarg.h>
20#include <limits.h> 21#include <limits.h>
21 22
@@ -132,16 +133,6 @@ state_text (int result)
132} 133}
133 134
134void 135void
135die (int result, const char *fmt, ...)
136{
137 va_list ap;
138 va_start (ap, fmt);
139 vprintf (fmt, ap);
140 va_end (ap);
141 exit (result);
142}
143
144void
145timeout_alarm_handler (int signo) 136timeout_alarm_handler (int signo)
146{ 137{
147 if (signo == SIGALRM) { 138 if (signo == SIGALRM) {
@@ -266,156 +257,6 @@ is_option (char *str)
266 return FALSE; 257 return FALSE;
267} 258}
268 259
269void set_range_start (range *this, double value) {
270 this->start = value;
271 this->start_infinity = FALSE;
272}
273
274void set_range_end (range *this, double value) {
275 this->end = value;
276 this->end_infinity = FALSE;
277}
278
279range
280*parse_range_string (char *str) {
281 range *temp_range;
282 double start;
283 double end;
284 char *end_str;
285
286 temp_range = (range *) malloc(sizeof(range));
287
288 /* Set defaults */
289 temp_range->start = 0;
290 temp_range->start_infinity = FALSE;
291 temp_range->end = 0;
292 temp_range->end_infinity = TRUE;
293 temp_range->alert_on = OUTSIDE;
294
295 if (str[0] == '@') {
296 temp_range->alert_on = INSIDE;
297 str++;
298 }
299
300 end_str = index(str, ':');
301 if (end_str != NULL) {
302 if (str[0] == '~') {
303 temp_range->start_infinity = TRUE;
304 } else {
305 start = strtod(str, NULL); /* Will stop at the ':' */
306 set_range_start(temp_range, start);
307 }
308 end_str++; /* Move past the ':' */
309 } else {
310 end_str = str;
311 }
312 end = strtod(end_str, NULL);
313 if (strcmp(end_str, "") != 0) {
314 set_range_end(temp_range, end);
315 }
316
317 if (temp_range->start_infinity == TRUE ||
318 temp_range->end_infinity == TRUE ||
319 temp_range->start <= temp_range->end) {
320 return temp_range;
321 }
322 free(temp_range);
323 return NULL;
324}
325
326/* returns 0 if okay, otherwise 1 */
327int
328_set_thresholds(thresholds **my_thresholds, char *warn_string, char *critical_string)
329{
330 thresholds *temp_thresholds = NULL;
331
332 temp_thresholds = malloc(sizeof(temp_thresholds));
333
334 temp_thresholds->warning = NULL;
335 temp_thresholds->critical = NULL;
336
337 if (warn_string != NULL) {
338 if ((temp_thresholds->warning = parse_range_string(warn_string)) == NULL) {
339 return 1;
340 }
341 }
342 if (critical_string != NULL) {
343 if ((temp_thresholds->critical = parse_range_string(critical_string)) == NULL) {
344 return 1;
345 }
346 }
347
348 if (*my_thresholds != 0) {
349 /* printf("Freeing here: %d\n", *my_thresholds); */
350 free(*my_thresholds);
351 }
352 *my_thresholds = temp_thresholds;
353
354 return 0;
355}
356
357void
358set_thresholds(thresholds **my_thresholds, char *warn_string, char *critical_string)
359{
360 if (_set_thresholds(my_thresholds, warn_string, critical_string) == 0) {
361 return;
362 } else {
363 usage(_("Range format incorrect"));
364 }
365}
366
367/* Returns TRUE if alert should be raised based on the range */
368int
369check_range(double value, range *my_range)
370{
371 int false = FALSE;
372 int true = TRUE;
373
374 if (my_range->alert_on == INSIDE) {
375 false = TRUE;
376 true = FALSE;
377 }
378
379 if (my_range->end_infinity == FALSE && my_range->start_infinity == FALSE) {
380 if ((my_range->start <= value) && (value <= my_range->end)) {
381 return false;
382 } else {
383 return true;
384 }
385 } else if (my_range->start_infinity == FALSE && my_range->end_infinity == TRUE) {
386 if (my_range->start <= value) {
387 return false;
388 } else {
389 return true;
390 }
391 } else if (my_range->start_infinity == TRUE && my_range->end_infinity == FALSE) {
392 if (value <= my_range->end) {
393 return false;
394 } else {
395 return true;
396 }
397 } else {
398 return false;
399 }
400}
401
402/* Returns status */
403int
404get_status(double value, thresholds *my_thresholds)
405{
406 if (my_thresholds->critical != NULL) {
407 if (check_range(value, my_thresholds->critical) == TRUE) {
408 return STATE_CRITICAL;
409 }
410 }
411 if (my_thresholds->warning != NULL) {
412 if (check_range(value, my_thresholds->warning) == TRUE) {
413 return STATE_WARNING;
414 }
415 }
416 return STATE_OK;
417}
418
419#ifdef NEED_GETTIMEOFDAY 260#ifdef NEED_GETTIMEOFDAY
420int 261int
421gettimeofday (struct timeval *tv, struct timezone *tz) 262gettimeofday (struct timeval *tv, struct timezone *tz)
@@ -727,33 +568,3 @@ char *fperfdata (const char *label,
727 568
728 return data; 569 return data;
729} 570}
730
731char *np_escaped_string (const char *string) {
732 char *data;
733 int i, j=0;
734 data = strdup(string);
735 for (i=0; data[i]; i++) {
736 if (data[i] == '\\') {
737 switch(data[++i]) {
738 case 'n':
739 data[j++] = '\n';
740 break;
741 case 'r':
742 data[j++] = '\r';
743 break;
744 case 't':
745 data[j++] = '\t';
746 break;
747 case '\\':
748 data[j++] = '\\';
749 break;
750 default:
751 data[j++] = data[i];
752 }
753 } else {
754 data[j++] = data[i];
755 }
756 }
757 data[j] = '\0';
758 return data;
759}