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_METRIC_H_
9 : #define ZEPHYR_INCLUDE_PROMETHEUS_METRIC_H_
10 :
11 : /**
12 : * @file
13 : *
14 : * @brief Prometheus metric interface.
15 : *
16 : * @addtogroup prometheus
17 : * @{
18 : */
19 :
20 : #include <zephyr/sys/iterable_sections.h>
21 : #include <zephyr/sys/slist.h>
22 : #include <zephyr/net/prometheus/label.h>
23 :
24 : /**
25 : * @brief Prometheus metric types.
26 : *
27 : * * References
28 : * * See https://prometheus.io/docs/concepts/metric_types
29 : */
30 1 : enum prometheus_metric_type {
31 : /** Prometheus Counter */
32 : PROMETHEUS_COUNTER = 0,
33 : /** Prometheus Gauge */
34 : PROMETHEUS_GAUGE,
35 : /** Prometheus Summary */
36 : PROMETHEUS_SUMMARY,
37 : /** Prometheus Histogram */
38 : PROMETHEUS_HISTOGRAM,
39 : };
40 :
41 : /**
42 : * @brief Type used to represent a Prometheus metric base.
43 : *
44 : * Every metric has a prometheus_metric structure associated used
45 : * to control the metric access and usage.
46 : */
47 1 : struct prometheus_metric {
48 : /** Slist metric list node */
49 1 : sys_snode_t node;
50 : /** Back pointer to the collector that this metric belongs to */
51 1 : struct prometheus_collector *collector;
52 : /** Back pointer to the actual metric (counter, gauge, etc.).
53 : * This is just a temporary solution, ultimate goal is to place
54 : * this generic metrict struct into the actual metric struct.
55 : */
56 1 : void *metric;
57 : /** Type of the Prometheus metric. */
58 1 : enum prometheus_metric_type type;
59 : /** Name of the Prometheus metric. */
60 1 : const char *name;
61 : /** Description of the Prometheus metric. */
62 1 : const char *description;
63 : /** Labels associated with the Prometheus metric. */
64 1 : struct prometheus_label labels[MAX_PROMETHEUS_LABELS_PER_METRIC];
65 : /** Number of labels associated with the Prometheus metric. */
66 1 : int num_labels;
67 : /** User defined data */
68 1 : void *user_data;
69 : /* Add any other necessary fields */
70 : };
71 :
72 : /**
73 : * @}
74 : */
75 :
76 : #endif /* ZEPHYR_INCLUDE_PROMETHEUS_METRIC_H_ */
|