sqlite_aclk.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_SQLITE_ACLK_H
  3. #define NETDATA_SQLITE_ACLK_H
  4. #include "sqlite3.h"
  5. #ifndef ACLK_MAX_CHART_BATCH
  6. #define ACLK_MAX_CHART_BATCH (200)
  7. #endif
  8. #ifndef ACLK_MAX_CHART_BATCH_COUNT
  9. #define ACLK_MAX_CHART_BATCH_COUNT (10)
  10. #endif
  11. #define ACLK_MAX_ALERT_UPDATES (5)
  12. #define ACLK_DATABASE_CLEANUP_FIRST (1200)
  13. #define ACLK_DATABASE_CLEANUP_INTERVAL (3600)
  14. #define ACLK_DELETE_ACK_ALERTS_INTERNAL (86400)
  15. #define ACLK_SYNC_QUERY_SIZE 512
  16. static inline void uuid_unparse_lower_fix(uuid_t *uuid, char *out)
  17. {
  18. uuid_unparse_lower(*uuid, out);
  19. out[8] = '_';
  20. out[13] = '_';
  21. out[18] = '_';
  22. out[23] = '_';
  23. }
  24. static inline int claimed()
  25. {
  26. return localhost->aclk_state.claimed_id != NULL;
  27. }
  28. #define TABLE_ACLK_ALERT "CREATE TABLE IF NOT EXISTS aclk_alert_%s (sequence_id INTEGER PRIMARY KEY, " \
  29. "alert_unique_id, date_created, date_submitted, date_cloud_ack, filtered_alert_unique_id NOT NULL, " \
  30. "unique(alert_unique_id));"
  31. #define INDEX_ACLK_ALERT "CREATE INDEX IF NOT EXISTS aclk_alert_index_%s ON aclk_alert_%s (alert_unique_id);"
  32. enum aclk_database_opcode {
  33. ACLK_DATABASE_NOOP = 0,
  34. ACLK_DATABASE_CLEANUP,
  35. ACLK_DATABASE_DELETE_HOST,
  36. ACLK_DATABASE_NODE_STATE,
  37. ACLK_DATABASE_PUSH_ALERT,
  38. ACLK_DATABASE_PUSH_ALERT_CONFIG,
  39. ACLK_DATABASE_PUSH_ALERT_SNAPSHOT,
  40. ACLK_DATABASE_PUSH_ALERT_CHECKPOINT,
  41. ACLK_DATABASE_QUEUE_REMOVED_ALERTS,
  42. ACLK_DATABASE_TIMER,
  43. // leave this last
  44. // we need it to check for worker utilization
  45. ACLK_MAX_ENUMERATIONS_DEFINED
  46. };
  47. struct aclk_database_cmd {
  48. enum aclk_database_opcode opcode;
  49. void *param[2];
  50. struct completion *completion;
  51. };
  52. #define ACLK_DATABASE_CMD_Q_MAX_SIZE (1024)
  53. struct aclk_database_cmdqueue {
  54. unsigned head, tail;
  55. struct aclk_database_cmd cmd_array[ACLK_DATABASE_CMD_Q_MAX_SIZE];
  56. };
  57. struct aclk_sync_host_config {
  58. RRDHOST *host;
  59. int alert_updates;
  60. int alert_checkpoint_req;
  61. int alert_queue_removed;
  62. time_t node_info_send_time;
  63. time_t node_collectors_send;
  64. char uuid_str[UUID_STR_LEN];
  65. char node_id[UUID_STR_LEN];
  66. char *alerts_snapshot_uuid; // will contain the snapshot_uuid value if snapshot was requested
  67. };
  68. extern sqlite3 *db_meta;
  69. int aclk_database_enq_cmd_noblock(struct aclk_database_cmd *cmd);
  70. void sql_create_aclk_table(RRDHOST *host, uuid_t *host_uuid, uuid_t *node_id);
  71. void sql_aclk_sync_init(void);
  72. void aclk_push_alert_config(const char *node_id, const char *config_hash);
  73. void aclk_push_node_alert_snapshot(const char *node_id);
  74. void aclk_push_node_health_log(const char *node_id);
  75. void aclk_push_node_removed_alerts(const char *node_id);
  76. void schedule_node_info_update(RRDHOST *host);
  77. #endif //NETDATA_SQLITE_ACLK_H