Merge pull request #7991 from EMQ-YangM/add_rule_engine_func

feat: add rule engine function float2str/2
This commit is contained in:
Xinyu Liu 2022-05-19 15:31:45 +08:00 committed by GitHub
commit 5806d5107f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 4 deletions

View File

@ -28,6 +28,7 @@ File format:
* SSL closed error bug fixed for redis client.
* Fix mqtt-sn client disconnected due to re-send a duplicated qos2 message
* rule-engine function hexstr2bin/1 support half byte
* add rule-engine function float2str/2, user can specify the float output precision.
* Improved resilience against autocluster partitioning during cluster
startup. [#7876]

View File

@ -2,7 +2,8 @@
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.9",
[{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_date},
{load_module,emqx_rule_maps,brutal_purge,soft_purge,[]},
@ -10,7 +11,8 @@
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
{"4.3.8",
[{add_module,emqx_rule_date},
[{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_date},
{load_module,emqx_rule_maps,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_cli,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_sqltester,brutal_purge,soft_purge,[]},
@ -134,7 +136,8 @@
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.9",
[{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_maps,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
@ -142,7 +145,8 @@
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
{delete_module,emqx_rule_date}]},
{"4.3.8",
[{load_module,emqx_rule_maps,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_maps,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_cli,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_sqltester,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},

View File

@ -93,6 +93,7 @@
, bool/1
, int/1
, float/1
, float2str/2
, map/1
, bin2hexstr/1
, hexstr2bin/1
@ -537,6 +538,9 @@ int(Data) ->
float(Data) ->
emqx_rule_utils:float(Data).
float2str(Float, Precision) ->
emqx_rule_utils:float2str(Float, Precision).
map(Data) ->
emqx_rule_utils:map(Data).

View File

@ -32,6 +32,7 @@
%% type converting
-export([ str/1
, float2str/2
, bin/1
, bool/1
, int/1
@ -265,6 +266,9 @@ str(List) when is_list(List) ->
end;
str(Data) -> error({invalid_str, Data}).
float2str(Float, Precision) when is_float(Float) and is_integer(Precision)->
float_to_binary(Float, [{decimals, Precision}, compact]).
utf8_bin(Str) when is_binary(Str); is_list(Str) ->
unicode:characters_to_binary(Str);
utf8_bin(Str) ->

View File

@ -125,6 +125,13 @@ t_float(_) ->
?assertError({invalid_number, {a, v}}, emqx_rule_funcs:float({a, v})),
?assertError(_, emqx_rule_funcs:float("a")).
t_float2str(_) ->
?assertEqual(<<"20.2">>, emqx_rule_funcs:float2str(20.2, 1)),
?assertEqual(<<"20.2">>, emqx_rule_funcs:float2str(20.2, 10)),
?assertEqual(<<"20.199999999999999">>, emqx_rule_funcs:float2str(20.2, 15)),
?assertEqual(<<"20.1999999999999993">>, emqx_rule_funcs:float2str(20.2, 16)).
t_map(_) ->
?assertEqual(#{ver => <<"1.0">>, name => "emqx"}, emqx_rule_funcs:map([{ver, <<"1.0">>}, {name, "emqx"}])),
?assertEqual(#{<<"a">> => 1}, emqx_rule_funcs:map(<<"{\"a\":1}">>)),