Skip to content

Commit 3a2a866

Browse files
committed
Simplify and unify loop_through_keys helper
1 parent ca29a56 commit 3a2a866

File tree

3 files changed

+42
-58
lines changed

3 files changed

+42
-58
lines changed

rebar.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
]}.
2121

2222
{deps, [
23-
{ddskerl, "0.3.0"}
23+
{ddskerl, "0.4.1"}
2424
]}.
2525
{shell, [{apps, [prometheus]}]}.
2626

rebar.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{"1.2.0",
2-
[{<<"ddskerl">>,{pkg,<<"ddskerl">>,<<"0.3.0">>},0}]}.
2+
[{<<"ddskerl">>,{pkg,<<"ddskerl">>,<<"0.4.1">>},0}]}.
33
[
44
{pkg_hash,[
5-
{<<"ddskerl">>, <<"4CAFDE08B988CF0A103E1189915F2265F06F73589BD1CFA1BE18D7A74F6D23A8">>}]},
5+
{<<"ddskerl">>, <<"F0329E1F8FD3C6209F1645B540F6D4FC14C60B897B05E65B8A4122A362EF019A">>}]},
66
{pkg_hash_ext,[
7-
{<<"ddskerl">>, <<"E779B1CE036A3FE15066F82193F47D87AEB01EC095DBCE2FB821BCD6117BDBBD">>}]}
7+
{<<"ddskerl">>, <<"0B68A1E53AF4CCF5F43D70F8EABA1F031388B3FCBD6405FA0CDF849FB47F1811">>}]}
88
].

src/metrics/prometheus_quantile_summary.erl

Lines changed: 38 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -321,28 +321,29 @@ value(Registry, Name, LabelValues) ->
321321
true ->
322322
DU = prometheus_metric:mf_duration_unit(MF),
323323
#{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
331334
0 ->
332-
ets:delete(?TABLE, Total),
333335
{0, 0, []};
334336
Count ->
335-
Sum = ddskerl_ets:sum(?TABLE, Total),
337+
Sum = ddskerl_ets:sum_tuple(Total),
336338
DuSum = prometheus_time:maybe_convert_to_du(DU, Sum),
337339
Values = [
338340
{QN,
339341
prometheus_time:maybe_convert_to_du(
340342
DU,
341-
ddskerl_ets:quantile(?TABLE, Total, QN)
343+
ddskerl_ets:quantile_tuple(Total, QN)
342344
)}
343345
|| QN <- QNs
344346
],
345-
ets:delete(?TABLE, Total),
346347
{Count, DuSum, Values}
347348
end
348349
end.
@@ -358,39 +359,12 @@ values(Registry, Name) ->
358359
false ->
359360
[];
360361
MF ->
361-
DU = prometheus_metric:mf_duration_unit(MF),
362362
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)
366366
end.
367367

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-
394368
%%====================================================================
395369
%% Collector API
396370
%%====================================================================
@@ -415,33 +389,43 @@ collect_mf(Registry, Callback) ->
415389
?DOC(false).
416390
-spec collect_metrics(prometheus_metric:name(), tuple()) ->
417391
[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).
422400

423401
loop_through_keys(_, _, _, _, _, _, Acc, '$end_of_table') ->
424402
Acc;
425403
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
427405
) ->
428406
Key = {Registry, Name, LabelValues},
429407
case sets:is_element(Key, Set) of
430408
true ->
431409
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);
433411
false ->
434412
{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],
439415
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)
441418
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) ->
443420
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}.
445429

446430
%%====================================================================
447431
%% Private Parts

0 commit comments

Comments
 (0)