12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // SPDX-License-Identifier: GPL-3.0-or-later
- #include "rrd_api_mqtt.h"
- void mqtt_chart_init(struct File_info *p_file_info){
- p_file_info->chart_meta->chart_data_mqtt = callocz(1, sizeof (struct Chart_data_mqtt));
- chart_data_mqtt_t *chart_data = p_file_info->chart_meta->chart_data_mqtt;
- chart_data->last_update = now_realtime_sec(); // initial value shouldn't be 0
- long chart_prio = p_file_info->chart_meta->base_prio;
- lgs_mng_do_num_of_logs_charts_init(p_file_info, chart_prio);
- /* Topic - initialise */
- if(p_file_info->parser_config->chart_config & CHART_MQTT_TOPIC){
- chart_data->cs_topic = lgs_mng_create_chart(
- (char *) p_file_info->chartname // type
- , "topics" // id
- , "Topics" // title
- , "topics" // units
- , "topic" // family
- , NULL // context
- , RRDSET_TYPE_AREA_NAME // chart_type
- , ++chart_prio // priority
- , p_file_info->update_every // update_every
- );
- }
- lgs_mng_do_custom_charts_init(p_file_info);
- }
- void mqtt_chart_update(struct File_info *p_file_info){
- chart_data_mqtt_t *chart_data = p_file_info->chart_meta->chart_data_mqtt;
- if(chart_data->last_update != p_file_info->parser_metrics->last_update){
- time_t lag_in_sec = p_file_info->parser_metrics->last_update - chart_data->last_update - 1;
- lgs_mng_do_num_of_logs_charts_update(p_file_info, lag_in_sec, chart_data);
- /* Topic - update */
- if(p_file_info->parser_config->chart_config & CHART_MQTT_TOPIC){
- metrics_dict_item_t *it;
- for(time_t sec = p_file_info->parser_metrics->last_update - lag_in_sec;
- sec < p_file_info->parser_metrics->last_update;
- sec++){
- lgs_mng_update_chart_begin(p_file_info->chartname, "topics");
- dfe_start_read(p_file_info->parser_metrics->mqtt->topic, it){
- if(it->dim_initialized)
- lgs_mng_update_chart_set(it_dfe.name, (collected_number) it->num);
- }
- dfe_done(it);
- lgs_mng_update_chart_end(sec);
- }
- dfe_start_write(p_file_info->parser_metrics->mqtt->topic, it){
- if(!it->dim_initialized){
- it->dim_initialized = true;
- lgs_mng_add_dim_post_init( &chart_data->cs_topic, it_dfe.name,
- RRD_ALGORITHM_INCREMENTAL_NAME, 1, 1);
- }
- }
- dfe_done(it);
- lgs_mng_update_chart_begin(p_file_info->chartname, "topics");
- dfe_start_write(p_file_info->parser_metrics->mqtt->topic, it){
- it->num = it->num_new;
- lgs_mng_update_chart_set(it_dfe.name, (collected_number) it->num);
- }
- dfe_done(it);
- lgs_mng_update_chart_end(p_file_info->parser_metrics->last_update);
- }
- lgs_mng_do_custom_charts_update(p_file_info, lag_in_sec);
- chart_data->last_update = p_file_info->parser_metrics->last_update;
- }
- }
|