rrd.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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_RAM;
  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_NONE:
  28. return RRD_MEMORY_MODE_NONE_NAME;
  29. case RRD_MEMORY_MODE_ALLOC:
  30. return RRD_MEMORY_MODE_ALLOC_NAME;
  31. case RRD_MEMORY_MODE_DBENGINE:
  32. return RRD_MEMORY_MODE_DBENGINE_NAME;
  33. }
  34. STORAGE_ENGINE* eng = storage_engine_get(id);
  35. if (eng) {
  36. return eng->name;
  37. }
  38. return RRD_MEMORY_MODE_RAM_NAME;
  39. }
  40. RRD_MEMORY_MODE rrd_memory_mode_id(const char *name) {
  41. STORAGE_ENGINE* eng = storage_engine_find(name);
  42. if (eng) {
  43. return eng->id;
  44. }
  45. return RRD_MEMORY_MODE_RAM;
  46. }
  47. // ----------------------------------------------------------------------------
  48. // RRD - algorithms types
  49. RRD_ALGORITHM rrd_algorithm_id(const char *name) {
  50. if(strcmp(name, RRD_ALGORITHM_INCREMENTAL_NAME) == 0)
  51. return RRD_ALGORITHM_INCREMENTAL;
  52. else if(strcmp(name, RRD_ALGORITHM_ABSOLUTE_NAME) == 0)
  53. return RRD_ALGORITHM_ABSOLUTE;
  54. else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME) == 0)
  55. return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL;
  56. else if(strcmp(name, RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME) == 0)
  57. return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL;
  58. else
  59. return RRD_ALGORITHM_ABSOLUTE;
  60. }
  61. const char *rrd_algorithm_name(RRD_ALGORITHM algorithm) {
  62. switch(algorithm) {
  63. case RRD_ALGORITHM_ABSOLUTE:
  64. default:
  65. return RRD_ALGORITHM_ABSOLUTE_NAME;
  66. case RRD_ALGORITHM_INCREMENTAL:
  67. return RRD_ALGORITHM_INCREMENTAL_NAME;
  68. case RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL:
  69. return RRD_ALGORITHM_PCENT_OVER_ROW_TOTAL_NAME;
  70. case RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL:
  71. return RRD_ALGORITHM_PCENT_OVER_DIFF_TOTAL_NAME;
  72. }
  73. }
  74. // ----------------------------------------------------------------------------
  75. // RRD - chart types
  76. inline RRDSET_TYPE rrdset_type_id(const char *name) {
  77. if(unlikely(strcmp(name, RRDSET_TYPE_AREA_NAME) == 0))
  78. return RRDSET_TYPE_AREA;
  79. else if(unlikely(strcmp(name, RRDSET_TYPE_STACKED_NAME) == 0))
  80. return RRDSET_TYPE_STACKED;
  81. else // if(unlikely(strcmp(name, RRDSET_TYPE_LINE_NAME) == 0))
  82. return RRDSET_TYPE_LINE;
  83. }
  84. const char *rrdset_type_name(RRDSET_TYPE chart_type) {
  85. switch(chart_type) {
  86. case RRDSET_TYPE_LINE:
  87. default:
  88. return RRDSET_TYPE_LINE_NAME;
  89. case RRDSET_TYPE_AREA:
  90. return RRDSET_TYPE_AREA_NAME;
  91. case RRDSET_TYPE_STACKED:
  92. return RRDSET_TYPE_STACKED_NAME;
  93. }
  94. }
  95. // ----------------------------------------------------------------------------
  96. // RRD - string management
  97. STRING *rrd_string_strdupz(const char *s) {
  98. if(unlikely(!s || !*s)) return string_strdupz(s);
  99. char *tmp = strdupz(s);
  100. json_fix_string(tmp);
  101. STRING *ret = string_strdupz(tmp);
  102. freez(tmp);
  103. return ret;
  104. }