From: Michael Tremer Date: Wed, 22 Oct 2025 17:41:53 +0000 (+0000) Subject: metrics: Add support for bool X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a397bb355228edb19edf7df9f8481dc325d9233;p=telemetry.git metrics: Add support for bool Signed-off-by: Michael Tremer --- diff --git a/src/daemon/metrics.c b/src/daemon/metrics.c index 1e90d3d..e61ff68 100644 --- a/src/daemon/metrics.c +++ b/src/daemon/metrics.c @@ -37,6 +37,9 @@ typedef struct td_metric { // Value union { + // TD_METRIC_BOOL + int _bool; + // TD_METRIC_INT64 int64_t _int64; @@ -238,6 +241,12 @@ static int __td_metrics_format_value(td_metrics* self, case TD_METRIC_UNKNOWN: return __td_string_set(value, length, "U"); + case TD_METRIC_BOOL: + if (metric->value._bool) + return __td_string_set(value, length, "1"); + else + return __td_string_set(value, length, "0"); + case TD_METRIC_INT64: return __td_string_format(value, length, "%ld", metric->value._int64); @@ -336,6 +345,10 @@ static int td_metrics_push_value(td_metrics* self, case TD_METRIC_UNKNOWN: break; + case TD_METRIC_BOOL: + metric->value._bool = *(int*)value; + break; + case TD_METRIC_INT64: metric->value._int64 = *(int64_t*)value; break; @@ -352,6 +365,10 @@ static int td_metrics_push_value(td_metrics* self, return 0; } +int td_metrics_push_bool(td_metrics* self, const char* field, int value) { + return td_metrics_push_value(self, field, TD_METRIC_BOOL, &value); +} + int td_metrics_push_int64(td_metrics* self, const char* field, int64_t value) { return td_metrics_push_value(self, field, TD_METRIC_INT64, &value); } @@ -406,6 +423,10 @@ int __td_metrics_serialize(td_metrics* self, char* buffer, size_t length) { bytes_written = snprintf(p, bytes_left, ":U"); break; + case TD_METRIC_BOOL: + bytes_written = snprintf(p, bytes_left, ":%c", (metric->value._bool) ? '1' : '0'); + break; + case TD_METRIC_INT64: bytes_written = snprintf(p, bytes_left, ":%ld", metric->value._int64); break; diff --git a/src/daemon/metrics.h b/src/daemon/metrics.h index 046f966..e70d7be 100644 --- a/src/daemon/metrics.h +++ b/src/daemon/metrics.h @@ -25,6 +25,7 @@ typedef struct td_metrics td_metrics; typedef enum td_metric_type { TD_METRIC_UNKNOWN = 0, + TD_METRIC_BOOL, TD_METRIC_INT64, TD_METRIC_UINT64, TD_METRIC_FLOAT, @@ -44,6 +45,7 @@ typedef struct td_metric_value { #define VALUES(...) ((const td_metric_value[]) { __VA_ARGS__, { NULL } }) #define VALUE(field, type, value) { field, type, value } +#define VALUE_BOOL(field, value) VALUE(field, TD_METRIC_BOOL, value) #define VALUE_INT64(field, value) VALUE(field, TD_METRIC_INT64, value) #define VALUE_UINT64(field, value) VALUE(field, TD_METRIC_UINT64, value) #define VALUE_FLOAT(field, value) VALUE(field, TD_METRIC_FLOAT, value) @@ -63,6 +65,7 @@ const struct timeval* td_metrics_get_time(td_metrics* self); int td_metrics_dump(td_metrics* self); +int td_metrics_push_bool(td_metrics* self, const char* field, int value); int td_metrics_push_int64(td_metrics* self, const char* field, int64_t value); int td_metrics_push_uint64(td_metrics* self, const char* field, uint64_t value); int td_metrics_push_float(td_metrics* self, const char* field, double value);