rrd_api_docker_ev.c 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #include "rrd_api_docker_ev.h"
  3. void docker_ev_chart_init(struct File_info *p_file_info){
  4. p_file_info->chart_meta->chart_data_docker_ev = callocz(1, sizeof (struct Chart_data_docker_ev));
  5. p_file_info->chart_meta->chart_data_docker_ev->last_update = now_realtime_sec(); // initial value shouldn't be 0
  6. long chart_prio = p_file_info->chart_meta->base_prio;
  7. lgs_mng_do_num_of_logs_charts_init(p_file_info, chart_prio);
  8. /* Docker events type - initialise */
  9. if(p_file_info->parser_config->chart_config & CHART_DOCKER_EV_TYPE){
  10. lgs_mng_create_chart(
  11. (char *) p_file_info->chartname // type
  12. , "events_type" // id
  13. , "Events type" // title
  14. , "events types" // units
  15. , "event_type" // family
  16. , NULL // context
  17. , RRDSET_TYPE_AREA_NAME // chart_type
  18. , ++chart_prio // priority
  19. , p_file_info->update_every // update_every
  20. );
  21. for(int idx = 0; idx < NUM_OF_DOCKER_EV_TYPES; idx++)
  22. lgs_mng_add_dim(docker_ev_type_string[idx], RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
  23. }
  24. /* Docker events actions - initialise */
  25. if(p_file_info->parser_config->chart_config & CHART_DOCKER_EV_ACTION){
  26. lgs_mng_create_chart(
  27. (char *) p_file_info->chartname // type
  28. , "events_action" // id
  29. , "Events action" // title
  30. , "events actions" // units
  31. , "event_action" // family
  32. , NULL // context
  33. , RRDSET_TYPE_AREA_NAME // chart_type
  34. , ++chart_prio // priority
  35. , p_file_info->update_every // update_every
  36. );
  37. for(int ev_off = 0; ev_off < NUM_OF_DOCKER_EV_TYPES; ev_off++){
  38. int act_off = -1;
  39. while(docker_ev_action_string[ev_off][++act_off] != NULL){
  40. char dim[50];
  41. snprintfz(dim, 50, "%s %s",
  42. docker_ev_type_string[ev_off],
  43. docker_ev_action_string[ev_off][act_off]);
  44. lgs_mng_add_dim(dim, RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
  45. }
  46. }
  47. }
  48. lgs_mng_do_custom_charts_init(p_file_info);
  49. }
  50. void docker_ev_chart_update(struct File_info *p_file_info){
  51. chart_data_docker_ev_t *chart_data = p_file_info->chart_meta->chart_data_docker_ev;
  52. if(chart_data->last_update != p_file_info->parser_metrics->last_update){
  53. time_t lag_in_sec = p_file_info->parser_metrics->last_update - chart_data->last_update - 1;
  54. lgs_mng_do_num_of_logs_charts_update(p_file_info, lag_in_sec, chart_data);
  55. /* Docker events type - update */
  56. if(p_file_info->parser_config->chart_config & CHART_DOCKER_EV_TYPE){
  57. for(time_t sec = p_file_info->parser_metrics->last_update - lag_in_sec;
  58. sec < p_file_info->parser_metrics->last_update;
  59. sec++){
  60. lgs_mng_update_chart_begin(p_file_info->chartname, "events_type");
  61. for(int idx = 0; idx < NUM_OF_DOCKER_EV_TYPES; idx++)
  62. lgs_mng_update_chart_set(docker_ev_type_string[idx], chart_data->num_dock_ev_type[idx]);
  63. lgs_mng_update_chart_end(sec);
  64. }
  65. lgs_mng_update_chart_begin(p_file_info->chartname, "events_type");
  66. for(int idx = 0; idx < NUM_OF_DOCKER_EV_TYPES; idx++){
  67. chart_data->num_dock_ev_type[idx] = p_file_info->parser_metrics->docker_ev->ev_type[idx];
  68. lgs_mng_update_chart_set(docker_ev_type_string[idx], chart_data->num_dock_ev_type[idx]);
  69. }
  70. lgs_mng_update_chart_end(p_file_info->parser_metrics->last_update);
  71. }
  72. /* Docker events action - update */
  73. if(p_file_info->parser_config->chart_config & CHART_DOCKER_EV_ACTION){
  74. char dim[50];
  75. for(time_t sec = p_file_info->parser_metrics->last_update - lag_in_sec;
  76. sec < p_file_info->parser_metrics->last_update;
  77. sec++){
  78. lgs_mng_update_chart_begin(p_file_info->chartname, "events_action");
  79. for(int ev_off = 0; ev_off < NUM_OF_DOCKER_EV_TYPES; ev_off++){
  80. int act_off = -1;
  81. while(docker_ev_action_string[ev_off][++act_off] != NULL){
  82. if(chart_data->num_dock_ev_action[ev_off][act_off]){
  83. snprintfz(dim, 50, "%s %s",
  84. docker_ev_type_string[ev_off],
  85. docker_ev_action_string[ev_off][act_off]);
  86. lgs_mng_update_chart_set(dim, chart_data->num_dock_ev_action[ev_off][act_off]);
  87. }
  88. }
  89. }
  90. lgs_mng_update_chart_end(sec);
  91. }
  92. lgs_mng_update_chart_begin(p_file_info->chartname, "events_action");
  93. for(int ev_off = 0; ev_off < NUM_OF_DOCKER_EV_TYPES; ev_off++){
  94. int act_off = -1;
  95. while(docker_ev_action_string[ev_off][++act_off] != NULL){
  96. chart_data->num_dock_ev_action[ev_off][act_off] =
  97. p_file_info->parser_metrics->docker_ev->ev_action[ev_off][act_off];
  98. if(chart_data->num_dock_ev_action[ev_off][act_off]){
  99. snprintfz(dim, 50, "%s %s",
  100. docker_ev_type_string[ev_off],
  101. docker_ev_action_string[ev_off][act_off]);
  102. lgs_mng_update_chart_set(dim, chart_data->num_dock_ev_action[ev_off][act_off]);
  103. }
  104. }
  105. }
  106. lgs_mng_update_chart_end(p_file_info->parser_metrics->last_update);
  107. }
  108. lgs_mng_do_custom_charts_update(p_file_info, lag_in_sec);
  109. chart_data->last_update = p_file_info->parser_metrics->last_update;
  110. }
  111. }