rrd.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #define NETDATA_RRD_INTERNALS 1
  3. #include "rrd.h"
  4. #include "storage_engine.h"
  5. // ----------------------------------------------------------------------------
  6. // globals
  7. /*
  8. // if not zero it gives the time (in seconds) to remove un-updated dimensions
  9. // DO NOT ENABLE
  10. // if dimensions are removed, the chart generation will have to run again
  11. int rrd_delete_unupdated_dimensions = 0;
  12. */
  13. int default_rrd_update_every = UPDATE_EVERY;
  14. int default_rrd_history_entries = RRD_DEFAULT_HISTORY_ENTRIES;
  15. #ifdef ENABLE_DBENGINE
  16. RRD_MEMORY_MODE default_rrd_memory_mode = RRD_MEMORY_MODE_DBENGINE;
  17. #else
  18. RRD_MEMORY_MODE default_rrd_memory_mode = RRD_MEMORY_MODE_SAVE;
  19. #endif
  20. int gap_when_lost_iterations_above = 1;
  21. // ----------------------------------------------------------------------------
  22. // RRD - memory modes
  23. inline const char *rrd_memory_mode_name(RRD_MEMORY_MODE id) {
  24. switch(id) {
  25. case RRD_MEMORY_MODE_RAM:
  26. return RRD_MEMORY_MODE_RAM_NAME;
  27. case RRD_MEMORY_MODE_MAP:
  28. return RRD_MEMORY_MODE_MAP_NAME;
  29. case RRD_MEMORY_MODE_NONE:
  30. return RRD_MEMORY_MODE_NONE_NAME;
  31. case RRD_MEMORY_MODE_SAVE:
  32. return RRD_MEMORY_MODE_SAVE_NAME;
  33. case RRD_MEMORY_MODE_ALLOC:
  34. return RRD_MEMORY_MODE_ALLOC_NAME;
  35. case RRD_MEMORY_MODE_DBENGINE:
  36. return RRD_MEMORY_MODE_DBENGINE_NAME;
  37. }
  38. STORAGE_ENGINE* eng = storage_engine_get(id);
  39. if (eng) {
  40. return eng->name;
  41. }
  42. return RRD_MEMORY_MODE_SAVE_NAME;
  43. }
  44. RRD_MEMORY_MODE rrd_memory_mode_id(const char *name) {
  45. STORAGE_ENGINE* eng = storage_engine_find(name);
  46. if (eng) {
  47. return eng->id;
  48. }
  49. return RRD_MEMORY_MODE_SAVE;
  50. }
  51. // ----------------------------------------------------------------------------
  52. // RRD - algorithms types
  53. RRD_ALGORITHM rrd_algorithm_id(const char *name) {
  54. if(strcmp(name, RRD_ALGORITHM_INCREMENTAL_NAME) == 0)
  55. return RRD_ALGORITHM_INCREMENTAL;
  56. else if(strcmp(name, RRD_ALGORITHM_ABSOLUTE_NAME) == 0)
  57. return RRD_ALGORITHM_ABSOLUTE;
  58. else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME) == 0)
  59. return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL;
  60. else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME) == 0)
  61. return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL;
  62. else
  63. return RRD_ALGORITHM_ABSOLUTE;
  64. }
  65. const char *rrd_algorithm_name(RRD_ALGORITHM algorithm) {
  66. switch(algorithm) {
  67. case RRD_ALGORITHM_ABSOLUTE:
  68. default:
  69. return RRD_ALGORITHM_ABSOLUTE_NAME;
  70. case RRD_ALGORITHM_INCREMENTAL:
  71. return RRD_ALGORITHM_INCREMENTAL_NAME;
  72. case RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL:
  73. return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME;
  74. case RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL:
  75. return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME;
  76. }
  77. }
  78. // ----------------------------------------------------------------------------
  79. // RRD - chart types
  80. inline RRDSET_TYPE rrdset_type_id(const char *name) {
  81. if(unlikely(strcmp(name, RRDSET_TYPE_AREA_NAME) == 0))
  82. return RRDSET_TYPE_AREA;
  83. else if(unlikely(strcmp(name, RRDSET_TYPE_STACKED_NAME) == 0))
  84. return RRDSET_TYPE_STACKED;
  85. else // if(unlikely(strcmp(name, RRDSET_TYPE_LINE_NAME) == 0))
  86. return RRDSET_TYPE_LINE;
  87. }
  88. const char *rrdset_type_name(RRDSET_TYPE chart_type) {
  89. switch(chart_type) {
  90. case RRDSET_TYPE_LINE:
  91. default:
  92. return RRDSET_TYPE_LINE_NAME;
  93. case RRDSET_TYPE_AREA:
  94. return RRDSET_TYPE_AREA_NAME;
  95. case RRDSET_TYPE_STACKED:
  96. return RRDSET_TYPE_STACKED_NAME;
  97. }
  98. }
  99. // ----------------------------------------------------------------------------
  100. // RRD - cache directory
  101. char *rrdset_cache_dir(RRDHOST *host, const char *id) {
  102. char *ret = NULL;
  103. char b[FILENAME_MAX + 1];
  104. char n[FILENAME_MAX + 1];
  105. rrdset_strncpyz_name(b, id, FILENAME_MAX);
  106. snprintfz(n, FILENAME_MAX, "%s/%s", host->cache_dir, b);
  107. ret = strdupz(n);
  108. if(host->rrd_memory_mode == RRD_MEMORY_MODE_MAP || host->rrd_memory_mode == RRD_MEMORY_MODE_SAVE) {
  109. int r = mkdir(ret, 0775);
  110. if(r != 0 && errno != EEXIST)
  111. error("Cannot create directory '%s'", ret);
  112. }
  113. return ret;
  114. }