@@ -366,9 +366,13 @@ are_samples_undefined(#gathered_stats{samples = Samples}) ->
366366 end , NodeSamples )
367367 end , Samples ).
368368
369+ calculate_stats (Extractor , Samples ) ->
370+ lists :map (Extractor , Samples ).
371+
369372calculate_stats (# gathered_stats {samples = Samples , nodes = Nodes ,
370373 extractor = Extractor }) ->
371- {[lists :map (Extractor , NodeSamples ) || NodeSamples <- Samples ], Nodes }.
374+ {[calculate_stats (Extractor , NodeSamples ) || NodeSamples <- Samples ],
375+ Nodes }.
372376
373377% %
374378% % Earlier we were gathering all stats from all nodes even if we are
@@ -2749,23 +2753,28 @@ do_get_indexes(Service, BucketId0, Nodes) ->
27492753-record (params , {bucket , stat , start_ts , end_ts , step , nodes }).
27502754
27512755filter_samples (Samples , StartTS , EndTS ) ->
2752- S1 = lists :dropwhile (fun ({T , _ }) -> T < StartTS end , Samples ),
2753- lists :takewhile (fun ({T , _ }) -> T < EndTS end , S1 ).
2754-
2755- merge_samples (Samples , undefined , StartTS , EndTS ) ->
2756- [filter_samples (S , StartTS , EndTS ) || S <- Samples ];
2757- merge_samples (Samples , AccSamples , StartTS , EndTS ) ->
2758- [do_merge_samples (S , A , StartTS , EndTS ) ||
2756+ S1 = lists :dropwhile (fun (# stat_entry {timestamp = T }) -> T < StartTS end ,
2757+ Samples ),
2758+ lists :takewhile (fun (# stat_entry {timestamp = T }) -> T < EndTS end , S1 ).
2759+
2760+ prepare_samples (Samples , StartTS , EndTS , Extractor ) ->
2761+ Filtered = filter_samples (Samples , StartTS , EndTS ),
2762+ calculate_stats (Extractor , Filtered ).
2763+
2764+ merge_samples (Samples , undefined , StartTS , EndTS , Extractor ) ->
2765+ [prepare_samples (S , StartTS , EndTS , Extractor ) || S <- Samples ];
2766+ merge_samples (Samples , AccSamples , StartTS , EndTS , Extractor ) ->
2767+ [do_merge_samples (S , A , StartTS , EndTS , Extractor ) ||
27592768 {S , A } <- lists :zip (Samples , AccSamples )].
27602769
2761- do_merge_samples (Samples , [], StartTS , EndTS ) ->
2762- filter_samples (Samples , StartTS , EndTS );
2763- do_merge_samples (Samples , [{EndTS , _ } | _ ] = AccSamples , StartTS , _ ) ->
2764- filter_samples (Samples , StartTS , EndTS ) ++ AccSamples .
2770+ do_merge_samples (Samples , [], StartTS , EndTS , Extractor ) ->
2771+ prepare_samples (Samples , StartTS , EndTS , Extractor );
2772+ do_merge_samples (Samples , [{EndTS , _ } | _ ] = AccSamples , StartTS , _ , Extractor ) ->
2773+ prepare_samples (Samples , StartTS , EndTS , Extractor ) ++ AccSamples .
27652774
27662775latest_start_timestamp (Samples , StartTS ) ->
27672776 lists :foldl (
2768- fun ([{ T , _ } | _ ], LatestT ) when T > LatestT ->
2777+ fun ([# stat_entry { timestamp = T } | _ ], LatestT ) when T > LatestT ->
27692778 T ;
27702779 (_ , LatestT ) ->
27712780 LatestT
@@ -2802,9 +2811,9 @@ retrive_samples_from_archive(Archive, Params = #params{start_ts = StartTS,
28022811 % % no results for this stat in current archive
28032812 % % no need to proceed to less detailed archives
28042813 {AccSamples , AccNodes , Kind , false };
2805- Stats = # gathered_stats {nodes = Nodes , kind = NewKind } ->
2814+ # gathered_stats {nodes = Nodes , kind = NewKind , extractor = Extractor ,
2815+ samples = Samples } ->
28062816 true = AccNodes =:= undefined orelse Nodes =:= AccNodes ,
2807- {Samples , _ } = calculate_stats (Stats ),
28082817 NewContinue =
28092818 case latest_start_timestamp (Samples , StartTS ) > StartTS of
28102819 true ->
@@ -2815,7 +2824,7 @@ retrive_samples_from_archive(Archive, Params = #params{start_ts = StartTS,
28152824 false
28162825 end ,
28172826
2818- {merge_samples (Samples , AccSamples , StartTS , EndTS ),
2827+ {merge_samples (Samples , AccSamples , StartTS , EndTS , Extractor ),
28192828 Nodes , NewKind , NewContinue }
28202829 end .
28212830
0 commit comments