aclk_stats.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef NETDATA_ACLK_STATS_H
  3. #define NETDATA_ACLK_STATS_H
  4. #include "daemon/common.h"
  5. #include "libnetdata/libnetdata.h"
  6. #include "aclk_query_queue.h"
  7. #define ACLK_STATS_THREAD_NAME "ACLK_Stats"
  8. extern netdata_mutex_t aclk_stats_mutex;
  9. #define ACLK_STATS_LOCK netdata_mutex_lock(&aclk_stats_mutex)
  10. #define ACLK_STATS_UNLOCK netdata_mutex_unlock(&aclk_stats_mutex)
  11. // if you change update `cloud_req_http_type_names`.
  12. #define ACLK_STATS_CLOUD_HTTP_REQ_TYPE_CNT 7
  13. int aclk_cloud_req_http_type_to_idx(const char *name);
  14. struct aclk_stats_thread {
  15. netdata_thread_t *thread;
  16. int query_thread_count;
  17. };
  18. // preserve between samples
  19. struct aclk_metrics {
  20. volatile uint8_t online;
  21. };
  22. // reset to 0 on every sample
  23. extern struct aclk_metrics_per_sample {
  24. /* in the unlikely event of ACLK disconnecting
  25. and reconnecting under 1 sampling rate
  26. we want to make sure we record the disconnection
  27. despite it being then seemingly longer in graph */
  28. volatile uint8_t offline_during_sample;
  29. volatile uint32_t queries_queued;
  30. volatile uint32_t queries_dispatched;
  31. #ifdef NETDATA_INTERNAL_CHECKS
  32. volatile uint32_t latency_max;
  33. volatile uint32_t latency_total;
  34. volatile uint32_t latency_count;
  35. #endif
  36. volatile uint32_t cloud_req_recvd;
  37. volatile uint32_t cloud_req_err;
  38. // query types.
  39. volatile uint32_t queries_per_type[ACLK_QUERY_TYPE_COUNT];
  40. // HTTP-specific request types.
  41. volatile uint32_t cloud_req_http_by_type[ACLK_STATS_CLOUD_HTTP_REQ_TYPE_CNT];
  42. volatile uint32_t cloud_q_process_total;
  43. volatile uint32_t cloud_q_process_count;
  44. volatile uint32_t cloud_q_process_max;
  45. } aclk_metrics_per_sample;
  46. #ifdef ENABLE_NEW_CLOUD_PROTOCOL
  47. extern uint32_t *aclk_proto_rx_msgs_sample;
  48. #endif
  49. extern uint32_t *aclk_queries_per_thread;
  50. void *aclk_stats_main_thread(void *ptr);
  51. void aclk_stats_thread_prepare(int query_thread_count, unsigned int proto_hdl_cnt);
  52. void aclk_stats_thread_cleanup();
  53. void aclk_stats_upd_online(int online);
  54. #ifdef NETDATA_INTERNAL_CHECKS
  55. void aclk_stats_msg_published(uint16_t id);
  56. void aclk_stats_msg_puback(uint16_t id);
  57. #endif /* NETDATA_INTERNAL_CHECKS */
  58. #endif /* NETDATA_ACLK_STATS_H */