syslog-ng source
dyn-metrics-store.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023-2024 Attila Szakacs <attila.szakacs@axoflow.com>
3  * Copyright (c) 2024 Balazs Scheidler <balazs.scheidler@axoflow.com>
4  * Copyright (c) 2024 László Várady
5  * Copyright (c) 2024 Axoflow
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20  *
21  * As an additional exemption you are allowed to compile & link against the
22  * OpenSSL libraries as published by the OpenSSL project. See the file
23  * COPYING for details.
24  *
25  */
26 
27 #ifndef DYN_METRICS_STORE_H_INCLUDED
28 #define DYN_METRICS_STORE_H_INCLUDED
29 
30 #include "stats/stats-registry.h"
31 
32 /*
33  * There is a recurring inconvenience with dynamic counters.
34  *
35  * Registering, changing and unregistering a counter makes it orphaned,
36  * as no one is keeping it alive. Non-dynamic counters do not have this
37  * issue, as they are always stored on their call-site, binding their
38  * lifecycle to the call-site.
39  *
40  * This class intends to solve this problem by providing a store,
41  * which keeps alive its counters until the store is freed. On the
42  * call-site you only need to keep the store alive, to keep the
43  * counters alive.
44  *
45  * It also grants a label cache for performance optimization needs.
46  *
47  * Note: The store is NOT thread safe, make sure to eliminate
48  * concurrency on the call site. If you need a cache that is purged only
49  * during reload, use metrics/dyn-metrics-cache.h.
50  *
51  */
52 
53 typedef struct _DynMetricsStore DynMetricsStore;
54 
55 DynMetricsStore *dyn_metrics_store_new(void);
56 void dyn_metrics_store_free(DynMetricsStore *self);
57 
58 StatsCounterItem *dyn_metrics_store_retrieve_counter(DynMetricsStore *self, StatsClusterKey *key, gint level);
59 gboolean dyn_metrics_store_remove_counter(DynMetricsStore *self, StatsClusterKey *key);
60 void dyn_metrics_store_reset(DynMetricsStore *self);
61 void dyn_metrics_store_merge(DynMetricsStore *self, DynMetricsStore *other);
62 
63 void dyn_metrics_store_reset_labels_cache(DynMetricsStore *self);
64 StatsClusterLabel *dyn_metrics_store_cache_label(DynMetricsStore *self);
65 StatsClusterLabel *dyn_metrics_store_get_cached_labels(DynMetricsStore *self);
66 guint dyn_metrics_store_get_cached_labels_len(DynMetricsStore *self);
67 void dyn_metrics_store_sort_cached_labels(DynMetricsStore *self);
68 
69 #endif
StatsClusterLabel * dyn_metrics_store_get_cached_labels(DynMetricsStore *self)
Definition: dyn-metrics-store.c:140
void dyn_metrics_store_merge(DynMetricsStore *self, DynMetricsStore *other)
Definition: dyn-metrics-store.c:113
DynMetricsStore * dyn_metrics_store_new(void)
Definition: dyn-metrics-store.c:65
void dyn_metrics_store_reset(DynMetricsStore *self)
Definition: dyn-metrics-store.c:107
StatsCounterItem * dyn_metrics_store_retrieve_counter(DynMetricsStore *self, StatsClusterKey *key, gint level)
Definition: dyn-metrics-store.c:87
void dyn_metrics_store_reset_labels_cache(DynMetricsStore *self)
Definition: dyn-metrics-store.c:127
StatsClusterLabel * dyn_metrics_store_cache_label(DynMetricsStore *self)
Definition: dyn-metrics-store.c:133
gboolean dyn_metrics_store_remove_counter(DynMetricsStore *self, StatsClusterKey *key)
Definition: dyn-metrics-store.c:101
void dyn_metrics_store_sort_cached_labels(DynMetricsStore *self)
Definition: dyn-metrics-store.c:158
void dyn_metrics_store_free(DynMetricsStore *self)
Definition: dyn-metrics-store.c:79
guint dyn_metrics_store_get_cached_labels_len(DynMetricsStore *self)
Definition: dyn-metrics-store.c:146
Definition: stats-counter.h:67
Definition: dyn-metrics-store.c:33
struct tm key
Definition: cache.c:63