Add ensure/2 funcs to avoid needless logs (#3483)

This commit is contained in:
JianBo He 2020-06-04 10:46:53 +08:00 committed by GitHub
parent f456f40c59
commit ea2a424ce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 37 additions and 4 deletions

View File

@ -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

View File

@ -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;

View File

@ -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(),

View File

@ -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() ->