master
c 106 lines 3.51 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "storage-engine.h"
4 #include "ram/rrddim_mem.h"
5 #ifdef ENABLE_DBENGINE
6 #include "engine/rrdengineapi.h"
7 #endif
8
9 static STORAGE_ENGINE engines[] = {
10 {
11 .id = RRD_DB_MODE_NONE,
12 .name = RRD_DB_MODE_NONE_NAME,
13 .seb = STORAGE_ENGINE_BACKEND_RRDDIM,
14 .api = {
15 .metric_get_by_id = rrddim_metric_get_by_id,
16 .metric_get_by_uuid = rrddim_metric_get_by_uuid,
17 .metric_get_or_create = rrddim_metric_get_or_create,
18 .metric_dup = rrddim_metric_dup,
19 .metric_release = rrddim_metric_release,
20 .metric_retention_by_id = rrddim_metric_retention_by_id,
21 .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
22 .metric_retention_delete_by_id = rrddim_retention_delete_by_id,
23 }
24 },
25 {
26 .id = RRD_DB_MODE_RAM,
27 .name = RRD_DB_MODE_RAM_NAME,
28 .seb = STORAGE_ENGINE_BACKEND_RRDDIM,
29 .api = {
30 .metric_get_by_id = rrddim_metric_get_by_id,
31 .metric_get_by_uuid = rrddim_metric_get_by_uuid,
32 .metric_get_or_create = rrddim_metric_get_or_create,
33 .metric_dup = rrddim_metric_dup,
34 .metric_release = rrddim_metric_release,
35 .metric_retention_by_id = rrddim_metric_retention_by_id,
36 .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
37 .metric_retention_delete_by_id = rrddim_retention_delete_by_id,
38 }
39 },
40 {
41 .id = RRD_DB_MODE_ALLOC,
42 .name = RRD_DB_MODE_ALLOC_NAME,
43 .seb = STORAGE_ENGINE_BACKEND_RRDDIM,
44 .api = {
45 .metric_get_by_id = rrddim_metric_get_by_id,
46 .metric_get_by_uuid = rrddim_metric_get_by_uuid,
47 .metric_get_or_create = rrddim_metric_get_or_create,
48 .metric_dup = rrddim_metric_dup,
49 .metric_release = rrddim_metric_release,
50 .metric_retention_by_id = rrddim_metric_retention_by_id,
51 .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
52 .metric_retention_delete_by_id = rrddim_retention_delete_by_id,
53 }
54 },
55 #ifdef ENABLE_DBENGINE
56 {
57 .id = RRD_DB_MODE_DBENGINE,
58 .name = RRD_DB_MODE_DBENGINE_NAME,
59 .seb = STORAGE_ENGINE_BACKEND_DBENGINE,
60 .api = {
61 .metric_get_by_id = rrdeng_metric_get_by_id,
62 .metric_get_by_uuid = rrdeng_metric_get_by_uuid,
63 .metric_get_or_create = rrdeng_metric_get_or_create,
64 .metric_dup = rrdeng_metric_dup,
65 .metric_release = rrdeng_metric_release,
66 .metric_retention_by_id = rrdeng_metric_retention_by_id,
67 .metric_retention_by_uuid = rrdeng_metric_retention_by_uuid,
68 .metric_retention_delete_by_id = rrdeng_metric_retention_delete_by_id,
69 }
70 },
71 #endif
72 { .id = RRD_DB_MODE_NONE, .name = NULL }
73 };
74
75 STORAGE_ENGINE* storage_engine_find(const char* name)
76 {
77 for (STORAGE_ENGINE* it = engines; it->name; it++) {
78 if (strcmp(it->name, name) == 0)
79 return it;
80 }
81 return NULL;
82 }
83
84 STORAGE_ENGINE* storage_engine_get(RRD_DB_MODE mmode)
85 {
86 for (STORAGE_ENGINE* it = engines; it->name; it++) {
87 if (it->id == mmode)
88 return it;
89 }
90 return NULL;
91 }
92
93 STORAGE_ENGINE* storage_engine_foreach_init()
94 {
95 // Assuming at least one engine exists
96 return &engines[0];
97 }
98
99 STORAGE_ENGINE* storage_engine_foreach_next(STORAGE_ENGINE* it)
100 {
101 if (!it || !it->name)
102 return NULL;
103
104 it++;
105 return it->name ? it : NULL;
106 }