aclk_stats.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. 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 9
  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. mqtt_wss_client client;
  18. };
  19. // preserve between samples
  20. struct aclk_metrics {
  21. volatile uint8_t online;
  22. };
  23. // reset to 0 on every sample
  24. extern struct aclk_metrics_per_sample {
  25. /* in the unlikely event of ACLK disconnecting
  26. and reconnecting under 1 sampling rate
  27. we want to make sure we record the disconnection
  28. despite it being then seemingly longer in graph */
  29. volatile uint8_t offline_during_sample;
  30. volatile uint32_t queries_queued;
  31. volatile uint32_t queries_dispatched;
  32. #ifdef NETDATA_INTERNAL_CHECKS
  33. volatile uint32_t latency_max;
  34. volatile uint32_t latency_total;
  35. volatile uint32_t latency_count;
  36. #endif
  37. volatile uint32_t cloud_req_recvd;
  38. volatile uint32_t cloud_req_err;
  39. // query types.
  40. volatile uint32_t queries_per_type[ACLK_QUERY_TYPE_COUNT];
  41. // HTTP-specific request types.
  42. volatile uint32_t cloud_req_http_by_type[ACLK_STATS_CLOUD_HTTP_REQ_TYPE_CNT];
  43. volatile uint32_t cloud_q_process_total;
  44. volatile uint32_t cloud_q_process_count;
  45. volatile uint32_t cloud_q_process_max;
  46. } aclk_metrics_per_sample;
  47. extern uint32_t *aclk_proto_rx_msgs_sample;
  48. extern uint32_t *aclk_queries_per_thread;
  49. void *aclk_stats_main_thread(void *ptr);
  50. void aclk_stats_thread_prepare(int query_thread_count, unsigned int proto_hdl_cnt);
  51. void aclk_stats_thread_cleanup();
  52. void aclk_stats_upd_online(int online);
  53. #ifdef NETDATA_INTERNAL_CHECKS
  54. void aclk_stats_msg_published(uint16_t id);
  55. void aclk_stats_msg_puback(uint16_t id);
  56. #endif /* NETDATA_INTERNAL_CHECKS */
  57. #endif /* NETDATA_ACLK_STATS_H */