From ad8b547519f634a0b1980c40c6ea7aa37f196533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E5=AD=90=E5=8D=9A?= <349832309@qq.com> Date: Fri, 30 Nov 2018 17:08:25 +0800 Subject: [PATCH] Make batch committing of metrics more elegant --- src/emqx_metrics.erl | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/emqx_metrics.erl b/src/emqx_metrics.erl index 2d8ac9591..fb57cbdf9 100644 --- a/src/emqx_metrics.erl +++ b/src/emqx_metrics.erl @@ -171,25 +171,21 @@ trans(dec, gauge, Metric, Val) -> hold(gauge, Metric, -Val). hold(Type, Metric, Val) when Type =:= counter orelse Type =:= gauge -> - NewMetrics = case get(metrics) of + put('$metrics', case get('$metrics') of undefined -> - #{Metric => {Type, Val}}; + #{{Type, Metric} => Val}; Metrics -> - {Type, Count} = maps:get(Metric, Metrics, {Type, 0}), - Metrics#{Metric => {Type, Count + Val}} - end, - put(metrics, NewMetrics). + maps:update_with({Type, Metric}, fun(Cnt) -> Cnt + Val end, Val, Metrics) + end). commit() -> - case get(metrics) of - undefined -> - ok; + case get('$metrics') of + undefined -> ok; Metrics -> - maps:fold(fun(Metric, {Type, Val}, Acc) -> - update_counter(key(Type, Metric), {2, Val}), - Acc + maps:fold(fun({Type, Metric}, Val, _Acc) -> + update_counter(key(Type, Metric), {2, Val}) end, 0, Metrics), - put(metrics, #{}) + erase('$metrics') end. %% @doc Metric key