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. #include "mqtt_wss_client.h"
  8. #define ACLK_STATS_THREAD_NAME "ACLK_Stats"
  9. extern netdata_mutex_t aclk_stats_mutex;
  10. #define ACLK_STATS_LOCK netdata_mutex_lock(&aclk_stats_mutex)
  11. #define ACLK_STATS_UNLOCK netdata_mutex_unlock(&aclk_stats_mutex)
  12. // if you change update `cloud_req_http_type_names`.
  13. #define ACLK_STATS_CLOUD_HTTP_REQ_TYPE_CNT 7
  14. int aclk_cloud_req_http_type_to_idx(const char *name);
  15. struct aclk_stats_thread {
  16. netdata_thread_t *thread;
  17. int query_thread_count;
  18. mqtt_wss_client client;
  19. };
  20. // preserve between samples
  21. struct aclk_metrics {
  22. volatile uint8_t online;
  23. };
  24. // reset to 0 on every sample
  25. extern struct aclk_metrics_per_sample {
  26. /* in the unlikely event of ACLK disconnecting
  27. and reconnecting under 1 sampling rate
  28. we want to make sure we record the disconnection
  29. despite it being then seemingly longer in graph */
  30. volatile uint8_t offline_during_sample;
  31. volatile uint32_t queries_queued;
  32. volatile uint32_t queries_dispatched;
  33. #ifdef NETDATA_INTERNAL_CHECKS
  34. volatile uint32_t latency_max;
  35. volatile uint32_t latency_total;
  36. volatile uint32_t latency_count;
  37. #endif
  38. volatile uint32_t cloud_req_recvd;
  39. volatile uint32_t cloud_req_err;
  40. // query types.
  41. volatile uint32_t queries_per_type[ACLK_QUERY_TYPE_COUNT];
  42. // HTTP-specific request types.
  43. volatile uint32_t cloud_req_http_by_type[ACLK_STATS_CLOUD_HTTP_REQ_TYPE_CNT];
  44. volatile uint32_t cloud_q_process_total;
  45. volatile uint32_t cloud_q_process_count;
  46. volatile uint32_t cloud_q_process_max;
  47. } aclk_metrics_per_sample;
  48. extern uint32_t *aclk_proto_rx_msgs_sample;
  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 */