1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
// 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;
}
}
|