Merge branch 'pull/master'
[collectd.git] / src / collectd-nagios.c
index 534559c..63effd5 100644 (file)
 #include <sys/un.h>
 
 /*
- * This weird macro cascade forces the glibc to define `NAN'. I don't know
- * another way to solve this, so more intelligent solutions are welcome. -octo
+ * This is copied directly from collectd.h. Make changes there!
  */
-#ifndef __USE_ISOC99
-# define DISABLE__USE_ISOC99 1
-# define __USE_ISOC99 1
-#endif
-#include <math.h>
-#ifdef DISABLE__USE_ISOC99
-# undef DISABLE__USE_ISOC99
-# undef __USE_ISOC99
-#endif
+#if NAN_STATIC_DEFAULT
+# include <math.h>
+/* #endif NAN_STATIC_DEFAULT*/
+#elif NAN_STATIC_ISOC
+# ifndef __USE_ISOC99
+#  define DISABLE_ISOC99 1
+#  define __USE_ISOC99 1
+# endif /* !defined(__USE_ISOC99) */
+# include <math.h>
+# if DISABLE_ISOC99
+#  undef DISABLE_ISOC99
+#  undef __USE_ISOC99
+# endif /* DISABLE_ISOC99 */
+/* #endif NAN_STATIC_ISOC */
+#elif NAN_ZERO_ZERO
+# include <math.h>
+# ifdef NAN
+#  undef NAN
+# endif
+# define NAN (0.0 / 0.0)
+# ifndef isnan
+#  define isnan(f) ((f) != (f))
+# endif /* !defined(isnan) */
+#endif /* NAN_ZERO_ZERO */
 
 #define RET_OKAY     0
 #define RET_WARNING  1
@@ -280,25 +294,22 @@ int do_check_con_none (int values_num, double *values, char **values_names)
                        num_okay++;
        }
 
-       if ((num_critical != 0) || (values_num == 0))
+       printf ("%i critical, %i warning, %i okay",
+                       num_critical, num_warning, num_okay);
+       if (values_num > 0)
        {
-               printf ("CRITICAL: %i critical, %i warning, %i okay\n",
-                               num_critical, num_warning, num_okay);
-               return (RET_CRITICAL);
+               printf (" |");
+               for (i = 0; i < values_num; i++)
+                       printf (" %s=%lf;;;;", values_names[i], values[i]);
        }
+       printf ("\n");
+
+       if ((num_critical != 0) || (values_num == 0))
+               return (RET_CRITICAL);
        else if (num_warning != 0)
-       {
-               printf ("WARNING: %i warning, %i okay\n",
-                               num_warning, num_okay);
                return (RET_WARNING);
-       }
-       else
-       {
-               printf ("OKAY: %i okay\n", num_okay);
-               return (RET_OKAY);
-       }
 
-       return (RET_UNKNOWN);
+       return (RET_OKAY);
 } /* int do_check_con_none */
 
 int do_check_con_average (int values_num, double *values, char **values_names)
@@ -306,6 +317,7 @@ int do_check_con_average (int values_num, double *values, char **values_names)
        int i;
        double total;
        int total_num;
+       double average;
 
        total = 0.0;
        total_num = 0;
@@ -319,31 +331,23 @@ int do_check_con_average (int values_num, double *values, char **values_names)
        }
 
        if (total_num == 0)
-       {
-               printf ("WARNING: No defined values found\n");
+               average = NAN;
+       else
+               average = total / total_num;
+       printf ("%lf average |", average);
+       for (i = 0; i < values_num; i++)
+               printf (" %s=%lf;;;;", values_names[i], values[i]);
+
+       if (total_num == 0)
                return (RET_WARNING);
-       }
 
-       if (match_range (&range_critical_g, total / total_num) != 0)
-       {
-               printf ("CRITICAL: Average = %lf\n",
-                               (double) (total / total_num));
+       if (isnan (average)
+                       || match_range (&range_critical_g, average))
                return (RET_CRITICAL);
-       }
-       else if (match_range (&range_warning_g, total / total_num) != 0)
-       {
-               printf ("WARNING: Average = %lf\n",
-                               (double) (total / total_num));
+       else if (match_range (&range_warning_g, average) != 0)
                return (RET_WARNING);
-       }
-       else
-       {
-               printf ("OKAY: Average = %lf\n",
-                               (double) (total / total_num));
-               return (RET_OKAY);
-       }
 
-       return (RET_UNKNOWN);
+       return (RET_OKAY);
 } /* int do_check_con_average */
 
 int do_check_con_sum (int values_num, double *values, char **values_names)
@@ -408,7 +412,7 @@ int do_check (void)
                return (do_check_con_sum (values_num, values, values_names));
 
        free (values);
-       free (values_names);
+       free (values_names); /* FIXME? */
 
        return (RET_UNKNOWN);
 }