[monitoring-plugins] Introduce new perfdata functions and stuff for ...

rincewind git at monitoring-plugins.org
Sun Oct 3 13:40:11 CEST 2021


 Module: monitoring-plugins
 Branch: master
 Commit: 66e245375992c3942dbd5761f8b991e52bf5f9ab
 Author: rincewind <rincewind at example.com>
   Date: Sat Sep 25 23:24:34 2021 +0200
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=66e2453

Introduce new perfdata functions and stuff for using (u)int64_t

---

 plugins/utils.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 plugins/utils.h |  10 +++++
 2 files changed, 130 insertions(+)

diff --git a/plugins/utils.c b/plugins/utils.c
index 348ec02..011f715 100644
--- a/plugins/utils.c
+++ b/plugins/utils.c
@@ -27,6 +27,8 @@
 #include "utils_base.h"
 #include <stdarg.h>
 #include <limits.h>
+#include <string.h>
+#include <errno.h>
 
 #include <arpa/inet.h>
 
@@ -239,6 +241,46 @@ is_intnonneg (char *number)
 		return FALSE;
 }
 
+/*
+ * Checks whether the number in the string _number_ can be put inside a int64_t
+ * On success the number will be written to the _target_ address, if _target_ is not set
+ * to NULL.
+ */
+bool is_int64(char *number, int64_t *target) {
+	errno = 0;
+	uint64_t tmp = strtoll(number, NULL, 10);
+	if (errno != 0) {
+		return false;
+	}
+	if (tmp < INT64_MIN || tmp > INT64_MAX) {
+		return false;
+	}
+	if (target != NULL) {
+		*target = tmp;
+	}
+	return true;
+}
+
+/*
+ * Checks whether the number in the string _number_ can be put inside a uint64_t
+ * On success the number will be written to the _target_ address, if _target_ is not set
+ * to NULL.
+ */
+bool is_uint64(char *number, uint64_t *target) {
+	errno = 0;
+	uint64_t tmp = strtoll(number, NULL, 10);
+	if (errno != 0) {
+		return false;
+	}
+	if (tmp < 0 || tmp > UINT64_MAX) {
+		return false;
+	}
+	if (target != NULL) {
+		*target = tmp;
+	}
+	return true;
+}
+
 int
 is_intpercent (char *number)
 {
@@ -556,6 +598,84 @@ char *perfdata (const char *label,
 }
 
 
+char *perfdata_uint64 (const char *label,
+ uint64_t val,
+ const char *uom,
+ int warnp,
+ uint64_t warn,
+ int critp,
+ uint64_t crit,
+ int minp,
+ uint64_t minv,
+ int maxp,
+ uint64_t maxv)
+{
+	char *data = NULL;
+
+	if (strpbrk (label, "'= "))
+		xasprintf (&data, "'%s'=%ld%s;", label, val, uom);
+	else
+		xasprintf (&data, "%s=%ld%s;", label, val, uom);
+
+	if (warnp)
+		xasprintf (&data, "%s%ld;", data, warn);
+	else
+		xasprintf (&data, "%s;", data);
+
+	if (critp)
+		xasprintf (&data, "%s%ld;", data, crit);
+	else
+		xasprintf (&data, "%s;", data);
+
+	if (minp)
+		xasprintf (&data, "%s%ld", data, minv);
+
+	if (maxp)
+		xasprintf (&data, "%s;%ld", data, maxv);
+
+	return data;
+}
+
+
+char *perfdata_int64 (const char *label,
+ int64_t val,
+ const char *uom,
+ int warnp,
+ int64_t warn,
+ int critp,
+ int64_t crit,
+ int minp,
+ int64_t minv,
+ int maxp,
+ int64_t maxv)
+{
+	char *data = NULL;
+
+	if (strpbrk (label, "'= "))
+		xasprintf (&data, "'%s'=%ld%s;", label, val, uom);
+	else
+		xasprintf (&data, "%s=%ld%s;", label, val, uom);
+
+	if (warnp)
+		xasprintf (&data, "%s%ld;", data, warn);
+	else
+		xasprintf (&data, "%s;", data);
+
+	if (critp)
+		xasprintf (&data, "%s%ld;", data, crit);
+	else
+		xasprintf (&data, "%s;", data);
+
+	if (minp)
+		xasprintf (&data, "%s%ld", data, minv);
+
+	if (maxp)
+		xasprintf (&data, "%s;%ld", data, maxv);
+
+	return data;
+}
+
+
 char *fperfdata (const char *label,
  double val,
  const char *uom,
diff --git a/plugins/utils.h b/plugins/utils.h
index 33a2054..91a9c3f 100644
--- a/plugins/utils.h
+++ b/plugins/utils.h
@@ -16,6 +16,9 @@ suite of plugins. */
 /* now some functions etc are being defined in ../lib/utils_base.c */
 #include "utils_base.h"
 
+
+#include <stdbool.h>
+
 #ifdef NP_EXTRA_OPTS
 /* Include extra-opts functions if compiled in */
 #include "extra_opts.h"
@@ -38,6 +41,7 @@ int is_intpos (char *);
 int is_intneg (char *);
 int is_intnonneg (char *);
 int is_intpercent (char *);
+bool is_uint64(char *number, uint64_t *target);
 
 int is_numeric (char *);
 int is_positive (char *);
@@ -88,6 +92,12 @@ void usage_va(const char *fmt, ...) __attribute__((noreturn));
 char *perfdata (const char *, long int, const char *, int, long int,
                 int, long int, int, long int, int, long int);
 
+char *perfdata_uint64 (const char *, uint64_t , const char *, int, uint64_t,
+                int, uint64_t, int, uint64_t, int, uint64_t);
+
+char *perfdata_int64 (const char *, int64_t, const char *, int, int64_t,
+                int, int64_t, int, int64_t, int, int64_t);
+
 char *fperfdata (const char *, double, const char *, int, double,
                  int, double, int, double, int, double);
 



More information about the Commits mailing list