storage_engine.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "storage_engine.h"
  3. #include "ram/rrddim_mem.h"
  4. #ifdef ENABLE_DBENGINE
  5. #include "engine/rrdengineapi.h"
  6. #endif
  7. static STORAGE_ENGINE engines[] = {
  8. {
  9. .id = RRD_MEMORY_MODE_NONE,
  10. .name = RRD_MEMORY_MODE_NONE_NAME,
  11. .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
  12. .api = {
  13. .metric_get = rrddim_metric_get,
  14. .metric_get_or_create = rrddim_metric_get_or_create,
  15. .metric_dup = rrddim_metric_dup,
  16. .metric_release = rrddim_metric_release,
  17. .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
  18. }
  19. },
  20. {
  21. .id = RRD_MEMORY_MODE_RAM,
  22. .name = RRD_MEMORY_MODE_RAM_NAME,
  23. .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
  24. .api = {
  25. .metric_get = rrddim_metric_get,
  26. .metric_get_or_create = rrddim_metric_get_or_create,
  27. .metric_dup = rrddim_metric_dup,
  28. .metric_release = rrddim_metric_release,
  29. .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
  30. }
  31. },
  32. {
  33. .id = RRD_MEMORY_MODE_MAP,
  34. .name = RRD_MEMORY_MODE_MAP_NAME,
  35. .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
  36. .api = {
  37. .metric_get = rrddim_metric_get,
  38. .metric_get_or_create = rrddim_metric_get_or_create,
  39. .metric_dup = rrddim_metric_dup,
  40. .metric_release = rrddim_metric_release,
  41. .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
  42. }
  43. },
  44. {
  45. .id = RRD_MEMORY_MODE_SAVE,
  46. .name = RRD_MEMORY_MODE_SAVE_NAME,
  47. .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
  48. .api = {
  49. .metric_get = rrddim_metric_get,
  50. .metric_get_or_create = rrddim_metric_get_or_create,
  51. .metric_dup = rrddim_metric_dup,
  52. .metric_release = rrddim_metric_release,
  53. .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
  54. }
  55. },
  56. {
  57. .id = RRD_MEMORY_MODE_ALLOC,
  58. .name = RRD_MEMORY_MODE_ALLOC_NAME,
  59. .backend = STORAGE_ENGINE_BACKEND_RRDDIM,
  60. .api = {
  61. .metric_get = rrddim_metric_get,
  62. .metric_get_or_create = rrddim_metric_get_or_create,
  63. .metric_dup = rrddim_metric_dup,
  64. .metric_release = rrddim_metric_release,
  65. .metric_retention_by_uuid = rrddim_metric_retention_by_uuid,
  66. }
  67. },
  68. #ifdef ENABLE_DBENGINE
  69. {
  70. .id = RRD_MEMORY_MODE_DBENGINE,
  71. .name = RRD_MEMORY_MODE_DBENGINE_NAME,
  72. .backend = STORAGE_ENGINE_BACKEND_DBENGINE,
  73. .api = {
  74. .metric_get = rrdeng_metric_get,
  75. .metric_get_or_create = rrdeng_metric_get_or_create,
  76. .metric_dup = rrdeng_metric_dup,
  77. .metric_release = rrdeng_metric_release,
  78. .metric_retention_by_uuid = rrdeng_metric_retention_by_uuid,
  79. }
  80. },
  81. #endif
  82. { .id = RRD_MEMORY_MODE_NONE, .name = NULL }
  83. };
  84. STORAGE_ENGINE* storage_engine_find(const char* name)
  85. {
  86. for (STORAGE_ENGINE* it = engines; it->name; it++) {
  87. if (strcmp(it->name, name) == 0)
  88. return it;
  89. }
  90. return NULL;
  91. }
  92. STORAGE_ENGINE* storage_engine_get(RRD_MEMORY_MODE mmode)
  93. {
  94. for (STORAGE_ENGINE* it = engines; it->name; it++) {
  95. if (it->id == mmode)
  96. return it;
  97. }
  98. return NULL;
  99. }
  100. STORAGE_ENGINE* storage_engine_foreach_init()
  101. {
  102. // Assuming at least one engine exists
  103. return &engines[0];
  104. }
  105. STORAGE_ENGINE* storage_engine_foreach_next(STORAGE_ENGINE* it)
  106. {
  107. if (!it || !it->name)
  108. return NULL;
  109. it++;
  110. return it->name ? it : NULL;
  111. }