storage_engine.c 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. .seb = 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. .seb = 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_ALLOC,
  34. .name = RRD_MEMORY_MODE_ALLOC_NAME,
  35. .seb = 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. #ifdef ENABLE_DBENGINE
  45. {
  46. .id = RRD_MEMORY_MODE_DBENGINE,
  47. .name = RRD_MEMORY_MODE_DBENGINE_NAME,
  48. .seb = STORAGE_ENGINE_BACKEND_DBENGINE,
  49. .api = {
  50. .metric_get = rrdeng_metric_get,
  51. .metric_get_or_create = rrdeng_metric_get_or_create,
  52. .metric_dup = rrdeng_metric_dup,
  53. .metric_release = rrdeng_metric_release,
  54. .metric_retention_by_uuid = rrdeng_metric_retention_by_uuid,
  55. }
  56. },
  57. #endif
  58. { .id = RRD_MEMORY_MODE_NONE, .name = NULL }
  59. };
  60. STORAGE_ENGINE* storage_engine_find(const char* name)
  61. {
  62. for (STORAGE_ENGINE* it = engines; it->name; it++) {
  63. if (strcmp(it->name, name) == 0)
  64. return it;
  65. }
  66. return NULL;
  67. }
  68. STORAGE_ENGINE* storage_engine_get(RRD_MEMORY_MODE mmode)
  69. {
  70. for (STORAGE_ENGINE* it = engines; it->name; it++) {
  71. if (it->id == mmode)
  72. return it;
  73. }
  74. return NULL;
  75. }
  76. STORAGE_ENGINE* storage_engine_foreach_init()
  77. {
  78. // Assuming at least one engine exists
  79. return &engines[0];
  80. }
  81. STORAGE_ENGINE* storage_engine_foreach_next(STORAGE_ENGINE* it)
  82. {
  83. if (!it || !it->name)
  84. return NULL;
  85. it++;
  86. return it->name ? it : NULL;
  87. }