master
c 49 lines 1.59 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "mrg-internals.h"
4
5 DEFINE_JUDYL_TYPED(METRIC, METRIC *);
6 METRIC_JudyLSet acquired_metrics = { 0 };
7 size_t acquired_metrics_counter = 0;
8 size_t acquired_metrics_deleted = 0;
9
10 ALWAYS_INLINE
11 static void mrg_metric_prepopulate(MRG *mrg, Word_t section, nd_uuid_t *uuid) {
12 MRG_ENTRY entry = {
13 .uuid = uuid,
14 .section = section,
15 .first_time_s = 0,
16 .last_time_s = 0,
17 .latest_update_every_s = 0,
18 };
19 bool added = false;
20 METRIC *metric = metric_add_and_acquire(mrg, &entry, &added);
21 if(likely(added)) {
22 METRIC_SET(&acquired_metrics, acquired_metrics_counter++, metric);
23 return;
24 }
25 mrg_metric_release(mrg, metric);
26 }
27
28 static void mrg_release_cb(Word_t idx __maybe_unused, METRIC *m, void *data) {
29 MRG *mrg = data;
30 if(mrg_metric_release(mrg, m))
31 acquired_metrics_deleted++;
32 }
33
34 void mrg_metric_prepopulate_cleanup(MRG *mrg) {
35 acquired_metrics_deleted = 0;
36 METRIC_FREE(&acquired_metrics, mrg_release_cb, mrg);
37
38 if(acquired_metrics_counter || acquired_metrics_deleted)
39 nd_log(NDLS_DAEMON, NDLP_INFO, "MRG DUMP: Prepopulated %zu metrics, released %zu, deleted %zu",
40 acquired_metrics_counter, acquired_metrics_counter - acquired_metrics_deleted, acquired_metrics_deleted);
41
42 acquired_metrics_counter = 0;
43 }
44
45 // Main function to load metrics from the database
46 bool mrg_load(MRG *mrg) {
47 size_t processed_metrics = populate_metrics_from_database(mrg, (void (*)(void *, Word_t, nd_uuid_t *))mrg_metric_prepopulate);
48 return processed_metrics > 0;
49 }