@@ -366,17 +366,18 @@ values(Registry, Name) ->
366366 DU = prometheus_metric :mf_duration_unit (MF ),
367367 Labels = prometheus_metric :mf_labels (MF ),
368368 Bounds = prometheus_metric :mf_data (MF ),
369+
369370 MFValues = load_all_values (Registry , Name , Bounds ),
370- [ begin
371- [ ISum , FSum | BCounters ] = reduce_label_values ( LabelValues , MFValues ),
372- Bounds1 = lists : zipwith ( fun ( Bound , Bucket ) ->
373- { Bound , Bucket }
374- end ,
375- Bounds , BCounters ) ,
376- { lists : zip ( Labels , LabelValues ), Bounds1 ,
377- prometheus_time : maybe_convert_to_du ( DU , ISum + FSum )}
378- end ||
379- LabelValues <- collect_unique_labels ( MFValues )]
371+ LabelValuesMap = reduce_label_values ( MFValues ),
372+ maps : fold (
373+ fun ( LabelValues , [ ISum , FSum | BCounters ], L ) ->
374+ Bounds1 = lists : zipwith ( fun ( Bound , Bucket ) ->
375+ { Bound , Bucket }
376+ end ,
377+ Bounds , BCounters ) ,
378+ [{ lists : zip ( Labels , LabelValues ), Bounds1 ,
379+ prometheus_time : maybe_convert_to_du ( DU , ISum + FSum )}| L ]
380+ end , [], LabelValuesMap )
380381 end .
381382
382383% % @equiv buckets(default, Name, [])
@@ -415,11 +416,11 @@ collect_mf(Registry, Callback) ->
415416% % @private
416417collect_metrics (Name , {CLabels , Labels , Registry , DU , Bounds }) ->
417418 MFValues = load_all_values (Registry , Name , Bounds ),
418- [ begin
419- Stat = reduce_label_values ( LabelValues , MFValues ),
420- create_histogram_metric ( CLabels , Labels , DU , Bounds , LabelValues , Stat )
421- end ||
422- LabelValues <- collect_unique_labels ( MFValues )] .
419+ LabelValuesMap = reduce_label_values ( MFValues ),
420+ maps : fold (
421+ fun ( LabelValues , Stat , L ) ->
422+ [ create_histogram_metric ( CLabels , Labels , DU , Bounds , LabelValues , Stat )| L ]
423+ end , [], LabelValuesMap ) .
423424
424425% %====================================================================
425426% % Private Parts
@@ -564,12 +565,14 @@ key(Registry, Name, LabelValues) ->
564565 Rnd = X band (? WIDTH - 1 ),
565566 {Registry , Name , LabelValues , Rnd }.
566567
567- collect_unique_labels (MFValues ) ->
568- lists :usort ([L || [L | _ ] <- MFValues ]).
569-
570- reduce_label_values (Labels , MFValues ) ->
571- [lists :sum (C )
572- || C <- transpose ([V || [L | V ] <- MFValues , L == Labels ])].
568+ reduce_label_values (MFValues ) ->
569+ lists :foldl (
570+ fun ([Labels | V ], ResAcc ) when is_map_key (Labels , ResAcc ) ->
571+ PrevSum = maps :get (Labels , ResAcc ),
572+ ResAcc #{Labels => [lists :sum (C ) || C <- transpose ([PrevSum , V ])]};
573+ ([Labels | V ], ResAcc ) ->
574+ ResAcc #{Labels => V }
575+ end , #{}, MFValues ).
573576
574577create_histogram (Name , Help , Data ) ->
575578 prometheus_model_helpers :create_mf (Name , Help , histogram , ? MODULE , Data ).
0 commit comments