From ea2a424ce253ec1bea80814685338c8b07adeed0 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 4 Jun 2020 10:46:53 +0800 Subject: [PATCH] Add ensure/2 funcs to avoid needless logs (#3483) --- src/emqx_metrics.erl | 13 +++++++++++++ src/emqx_reason_codes.erl | 2 +- src/emqx_types.erl | 8 +++++--- test/emqx_metrics_SUITE.erl | 18 ++++++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/emqx_metrics.erl b/src/emqx_metrics.erl index 4009ca67c..2a5a82749 100644 --- a/src/emqx_metrics.erl +++ b/src/emqx_metrics.erl @@ -30,6 +30,8 @@ -export([ new/1 , new/2 + , ensure/1 + , ensure/2 , all/0 ]). @@ -204,6 +206,17 @@ new(gauge, Name) -> new(counter, Name) -> create(counter, Name). +-spec(ensure(metric_name()) -> ok). +ensure(Name) -> + ensure(counter, Name). + +-spec(ensure(gauge|counter, metric_name()) -> ok). +ensure(Type, Name) when Type =:= gauge; Type =:= counter -> + case ets:lookup(?TAB, Name) of + [] -> create(Type, Name); + _ -> ok + end. + %% @private create(Type, Name) -> case gen_server:call(?SERVER, {create, Type, Name}) of diff --git a/src/emqx_reason_codes.erl b/src/emqx_reason_codes.erl index ece285767..8e96df165 100644 --- a/src/emqx_reason_codes.erl +++ b/src/emqx_reason_codes.erl @@ -50,7 +50,7 @@ name(16#11) -> no_subscription_existed; name(16#18) -> continue_authentication; name(16#19) -> re_authenticate; name(16#80) -> unspecified_error; -name(16#81) -> malformed_Packet; +name(16#81) -> malformed_packet; name(16#82) -> protocol_error; name(16#83) -> implementation_specific_error; name(16#84) -> unsupported_protocol_version; diff --git a/src/emqx_types.erl b/src/emqx_types.erl index 15bfb10b5..31f9ad65c 100644 --- a/src/emqx_types.erl +++ b/src/emqx_types.erl @@ -91,7 +91,9 @@ -type(ver() :: ?MQTT_PROTO_V3 | ?MQTT_PROTO_V4 - | ?MQTT_PROTO_V5). + | ?MQTT_PROTO_V5 + | non_neg_integer()). + -type(qos() :: ?QOS_0 | ?QOS_1 | ?QOS_2). -type(qos_name() :: qos0 | at_most_once | qos1 | at_least_once | @@ -107,7 +109,7 @@ -type(conninfo() :: #{socktype := socktype(), sockname := peername(), peername := peername(), - peercert := esockd_peercert:peercert(), + peercert := nossl | undefined | esockd_peercert:peercert(), conn_mod := module(), proto_name := binary(), proto_ver := ver(), @@ -116,7 +118,7 @@ username := username(), conn_props := properties(), connected := boolean(), - connected_at := erlang:timestamp(), + connected_at := non_neg_integer(), keepalive := 0..16#FFFF, receive_maximum := non_neg_integer(), expiry_interval := non_neg_integer(), diff --git a/test/emqx_metrics_SUITE.erl b/test/emqx_metrics_SUITE.erl index d6ef6b451..33f297e7d 100644 --- a/test/emqx_metrics_SUITE.erl +++ b/test/emqx_metrics_SUITE.erl @@ -42,6 +42,24 @@ t_new(_) -> 1 = emqx_metrics:val('metrics.test.total') end). +t_ensure(_) -> + with_metrics_server( + fun() -> + ok = emqx_metrics:ensure('metrics.test'), + ok = emqx_metrics:ensure('metrics.test'), + 0 = emqx_metrics:val('metrics.test'), + ok = emqx_metrics:inc('metrics.test'), + 1 = emqx_metrics:val('metrics.test'), + ok = emqx_metrics:ensure(counter, 'metrics.test.cnt'), + 0 = emqx_metrics:val('metrics.test.cnt'), + ok = emqx_metrics:inc('metrics.test.cnt'), + 1 = emqx_metrics:val('metrics.test.cnt'), + ok = emqx_metrics:ensure(gauge, 'metrics.test.total'), + 0 = emqx_metrics:val('metrics.test.total'), + ok = emqx_metrics:inc('metrics.test.total'), + 1 = emqx_metrics:val('metrics.test.total') + end). + t_all(_) -> with_metrics_server( fun() ->