Line data Source code
1 1 : /* 2 : * Copyright (c) 2024 Mustafa Abdullah Kus, Sparse Technology 3 : * Copyright (c) 2024 Nordic Semiconductor 4 : * 5 : * SPDX-License-Identifier: Apache-2.0 6 : */ 7 : 8 : #ifndef ZEPHYR_INCLUDE_PROMETHEUS_GAUGE_H_ 9 : #define ZEPHYR_INCLUDE_PROMETHEUS_GAUGE_H_ 10 : 11 : /** 12 : * @file 13 : * 14 : * @brief Prometheus gauge APIs. 15 : * 16 : * @addtogroup prometheus 17 : * @{ 18 : */ 19 : 20 : #include <zephyr/sys/iterable_sections.h> 21 : #include <zephyr/net/prometheus/metric.h> 22 : 23 : /** 24 : * @brief Type used to represent a Prometheus gauge metric. 25 : * 26 : * * References 27 : * * See https://prometheus.io/docs/concepts/metric_types/#gauge 28 : */ 29 1 : struct prometheus_gauge { 30 : /** Base of the Prometheus gauge metric */ 31 1 : struct prometheus_metric base; 32 : /** Value of the Prometheus gauge metric */ 33 1 : double value; 34 : /** User data */ 35 1 : void *user_data; 36 : }; 37 : 38 : /** 39 : * @brief Prometheus Gauge definition. 40 : * 41 : * This macro defines a Gauge metric. If you want to make the gauge static, 42 : * then add "static" keyword before the PROMETHEUS_GAUGE_DEFINE. 43 : * 44 : * @param _name The gauge metric name. 45 : * @param _desc Gauge description 46 : * @param _label Label for the metric. Additional labels can be added at runtime. 47 : * @param _collector Collector to map this metric. Can be set to NULL if it not yet known. 48 : * @param ... Optional user data specific to this metric instance. 49 : * 50 : * Example usage: 51 : * @code{.c} 52 : * 53 : * PROMETHEUS_GAUGE_DEFINE(http_request_gauge, "HTTP request gauge", 54 : * ({ .key = "http_request", .value = "request_count" }), 55 : * NULL); 56 : * 57 : * @endcode 58 : */ 59 1 : #define PROMETHEUS_GAUGE_DEFINE(_name, _desc, _label, _collector, ...) \ 60 : STRUCT_SECTION_ITERABLE(prometheus_gauge, _name) = { \ 61 : .base.name = STRINGIFY(_name), \ 62 : .base.type = PROMETHEUS_GAUGE, \ 63 : .base.description = _desc, \ 64 : .base.labels[0] = __DEBRACKET _label, \ 65 : .base.num_labels = 1, \ 66 : .base.collector = _collector, \ 67 : .value = 0.0, \ 68 : .user_data = COND_CODE_0( \ 69 : NUM_VA_ARGS_LESS_1(LIST_DROP_EMPTY(__VA_ARGS__, _)), \ 70 : (NULL), \ 71 : (GET_ARG_N(1, __VA_ARGS__))), \ 72 : } 73 : 74 : /** 75 : * @brief Set the value of a Prometheus gauge metric 76 : * 77 : * Sets the value of the specified gauge metric to the given value. 78 : * 79 : * @param gauge Pointer to the gauge metric to set. 80 : * @param value Value to set the gauge metric to. 81 : * 82 : * @return 0 on success, -EINVAL if the value is negative. 83 : */ 84 1 : int prometheus_gauge_set(struct prometheus_gauge *gauge, double value); 85 : 86 : /** 87 : * @} 88 : */ 89 : 90 : #endif /* ZEPHYR_INCLUDE_PROMETHEUS_GAUGE_H_ */