rrd_api_mqtt.c 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "rrd_api_mqtt.h"
  3. void mqtt_chart_init(struct File_info *p_file_info){
  4. p_file_info->chart_meta->chart_data_mqtt = callocz(1, sizeof (struct Chart_data_mqtt));
  5. chart_data_mqtt_t *chart_data = p_file_info->chart_meta->chart_data_mqtt;
  6. chart_data->last_update = now_realtime_sec(); // initial value shouldn't be 0
  7. long chart_prio = p_file_info->chart_meta->base_prio;
  8. lgs_mng_do_num_of_logs_charts_init(p_file_info, chart_prio);
  9. /* Topic - initialise */
  10. if(p_file_info->parser_config->chart_config & CHART_MQTT_TOPIC){
  11. chart_data->cs_topic = lgs_mng_create_chart(
  12. (char *) p_file_info->chartname // type
  13. , "topics" // id
  14. , "Topics" // title
  15. , "topics" // units
  16. , "topic" // family
  17. , NULL // context
  18. , RRDSET_TYPE_AREA_NAME // chart_type
  19. , ++chart_prio // priority
  20. , p_file_info->update_every // update_every
  21. );
  22. }
  23. lgs_mng_do_custom_charts_init(p_file_info);
  24. }
  25. void mqtt_chart_update(struct File_info *p_file_info){
  26. chart_data_mqtt_t *chart_data = p_file_info->chart_meta->chart_data_mqtt;
  27. if(chart_data->last_update != p_file_info->parser_metrics->last_update){
  28. time_t lag_in_sec = p_file_info->parser_metrics->last_update - chart_data->last_update - 1;
  29. lgs_mng_do_num_of_logs_charts_update(p_file_info, lag_in_sec, chart_data);
  30. /* Topic - update */
  31. if(p_file_info->parser_config->chart_config & CHART_MQTT_TOPIC){
  32. metrics_dict_item_t *it;
  33. for(time_t sec = p_file_info->parser_metrics->last_update - lag_in_sec;
  34. sec < p_file_info->parser_metrics->last_update;
  35. sec++){
  36. lgs_mng_update_chart_begin(p_file_info->chartname, "topics");
  37. dfe_start_read(p_file_info->parser_metrics->mqtt->topic, it){
  38. if(it->dim_initialized)
  39. lgs_mng_update_chart_set(it_dfe.name, (collected_number) it->num);
  40. }
  41. dfe_done(it);
  42. lgs_mng_update_chart_end(sec);
  43. }
  44. dfe_start_write(p_file_info->parser_metrics->mqtt->topic, it){
  45. if(!it->dim_initialized){
  46. it->dim_initialized = true;
  47. lgs_mng_add_dim_post_init( &chart_data->cs_topic, it_dfe.name,
  48. RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
  49. }
  50. }
  51. dfe_done(it);
  52. lgs_mng_update_chart_begin(p_file_info->chartname, "topics");
  53. dfe_start_write(p_file_info->parser_metrics->mqtt->topic, it){
  54. it->num = it->num_new;
  55. lgs_mng_update_chart_set(it_dfe.name, (collected_number) it->num);
  56. }
  57. dfe_done(it);
  58. lgs_mng_update_chart_end(p_file_info->parser_metrics->last_update);
  59. }
  60. lgs_mng_do_custom_charts_update(p_file_info, lag_in_sec);
  61. chart_data->last_update = p_file_info->parser_metrics->last_update;
  62. }
  63. }