24
24
#include "we_metric.h"
25
25
#include "we_perflib.h"
26
26
27
- double we_perflib_get_adjusted_counter_value (struct we_perflib_counter * counter )
27
+ double we_perflib_get_adjusted_counter_value (struct we_perflib_counter * counter ,
28
+ struct we_perflib_metric_source * source )
28
29
{
29
30
double result ;
30
31
32
+ if (source -> use_secondary_value ) {
33
+ return (double ) counter -> secondary_value .as_qword ;
34
+ }
35
+
31
36
result = (double ) counter -> primary_value .as_qword ;
32
37
33
38
switch (counter -> definition -> type ) {
@@ -625,6 +630,7 @@ static int we_perflib_process_counter(
625
630
struct we_perflib_counter * * out_counter )
626
631
{
627
632
struct we_perflib_counter * perflib_instance_counter ;
633
+ uint32_t counter_type = counter_definition -> type ;
628
634
629
635
perflib_instance_counter = we_perflib_create_counter (counter_definition );
630
636
@@ -636,6 +642,18 @@ static int we_perflib_process_counter(
636
642
& input_data_block [counter_definition -> offset ],
637
643
counter_definition -> size );
638
644
645
+ if (counter_type == PERF_AVERAGE_BULK ||
646
+ counter_type == PERF_RAW_FRACTION ||
647
+ counter_type == PERF_100NSEC_TIMER_INV ||
648
+ counter_type == PERF_COUNTER_TIMER_INV ||
649
+ counter_type == PERF_100NSEC_MULTI_TIMER_INV ||
650
+ counter_type == PERF_COUNTER_MULTI_TIMER_INV ) {
651
+
652
+ memcpy (& perflib_instance_counter -> secondary_value ,
653
+ & input_data_block [counter_definition -> offset + counter_definition -> size ],
654
+ sizeof (union we_perflib_value ));
655
+ }
656
+
639
657
if (counter_definition -> size > sizeof (union we_perflib_value )) {
640
658
we_perflib_destroy_counter (perflib_instance_counter );
641
659
@@ -1024,12 +1042,12 @@ int we_perflib_update_counters(struct flb_we *ctx,
1024
1042
1025
1043
if (metric_source -> parent -> type == CMT_COUNTER ) {
1026
1044
cmt_counter_set (metric_entry , timestamp ,
1027
- we_perflib_get_adjusted_counter_value (counter ),
1045
+ we_perflib_get_adjusted_counter_value (counter , metric_source ),
1028
1046
metric_label_count , metric_label_list );
1029
1047
}
1030
1048
else if (metric_source -> parent -> type == CMT_GAUGE ) {
1031
1049
cmt_gauge_set (metric_entry , timestamp ,
1032
- we_perflib_get_adjusted_counter_value (counter ),
1050
+ we_perflib_get_adjusted_counter_value (counter , metric_source ),
1033
1051
metric_label_count , metric_label_list );
1034
1052
}
1035
1053
}
0 commit comments