rrdengineapi.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_RRDENGINEAPI_H
  3. #define NETDATA_RRDENGINEAPI_H
  4. #include "rrdengine.h"
  5. #define RRDENG_MIN_PAGE_CACHE_SIZE_MB (8)
  6. #define RRDENG_MIN_DISK_SPACE_MB (64)
  7. #define RRDENG_NR_STATS (37)
  8. #define RRDENG_FD_BUDGET_PER_INSTANCE (50)
  9. extern int db_engine_use_malloc;
  10. extern int default_rrdeng_page_fetch_timeout;
  11. extern int default_rrdeng_page_fetch_retries;
  12. extern int default_rrdeng_page_cache_mb;
  13. extern int default_rrdeng_disk_quota_mb;
  14. extern int default_multidb_disk_quota_mb;
  15. extern uint8_t rrdeng_drop_metrics_under_page_cache_pressure;
  16. extern struct rrdengine_instance *multidb_ctx[RRD_STORAGE_TIERS];
  17. extern size_t page_type_size[];
  18. #define PAGE_POINT_SIZE_BYTES(x) page_type_size[(x)->type]
  19. struct rrdeng_region_info {
  20. time_t start_time_s;
  21. int update_every;
  22. unsigned points;
  23. };
  24. void *rrdeng_create_page(struct rrdengine_instance *ctx, uuid_t *id, struct rrdeng_page_descr **ret_descr);
  25. void rrdeng_commit_page(struct rrdengine_instance *ctx, struct rrdeng_page_descr *descr,
  26. Word_t page_correlation_id);
  27. void *rrdeng_get_latest_page(struct rrdengine_instance *ctx, uuid_t *id, void **handle);
  28. void *rrdeng_get_page(struct rrdengine_instance *ctx, uuid_t *id, usec_t point_in_time_ut, void **handle);
  29. void rrdeng_put_page(struct rrdengine_instance *ctx, void *handle);
  30. void rrdeng_generate_legacy_uuid(const char *dim_id, const char *chart_id, uuid_t *ret_uuid);
  31. void rrdeng_convert_legacy_uuid_to_multihost(char machine_guid[GUID_LEN + 1], uuid_t *legacy_uuid,
  32. uuid_t *ret_uuid);
  33. STORAGE_METRIC_HANDLE *rrdeng_metric_get_or_create(RRDDIM *rd, STORAGE_INSTANCE *db_instance, STORAGE_METRICS_GROUP *smg);
  34. STORAGE_METRIC_HANDLE *rrdeng_metric_get(STORAGE_INSTANCE *db_instance, uuid_t *uuid, STORAGE_METRICS_GROUP *smg);
  35. STORAGE_METRIC_HANDLE *rrdeng_metric_create(STORAGE_INSTANCE *db_instance, uuid_t *uuid, STORAGE_METRICS_GROUP *smg);
  36. STORAGE_METRIC_HANDLE *rrdeng_metric_get_legacy(STORAGE_INSTANCE *db_instance, const char *rd_id, const char *st_id, STORAGE_METRICS_GROUP *smg);
  37. void rrdeng_metric_release(STORAGE_METRIC_HANDLE *db_metric_handle);
  38. STORAGE_METRIC_HANDLE *rrdeng_metric_dup(STORAGE_METRIC_HANDLE *db_metric_handle);
  39. STORAGE_COLLECT_HANDLE *rrdeng_store_metric_init(STORAGE_METRIC_HANDLE *db_metric_handle, uint32_t update_every);
  40. void rrdeng_store_metric_flush_current_page(STORAGE_COLLECT_HANDLE *collection_handle);
  41. void rrdeng_store_metric_change_collection_frequency(STORAGE_COLLECT_HANDLE *collection_handle, int update_every);
  42. void rrdeng_store_metric_next(STORAGE_COLLECT_HANDLE *collection_handle, usec_t point_in_time_ut, NETDATA_DOUBLE n,
  43. NETDATA_DOUBLE min_value,
  44. NETDATA_DOUBLE max_value,
  45. uint16_t count,
  46. uint16_t anomaly_count,
  47. SN_FLAGS flags);
  48. int rrdeng_store_metric_finalize(STORAGE_COLLECT_HANDLE *collection_handle);
  49. void rrdeng_load_metric_init(STORAGE_METRIC_HANDLE *db_metric_handle, struct storage_engine_query_handle *rrdimm_handle,
  50. time_t start_time_s, time_t end_time_s);
  51. STORAGE_POINT rrdeng_load_metric_next(struct storage_engine_query_handle *rrddim_handle);
  52. int rrdeng_load_metric_is_finished(struct storage_engine_query_handle *rrdimm_handle);
  53. void rrdeng_load_metric_finalize(struct storage_engine_query_handle *rrdimm_handle);
  54. time_t rrdeng_metric_latest_time(STORAGE_METRIC_HANDLE *db_metric_handle);
  55. time_t rrdeng_metric_oldest_time(STORAGE_METRIC_HANDLE *db_metric_handle);
  56. void rrdeng_get_37_statistics(struct rrdengine_instance *ctx, unsigned long long *array);
  57. /* must call once before using anything */
  58. int rrdeng_init(RRDHOST *host, struct rrdengine_instance **ctxp, char *dbfiles_path, unsigned page_cache_mb,
  59. unsigned disk_space_mb, size_t tier);
  60. int rrdeng_exit(struct rrdengine_instance *ctx);
  61. void rrdeng_prepare_exit(struct rrdengine_instance *ctx);
  62. int rrdeng_metric_retention_by_uuid(STORAGE_INSTANCE *si, uuid_t *dim_uuid, time_t *first_entry_t, time_t *last_entry_t);
  63. extern STORAGE_METRICS_GROUP *rrdeng_metrics_group_get(STORAGE_INSTANCE *db_instance, uuid_t *uuid);
  64. extern void rrdeng_metrics_group_release(STORAGE_INSTANCE *db_instance, STORAGE_METRICS_GROUP *smg);
  65. typedef struct rrdengine_size_statistics {
  66. size_t default_granularity_secs;
  67. size_t sizeof_metric;
  68. size_t sizeof_metric_in_index;
  69. size_t sizeof_page;
  70. size_t sizeof_page_in_index;
  71. size_t sizeof_extent;
  72. size_t sizeof_page_in_extent;
  73. size_t sizeof_datafile;
  74. size_t sizeof_page_in_cache;
  75. size_t sizeof_point_data;
  76. size_t sizeof_page_data;
  77. size_t pages_per_extent;
  78. size_t datafiles;
  79. size_t extents;
  80. size_t extents_pages;
  81. size_t points;
  82. size_t metrics;
  83. size_t metrics_pages;
  84. size_t extents_compressed_bytes;
  85. size_t pages_uncompressed_bytes;
  86. time_t pages_duration_secs;
  87. struct {
  88. size_t pages;
  89. size_t pages_uncompressed_bytes;
  90. time_t pages_duration_secs;
  91. size_t points;
  92. } page_types[256];
  93. size_t single_point_pages;
  94. usec_t first_t;
  95. usec_t last_t;
  96. size_t currently_collected_metrics;
  97. size_t max_concurrently_collected_metrics;
  98. size_t estimated_concurrently_collected_metrics;
  99. size_t disk_space;
  100. size_t max_disk_space;
  101. time_t database_retention_secs;
  102. double average_compression_savings;
  103. double average_point_duration_secs;
  104. double average_metric_retention_secs;
  105. double ephemeral_metrics_per_day_percent;
  106. double average_page_size_bytes;
  107. } RRDENG_SIZE_STATS;
  108. RRDENG_SIZE_STATS rrdeng_size_statistics(struct rrdengine_instance *ctx);
  109. #endif /* NETDATA_RRDENGINEAPI_H */