@@ -321,28 +321,29 @@ value(Registry, Name, LabelValues) ->
321
321
true ->
322
322
DU = prometheus_metric :mf_duration_unit (MF ),
323
323
#{quantiles := QNs } = prometheus_metric :mf_data (MF ),
324
- Total = make_ref (),
325
- insert_metric (Registry , Name , LabelValues , Total ),
326
- [
327
- catch ddskerl_ets :merge (? TABLE , Total , ? TABLE , {Registry , Name , LabelValues , SId })
328
- || SId <- schedulers_seq ()
329
- ],
330
- case ddskerl_ets :total (? TABLE , Total ) of
324
+ [First | Rest ] = lists :flatmap (
325
+ fun (SId ) ->
326
+ ets :lookup (? TABLE , {Registry , Name , LabelValues , SId })
327
+ end ,
328
+ schedulers_seq ()
329
+ ),
330
+ Total = lists :foldl (
331
+ fun (Elem , Acc ) -> ddskerl_ets :merge_tuples (Acc , Elem ) end , First , Rest
332
+ ),
333
+ case ddskerl_ets :total_tuple (Total ) of
331
334
0 ->
332
- ets :delete (? TABLE , Total ),
333
335
{0 , 0 , []};
334
336
Count ->
335
- Sum = ddskerl_ets :sum ( ? TABLE , Total ),
337
+ Sum = ddskerl_ets :sum_tuple ( Total ),
336
338
DuSum = prometheus_time :maybe_convert_to_du (DU , Sum ),
337
339
Values = [
338
340
{QN ,
339
341
prometheus_time :maybe_convert_to_du (
340
342
DU ,
341
- ddskerl_ets :quantile ( ? TABLE , Total , QN )
343
+ ddskerl_ets :quantile_tuple ( Total , QN )
342
344
)}
343
345
|| QN <- QNs
344
346
],
345
- ets :delete (? TABLE , Total ),
346
347
{Count , DuSum , Values }
347
348
end
348
349
end .
@@ -358,39 +359,12 @@ values(Registry, Name) ->
358
359
false ->
359
360
[];
360
361
MF ->
361
- DU = prometheus_metric :mf_duration_unit (MF ),
362
362
Labels = prometheus_metric :mf_labels (MF ),
363
- loop_through_keys (
364
- Registry , Name , DU , Labels , sets : new ([{ version , 2 }]), [], ets : first ( ? TABLE )
365
- )
363
+ CLabels = prometheus_metric : mf_constant_labels ( MF ),
364
+ Fun = fun value_summary_metric / 6 ,
365
+ loop_through_keys ( Name , Fun , CLabels , Labels , Registry )
366
366
end .
367
367
368
- loop_through_keys (_ , _ , _ , _ , _ , Acc , '$end_of_table' ) ->
369
- Acc ;
370
- loop_through_keys (
371
- Registry , Name , DU , Labels , Set , Acc , {Registry , Name , LabelValues , _ } = CurrentKey
372
- ) ->
373
- Key = {Registry , Name , LabelValues },
374
- case sets :is_element (Key , Set ) of
375
- true ->
376
- NextKey = ets :next (? TABLE , CurrentKey ),
377
- loop_through_keys (Registry , Name , DU , Labels , Set , Acc , NextKey );
378
- false ->
379
- {Count , Sum , QNs } = value (Registry , Name , LabelValues ),
380
- Value = {
381
- lists :zip (Labels , LabelValues ),
382
- Count ,
383
- prometheus_time :maybe_convert_to_du (DU , Sum ),
384
- QNs
385
- },
386
- NextKey = ets :next (? TABLE , CurrentKey ),
387
- NewSet = sets :add_element (Key , Set ),
388
- loop_through_keys (Registry , Name , DU , Labels , NewSet , [Value | Acc ], NextKey )
389
- end ;
390
- loop_through_keys (Registry , Name , DU , Labels , Set , Acc , CurrentKey ) ->
391
- NextKey = ets :next (? TABLE , CurrentKey ),
392
- loop_through_keys (Registry , Name , DU , Labels , Set , Acc , NextKey ).
393
-
394
368
% %====================================================================
395
369
% % Collector API
396
370
% %====================================================================
@@ -415,33 +389,43 @@ collect_mf(Registry, Callback) ->
415
389
? DOC (false ).
416
390
-spec collect_metrics (prometheus_metric :name (), tuple ()) ->
417
391
[prometheus_model :'Metric' ()].
418
- collect_metrics (Name , {CLabels , Labels , Registry , DU , _Configuration }) ->
419
- loop_through_keys (
420
- Name , CLabels , Labels , Registry , DU , sets :new ([{version , 2 }]), [], ets :first (? TABLE )
421
- ).
392
+ collect_metrics (Name , {CLabels , Labels , Registry , _DU , _Configuration }) ->
393
+ Fun = fun model_summary_metric /6 ,
394
+ loop_through_keys (Name , Fun , CLabels , Labels , Registry ).
395
+
396
+ loop_through_keys (Name , Fun , CLabels , Labels , Registry ) ->
397
+ Sets = sets :new ([{version , 2 }]),
398
+ First = ets :first (? TABLE ),
399
+ loop_through_keys (Name , Fun , CLabels , Labels , Registry , Sets , [], First ).
422
400
423
401
loop_through_keys (_ , _ , _ , _ , _ , _ , Acc , '$end_of_table' ) ->
424
402
Acc ;
425
403
loop_through_keys (
426
- Name , CLabels , Labels , Registry , DU , Set , Acc , {Registry , Name , LabelValues , _ } = CurrentKey
404
+ Name , Fun , CLabels , Labels , Registry , Set , Acc , {Registry , Name , LabelValues , _ } = CurrentKey
427
405
) ->
428
406
Key = {Registry , Name , LabelValues },
429
407
case sets :is_element (Key , Set ) of
430
408
true ->
431
409
NextKey = ets :next (? TABLE , CurrentKey ),
432
- loop_through_keys (Name , CLabels , Labels , Registry , DU , Set , Acc , NextKey );
410
+ loop_through_keys (Name , Fun , CLabels , Labels , Registry , Set , Acc , NextKey );
433
411
false ->
434
412
{Count , Sum , QNs } = value (Registry , Name , LabelValues ),
435
- Value = prometheus_model_helpers :summary_metric (
436
- CLabels ++ lists :zip (Labels , LabelValues ), Count , Sum , QNs
437
- ),
438
- NextKey = ets :next (? TABLE , CurrentKey ),
413
+ Value = Fun (CLabels , Labels , LabelValues , Count , Sum , QNs ),
414
+ NewAcc = [Value | Acc ],
439
415
NewSet = sets :add_element (Key , Set ),
440
- loop_through_keys (Name , CLabels , Labels , Registry , DU , NewSet , [Value | Acc ], NextKey )
416
+ NextKey = ets :next (? TABLE , CurrentKey ),
417
+ loop_through_keys (Name , Fun , CLabels , Labels , Registry , NewSet , NewAcc , NextKey )
441
418
end ;
442
- loop_through_keys (Name , CLabels , Labels , Registry , DU , Set , Acc , CurrentKey ) ->
419
+ loop_through_keys (Name , Fun , CLabels , Labels , Registry , Set , Acc , CurrentKey ) ->
443
420
NextKey = ets :next (? TABLE , CurrentKey ),
444
- loop_through_keys (Name , CLabels , Labels , Registry , DU , Set , Acc , NextKey ).
421
+ loop_through_keys (Name , Fun , CLabels , Labels , Registry , Set , Acc , NextKey ).
422
+
423
+ model_summary_metric (CLabels , Labels , LabelValues , Count , Sum , QNs ) ->
424
+ Labs = CLabels ++ lists :zip (Labels , LabelValues ),
425
+ prometheus_model_helpers :summary_metric (Labs , Count , Sum , QNs ).
426
+
427
+ value_summary_metric (_CLabels , Labels , LabelValues , Count , Sum , QNs ) ->
428
+ {lists :zip (Labels , LabelValues ), Count , Sum , QNs }.
445
429
446
430
% %====================================================================
447
431
% % Private Parts
0 commit comments