aboutsummaryrefslogtreecommitdiff
path: root/plugins/utils.c
diff options
context:
space:
mode:
authorGravatar rincewind <rincewind@example.com> 2021-09-25 23:24:34 +0200
committerGravatar rincewind <rincewind@example.com> 2021-09-25 23:24:34 +0200
commit66e245375992c3942dbd5761f8b991e52bf5f9ab (patch)
tree117025d6b36974a749914efd4d2623ea0fcd9ad5 /plugins/utils.c
parentcfc43a327526d838db5ec81f5594df4a14319786 (diff)
downloadmonitoring-plugins-66e245375992c3942dbd5761f8b991e52bf5f9ab.tar.gz
Introduce new perfdata functions and stuff for using (u)int64_t
Diffstat (limited to 'plugins/utils.c')
-rw-r--r--plugins/utils.c120
1 files changed, 120 insertions, 0 deletions
diff --git a/plugins/utils.c b/plugins/utils.c
index 348ec022..011f715d 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,