]> git.ipfire.org Git - collecty.git/commitdiff
metrics: Add convenience function to extract metrics from JSON
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 29 May 2026 11:10:37 +0000 (11:10 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 29 May 2026 11:10:37 +0000 (11:10 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/daemon/metrics.c
src/daemon/metrics.h

index 4b05833973602540a281eb170581dda81336d387..36d75485c69ce0b5987dd3a352525793473dcd16 100644 (file)
@@ -381,6 +381,21 @@ int td_metrics_set(td_metrics* self, const td_metric_value* values) {
        return 0;
 }
 
+int td_metrics_push_uint64_from_json(td_metrics* self, const char* field,
+               sd_json_variant* json, const char* key) {
+       sd_json_variant* value = NULL;
+
+       // Fetch the value
+       value = sd_json_variant_by_key(json, key);
+       if (!value) {
+               DEBUG(self->ctx, "Could not find key '%s' in JSON object\n", key);
+               return -EBADMSG;
+       }
+
+       // Push the value
+       return td_metrics_push_uint64(self, field, sd_json_variant_unsigned(value));
+}
+
 int __td_metrics_serialize(td_metrics* self, char* buffer, size_t length) {
        td_metric* metric = NULL;
        ssize_t bytes_written = 0;
index 9a0b1e30130b6d8b38529a65d1fe5c566d69c7d1..06e9483c8ab51145235c44e58d16e5333457ae69 100644 (file)
@@ -61,6 +61,8 @@ typedef struct td_metrics_parser {
 #define VALUE_UINT64(field, value)     VALUE(field, TD_METRIC_UINT64, value)
 #define VALUE_FLOAT(field, value)      VALUE(field, TD_METRIC_FLOAT, value)
 
+#include <systemd/sd-json.h>
+
 #include "ctx.h"
 #include "source.h"
 
@@ -83,6 +85,9 @@ int td_metrics_push_float(td_metrics* self, const char* field, double value);
 
 int td_metrics_set(td_metrics* self, const td_metric_value* values);
 
+int td_metrics_push_uint64_from_json(td_metrics* self, const char* field,
+               sd_json_variant* json, const char* key);
+
 #define td_metrics_serialize(metrics, buffer) \
        __td_metrics_serialize(metrics, buffer, sizeof(buffer))